diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index ba5c65a4fbd6..0ee82affec7f 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -42,6 +42,7 @@ import type * as OnyxTypes from '@src/types/onyx'; import type {Participant} from '@src/types/onyx/IOU'; import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage'; import type {SplitShares} from '@src/types/onyx/Transaction'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; import ButtonWithDropdownMenu from './ButtonWithDropdownMenu'; import type {DropdownOption} from './ButtonWithDropdownMenu/types'; import ConfirmedRoute from './ConfirmedRoute'; @@ -183,7 +184,7 @@ const getTaxAmount = (transaction: OnyxEntry, policy: Ony if (isDistanceRequest) { return DistanceRequestUtils.calculateTaxAmount(policy, transaction, TransactionUtils.getRateID(transaction) ?? ''); } - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, TransactionUtils.getCurrency(transaction)) ?? ''; const taxPercentage = TransactionUtils.getTaxValue(policy, transaction, transaction?.taxCode ?? defaultTaxCode) ?? ''; return TransactionUtils.calculateTaxAmount(taxPercentage, transaction?.amount ?? 0); }; @@ -304,6 +305,15 @@ function MoneyRequestConfirmationList({ const shouldShowTax = isTaxTrackingEnabled(isPolicyExpenseChat, policy, isDistanceRequest) && !isTypeInvoice; + const transactionCurrency = TransactionUtils.getCurrency(transaction); + useEffect(() => { + if (isEmptyObject(policy) || !shouldShowTax || !taxRates) { + return; + } + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transactionCurrency); + IOU.setMoneyRequestTaxRate(transactionID, defaultTaxCode ?? ''); + }, [policy, shouldShowTax, taxRates, transactionCurrency, transactionID]); + // A flag for showing the billable field const shouldShowBillable = policy?.disabledFields?.defaultBillable === false; const isMovingTransactionFromTrackExpense = IOUUtils.isMovingTransactionFromTrackExpense(action); diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index b230d07715a4..46ac56284419 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -698,10 +698,10 @@ function getRateID(transaction: OnyxEntry): string | undefined { * Gets the tax code based on selected currency. * Returns policy default tax rate if transaction is in policy default currency, otherwise returns foreign default tax rate */ -function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry, currency?: string | undefined) { +function getDefaultTaxCode(policy: OnyxEntry, currency: string) { const defaultExternalID = policy?.taxRates?.defaultExternalID; const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; - return policy?.outputCurrency === (currency ?? getCurrency(transaction)) ? defaultExternalID : foreignTaxDefault; + return policy?.outputCurrency === currency ? defaultExternalID : foreignTaxDefault; } /** @@ -719,7 +719,7 @@ function transformedTaxRates(policy: OnyxEntry | undefined, transaction? return defaultExternalID; } - return policy && getDefaultTaxCode(policy, transaction); + return policy && getDefaultTaxCode(policy, getCurrency(transaction)); }; const getModifiedName = (data: TaxRate, code: string) => @@ -746,7 +746,7 @@ function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: strin * Gets the tax name */ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - const defaultTaxCode = getDefaultTaxCode(policy, transaction); + const defaultTaxCode = getDefaultTaxCode(policy, getCurrency(transaction)); return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === (transaction?.taxCode ?? defaultTaxCode))?.modifiedName; } diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index e74ed42454aa..6839b5e83d7e 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -287,7 +287,7 @@ function IOURequestStepAmount({ // If currency has changed, then we get the default tax rate based on currency, otherwise we use the current tax rate selected in transaction, if we have it. const transactionTaxCode = transaction?.taxCode ?? ''; - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction, currency) ?? ''; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, currency ?? TransactionUtils.getCurrency(transaction)) ?? ''; const taxCode = (currency !== transactionCurrency ? defaultTaxCode : transactionTaxCode) ?? defaultTaxCode; const taxPercentage = TransactionUtils.getTaxValue(policy, transaction, taxCode) ?? ''; const taxAmount = CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 939589598701..03017c7324fc 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -85,7 +85,7 @@ function IOURequestStepConfirmation({ const receiptFilename = transaction?.filename; const receiptPath = transaction?.receipt?.source; const receiptType = transaction?.receipt?.type; - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, TransactionUtils.getCurrency(transaction)); const transactionTaxCode = (transaction?.taxCode ? transaction?.taxCode : defaultTaxCode) ?? ''; const transactionTaxAmount = transaction?.taxAmount ?? 0; const isSharingTrackExpense = action === CONST.IOU.ACTION.SHARE; diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index 27c2808669df..32ad8e8006bb 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -40,7 +40,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry TransactionUtils.getTaxValue(policy, transaction, taxCode); const defaultTaxValue = getTaxValue(defaultTaxCode); const moneyRequestTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : defaultTaxValue) ?? '';