Skip to content

Commit 0f65a7e

Browse files
authored
Merge pull request #58195 from nkdengineer/fix/54996
fix: approve button appears for scan failure transaction
2 parents 3360cd7 + 34b525d commit 0f65a7e

File tree

5 files changed

+31
-27
lines changed

5 files changed

+31
-27
lines changed

src/libs/SearchUIUtils.ts

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,7 @@ import {
4949
isSettled,
5050
} from './ReportUtils';
5151
import {buildCannedSearchQuery} from './SearchQueryUtils';
52-
import {
53-
getMerchant,
54-
getAmount as getTransactionAmount,
55-
getCreated as getTransactionCreatedDate,
56-
getMerchant as getTransactionMerchant,
57-
isAmountMissing,
58-
isExpensifyCardTransaction,
59-
isPartialMerchant,
60-
isPending,
61-
isReceiptBeingScanned,
62-
isScanRequest,
63-
} from './TransactionUtils';
52+
import {getAmount as getTransactionAmount, getCreated as getTransactionCreatedDate, getMerchant as getTransactionMerchant, isPendingCardOrScanningTransaction} from './TransactionUtils';
6453

6554
const columnNamesToSortingProperty = {
6655
[CONST.SEARCH.TABLE_COLUMNS.TO]: 'formattedTo' as const,
@@ -393,11 +382,7 @@ function getAction(data: OnyxTypes.SearchResults['data'], key: string): SearchTr
393382
if (canIOUBePaid(report, chatReport, policy, allReportTransactions, false, chatReportRNVP, invoiceReceiverPolicy) && !hasOnlyHeldExpenses(report.reportID, allReportTransactions)) {
394383
return CONST.SEARCH.ACTION_TYPES.PAY;
395384
}
396-
const hasOnlyPendingCardOrScanningTransactions =
397-
allReportTransactions.length > 0 &&
398-
allReportTransactions.every(
399-
(t) => (isExpensifyCardTransaction(t) && isPending(t)) || (isPartialMerchant(getMerchant(t)) && isAmountMissing(t)) || (isScanRequest(t) && isReceiptBeingScanned(t)),
400-
);
385+
const hasOnlyPendingCardOrScanningTransactions = allReportTransactions.length > 0 && allReportTransactions.every(isPendingCardOrScanningTransaction);
401386

402387
const isAllowedToApproveExpenseReport = isAllowedToApproveExpenseReportUtils(report, undefined, policy);
403388
if (canApproveIOU(report, policy) && isAllowedToApproveExpenseReport && !hasOnlyPendingCardOrScanningTransactions) {

src/libs/TransactionUtils/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,24 @@ function isManualRequest(transaction: Transaction): boolean {
205205
return getRequestType(transaction) === CONST.IOU.REQUEST_TYPE.MANUAL;
206206
}
207207

208+
function isPartialTransaction(transaction: OnyxEntry<Transaction>): boolean {
209+
const merchant = getMerchant(transaction);
210+
211+
if (!merchant || isPartialMerchant(merchant)) {
212+
return true;
213+
}
214+
215+
if (isAmountMissing(transaction) && isScanRequest(transaction)) {
216+
return true;
217+
}
218+
219+
return false;
220+
}
221+
222+
function isPendingCardOrScanningTransaction(transaction: OnyxEntry<Transaction>): boolean {
223+
return (isExpensifyCardTransaction(transaction) && isPending(transaction)) || isPartialTransaction(transaction) || (isScanRequest(transaction) && isReceiptBeingScanned(transaction));
224+
}
225+
208226
/**
209227
* Optimistically generate a transaction.
210228
*
@@ -1580,6 +1598,8 @@ export {
15801598
isBrokenConnectionViolation,
15811599
checkIfShouldShowMarkAsCashButton,
15821600
shouldShowRTERViolationMessage,
1601+
isPartialTransaction,
1602+
isPendingCardOrScanningTransaction,
15831603
};
15841604

15851605
export type {TransactionChanges};

src/libs/actions/IOU.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ import {
165165
isOnHold,
166166
isPartialMerchant,
167167
isPending,
168+
isPendingCardOrScanningTransaction,
168169
isPerDiemRequest as isPerDiemRequestTransactionUtils,
169170
isReceiptBeingScanned as isReceiptBeingScannedTransactionUtils,
170171
isScanRequest as isScanRequestTransactionUtils,
@@ -8478,14 +8479,7 @@ function canApproveIOU(
84788479
const reportNameValuePairs = chatReportRNVP ?? getReportNameValuePairs(iouReport?.reportID);
84798480
const isArchivedExpenseReport = isArchivedReport(reportNameValuePairs);
84808481
const reportTransactions = getReportTransactions(iouReport?.reportID);
8481-
const hasOnlyPendingCardOrScanningTransactions =
8482-
reportTransactions.length > 0 &&
8483-
reportTransactions.every(
8484-
(transaction) =>
8485-
(isExpensifyCardTransaction(transaction) && isPending(transaction)) ||
8486-
(isPartialMerchant(getMerchant(transaction)) && isAmountMissing(transaction)) ||
8487-
(isScanRequestTransactionUtils(transaction) && isReceiptBeingScannedTransactionUtils(transaction)),
8488-
);
8482+
const hasOnlyPendingCardOrScanningTransactions = reportTransactions.length > 0 && reportTransactions.every(isPendingCardOrScanningTransaction);
84898483
if (hasOnlyPendingCardOrScanningTransactions) {
84908484
return false;
84918485
}

tests/actions/IOUTest.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4806,6 +4806,7 @@ describe('actions/IOU', () => {
48064806
amount: 0,
48074807
modifiedAmount: 0,
48084808
receipt: {
4809+
source: 'test',
48094810
state: CONST.IOU.RECEIPT_STATE.SCANFAILED,
48104811
},
48114812
merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT,
@@ -4817,9 +4818,10 @@ describe('actions/IOU', () => {
48174818
amount: 0,
48184819
modifiedAmount: 0,
48194820
receipt: {
4821+
source: 'test',
48204822
state: CONST.IOU.RECEIPT_STATE.SCANFAILED,
48214823
},
4822-
merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT,
4824+
merchant: 'test merchant',
48234825
modifiedMerchant: undefined,
48244826
};
48254827

@@ -4862,9 +4864,10 @@ describe('actions/IOU', () => {
48624864
amount: 0,
48634865
modifiedAmount: 0,
48644866
receipt: {
4867+
source: 'test',
48654868
state: CONST.IOU.RECEIPT_STATE.SCANFAILED,
48664869
},
4867-
merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT,
4870+
merchant: 'test merchant',
48684871
modifiedMerchant: undefined,
48694872
};
48704873

@@ -4903,6 +4906,7 @@ describe('actions/IOU', () => {
49034906
reportID,
49044907
amount: 0,
49054908
receipt: {
4909+
source: 'test',
49064910
state: CONST.IOU.RECEIPT_STATE.SCANFAILED,
49074911
},
49084912
merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT,

tests/unit/DebugUtilsTest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,7 @@ describe('DebugUtils', () => {
10721072
amount: -100,
10731073
currency: CONST.CURRENCY.USD,
10741074
reportID: '2',
1075+
merchant: 'test merchant',
10751076
},
10761077
[ONYXKEYS.SESSION]: {
10771078
accountID: 12345,

0 commit comments

Comments
 (0)