diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 00f31c7c38fb..664a0f1ca3ae 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -89,6 +89,15 @@ type MoneyRequestViewPropsWithoutTransaction = MoneyRequestViewOnyxPropsWithoutT type MoneyRequestViewProps = MoneyRequestViewTransactionOnyxProps & MoneyRequestViewPropsWithoutTransaction; +const receiptImageViolationNames: OnyxTypes.ViolationName[] = [ + CONST.VIOLATIONS.RECEIPT_REQUIRED, + CONST.VIOLATIONS.RECEIPT_NOT_SMART_SCANNED, + CONST.VIOLATIONS.CASH_EXPENSE_WITH_NO_RECEIPT, + CONST.VIOLATIONS.SMARTSCAN_FAILED, +]; + +const receiptFieldViolationNames: OnyxTypes.ViolationName[] = [CONST.VIOLATIONS.MODIFIED_AMOUNT, CONST.VIOLATIONS.MODIFIED_DATE]; + const deleteTransaction = (parentReport: OnyxEntry, parentReportAction: OnyxEntry) => { if (!parentReportAction) { return; @@ -374,14 +383,24 @@ function MoneyRequestView({ const isReceiptAllowed = !isPaidReport && !isInvoice; const shouldShowReceiptEmptyState = isReceiptAllowed && !hasReceipt && !isApproved && !isSettled && (canEditReceipt || isAdmin || isApprover) && (canEditReceipt || ReportUtils.isPaidGroupPolicy(report)); - const receiptViolationNames: OnyxTypes.ViolationName[] = [ - CONST.VIOLATIONS.RECEIPT_REQUIRED, - CONST.VIOLATIONS.RECEIPT_NOT_SMART_SCANNED, - CONST.VIOLATIONS.CASH_EXPENSE_WITH_NO_RECEIPT, - CONST.VIOLATIONS.SMARTSCAN_FAILED, - ]; - const receiptViolations = - transactionViolations?.filter((violation) => receiptViolationNames.includes(violation.name)).map((violation) => ViolationsUtils.getViolationTranslation(violation, translate)) ?? []; + + const [receiptImageViolations, receiptViolations] = useMemo(() => { + const imageViolations = []; + const allViolations = []; + + for (const violation of transactionViolations ?? []) { + const isReceiptFieldViolation = receiptFieldViolationNames.includes(violation.name); + const isReceiptImageViolation = receiptImageViolationNames.includes(violation.name); + if (isReceiptFieldViolation || isReceiptImageViolation) { + const violationMessage = ViolationsUtils.getViolationTranslation(violation, translate); + allViolations.push(violationMessage); + if (isReceiptImageViolation) { + imageViolations.push(violationMessage); + } + } + } + return [imageViolations, allViolations]; + }, [transactionViolations, translate]); // Whether to show receipt audit result (e.g.`Verified`, `Issue Found`) and messages (e.g. `Receipt not verified. Please confirm accuracy.`) // `!!(receiptViolations.length || didReceiptScanSucceed)` is for not showing `Verified` when `receiptViolations` is empty and `didReceiptScanSucceed` is false. @@ -498,7 +517,7 @@ function MoneyRequestView({ /> )} {!shouldShowReceiptEmptyState && !hasReceipt && } - {shouldShowAuditMessage && } + {shouldShowAuditMessage && }