Skip to content

Commit

Permalink
update the case for P2P distance
Browse files Browse the repository at this point in the history
  • Loading branch information
nkdengineer committed May 22, 2024
1 parent 0cb3c9e commit f20358c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 18 deletions.
31 changes: 16 additions & 15 deletions src/libs/actions/IOU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2327,21 +2327,30 @@ function calculateDiffAmount(iouReport: OnyxEntry<OnyxTypes.Report>, updatedTran
return 0;
}

function calculateAmountForUpdatedWaypoint(transaction: OnyxEntry<OnyxTypes.Transaction>, transactionChanges: TransactionChanges, policy: OnyxEntry<OnyxTypes.Policy>) {
function calculateAmountForUpdatedWaypoint(
transaction: OnyxEntry<OnyxTypes.Transaction>,
transactionChanges: TransactionChanges,
policy: OnyxEntry<OnyxTypes.Policy>,
iouReport: OnyxEntry<OnyxTypes.Report>,
) {
let updatedAmount: number = CONST.IOU.DEFAULT_AMOUNT;
let updatedMerchant = Localize.translateLocal('iou.fieldPending');
if (transactionChanges?.routes) {
if (!isEmptyObject(transactionChanges?.routes)) {
const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '';
const mileageRates = DistanceRequestUtils.getMileageRates(policy);
const mileageRate = mileageRates?.[customUnitRateID];
const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD;
const mileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction)
? DistanceRequestUtils.getRateForP2P(policyCurrency)
: mileageRates?.[customUnitRateID] ?? DistanceRequestUtils.getDefaultMileageRate(policy);
const {unit, rate} = mileageRate;
const distance = TransactionUtils.getDistance(transaction);
updatedAmount = -DistanceRequestUtils.getDistanceRequestAmount(distance, unit, rate ?? 0);
const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit, rate ?? 0);
updatedAmount = ReportUtils.isExpenseReport(iouReport) ? -amount : amount;
updatedMerchant = DistanceRequestUtils.getDistanceMerchant(true, distance, unit, rate, transaction?.currency ?? CONST.CURRENCY.USD, Localize.translateLocal, (digit) =>
toLocaleDigit(preferredLocale, digit),
);
}
return {updatedAmount, updatedMerchant};
return {amount: updatedAmount, modifiedAmount: updatedAmount, modifiedMerchant: updatedMerchant};
}

/**
Expand Down Expand Up @@ -2401,13 +2410,9 @@ function getUpdateMoneyRequestParams(

const hasPendingWaypoints = 'waypoints' in transactionChanges;
if (transaction && updatedTransaction && hasPendingWaypoints) {
const {updatedAmount, updatedMerchant} = calculateAmountForUpdatedWaypoint(transaction, transactionChanges, policy);

updatedTransaction = {
...updatedTransaction,
amount: updatedAmount,
modifiedAmount: updatedAmount,
modifiedMerchant: updatedMerchant,
...calculateAmountForUpdatedWaypoint(transaction, transactionChanges, policy, iouReport),
};

// Delete the draft transaction when editing waypoints when the server responds successfully and there are no errors
Expand Down Expand Up @@ -2689,13 +2694,9 @@ function getUpdateTrackExpenseParams(

const hasPendingWaypoints = 'waypoints' in transactionChanges;
if (transaction && updatedTransaction && hasPendingWaypoints) {
const {updatedAmount, updatedMerchant} = calculateAmountForUpdatedWaypoint(transaction, transactionChanges, policy);

updatedTransaction = {
...updatedTransaction,
amount: updatedAmount,
modifiedAmount: updatedAmount,
modifiedMerchant: updatedMerchant,
...calculateAmountForUpdatedWaypoint(transaction, transactionChanges, policy, transactionThread),
};

// Delete the draft transaction when editing waypoints when the server responds successfully and there are no errors
Expand Down
6 changes: 3 additions & 3 deletions src/pages/iou/request/step/IOURequestStepDistance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -377,16 +377,16 @@ function IOURequestStepDistance({
const oldWaypoints = transactionBackup?.comment.waypoints ?? {};
const oldAddresses = Object.fromEntries(Object.entries(oldWaypoints).map(([key, waypoint]) => [key, 'address' in waypoint ? waypoint.address : {}]));
const addresses = Object.fromEntries(Object.entries(waypoints).map(([key, waypoint]) => [key, 'address' in waypoint ? waypoint.address : {}]));
const isRouteChanged = !isEqual(transactionBackup?.routes, transaction?.routes);
if (isEqual(oldAddresses, addresses) && !isRouteChanged) {
const hasRouteChanged = !isEqual(transactionBackup?.routes, transaction?.routes);
if (isEqual(oldAddresses, addresses)) {
Navigation.dismissModal();
return;
}
IOU.updateMoneyRequestDistance({
transactionID: transaction?.transactionID ?? '',
transactionThreadReportID: report?.reportID ?? '',
waypoints,
...(isRouteChanged ? {routes: transaction?.routes} : {}),
...(hasRouteChanged ? {routes: transaction?.routes} : {}),
policy,
});
Navigation.dismissModal();
Expand Down

0 comments on commit f20358c

Please sign in to comment.