From 932e66e91fb34487e5e0657de024700dccf73415 Mon Sep 17 00:00:00 2001 From: FitseTLT Date: Thu, 10 Jul 2025 18:05:04 +0300 Subject: [PATCH 1/3] display receipt upload error --- src/libs/TransactionPreviewUtils.ts | 8 +++- tests/unit/TransactionPreviewUtils.test.ts | 44 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 7b22c3c71c6f4..9af24d78aba90 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -13,7 +13,7 @@ import DateUtils from './DateUtils'; import type {PlatformStackRouteProp} from './Navigation/PlatformStackNavigation/types'; import type {TransactionDuplicateNavigatorParamList} from './Navigation/types'; import {getOriginalMessage, isMessageDeleted, isMoneyRequestAction} from './ReportActionsUtils'; -import {hasActionsWithErrors, hasReportViolations, isPaidGroupPolicy, isPaidGroupPolicyExpenseReport, isReportApproved, isReportOwner, isSettled} from './ReportUtils'; +import {hasActionsWithErrors, hasReceiptError, hasReportViolations, isPaidGroupPolicy, isPaidGroupPolicyExpenseReport, isReportApproved, isReportOwner, isSettled} from './ReportUtils'; import type {TransactionDetails} from './ReportUtils'; import StringUtils from './StringUtils'; import { @@ -194,6 +194,10 @@ function getTransactionPreviewTextAndTranslationPaths({ RBRMessage = path; } + if (hasReceiptError(transaction) && RBRMessage === undefined) { + RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'}; + } + if (hasFieldErrors && RBRMessage === undefined) { const merchantMissing = isMerchantMissing(transaction); const amountMissing = isAmountMissing(transaction); @@ -331,7 +335,7 @@ function createTransactionPreviewConditionals({ hasViolation(transaction, violations, true); const hasErrorOrOnHold = hasFieldErrors || (!isFullySettled && !isFullyApproved && isTransactionOnHold); const hasReportViolationsOrActionErrors = (isReportOwner(iouReport) && hasReportViolations(iouReport?.reportID)) || hasActionsWithErrors(iouReport?.reportID); - const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors; + const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors || hasReceiptError(transaction); // When there are no settled transactions in duplicates, show the "Keep this one" button const shouldShowKeepButton = areThereDuplicates; diff --git a/tests/unit/TransactionPreviewUtils.test.ts b/tests/unit/TransactionPreviewUtils.test.ts index 9643fc594ebad..96e35be32ad75 100644 --- a/tests/unit/TransactionPreviewUtils.test.ts +++ b/tests/unit/TransactionPreviewUtils.test.ts @@ -68,6 +68,29 @@ describe('TransactionPreviewUtils', () => { expect(result.RBRMessage.translationPath).toContain('iou.expenseWasPutOnHold'); }); + it('returns correct receipt error message when the transaction has receipt error', () => { + const functionArgs = { + ...basicProps, + transaction: { + ...basicProps.transaction, + errors: { + error1: { + error: CONST.IOU.RECEIPT_ERROR, + source: 'source.com', + filename: 'file_name.png', + action: 'replaceReceipt', + retryParams: {transactionID: basicProps.transaction.transactionID, source: 'source.com'}, + }, + }, + }, + originalTransaction: undefined, + shouldShowRBR: true, + }; + + const result = getTransactionPreviewTextAndTranslationPaths(functionArgs); + expect(result.RBRMessage.translationPath).toContain('iou.error.receiptFailureMessageShort'); + }); + it('should handle missing iouReport and transaction correctly', () => { const functionArgs = {...basicProps, iouReport: undefined, transaction: undefined, originalTransaction: undefined}; const result = getTransactionPreviewTextAndTranslationPaths(functionArgs); @@ -208,6 +231,27 @@ describe('TransactionPreviewUtils', () => { expect(result.shouldShowRBR).toBeTruthy(); }); + it('should determine RBR visibility according to whether there is a receipt error', () => { + const functionArgs = { + ...basicProps, + transaction: { + ...basicProps.transaction, + errors: { + error1: { + error: CONST.IOU.RECEIPT_ERROR, + source: 'source.com', + filename: 'file_name.png', + action: 'replaceReceipt', + retryParams: {transactionID: basicProps.transaction.transactionID, source: 'source.com'}, + }, + }, + }, + }; + + const result = createTransactionPreviewConditionals(functionArgs); + expect(result.shouldShowRBR).toBeTruthy(); + }); + it("should not show category if it's not a policy expense chat", () => { const functionArgs = {...basicProps, isReportAPolicyExpenseChat: false}; const result = createTransactionPreviewConditionals(functionArgs); From 7d9daccb7f4a91e7e74f8c9bb84205acedaa32b8 Mon Sep 17 00:00:00 2001 From: FitseTLT Date: Thu, 10 Jul 2025 18:13:42 +0300 Subject: [PATCH 2/3] minor update --- src/libs/TransactionPreviewUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 9af24d78aba90..fae83112cb60d 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -189,15 +189,15 @@ function getTransactionPreviewTextAndTranslationPaths({ RBRMessage = {translationPath: 'iou.expenseWasPutOnHold'}; } + if (hasReceiptError(transaction) && RBRMessage === undefined) { + RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'}; + } + const path = getViolationTranslatePath(violations, hasFieldErrors, violationMessage ?? '', isTransactionOnHold); if (path.translationPath === 'violations.reviewRequired' || (RBRMessage === undefined && violationMessage)) { RBRMessage = path; } - if (hasReceiptError(transaction) && RBRMessage === undefined) { - RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'}; - } - if (hasFieldErrors && RBRMessage === undefined) { const merchantMissing = isMerchantMissing(transaction); const amountMissing = isAmountMissing(transaction); From 8b5fedc74fea5daa417661787295772f4dec7e38 Mon Sep 17 00:00:00 2001 From: FitseTLT Date: Thu, 10 Jul 2025 18:16:38 +0300 Subject: [PATCH 3/3] Revert "minor update" This reverts commit 7d9daccb7f4a91e7e74f8c9bb84205acedaa32b8. --- src/libs/TransactionPreviewUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index fae83112cb60d..9af24d78aba90 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -189,15 +189,15 @@ function getTransactionPreviewTextAndTranslationPaths({ RBRMessage = {translationPath: 'iou.expenseWasPutOnHold'}; } - if (hasReceiptError(transaction) && RBRMessage === undefined) { - RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'}; - } - const path = getViolationTranslatePath(violations, hasFieldErrors, violationMessage ?? '', isTransactionOnHold); if (path.translationPath === 'violations.reviewRequired' || (RBRMessage === undefined && violationMessage)) { RBRMessage = path; } + if (hasReceiptError(transaction) && RBRMessage === undefined) { + RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'}; + } + if (hasFieldErrors && RBRMessage === undefined) { const merchantMissing = isMerchantMissing(transaction); const amountMissing = isAmountMissing(transaction);