From 5ab5aaa5dbd0fe582d776591967aaa1009117594 Mon Sep 17 00:00:00 2001 From: Benjamin Limpich Date: Thu, 23 Oct 2025 12:44:31 -0700 Subject: [PATCH] Revert "Fix tax updating for changing waypoints or currency" --- .../MoneyRequestConfirmationList.tsx | 57 +++++++++++++------ 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 57b2905f5e15b..8928b0efb7390 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -332,19 +332,27 @@ function MoneyRequestConfirmationList({ const shouldShowTax = isTaxTrackingEnabled(isPolicyExpenseChat, policy, isDistanceRequest, isPerDiemRequest); + const previousTransactionAmount = usePrevious(transaction?.amount); + const previousTransactionCurrency = usePrevious(transaction?.currency); + const previousTransactionModifiedCurrency = usePrevious(transaction?.modifiedCurrency); + const previousCustomUnitRateID = usePrevious(customUnitRateID); useEffect(() => { - // Set the default tax code when conditions change - if (!shouldShowTax || !transaction || !transactionID) { + // previousTransaction is in the condition because if it is falsy, it means this is the first time the useEffect is triggered after we load it, so we should calculate the default + // tax even if the other parameters are the same against their previous values. + if ( + !shouldShowTax || + !transaction || + !transactionID || + (transaction.taxCode && + previousTransactionModifiedCurrency === transaction.modifiedCurrency && + previousTransactionCurrency === transaction.currency && + previousCustomUnitRateID === customUnitRateID) + ) { return; } const defaultTaxCode = getDefaultTaxCode(policy, transaction); - const currentTaxCode = transaction.taxCode ?? ''; - - // Update tax code if it's different from what should be the default - if (defaultTaxCode !== currentTaxCode) { - setMoneyRequestTaxRate(transactionID, defaultTaxCode ?? ''); - } - }, [customUnitRateID, policy, shouldShowTax, transaction, transactionID]); + setMoneyRequestTaxRate(transactionID, defaultTaxCode ?? ''); + }, [customUnitRateID, policy, previousCustomUnitRateID, previousTransactionCurrency, previousTransactionModifiedCurrency, shouldShowTax, transaction, transactionID]); const isMovingTransactionFromTrackExpense = isMovingTransactionFromTrackExpenseUtil(action); @@ -479,9 +487,19 @@ function MoneyRequestConfirmationList({ } }, [shouldCalculateDistanceAmount, isReadOnly, distanceRequestAmount, transactionID, currency, isTypeSplit, isPolicyExpenseChat, selectedParticipantsProp, transaction]); + const previousTaxCode = usePrevious(transaction?.taxCode); + // Calculate and set tax amount in transaction draft useEffect(() => { - if (!shouldShowTax || !transaction) { + if ( + !shouldShowTax || + !transaction || + (transaction.taxAmount !== undefined && + previousTransactionAmount === transaction.amount && + previousTransactionCurrency === transaction.currency && + previousCustomUnitRateID === customUnitRateID && + previousTaxCode === transaction.taxCode) + ) { return; } @@ -502,13 +520,20 @@ function MoneyRequestConfirmationList({ const taxPercentage = getTaxValue(policy, transaction, taxCode) ?? ''; const taxAmount = calculateTaxAmount(taxPercentage, taxableAmount, transaction.currency); const taxAmountInSmallestCurrencyUnits = convertToBackendAmount(Number.parseFloat(taxAmount.toString())); - - // Only update if the calculated tax amount is different from the current one - if (transaction.taxAmount !== taxAmountInSmallestCurrencyUnits) { - setMoneyRequestTaxAmount(transaction.transactionID, taxAmountInSmallestCurrencyUnits); - } + setMoneyRequestTaxAmount(transaction.transactionID, taxAmountInSmallestCurrencyUnits); } - }, [policy, shouldShowTax, transaction, isDistanceRequest, customUnitRateID, distance]); + }, [ + policy, + shouldShowTax, + previousTransactionAmount, + previousTransactionCurrency, + transaction, + isDistanceRequest, + customUnitRateID, + previousCustomUnitRateID, + previousTaxCode, + distance, + ]); // If completing a split expense fails, set didConfirm to false to allow the user to edit the fields again if (isEditingSplitBill && didConfirm) {