From a12676f9fb550dcb6fc208e33cc8d05a38a82f67 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Wed, 3 Dec 2025 11:32:27 +0800 Subject: [PATCH 1/3] Fix: The currency of the rate does not change in the expense header --- src/libs/TransactionUtils/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 78f8a56ff3947..8c687ecac6d37 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -869,7 +869,14 @@ function getMerchant(transaction: OnyxInputOrEntry, policyParam: On const distanceInMeters = getDistanceInMeters(transaction, unit); if (policy?.customUnits && !isUnreportedAndHasInvalidDistanceRateTransaction(transaction, policy)) { // eslint-disable-next-line @typescript-eslint/no-deprecated - return DistanceRequestUtils.getDistanceMerchant(true, distanceInMeters, unit, rate, transaction.currency, translateLocal, (digit) => + return DistanceRequestUtils.getDistanceMerchant(true, distanceInMeters, unit, rate, getCurrency(transaction), translateLocal, (digit) => + toLocaleDigit(IntlStore.getCurrentLocale(), digit), + ); + } + // If modifiedMerchant is empty but modifiedCurrency exists, recalculate the merchant + if (!transaction?.modifiedMerchant && transaction?.modifiedCurrency) { + // eslint-disable-next-line @typescript-eslint/no-deprecated + return DistanceRequestUtils.getDistanceMerchant(true, distanceInMeters, unit, rate, getCurrency(transaction), translateLocal, (digit) => toLocaleDigit(IntlStore.getCurrentLocale(), digit), ); } From 9434358ddf7260d067c3d60472bc9c60d93a9608 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Fri, 5 Dec 2025 17:02:36 +0800 Subject: [PATCH 2/3] Prevent changing currency on unreported distance expenses --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index 6a81d8599dfbb..b123f971dfd00 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -20,7 +20,7 @@ import {getParticipantsOption, getReportOption} from '@libs/OptionsListUtils'; import {isPaidGroupPolicy} from '@libs/PolicyUtils'; import {getPolicyExpenseChat, getReportOrDraftReport, getTransactionDetails, isPolicyExpenseChat, isSelfDM, shouldEnableNegative} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; -import {calculateTaxAmount, getAmount, getCurrency, getDefaultTaxCode, getRequestType, getTaxValue} from '@libs/TransactionUtils'; +import {calculateTaxAmount, getAmount, getCurrency, getDefaultTaxCode, getRequestType, getTaxValue, isDistanceRequest, isExpenseUnreported} from '@libs/TransactionUtils'; import MoneyRequestAmountForm from '@pages/iou/MoneyRequestAmountForm'; import { getMoneyRequestParticipantsFromReport, @@ -106,6 +106,7 @@ function IOURequestStepAmount({ // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundPage = useShowNotFoundPageInIOUStep(action, iouType, reportActionID, report, transaction); const shouldGenerateTransactionThreadReport = !isBetaEnabled(CONST.BETAS.NO_OPTIMISTIC_TRANSACTION_THREADS); + const isUnreportedDistanceExpense = isEditing && isDistanceRequest(transaction) && isExpenseUnreported(transaction); const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT); const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true}); @@ -390,6 +391,7 @@ function IOURequestStepAmount({ allowFlippingAmount={!isSplitBill && allowNegative} selectedTab={iouRequestType as SelectedTabRequest} chatReportID={reportID} + isCurrencyPressable={!isUnreportedDistanceExpense} /> ); From 89182e0c3e8329d5f095f4af2948b6c009339083 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Wed, 10 Dec 2025 11:00:53 +0800 Subject: [PATCH 3/3] minor fix --- src/libs/TransactionUtils/index.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 2d13e9c084526..c502e66725fbd 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -870,14 +870,11 @@ function getMerchant(transaction: OnyxInputOrEntry, policyParam: On const mileageRate = DistanceRequestUtils.getRate({transaction, policy}); const {unit, rate} = mileageRate; const distanceInMeters = getDistanceInMeters(transaction, unit); - if (policy?.customUnits && !isUnreportedAndHasInvalidDistanceRateTransaction(transaction, policy)) { - // eslint-disable-next-line @typescript-eslint/no-deprecated - return DistanceRequestUtils.getDistanceMerchant(true, distanceInMeters, unit, rate, getCurrency(transaction), translateLocal, (digit) => - toLocaleDigit(IntlStore.getCurrentLocale(), digit), - ); - } - // If modifiedMerchant is empty but modifiedCurrency exists, recalculate the merchant - if (!transaction?.modifiedMerchant && transaction?.modifiedCurrency) { + if ( + (policy?.customUnits && !isUnreportedAndHasInvalidDistanceRateTransaction(transaction, policy)) || + // If modifiedMerchant is empty but modifiedCurrency exists, recalculate the merchant + (!transaction?.modifiedMerchant && transaction?.modifiedCurrency) + ) { // eslint-disable-next-line @typescript-eslint/no-deprecated return DistanceRequestUtils.getDistanceMerchant(true, distanceInMeters, unit, rate, getCurrency(transaction), translateLocal, (digit) => toLocaleDigit(IntlStore.getCurrentLocale(), digit),