From c7689f45d6ba3b3f24d1b9bfcd45527b3534e15e Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Mon, 21 Oct 2024 16:52:16 +0900 Subject: [PATCH 1/4] Fix distance rate flow (when per diem is enabled as well) --- src/libs/DistanceRequestUtils.ts | 6 +- src/libs/PolicyDistanceRatesUtils.ts | 4 +- src/libs/PolicyUtils.ts | 8 +-- src/libs/actions/Policy/DistanceRate.ts | 8 +-- src/libs/actions/Policy/Policy.ts | 2 +- src/libs/actions/TaxRate.ts | 59 ++++++++----------- .../distanceRates/CreateDistanceRatePage.tsx | 7 ++- .../PolicyDistanceRateDetailsPage.tsx | 25 ++++---- .../PolicyDistanceRateEditPage.tsx | 11 ++-- .../PolicyDistanceRateTaxRateEditPage.tsx | 15 +++-- ...licyDistanceRateTaxReclaimableEditPage.tsx | 19 +++--- .../distanceRates/PolicyDistanceRatesPage.tsx | 34 +++++------ .../PolicyDistanceRatesSettingsPage.tsx | 50 +++++++++------- 13 files changed, 127 insertions(+), 121 deletions(-) diff --git a/src/libs/DistanceRequestUtils.ts b/src/libs/DistanceRequestUtils.ts index c52827cec964..545df0b3ae0e 100644 --- a/src/libs/DistanceRequestUtils.ts +++ b/src/libs/DistanceRequestUtils.ts @@ -40,7 +40,7 @@ function getMileageRates(policy: OnyxInputOrEntry, includeDisabledRates return mileageRates; } - const distanceUnit = PolicyUtils.getCustomUnit(policy); + const distanceUnit = PolicyUtils.getDistanceRateCustomUnit(policy); if (!distanceUnit?.rates) { return mileageRates; } @@ -78,7 +78,7 @@ function getDefaultMileageRate(policy: OnyxInputOrEntry): MileageRate | return undefined; } - const distanceUnit = PolicyUtils.getCustomUnit(policy); + const distanceUnit = PolicyUtils.getDistanceRateCustomUnit(policy); if (!distanceUnit?.rates) { return; } @@ -302,7 +302,7 @@ function getCustomUnitRateID(reportID: string, shouldUseDefault?: boolean) { * Get taxable amount from a specific distance rate, taking into consideration the tax claimable amount configured for the distance rate */ function getTaxableAmount(policy: OnyxEntry, customUnitRateID: string, distance: number) { - const distanceUnit = PolicyUtils.getCustomUnit(policy); + const distanceUnit = PolicyUtils.getDistanceRateCustomUnit(policy); const customUnitRate = PolicyUtils.getCustomUnitRate(policy, customUnitRateID); if (!distanceUnit || !distanceUnit?.customUnitID || !customUnitRate) { return 0; diff --git a/src/libs/PolicyDistanceRatesUtils.ts b/src/libs/PolicyDistanceRatesUtils.ts index 8e4d68f78b4c..4583857867f1 100644 --- a/src/libs/PolicyDistanceRatesUtils.ts +++ b/src/libs/PolicyDistanceRatesUtils.ts @@ -26,10 +26,10 @@ function validateRateValue(values: FormOnyxValues, currency: stri return errors; } -function validateTaxClaimableValue(values: FormOnyxValues, rate: Rate): FormInputErrors { +function validateTaxClaimableValue(values: FormOnyxValues, rate: Rate | undefined): FormInputErrors { const errors: FormInputErrors = {}; - if (rate.rate && Number(values.taxClaimableValue) > rate.rate / 100) { + if (rate?.rate && Number(values.taxClaimableValue) > (rate?.rate ?? 0) / 100) { errors.taxClaimableValue = Localize.translateLocal('workspace.taxes.error.updateTaxClaimableFailureMessage'); } return errors; diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 3e0ae7cba291..cb0f08f9f783 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -126,7 +126,7 @@ function getNumericValue(value: number | string, toLocaleDigit: (arg: string) => /** * Retrieves the distance custom unit object for the given policy */ -function getCustomUnit(policy: OnyxEntry): CustomUnit | undefined { +function getDistanceRateCustomUnit(policy: OnyxEntry): CustomUnit | undefined { return Object.values(policy?.customUnits ?? {}).find((unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE); } @@ -134,7 +134,7 @@ function getCustomUnit(policy: OnyxEntry): CustomUnit | undefined { * Retrieves custom unit rate object from the given customUnitRateID */ function getCustomUnitRate(policy: OnyxEntry, customUnitRateID: string): Rate | undefined { - const distanceUnit = getCustomUnit(policy); + const distanceUnit = getDistanceRateCustomUnit(policy); return distanceUnit?.rates[customUnitRateID]; } @@ -376,7 +376,7 @@ function isControlPolicy(policy: OnyxEntry): boolean { } function isTaxTrackingEnabled(isPolicyExpenseChat: boolean, policy: OnyxEntry, isDistanceRequest: boolean): boolean { - const distanceUnit = getCustomUnit(policy); + const distanceUnit = getDistanceRateCustomUnit(policy); const customUnitID = distanceUnit?.customUnitID ?? 0; const isPolicyTaxTrackingEnabled = isPolicyExpenseChat && policy?.tax?.trackingEnabled; const isTaxEnabledForDistance = isPolicyTaxTrackingEnabled && policy?.customUnits?.[customUnitID]?.attributes?.taxEnabled; @@ -1138,7 +1138,7 @@ export { getSageIntacctNonReimbursableActiveDefaultVendor, getSageIntacctCreditCards, getSageIntacctBankAccounts, - getCustomUnit, + getDistanceRateCustomUnit, getCustomUnitRate, sortWorkspacesBySelected, removePendingFieldsFromCustomUnit, diff --git a/src/libs/actions/Policy/DistanceRate.ts b/src/libs/actions/Policy/DistanceRate.ts index f446d2da6b52..1fccffa8da3c 100644 --- a/src/libs/actions/Policy/DistanceRate.ts +++ b/src/libs/actions/Policy/DistanceRate.ts @@ -13,7 +13,7 @@ import type { import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types'; import * as ErrorUtils from '@libs/ErrorUtils'; import getIsNarrowLayout from '@libs/getIsNarrowLayout'; -import {navigateWhenEnableFeature, removePendingFieldsFromCustomUnit} from '@libs/PolicyUtils'; +import {getDistanceRateCustomUnit, navigateWhenEnableFeature, removePendingFieldsFromCustomUnit} from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -128,10 +128,10 @@ function enablePolicyDistanceRates(policyID: string, enabled: boolean) { if (!enabled) { const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; - const customUnitID = Object.keys(policy?.customUnits ?? {}).at(0) ?? ''; - const customUnit = customUnitID ? policy?.customUnits?.[customUnitID] : undefined; + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; - const rateEntries = Object.entries(customUnit?.rates ?? {}); + const rateEntries = Object.entries(distanceRateCustomUnit?.rates ?? {}); // find the rate to be enabled after disabling the distance rate feature const rateEntryToBeEnabled = rateEntries.at(0); diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index c517439aeda2..ad523853a1e6 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1146,7 +1146,7 @@ function updateGeneralSettings(policyID: string, name: string, currencyValue?: s return; } - const distanceUnit = PolicyUtils.getCustomUnit(policy); + const distanceUnit = PolicyUtils.getDistanceRateCustomUnit(policy); const customUnitID = distanceUnit?.customUnitID; const currency = currencyValue ?? policy?.outputCurrency ?? CONST.CURRENCY.USD; diff --git a/src/libs/actions/TaxRate.ts b/src/libs/actions/TaxRate.ts index e1586f9cb24b..5d610e93bee7 100644 --- a/src/libs/actions/TaxRate.ts +++ b/src/libs/actions/TaxRate.ts @@ -12,6 +12,7 @@ import type { } from '@libs/API/parameters'; import {WRITE_COMMANDS} from '@libs/API/types'; import {translateLocal} from '@libs/Localize'; +import * as PolicyUtils from '@libs/PolicyUtils'; import * as ValidationUtils from '@libs/ValidationUtils'; import CONST from '@src/CONST'; import * as ErrorUtils from '@src/libs/ErrorUtils'; @@ -21,7 +22,7 @@ import INPUT_IDS from '@src/types/form/WorkspaceNewTaxForm'; import {default as INPUT_IDS_TAX_CODE} from '@src/types/form/WorkspaceTaxCodeForm'; import type {Policy, TaxRate, TaxRates} from '@src/types/onyx'; import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; -import type {CustomUnit, Rate} from '@src/types/onyx/Policy'; +import type {Rate} from '@src/types/onyx/Policy'; import type {OnyxData} from '@src/types/onyx/Request'; let allPolicies: OnyxCollection; @@ -288,9 +289,9 @@ function deletePolicyTaxes(policyID: string, taxesToDelete: string[]) { const firstTaxID = Object.keys(policyTaxRates ?? {}) .sort((a, b) => a.localeCompare(b)) .at(0); - const customUnits = policy?.customUnits ?? {}; - const customUnitID = Object.keys(customUnits).at(0) ?? '-1'; - const ratesToUpdate = Object.values(customUnits?.[customUnitID]?.rates ?? {}).filter( + const distanceRateCustomUnit = PolicyUtils.getDistanceRateCustomUnit(policy); + const customUnitID = distanceRateCustomUnit?.customUnitID ?? '-1'; + const ratesToUpdate = Object.values(distanceRateCustomUnit?.rates ?? {}).filter( (rate) => !!rate.attributes?.taxRateExternalID && taxesToDelete.includes(rate.attributes?.taxRateExternalID), ); @@ -342,7 +343,7 @@ function deletePolicyTaxes(policyID: string, taxesToDelete: string[]) { return acc; }, {}), }, - customUnits: customUnits && { + customUnits: distanceRateCustomUnit && { [customUnitID]: { rates: optimisticRates, }, @@ -362,7 +363,7 @@ function deletePolicyTaxes(policyID: string, taxesToDelete: string[]) { return acc; }, {}), }, - customUnits: customUnits && { + customUnits: distanceRateCustomUnit && { [customUnitID]: { rates: successRates, }, @@ -386,7 +387,7 @@ function deletePolicyTaxes(policyID: string, taxesToDelete: string[]) { return acc; }, {}), }, - customUnits: customUnits && { + customUnits: distanceRateCustomUnit && { [customUnitID]: { rates: failureRates, }, @@ -537,33 +538,23 @@ function renamePolicyTax(policyID: string, taxID: string, newName: string) { function setPolicyTaxCode(policyID: string, oldTaxCode: string, newTaxCode: string) { const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; const originalTaxRate = {...policy?.taxRates?.taxes[oldTaxCode]}; - const customUnits = Object.values(policy?.customUnits ?? {}); - const optimisticCustomUnit = { - customUnits: { - ...customUnits.reduce((units, customUnit) => { - // eslint-disable-next-line no-param-reassign - units[customUnit.customUnitID] = { - rates: { - ...Object.keys(customUnit.rates).reduce((rates, rateID) => { - if (customUnit.rates[rateID].attributes?.taxRateExternalID === oldTaxCode) { - // eslint-disable-next-line no-param-reassign - rates[rateID] = { - attributes: { - taxRateExternalID: newTaxCode, - }, - }; - } - return rates; - }, {} as Record), - }, - }; - return units; - }, {} as Record>), + const distanceRateCustomUnit = PolicyUtils.getDistanceRateCustomUnit(policy); + const optimisticDistanceRateCustomUnit = distanceRateCustomUnit && { + ...distanceRateCustomUnit, + rates: { + ...Object.keys(distanceRateCustomUnit.rates).reduce((rates, rateID) => { + if (distanceRateCustomUnit.rates[rateID].attributes?.taxRateExternalID === oldTaxCode) { + // eslint-disable-next-line no-param-reassign + rates[rateID] = { + attributes: { + taxRateExternalID: newTaxCode, + }, + }; + } + return rates; + }, {} as Record), }, }; - const failureCustomUnit = { - customUnits: policy?.customUnits, - }; const oldDefaultExternalID = policy?.taxRates?.defaultExternalID; const oldForeignTaxDefault = policy?.taxRates?.foreignTaxDefault; const onyxData: OnyxData = { @@ -586,7 +577,7 @@ function setPolicyTaxCode(policyID: string, oldTaxCode: string, newTaxCode: stri }, }, }, - ...(!!customUnits && optimisticCustomUnit), + ...(!!distanceRateCustomUnit && {customUnits: {[distanceRateCustomUnit.customUnitID]: optimisticDistanceRateCustomUnit}}), }, }, ], @@ -631,7 +622,7 @@ function setPolicyTaxCode(policyID: string, oldTaxCode: string, newTaxCode: stri }, }, }, - ...(!!customUnits && failureCustomUnit), + ...(!!distanceRateCustomUnit && {customUnits: {[distanceRateCustomUnit.customUnitID]: distanceRateCustomUnit}}), }, }, ], diff --git a/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx b/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx index 7566f458fcff..fd75ce5e2d67 100644 --- a/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx +++ b/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx @@ -13,6 +13,7 @@ import useLocalize from '@hooks/useLocalize'; import usePolicy from '@hooks/usePolicy'; import useThemeStyles from '@hooks/useThemeStyles'; import {getOptimisticRateName, validateRateValue} from '@libs/PolicyDistanceRatesUtils'; +import {getDistanceRateCustomUnit} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {SettingsNavigatorParamList} from '@navigation/types'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; @@ -32,8 +33,8 @@ function CreateDistanceRatePage({route}: CreateDistanceRatePageProps) { const policyID = route.params.policyID; const policy = usePolicy(policyID); const currency = policy?.outputCurrency ?? CONST.CURRENCY.USD; - const customUnits = policy?.customUnits ?? {}; - const customUnitID = customUnits[Object.keys(customUnits)[0]]?.customUnitID ?? ''; + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; const customUnitRateID = generateCustomUnitID(); const {inputCallbackRef} = useAutoFocusInput(); @@ -47,7 +48,7 @@ function CreateDistanceRatePage({route}: CreateDistanceRatePageProps) { const submit = (values: FormOnyxValues) => { const newRate: Rate = { currency, - name: getOptimisticRateName(customUnits[customUnitID]?.rates), + name: getOptimisticRateName(distanceRateCustomUnit?.rates ?? {}), rate: parseFloat(values.rate) * CONST.POLICY.CUSTOM_UNIT_RATE_BASE_OFFSET, customUnitRateID, enabled: true, diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx index 0b7d925f2ee2..b78eae4e86bb 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx @@ -17,6 +17,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; +import {getDistanceRateCustomUnit} from '@libs/PolicyUtils'; import type {SettingsNavigatorParamList} from '@navigation/types'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; @@ -37,19 +38,19 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const policyID = route.params.policyID; const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`); const rateID = route.params.rateID; - const customUnits = policy?.customUnits ?? {}; - const customUnit = customUnits[Object.keys(customUnits)[0]]; - const rate = customUnit?.rates[rateID]; + + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const rate = distanceRateCustomUnit?.rates[rateID]; const currency = rate?.currency ?? CONST.CURRENCY.USD; - const taxClaimablePercentage = rate.attributes?.taxClaimablePercentage; - const taxRateExternalID = rate.attributes?.taxRateExternalID; + const taxClaimablePercentage = rate?.attributes?.taxClaimablePercentage; + const taxRateExternalID = rate?.attributes?.taxRateExternalID; - const isDistanceTrackTaxEnabled = !!customUnit?.attributes?.taxEnabled; + const isDistanceTrackTaxEnabled = !!distanceRateCustomUnit?.attributes?.taxEnabled; const isPolicyTrackTaxEnabled = !!policy?.tax?.trackingEnabled; const taxRate = taxRateExternalID && policy?.taxRates?.taxes[taxRateExternalID] ? `${policy?.taxRates?.taxes[taxRateExternalID]?.name} (${policy?.taxRates?.taxes[taxRateExternalID]?.value})` : ''; // Rates can be disabled or deleted as long as in the remaining rates there is always at least one enabled rate and there are no pending delete action - const canDisableOrDeleteRate = Object.values(customUnit?.rates ?? {}).some( + const canDisableOrDeleteRate = Object.values(distanceRateCustomUnit?.rates ?? {}).some( (distanceRate: Rate) => distanceRate?.enabled && rateID !== distanceRate?.customUnitRateID && distanceRate?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, ); const errorFields = rate?.errorFields; @@ -70,7 +71,7 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const toggleRate = () => { if (!rate?.enabled || canDisableOrDeleteRate) { - DistanceRate.setPolicyDistanceRatesEnabled(policyID, customUnit, [{...rate, enabled: !rate?.enabled}]); + DistanceRate.setPolicyDistanceRatesEnabled(policyID, distanceRateCustomUnit, [{...rate, enabled: !rate?.enabled}]); } else { setIsWarningModalVisible(true); } @@ -78,16 +79,16 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const deleteRate = () => { Navigation.goBack(); - DistanceRate.deletePolicyDistanceRates(policyID, customUnit, [rateID]); + DistanceRate.deletePolicyDistanceRates(policyID, distanceRateCustomUnit, [rateID]); setIsDeleteModalVisible(false); }; const rateValueToDisplay = CurrencyUtils.convertAmountToDisplayString(rate?.rate, currency); const taxClaimableValueToDisplay = taxClaimablePercentage && rate.rate ? CurrencyUtils.convertAmountToDisplayString(taxClaimablePercentage * rate.rate, currency) : ''; - const unitToDisplay = translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`); + const unitToDisplay = translate(`common.${distanceRateCustomUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`); const clearErrorFields = (fieldName: keyof Rate | keyof TaxRateAttributes) => { - DistanceRate.clearPolicyDistanceRateErrorFields(policyID, customUnit.customUnitID, rateID, {...errorFields, [fieldName]: null}); + DistanceRate.clearPolicyDistanceRateErrorFields(policyID, distanceRateCustomUnit.customUnitID, rateID, {...errorFields, [fieldName]: null}); }; return ( @@ -101,7 +102,7 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro includeSafeAreaPaddingBottom={false} style={[styles.defaultModalContainer]} > - + { @@ -35,11 +35,14 @@ function PolicyDistanceRateTaxRateEditPage({route, policy}: PolicyDistanceRateTa Navigation.goBack(); return; } - DistanceRate.updateDistanceTaxRate(policyID, customUnit, [ + if (!distanceRateCustomUnit) { + return; + } + DistanceRate.updateDistanceTaxRate(policyID, distanceRateCustomUnit, [ { ...rate, attributes: { - ...rate.attributes, + ...rate?.attributes, taxRateExternalID: newTaxRate.code, }, }, diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateTaxReclaimableEditPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateTaxReclaimableEditPage.tsx index f20272dd2f5c..9ae6223e27ab 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateTaxReclaimableEditPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateTaxReclaimableEditPage.tsx @@ -11,6 +11,7 @@ import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; import {validateTaxClaimableValue} from '@libs/PolicyDistanceRatesUtils'; +import {getDistanceRateCustomUnit} from '@libs/PolicyUtils'; import type {SettingsNavigatorParamList} from '@navigation/types'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import type {WithPolicyOnyxProps} from '@pages/workspace/withPolicy'; @@ -30,24 +31,26 @@ function PolicyDistanceRateTaxReclaimableEditPage({route, policy}: PolicyDistanc const policyID = route.params.policyID; const rateID = route.params.rateID; - const customUnits = policy?.customUnits ?? {}; - const customUnit = customUnits[Object.keys(customUnits)[0]]; - const rate = customUnit.rates[rateID]; - const currency = rate.currency ?? CONST.CURRENCY.USD; + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const rate = distanceRateCustomUnit?.rates[rateID]; + const currency = rate?.currency ?? CONST.CURRENCY.USD; const currentTaxReclaimableOnValue = - rate.attributes?.taxClaimablePercentage && rate.rate ? ((rate.attributes.taxClaimablePercentage * rate.rate) / 100).toFixed(CONST.MAX_TAX_RATE_DECIMAL_PLACES) : ''; + rate?.attributes?.taxClaimablePercentage && rate?.rate ? ((rate.attributes.taxClaimablePercentage * rate.rate) / 100).toFixed(CONST.MAX_TAX_RATE_DECIMAL_PLACES) : ''; const submitTaxReclaimableOn = (values: FormOnyxValues) => { if (values.taxClaimableValue === currentTaxReclaimableOnValue) { Navigation.goBack(); return; } - DistanceRate.updateDistanceTaxClaimableValue(policyID, customUnit, [ + if (!distanceRateCustomUnit) { + return; + } + DistanceRate.updateDistanceTaxClaimableValue(policyID, distanceRateCustomUnit, [ { ...rate, attributes: { - ...rate.attributes, - taxClaimablePercentage: rate.rate ? (Number(values.taxClaimableValue) * 100) / rate.rate : undefined, + ...rate?.attributes, + taxClaimablePercentage: rate?.rate ? (Number(values.taxClaimableValue) * 100) / rate.rate : undefined, }, }, ]); diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRatesPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRatesPage.tsx index 661388a1657d..8133faf8783b 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRatesPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRatesPage.tsx @@ -25,6 +25,7 @@ import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import * as DeviceCapabilities from '@libs/DeviceCapabilities'; import Navigation from '@libs/Navigation/Navigation'; +import {getDistanceRateCustomUnit} from '@libs/PolicyUtils'; import type {FullScreenNavigatorParamList} from '@navigation/types'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import * as DistanceRate from '@userActions/Policy/DistanceRate'; @@ -32,7 +33,7 @@ import ButtonWithDropdownMenu from '@src/components/ButtonWithDropdownMenu'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import type {CustomUnit, Rate} from '@src/types/onyx/Policy'; +import type {Rate} from '@src/types/onyx/Policy'; type RateForList = ListItem & {value: string}; @@ -56,11 +57,8 @@ function PolicyDistanceRatesPage({ const canSelectMultiple = shouldUseNarrowLayout ? selectionMode?.isEnabled : true; - const customUnit: CustomUnit | undefined = useMemo( - () => (policy?.customUnits !== undefined ? policy?.customUnits[Object.keys(policy?.customUnits)[0]] : undefined), - [policy?.customUnits], - ); - const customUnitRates: Record = useMemo(() => customUnit?.rates ?? {}, [customUnit]); + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const customUnitRates: Record = useMemo(() => distanceRateCustomUnit?.rates ?? {}, [distanceRateCustomUnit]); // Filter out rates that will be deleted const allSelectableRates = useMemo(() => Object.values(customUnitRates).filter((rate) => rate.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE), [customUnitRates]); const canDisableOrDeleteSelectedRates = useMemo( @@ -75,13 +73,13 @@ function PolicyDistanceRatesPage({ const dismissError = useCallback( (item: RateForList) => { if (customUnitRates[item.value].errors) { - DistanceRate.clearDeleteDistanceRateError(policyID, customUnit?.customUnitID ?? '', item.value); + DistanceRate.clearDeleteDistanceRateError(policyID, distanceRateCustomUnit?.customUnitID ?? '', item.value); return; } - DistanceRate.clearCreateDistanceRateItemAndError(policyID, customUnit?.customUnitID ?? '', item.value); + DistanceRate.clearCreateDistanceRateItemAndError(policyID, distanceRateCustomUnit?.customUnitID ?? '', item.value); }, - [customUnit?.customUnitID, customUnitRates, policyID], + [distanceRateCustomUnit?.customUnitID, customUnitRates, policyID], ); const {isOffline} = useNetwork({onReconnect: fetchDistanceRates}); @@ -106,7 +104,7 @@ function PolicyDistanceRatesPage({ .map((value) => ({ value: value.customUnitRateID ?? '', text: `${CurrencyUtils.convertAmountToDisplayString(value.rate, value.currency ?? CONST.CURRENCY.USD)} / ${translate( - `common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`, + `common.${distanceRateCustomUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`, )}`, keyForList: value.customUnitRateID ?? '', isSelected: selectedDistanceRates.find((rate) => rate.customUnitRateID === value.customUnitRateID) !== undefined && canSelectMultiple, @@ -122,7 +120,7 @@ function PolicyDistanceRatesPage({ errors: value.errors ?? undefined, rightElement: , })), - [customUnit?.attributes?.unit, customUnitRates, selectedDistanceRates, translate, policy?.pendingAction, canSelectMultiple], + [distanceRateCustomUnit?.attributes?.unit, customUnitRates, selectedDistanceRates, translate, policy?.pendingAction, canSelectMultiple], ); const addRate = () => { @@ -138,39 +136,39 @@ function PolicyDistanceRatesPage({ }; const disableRates = () => { - if (customUnit === undefined) { + if (distanceRateCustomUnit === undefined) { return; } DistanceRate.setPolicyDistanceRatesEnabled( policyID, - customUnit, + distanceRateCustomUnit, selectedDistanceRates.filter((rate) => rate.enabled).map((rate) => ({...rate, enabled: false})), ); setSelectedDistanceRates([]); }; const enableRates = () => { - if (customUnit === undefined) { + if (distanceRateCustomUnit === undefined) { return; } DistanceRate.setPolicyDistanceRatesEnabled( policyID, - customUnit, + distanceRateCustomUnit, selectedDistanceRates.filter((rate) => !rate.enabled).map((rate) => ({...rate, enabled: true})), ); setSelectedDistanceRates([]); }; const deleteRates = () => { - if (customUnit === undefined) { + if (distanceRateCustomUnit === undefined) { return; } DistanceRate.deletePolicyDistanceRates( policyID, - customUnit, + distanceRateCustomUnit, selectedDistanceRates.map((rate) => rate.customUnitRateID ?? ''), ); setSelectedDistanceRates([]); @@ -233,7 +231,7 @@ function PolicyDistanceRatesPage({ return options; }; - const isLoading = !isOffline && customUnit === undefined; + const isLoading = !isOffline && distanceRateCustomUnit === undefined; const headerButtons = ( diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx index e7199e61c2dd..a1b526602f98 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx @@ -17,6 +17,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; +import {getDistanceRateCustomUnit} from '@libs/PolicyUtils'; import type {SettingsNavigatorParamList} from '@navigation/types'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import * as Category from '@userActions/Policy/Category'; @@ -40,30 +41,32 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag const styles = useThemeStyles(); const [isCategoryPickerVisible, setIsCategoryPickerVisible] = useState(false); const {translate} = useLocalize(); - const customUnits = policy?.customUnits ?? {}; - const customUnit = customUnits[Object.keys(customUnits)[0]]; - const customUnitID = customUnit?.customUnitID ?? ''; - const isDistanceTrackTaxEnabled = !!customUnit?.attributes?.taxEnabled; + const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); + const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; + const isDistanceTrackTaxEnabled = !!distanceRateCustomUnit?.attributes?.taxEnabled; const isPolicyTrackTaxEnabled = !!policy?.tax?.trackingEnabled; - const defaultCategory = customUnits[customUnitID]?.defaultCategory; - const defaultUnit = customUnits[customUnitID]?.attributes?.unit; - const errorFields = customUnits[customUnitID]?.errorFields; + const defaultCategory = distanceRateCustomUnit?.defaultCategory; + const defaultUnit = distanceRateCustomUnit?.attributes?.unit; + const errorFields = distanceRateCustomUnit?.errorFields; - const FullPageBlockingView = !customUnit ? FullPageOfflineBlockingView : View; + const FullPageBlockingView = !distanceRateCustomUnit ? FullPageOfflineBlockingView : View; const setNewUnit = (unit: UnitItemType) => { - const attributes = {...customUnits[customUnitID].attributes, unit: unit.value}; - DistanceRate.setPolicyDistanceRatesUnit(policyID, customUnit, {...customUnit, attributes}); + if (!distanceRateCustomUnit) { + return; + } + const attributes = {...distanceRateCustomUnit?.attributes, unit: unit.value}; + DistanceRate.setPolicyDistanceRatesUnit(policyID, distanceRateCustomUnit, {...distanceRateCustomUnit, attributes}); }; const setNewCategory = (category: ListItem) => { - if (!category.searchText) { + if (!category.searchText || !distanceRateCustomUnit) { return; } - Category.setPolicyDistanceRatesDefaultCategory(policyID, customUnit, { - ...customUnit, + Category.setPolicyDistanceRatesDefaultCategory(policyID, distanceRateCustomUnit, { + ...distanceRateCustomUnit, defaultCategory: defaultCategory === category.searchText ? '' : category.searchText, }); }; @@ -73,8 +76,11 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag }; const onToggleTrackTax = (isOn: boolean) => { - const attributes = {...customUnits[customUnitID].attributes, taxEnabled: isOn}; - Policy.enableDistanceRequestTax(policyID, customUnit?.name, customUnitID, attributes); + if (!distanceRateCustomUnit) { + return; + } + const attributes = {...distanceRateCustomUnit?.attributes, taxEnabled: isOn}; + Policy.enableDistanceRequestTax(policyID, distanceRateCustomUnit?.name, customUnitID, attributes); }; return ( @@ -89,7 +95,7 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag testID={PolicyDistanceRatesSettingsPage.displayName} > - + {defaultUnit && ( clearErrorFields('attributes')} > @@ -112,8 +118,8 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag )} {policy?.areCategoriesEnabled && OptionsListUtils.hasEnabledOptions(policyCategories ?? {}) && ( clearErrorFields('defaultCategory')} > @@ -130,9 +136,9 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag )} From 5e3574e699886037ef0e5a9d1eac9f5eadfa4cf3 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Tue, 22 Oct 2024 11:07:16 +0900 Subject: [PATCH 2/4] Rename variables --- src/libs/PolicyDistanceRatesUtils.ts | 2 +- src/libs/actions/Policy/DistanceRate.ts | 6 +-- .../distanceRates/CreateDistanceRatePage.tsx | 6 +-- .../PolicyDistanceRateDetailsPage.tsx | 18 ++++---- .../PolicyDistanceRateEditPage.tsx | 8 ++-- .../PolicyDistanceRateTaxRateEditPage.tsx | 8 ++-- ...licyDistanceRateTaxReclaimableEditPage.tsx | 8 ++-- .../distanceRates/PolicyDistanceRatesPage.tsx | 28 +++++------ .../PolicyDistanceRatesSettingsPage.tsx | 46 +++++++++---------- 9 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/libs/PolicyDistanceRatesUtils.ts b/src/libs/PolicyDistanceRatesUtils.ts index 4583857867f1..11f65f0f07c0 100644 --- a/src/libs/PolicyDistanceRatesUtils.ts +++ b/src/libs/PolicyDistanceRatesUtils.ts @@ -29,7 +29,7 @@ function validateRateValue(values: FormOnyxValues, currency: stri function validateTaxClaimableValue(values: FormOnyxValues, rate: Rate | undefined): FormInputErrors { const errors: FormInputErrors = {}; - if (rate?.rate && Number(values.taxClaimableValue) > (rate?.rate ?? 0) / 100) { + if (rate?.rate && Number(values.taxClaimableValue) > rate.rate / 100) { errors.taxClaimableValue = Localize.translateLocal('workspace.taxes.error.updateTaxClaimableFailureMessage'); } return errors; diff --git a/src/libs/actions/Policy/DistanceRate.ts b/src/libs/actions/Policy/DistanceRate.ts index 1fccffa8da3c..64efdaf732c8 100644 --- a/src/libs/actions/Policy/DistanceRate.ts +++ b/src/libs/actions/Policy/DistanceRate.ts @@ -128,10 +128,10 @@ function enablePolicyDistanceRates(policyID: string, enabled: boolean) { if (!enabled) { const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; - const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); - const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; + const customUnit = getDistanceRateCustomUnit(policy); + const customUnitID = customUnit?.customUnitID ?? ''; - const rateEntries = Object.entries(distanceRateCustomUnit?.rates ?? {}); + const rateEntries = Object.entries(customUnit?.rates ?? {}); // find the rate to be enabled after disabling the distance rate feature const rateEntryToBeEnabled = rateEntries.at(0); diff --git a/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx b/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx index fd75ce5e2d67..8d646471dd89 100644 --- a/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx +++ b/src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx @@ -33,8 +33,8 @@ function CreateDistanceRatePage({route}: CreateDistanceRatePageProps) { const policyID = route.params.policyID; const policy = usePolicy(policyID); const currency = policy?.outputCurrency ?? CONST.CURRENCY.USD; - const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); - const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; + const customUnit = getDistanceRateCustomUnit(policy); + const customUnitID = customUnit?.customUnitID ?? ''; const customUnitRateID = generateCustomUnitID(); const {inputCallbackRef} = useAutoFocusInput(); @@ -48,7 +48,7 @@ function CreateDistanceRatePage({route}: CreateDistanceRatePageProps) { const submit = (values: FormOnyxValues) => { const newRate: Rate = { currency, - name: getOptimisticRateName(distanceRateCustomUnit?.rates ?? {}), + name: getOptimisticRateName(customUnit?.rates ?? {}), rate: parseFloat(values.rate) * CONST.POLICY.CUSTOM_UNIT_RATE_BASE_OFFSET, customUnitRateID, enabled: true, diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx index b78eae4e86bb..236260eac755 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx @@ -39,18 +39,18 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`); const rateID = route.params.rateID; - const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); - const rate = distanceRateCustomUnit?.rates[rateID]; + const customUnit = getDistanceRateCustomUnit(policy); + const rate = customUnit?.rates[rateID]; const currency = rate?.currency ?? CONST.CURRENCY.USD; const taxClaimablePercentage = rate?.attributes?.taxClaimablePercentage; const taxRateExternalID = rate?.attributes?.taxRateExternalID; - const isDistanceTrackTaxEnabled = !!distanceRateCustomUnit?.attributes?.taxEnabled; + const isDistanceTrackTaxEnabled = !!customUnit?.attributes?.taxEnabled; const isPolicyTrackTaxEnabled = !!policy?.tax?.trackingEnabled; const taxRate = taxRateExternalID && policy?.taxRates?.taxes[taxRateExternalID] ? `${policy?.taxRates?.taxes[taxRateExternalID]?.name} (${policy?.taxRates?.taxes[taxRateExternalID]?.value})` : ''; // Rates can be disabled or deleted as long as in the remaining rates there is always at least one enabled rate and there are no pending delete action - const canDisableOrDeleteRate = Object.values(distanceRateCustomUnit?.rates ?? {}).some( + const canDisableOrDeleteRate = Object.values(customUnit?.rates ?? {}).some( (distanceRate: Rate) => distanceRate?.enabled && rateID !== distanceRate?.customUnitRateID && distanceRate?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, ); const errorFields = rate?.errorFields; @@ -71,7 +71,7 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const toggleRate = () => { if (!rate?.enabled || canDisableOrDeleteRate) { - DistanceRate.setPolicyDistanceRatesEnabled(policyID, distanceRateCustomUnit, [{...rate, enabled: !rate?.enabled}]); + DistanceRate.setPolicyDistanceRatesEnabled(policyID, customUnit, [{...rate, enabled: !rate?.enabled}]); } else { setIsWarningModalVisible(true); } @@ -79,16 +79,16 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro const deleteRate = () => { Navigation.goBack(); - DistanceRate.deletePolicyDistanceRates(policyID, distanceRateCustomUnit, [rateID]); + DistanceRate.deletePolicyDistanceRates(policyID, customUnit, [rateID]); setIsDeleteModalVisible(false); }; const rateValueToDisplay = CurrencyUtils.convertAmountToDisplayString(rate?.rate, currency); const taxClaimableValueToDisplay = taxClaimablePercentage && rate.rate ? CurrencyUtils.convertAmountToDisplayString(taxClaimablePercentage * rate.rate, currency) : ''; - const unitToDisplay = translate(`common.${distanceRateCustomUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`); + const unitToDisplay = translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`); const clearErrorFields = (fieldName: keyof Rate | keyof TaxRateAttributes) => { - DistanceRate.clearPolicyDistanceRateErrorFields(policyID, distanceRateCustomUnit.customUnitID, rateID, {...errorFields, [fieldName]: null}); + DistanceRate.clearPolicyDistanceRateErrorFields(policyID, customUnit.customUnitID, rateID, {...errorFields, [fieldName]: null}); }; return ( @@ -102,7 +102,7 @@ function PolicyDistanceRateDetailsPage({route}: PolicyDistanceRateDetailsPagePro includeSafeAreaPaddingBottom={false} style={[styles.defaultModalContainer]} > - + = useMemo(() => distanceRateCustomUnit?.rates ?? {}, [distanceRateCustomUnit]); + const customUnit = getDistanceRateCustomUnit(policy); + const customUnitRates: Record = useMemo(() => customUnit?.rates ?? {}, [customUnit]); // Filter out rates that will be deleted const allSelectableRates = useMemo(() => Object.values(customUnitRates).filter((rate) => rate.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE), [customUnitRates]); const canDisableOrDeleteSelectedRates = useMemo( @@ -73,13 +73,13 @@ function PolicyDistanceRatesPage({ const dismissError = useCallback( (item: RateForList) => { if (customUnitRates[item.value].errors) { - DistanceRate.clearDeleteDistanceRateError(policyID, distanceRateCustomUnit?.customUnitID ?? '', item.value); + DistanceRate.clearDeleteDistanceRateError(policyID, customUnit?.customUnitID ?? '', item.value); return; } - DistanceRate.clearCreateDistanceRateItemAndError(policyID, distanceRateCustomUnit?.customUnitID ?? '', item.value); + DistanceRate.clearCreateDistanceRateItemAndError(policyID, customUnit?.customUnitID ?? '', item.value); }, - [distanceRateCustomUnit?.customUnitID, customUnitRates, policyID], + [customUnit?.customUnitID, customUnitRates, policyID], ); const {isOffline} = useNetwork({onReconnect: fetchDistanceRates}); @@ -104,7 +104,7 @@ function PolicyDistanceRatesPage({ .map((value) => ({ value: value.customUnitRateID ?? '', text: `${CurrencyUtils.convertAmountToDisplayString(value.rate, value.currency ?? CONST.CURRENCY.USD)} / ${translate( - `common.${distanceRateCustomUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`, + `common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`, )}`, keyForList: value.customUnitRateID ?? '', isSelected: selectedDistanceRates.find((rate) => rate.customUnitRateID === value.customUnitRateID) !== undefined && canSelectMultiple, @@ -120,7 +120,7 @@ function PolicyDistanceRatesPage({ errors: value.errors ?? undefined, rightElement: , })), - [distanceRateCustomUnit?.attributes?.unit, customUnitRates, selectedDistanceRates, translate, policy?.pendingAction, canSelectMultiple], + [customUnit?.attributes?.unit, customUnitRates, selectedDistanceRates, translate, policy?.pendingAction, canSelectMultiple], ); const addRate = () => { @@ -136,39 +136,39 @@ function PolicyDistanceRatesPage({ }; const disableRates = () => { - if (distanceRateCustomUnit === undefined) { + if (customUnit === undefined) { return; } DistanceRate.setPolicyDistanceRatesEnabled( policyID, - distanceRateCustomUnit, + customUnit, selectedDistanceRates.filter((rate) => rate.enabled).map((rate) => ({...rate, enabled: false})), ); setSelectedDistanceRates([]); }; const enableRates = () => { - if (distanceRateCustomUnit === undefined) { + if (customUnit === undefined) { return; } DistanceRate.setPolicyDistanceRatesEnabled( policyID, - distanceRateCustomUnit, + customUnit, selectedDistanceRates.filter((rate) => !rate.enabled).map((rate) => ({...rate, enabled: true})), ); setSelectedDistanceRates([]); }; const deleteRates = () => { - if (distanceRateCustomUnit === undefined) { + if (customUnit === undefined) { return; } DistanceRate.deletePolicyDistanceRates( policyID, - distanceRateCustomUnit, + customUnit, selectedDistanceRates.map((rate) => rate.customUnitRateID ?? ''), ); setSelectedDistanceRates([]); @@ -231,7 +231,7 @@ function PolicyDistanceRatesPage({ return options; }; - const isLoading = !isOffline && distanceRateCustomUnit === undefined; + const isLoading = !isOffline && customUnit === undefined; const headerButtons = ( diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx index a1b526602f98..8e32f9a992af 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx @@ -41,32 +41,32 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag const styles = useThemeStyles(); const [isCategoryPickerVisible, setIsCategoryPickerVisible] = useState(false); const {translate} = useLocalize(); - const distanceRateCustomUnit = getDistanceRateCustomUnit(policy); - const customUnitID = distanceRateCustomUnit?.customUnitID ?? ''; - const isDistanceTrackTaxEnabled = !!distanceRateCustomUnit?.attributes?.taxEnabled; + const customUnit = getDistanceRateCustomUnit(policy); + const customUnitID = customUnit?.customUnitID ?? ''; + const isDistanceTrackTaxEnabled = !!customUnit?.attributes?.taxEnabled; const isPolicyTrackTaxEnabled = !!policy?.tax?.trackingEnabled; - const defaultCategory = distanceRateCustomUnit?.defaultCategory; - const defaultUnit = distanceRateCustomUnit?.attributes?.unit; - const errorFields = distanceRateCustomUnit?.errorFields; + const defaultCategory = customUnit?.defaultCategory; + const defaultUnit = customUnit?.attributes?.unit; + const errorFields = customUnit?.errorFields; - const FullPageBlockingView = !distanceRateCustomUnit ? FullPageOfflineBlockingView : View; + const FullPageBlockingView = !customUnit ? FullPageOfflineBlockingView : View; const setNewUnit = (unit: UnitItemType) => { - if (!distanceRateCustomUnit) { + if (!customUnit) { return; } - const attributes = {...distanceRateCustomUnit?.attributes, unit: unit.value}; - DistanceRate.setPolicyDistanceRatesUnit(policyID, distanceRateCustomUnit, {...distanceRateCustomUnit, attributes}); + const attributes = {...customUnit?.attributes, unit: unit.value}; + DistanceRate.setPolicyDistanceRatesUnit(policyID, customUnit, {...customUnit, attributes}); }; const setNewCategory = (category: ListItem) => { - if (!category.searchText || !distanceRateCustomUnit) { + if (!category.searchText || !customUnit) { return; } - Category.setPolicyDistanceRatesDefaultCategory(policyID, distanceRateCustomUnit, { - ...distanceRateCustomUnit, + Category.setPolicyDistanceRatesDefaultCategory(policyID, customUnit, { + ...customUnit, defaultCategory: defaultCategory === category.searchText ? '' : category.searchText, }); }; @@ -76,11 +76,11 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag }; const onToggleTrackTax = (isOn: boolean) => { - if (!distanceRateCustomUnit) { + if (!customUnit) { return; } - const attributes = {...distanceRateCustomUnit?.attributes, taxEnabled: isOn}; - Policy.enableDistanceRequestTax(policyID, distanceRateCustomUnit?.name, customUnitID, attributes); + const attributes = {...customUnit?.attributes, taxEnabled: isOn}; + Policy.enableDistanceRequestTax(policyID, customUnit?.name, customUnitID, attributes); }; return ( @@ -95,7 +95,7 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag testID={PolicyDistanceRatesSettingsPage.displayName} > - + {defaultUnit && ( clearErrorFields('attributes')} > @@ -118,8 +118,8 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag )} {policy?.areCategoriesEnabled && OptionsListUtils.hasEnabledOptions(policyCategories ?? {}) && ( clearErrorFields('defaultCategory')} > @@ -136,9 +136,9 @@ function PolicyDistanceRatesSettingsPage({route}: PolicyDistanceRatesSettingsPag )} From ce0161406526fe7b333cbca7c08f93a74f5204e5 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Tue, 22 Oct 2024 15:33:30 +0900 Subject: [PATCH 3/4] Fix naming --- src/libs/DistanceRequestUtils.ts | 2 +- src/libs/PolicyUtils.ts | 4 ++-- src/libs/TransactionUtils/index.ts | 4 ++-- src/libs/Violations/ViolationsUtils.ts | 4 ++-- src/pages/iou/request/step/IOURequestStepDistanceRate.tsx | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libs/DistanceRequestUtils.ts b/src/libs/DistanceRequestUtils.ts index 545df0b3ae0e..286f952b3484 100644 --- a/src/libs/DistanceRequestUtils.ts +++ b/src/libs/DistanceRequestUtils.ts @@ -303,7 +303,7 @@ function getCustomUnitRateID(reportID: string, shouldUseDefault?: boolean) { */ function getTaxableAmount(policy: OnyxEntry, customUnitRateID: string, distance: number) { const distanceUnit = PolicyUtils.getDistanceRateCustomUnit(policy); - const customUnitRate = PolicyUtils.getCustomUnitRate(policy, customUnitRateID); + const customUnitRate = PolicyUtils.getDistanceRateCustomUnitRate(policy, customUnitRateID); if (!distanceUnit || !distanceUnit?.customUnitID || !customUnitRate) { return 0; } diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index aa5a4395c8e8..36e5ccef3308 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -139,7 +139,7 @@ function getDistanceRateCustomUnit(policy: OnyxEntry): CustomUnit | unde /** * Retrieves custom unit rate object from the given customUnitRateID */ -function getCustomUnitRate(policy: OnyxEntry, customUnitRateID: string): Rate | undefined { +function getDistanceRateCustomUnitRate(policy: OnyxEntry, customUnitRateID: string): Rate | undefined { const distanceUnit = getDistanceRateCustomUnit(policy); return distanceUnit?.rates[customUnitRateID]; } @@ -1149,7 +1149,7 @@ export { getSageIntacctCreditCards, getSageIntacctBankAccounts, getDistanceRateCustomUnit, - getCustomUnitRate, + getDistanceRateCustomUnitRate, sortWorkspacesBySelected, removePendingFieldsFromCustomUnit, navigateWhenEnableFeature, diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 7bc4b7ca8c24..e2c2ee6f8096 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -12,7 +12,7 @@ import {toLocaleDigit} from '@libs/LocaleDigitUtils'; import * as Localize from '@libs/Localize'; import * as NumberUtils from '@libs/NumberUtils'; import Permissions from '@libs/Permissions'; -import {getCleanedTagName, getCustomUnitRate} from '@libs/PolicyUtils'; +import {getCleanedTagName, getDistanceRateCustomUnitRate} from '@libs/PolicyUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; // eslint-disable-next-line import/no-cycle import * as ReportActionsUtils from '@libs/ReportActionsUtils'; @@ -903,7 +903,7 @@ function getRateID(transaction: OnyxInputOrEntry): string | undefin function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry, currency?: string | undefined): string | undefined { if (isDistanceRequest(transaction)) { const customUnitRateID = getRateID(transaction) ?? ''; - const customUnitRate = getCustomUnitRate(policy, customUnitRateID); + const customUnitRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); return customUnitRate?.attributes?.taxRateExternalID ?? ''; } const defaultExternalID = policy?.taxRates?.defaultExternalID; diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index 98ea0cc4c677..eff3d2b704a7 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -2,7 +2,7 @@ import reject from 'lodash/reject'; import Onyx from 'react-native-onyx'; import type {OnyxUpdate} from 'react-native-onyx'; import type {LocaleContextProps} from '@components/LocaleContextProvider'; -import {getCustomUnitRate, getSortedTagKeys} from '@libs/PolicyUtils'; +import {getDistanceRateCustomUnitRate, getSortedTagKeys} from '@libs/PolicyUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -218,7 +218,7 @@ const ViolationsUtils = { : getTagViolationsForMultiLevelTags(updatedTransaction, newTransactionViolations, policyTagList, hasDependentTags); } - if (updatedTransaction?.comment?.customUnit?.customUnitRateID && !!getCustomUnitRate(policy, updatedTransaction?.comment?.customUnit?.customUnitRateID)) { + if (updatedTransaction?.comment?.customUnit?.customUnitRateID && !!getDistanceRateCustomUnitRate(policy, updatedTransaction?.comment?.customUnit?.customUnitRateID)) { newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY}); } diff --git a/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx b/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx index e139edf1fc42..efb5a3e45588 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx @@ -10,7 +10,7 @@ import * as IOU from '@libs/actions/IOU'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import Navigation from '@libs/Navigation/Navigation'; -import {getCustomUnitRate, isTaxTrackingEnabled} from '@libs/PolicyUtils'; +import {getDistanceRateCustomUnitRate, isTaxTrackingEnabled} from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import CONST from '@src/CONST'; @@ -83,7 +83,7 @@ function IOURequestStepDistanceRate({ let taxAmount; let taxRateExternalID; if (shouldShowTax) { - const policyCustomUnitRate = getCustomUnitRate(policy, customUnitRateID); + const policyCustomUnitRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); taxRateExternalID = policyCustomUnitRate?.attributes?.taxRateExternalID ?? '-1'; const unit = DistanceRequestUtils.getDistanceUnit(transaction, rates[customUnitRateID]); const taxableAmount = DistanceRequestUtils.getTaxableAmount(policy, customUnitRateID, TransactionUtils.getDistanceInMeters(transaction, unit)); From 6f38eedae87f8eb8c18853c17efc9c4e846ac249 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Tue, 22 Oct 2024 15:48:53 +0900 Subject: [PATCH 4/4] Fix lint --- src/components/MoneyRequestConfirmationList.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index a46b9d62dfde..db653e9f73b9 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -20,7 +20,7 @@ import * as MoneyRequestUtils from '@libs/MoneyRequestUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; -import {getCustomUnitRate, isTaxTrackingEnabled} from '@libs/PolicyUtils'; +import {getDistanceRateCustomUnitRate, isTaxTrackingEnabled} from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import playSound, {SOUNDS} from '@libs/Sound'; import * as TransactionUtils from '@libs/TransactionUtils'; @@ -358,7 +358,7 @@ function MoneyRequestConfirmationList({ let taxableAmount: number; let taxCode: string; if (isDistanceRequest) { - const customUnitRate = getCustomUnitRate(policy, customUnitRateID); + const customUnitRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); taxCode = customUnitRate?.attributes?.taxRateExternalID ?? ''; taxableAmount = DistanceRequestUtils.getTaxableAmount(policy, customUnitRateID, distance); } else {