Skip to content

Commit 1c070f0

Browse files
authored
Merge pull request #58680 from bernhardoj/fix/58464-tax-fields-show-for-distance-expense
Fix tax fields show for distance expense without distance tax tracking enabled
2 parents 4ebc81c + 8e4a07e commit 1c070f0

File tree

4 files changed

+53
-5
lines changed

4 files changed

+53
-5
lines changed

src/components/MoneyRequestConfirmationList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ type MoneyRequestConfirmationListProps = {
140140
transaction?: OnyxEntry<OnyxTypes.Transaction>;
141141

142142
/** Whether the expense is a distance expense */
143-
isDistanceRequest?: boolean;
143+
isDistanceRequest: boolean;
144144

145145
/** Whether the expense is a per diem expense */
146146
isPerDiemRequest?: boolean;
@@ -184,7 +184,7 @@ function MoneyRequestConfirmationList({
184184
onConfirm,
185185
iouType = CONST.IOU.TYPE.SUBMIT,
186186
iouAmount,
187-
isDistanceRequest = false,
187+
isDistanceRequest,
188188
isPerDiemRequest = false,
189189
isPolicyExpenseChat = false,
190190
iouCategory = '',

src/libs/actions/IOU.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5472,7 +5472,7 @@ function createSplitsAndOnyxData({
54725472
}
54735473

54745474
// STEP 3: Build optimistic transaction
5475-
const oneOnOneTransaction = buildOptimisticTransaction({
5475+
let oneOnOneTransaction = buildOptimisticTransaction({
54765476
originalTransactionID: splitTransaction.transactionID,
54775477
transactionParams: {
54785478
amount: isExpenseReport(oneOnOneIOUReport) ? -splitAmount : splitAmount,
@@ -5490,6 +5490,10 @@ function createSplitsAndOnyxData({
54905490
},
54915491
});
54925492

5493+
if (isDistanceRequest) {
5494+
oneOnOneTransaction = fastMerge(existingTransaction, oneOnOneTransaction, false);
5495+
}
5496+
54935497
// STEP 4: Build optimistic reportActions. We need:
54945498
// 1. CREATED action for the chatReport
54955499
// 2. CREATED action for the iouReport

src/pages/iou/SplitBillDetailsPage.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import Parser from '@libs/Parser';
2121
import {getOriginalMessage, isMoneyRequestAction} from '@libs/ReportActionsUtils';
2222
import {getTransactionDetails, isPolicyExpenseChat} from '@libs/ReportUtils';
2323
import type {OptionData} from '@libs/ReportUtils';
24-
import {areRequiredFieldsEmpty, hasReceipt, isDistanceRequest, isReceiptBeingScanned} from '@libs/TransactionUtils';
24+
import {areRequiredFieldsEmpty, hasReceipt, isDistanceRequest as isDistanceRequestUtil, isReceiptBeingScanned} from '@libs/TransactionUtils';
2525
import withReportAndReportActionOrNotFound from '@pages/home/report/withReportAndReportActionOrNotFound';
2626
import type {WithReportAndReportActionOrNotFoundProps} from '@pages/home/report/withReportAndReportActionOrNotFound';
2727
import variables from '@styles/variables';
@@ -66,6 +66,7 @@ function SplitBillDetailsPage({route, report, reportAction}: SplitBillDetailsPag
6666
const isScanning = hasReceipt(transaction) && isReceiptBeingScanned(transaction);
6767
const hasSmartScanFailed = hasReceipt(transaction) && transaction?.receipt?.state === CONST.IOU.RECEIPT_STATE.SCANFAILED;
6868
const isEditingSplitBill = session?.accountID === actorAccountID && areRequiredFieldsEmpty(transaction);
69+
const isDistanceRequest = isDistanceRequestUtil(transaction);
6970
const [isConfirmed, setIsConfirmed] = useState(false);
7071

7172
const {
@@ -107,7 +108,7 @@ function SplitBillDetailsPage({route, report, reportAction}: SplitBillDetailsPag
107108
/>
108109
</View>
109110
)}
110-
<ImageBehaviorContextProvider shouldSetAspectRatioInStyle={!isDistanceRequest(transaction)}>
111+
<ImageBehaviorContextProvider shouldSetAspectRatioInStyle={!isDistanceRequest}>
111112
{!!participants.length && (
112113
<MoneyRequestConfirmationList
113114
payeePersonalDetails={payeePersonalDetails}
@@ -125,6 +126,7 @@ function SplitBillDetailsPage({route, report, reportAction}: SplitBillDetailsPag
125126
shouldShowSmartScanFields
126127
receiptPath={transaction?.receipt?.source}
127128
receiptFilename={transaction?.filename}
129+
isDistanceRequest={isDistanceRequest}
128130
isEditingSplitBill={isEditingSplitBill}
129131
hasSmartScanFailed={hasSmartScanFailed}
130132
reportID={reportID}

tests/actions/IOUTest.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,48 @@ describe('actions/IOU', () => {
18651865
});
18661866
expect(report?.lastVisibleActionCreated).toBe(iouAction?.created);
18671867
});
1868+
1869+
it('optimistic transaction should be merged with the draft transaction if it is a distance request', async () => {
1870+
// Given a workspace expense chat and a draft split transaction
1871+
const workspaceReportID = '1';
1872+
const transactionAmount = 100;
1873+
const draftTransaction = {
1874+
amount: transactionAmount,
1875+
currency: CONST.CURRENCY.USD,
1876+
merchant: 'test',
1877+
created: '',
1878+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
1879+
};
1880+
1881+
await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${workspaceReportID}`, {reportID: workspaceReportID, isOwnPolicyExpenseChat: true});
1882+
await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, draftTransaction);
1883+
1884+
// When doing a distance split expense
1885+
splitBill({
1886+
participants: [{reportID: workspaceReportID}],
1887+
currentUserLogin: RORY_EMAIL,
1888+
currentUserAccountID: RORY_ACCOUNT_ID,
1889+
existingSplitChatReportID: workspaceReportID,
1890+
...draftTransaction,
1891+
comment: '',
1892+
});
1893+
1894+
await waitForBatchedUpdates();
1895+
1896+
const optimisticTransaction = await new Promise<OnyxEntry<Transaction>>((resolve) => {
1897+
const connection = Onyx.connect({
1898+
key: ONYXKEYS.COLLECTION.TRANSACTION,
1899+
waitForCollectionCallback: true,
1900+
callback: (transactions) => {
1901+
Onyx.disconnect(connection);
1902+
resolve(Object.values(transactions ?? {}).find((transaction) => transaction?.amount === -(transactionAmount / 2)));
1903+
},
1904+
});
1905+
});
1906+
1907+
// Then the data from the transaction draft should be merged into the optimistic transaction
1908+
expect(optimisticTransaction?.iouRequestType).toBe(CONST.IOU.REQUEST_TYPE.DISTANCE);
1909+
});
18681910
});
18691911

18701912
describe('payMoneyRequestElsewhere', () => {

0 commit comments

Comments
 (0)