Skip to content
2 changes: 2 additions & 0 deletions src/components/ReportActionItem/MoneyRequestReceiptView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ function MoneyRequestReceiptView({
}, [parentReportAction]);

const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(linkedTransactionID)}`);
const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`);
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${moneyRequestReport?.policyID}`);
const [cardList] = useOnyx(ONYXKEYS.CARD_LIST);
const transactionViolations = useTransactionViolations(transaction?.transactionID);
Expand Down Expand Up @@ -568,6 +569,7 @@ function MoneyRequestReceiptView({
transactionPolicyCategories: policyCategories,
transactionPolicyTagList: policyTagList,
transactionViolations: rawTransactionViolations,
transactionReport,
});
};

Expand Down
37 changes: 22 additions & 15 deletions src/libs/actions/IOU/Receipt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import type {ValueOf} from 'type-fest';

import Onyx from 'react-native-onyx';

import {getAllReports} from '.';
import {getReceiptError} from './MoneyRequestBuilder';

type ReplaceReceipt = {
Expand All @@ -40,23 +39,22 @@ type ReplaceReceipt = {
isSameReceipt?: boolean;
transactionPolicyTagList?: OnyxEntry<OnyxTypes.PolicyTagLists>;
transactionViolations?: OnyxEntry<OnyxTypes.TransactionViolations>;
transactionReport: OnyxEntry<OnyxTypes.Report>;
};
type ReplaceReceiptRetryParams = Omit<ReplaceReceipt, 'transaction'> & {transactionID: string};
type ReplaceReceiptRetryParams = Omit<ReplaceReceipt, 'transaction' | 'transactionReport'> & {transactionID: string};
Comment thread
parasharrajat marked this conversation as resolved.

function detachReceipt(
transaction: OnyxEntry<OnyxTypes.Transaction>,
transactionPolicy: OnyxEntry<OnyxTypes.Policy>,
transactionPolicyTagList: OnyxEntry<OnyxTypes.PolicyTagLists>,
transactionViolations: OnyxEntry<OnyxTypes.TransactionViolations>,
transactionReport: OnyxEntry<OnyxTypes.Report>,
transactionPolicyCategories?: OnyxEntry<OnyxTypes.PolicyCategories>,
) {
const transactionID = transaction?.transactionID;
if (!transactionID) {
return;
}
const allReports = getAllReports();

const expenseReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`] ?? null;
const newTransaction = transaction
? {
...transaction,
Expand Down Expand Up @@ -115,7 +113,7 @@ function detachReceipt(
policyTagList: transactionPolicyTagList ?? {},
policyCategories: transactionPolicyCategories ?? {},
hasDependentTags: hasDependentTags(transactionPolicy, transactionPolicyTagList ?? {}),
isInvoiceTransaction: isInvoiceReportReportUtils(expenseReport),
isInvoiceTransaction: isInvoiceReportReportUtils(transactionReport),
ownerLogin: undefined,
});
optimisticData.push(violationsOnyxData);
Expand All @@ -126,7 +124,7 @@ function detachReceipt(
});
}

const updatedReportAction = buildOptimisticDetachReceipt(expenseReport?.reportID, transactionID, transaction?.merchant);
const updatedReportAction = buildOptimisticDetachReceipt(transactionReport?.reportID, transactionID, transaction?.merchant);

optimisticData.push({
onyxMethod: Onyx.METHOD.MERGE,
Expand All @@ -147,20 +145,20 @@ function detachReceipt(
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT}${updatedReportAction?.reportID}`,
value: {
lastVisibleActionCreated: expenseReport?.lastVisibleActionCreated,
lastReadTime: expenseReport?.lastReadTime,
lastVisibleActionCreated: transactionReport?.lastVisibleActionCreated,
lastReadTime: transactionReport?.lastReadTime,
},
});
successData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport?.reportID}`,
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionReport?.reportID}`,
value: {
[updatedReportAction.reportActionID]: {pendingAction: null},
},
});
failureData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport?.reportID}`,
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionReport?.reportID}`,
value: {
[updatedReportAction.reportActionID]: {
...(updatedReportAction as OnyxTypes.ReportAction),
Expand All @@ -181,7 +179,18 @@ function detachReceipt(
);
}

function replaceReceipt({transaction, file, source, state, transactionPolicy, transactionPolicyCategories, isSameReceipt, transactionPolicyTagList, transactionViolations}: ReplaceReceipt) {
function replaceReceipt({
transaction,
file,
source,
state,
transactionPolicy,
transactionPolicyCategories,
isSameReceipt,
transactionPolicyTagList,
transactionViolations,
transactionReport,
}: ReplaceReceipt) {
const transactionID = transaction?.transactionID;

if (!file || !transactionID) {
Expand All @@ -190,9 +199,7 @@ function replaceReceipt({transaction, file, source, state, transactionPolicy, tr

const receiptTraceId = mintAndStampReceiptTraceId(file);
logReceiptCaptured({file, captureSource: 'replace', receiptTraceId});
const allReports = getAllReports();

const expenseReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`] ?? null;
const oldReceipt = transaction?.receipt ?? {};
const receiptOptimistic = {
source,
Expand Down Expand Up @@ -262,7 +269,7 @@ function replaceReceipt({transaction, file, source, state, transactionPolicy, tr
policyTagList: transactionPolicyTagList ?? {},
policyCategories: transactionPolicyCategories ?? {},
hasDependentTags: hasDependentTags(transactionPolicy, transactionPolicyTagList ?? {}),
isInvoiceTransaction: isInvoiceReportReportUtils(expenseReport),
isInvoiceTransaction: isInvoiceReportReportUtils(transactionReport),
ownerLogin: undefined,
});
optimisticData.push(violationsOnyxData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ function useReceiptDrop({reportID, report, shouldAddOrReplaceReceipt, transactio
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${getNonEmptyStringOnyxID(transactionID)}`);
const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`);
const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`);

const onFilesValidated = (files: FileObject[]) => {
if (files.length === 0) {
Expand All @@ -63,6 +64,7 @@ function useReceiptDrop({reportID, report, shouldAddOrReplaceReceipt, transactio
transactionPolicyCategories: policyCategories,
transactionPolicyTagList: policyTagList,
transactionViolations,
transactionReport,
});
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ function ScanEditReceipt({report, transactionID, backTo, isEditing}: ScanEditRec
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`);
const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`);
const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`);

const {setIsLoaderVisible} = useFullScreenLoaderActions();

Expand Down Expand Up @@ -73,6 +74,7 @@ function ScanEditReceipt({report, transactionID, backTo, isEditing}: ScanEditRec
transactionPolicyCategories: policyCategories,
transactionPolicyTagList: policyTagList,
transactionViolations,
transactionReport,
});
} else {
setMoneyRequestReceipt(transactionID, source, file.name ?? '', true, file.type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,9 +266,9 @@ function TransactionReceiptModalContent({navigation, route}: AttachmentModalScre
* Detach the receipt and close the modal.
*/
const deleteReceiptAndClose = useCallback(() => {
detachReceipt(transaction, policy, policyTagList, transactionViolations, policyCategories);
detachReceipt(transaction, policy, policyTagList, transactionViolations, transactionReport, policyCategories);
navigation.goBack();
}, [transaction, policy, policyTagList, transactionViolations, policyCategories, navigation]);
}, [transaction, policy, policyTagList, transactionViolations, transactionReport, policyCategories, navigation]);

/**
* Remove odometer image and close the modal.
Expand Down Expand Up @@ -313,12 +313,13 @@ function TransactionReceiptModalContent({navigation, route}: AttachmentModalScre
transactionPolicy: policy,
transactionPolicyTagList: policyTagList,
transactionViolations,
transactionReport,
...(isSameReceipt ? {state: transaction?.receipt?.state, isSameReceipt: true} : {}),
});
}
});
},
[transaction, isDraftTransaction, isOdometerImage, isEditingConfirmation, imageType, fileType, policyCategories, policy, policyTagList, transactionViolations],
[transaction, isDraftTransaction, isOdometerImage, isEditingConfirmation, imageType, fileType, policyCategories, policy, policyTagList, transactionViolations, transactionReport],
);

const rotateReceipt = useCallback(() => {
Expand Down
Loading
Loading