From 7574fc9acbe20a012b7d92a90ff1523d20b373d6 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 13:19:08 +0100 Subject: [PATCH 01/82] add taxAmount param to updateMoneyRequestAmountAndCurrency --- src/libs/actions/IOU.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 83caa65e1d77..43cc73df9c97 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -4449,6 +4449,7 @@ type UpdateMoneyRequestAmountAndCurrencyParams = { transactionThreadReportID: string; currency: string; amount: number; + taxAmount?: number; policy?: OnyxEntry; policyTagList?: OnyxEntry; policyCategories?: OnyxEntry; @@ -4460,6 +4461,7 @@ function updateMoneyRequestAmountAndCurrency({ transactionThreadReportID, currency, amount, + taxAmount, policy, policyTagList, policyCategories, @@ -4467,6 +4469,7 @@ function updateMoneyRequestAmountAndCurrency({ const transactionChanges = { amount, currency, + ...(taxAmount && {taxAmount}), }; const {params, onyxData} = getUpdateMoneyRequestParams( transactionID, From 1ed12dfe94efdb4cf61a0cf865e98b2dd08f71ee Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 13:19:58 +0100 Subject: [PATCH 02/82] should optimistically update tax amount when updating expense amount --- .../iou/request/step/IOURequestStepAmount.tsx | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index cb8e51120f01..7b56049811fc 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -16,7 +16,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import type {Transaction} from '@src/types/onyx'; +import type {Policy, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import StepScreenWrapper from './StepScreenWrapper'; import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; @@ -33,6 +33,9 @@ type IOURequestStepAmountOnyxProps = { /** The draft transaction object being modified in Onyx */ draftTransaction: OnyxEntry; + + /** The policy which the user has access to and which the report is tied to */ + policy: OnyxEntry; }; type IOURequestStepAmountProps = IOURequestStepAmountOnyxProps & @@ -40,7 +43,15 @@ type IOURequestStepAmountProps = IOURequestStepAmountOnyxProps & /** The transaction object being modified in Onyx */ transaction: OnyxEntry; }; - +function getTaxAmount(transaction: OnyxEntry, taxRates: TaxRatesWithDefault | undefined, newAmount: number) { + if (!transaction?.amount) { + return; + } + const transactionTaxCode = transaction?.taxCode ?? ''; + const defaultTaxValue = taxRates?.defaultValue; + const taxPercentage = (transactionTaxCode ? taxRates?.taxes[transactionTaxCode]?.value : defaultTaxValue) ?? ''; + return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); +} function IOURequestStepAmount({ report, route: { @@ -49,6 +60,7 @@ function IOURequestStepAmount({ transaction, splitDraftTransaction, draftTransaction, + policy, }: IOURequestStepAmountProps) { const {translate} = useLocalize(); const textInput = useRef(null); @@ -148,7 +160,9 @@ function IOURequestStepAmount({ return; } - IOU.updateMoneyRequestAmountAndCurrency({transactionID, transactionThreadReportID: reportID, currency, amount: newAmount}); + const taxAmount = getTaxAmount(transaction, policy?.taxRates, newAmount); + + IOU.updateMoneyRequestAmountAndCurrency({transactionID, transactionThreadReportID: reportID, currency, amount: newAmount, taxAmount}); Navigation.dismissModal(); }; @@ -190,6 +204,9 @@ export default withWritableReportOrNotFound( return `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`; }, }, + policy: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY}${report ? report.policyID : '0'}`, + }, })(IOURequestStepAmount), ), ); From 1c16b1aeab10ab4e85462dcc9b50cb399d6588f7 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 13:33:58 +0100 Subject: [PATCH 03/82] add UpdateMoneyRequestTaxRateParams types to updateMoneyRequestTaxRate --- src/libs/actions/IOU.ts | 18 ++++++++++-------- .../request/step/IOURequestStepTaxRatePage.tsx | 9 ++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 43cc73df9c97..04dd151506bb 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -2379,15 +2379,17 @@ function updateMoneyRequestTaxAmount( API.write('UpdateMoneyRequestTaxAmount', params, onyxData); } +type UpdateMoneyRequestTaxRateParams = { + transactionID: string; + optimisticReportActionID: string; + taxCode: string; + policy: OnyxEntry; + policyTagList: OnyxEntry; + policyCategories: OnyxEntry; +}; + /** Updates the created tax rate of an expense */ -function updateMoneyRequestTaxRate( - transactionID: string, - optimisticReportActionID: string, - taxCode: string, - policy: OnyxEntry, - policyTagList: OnyxEntry, - policyCategories: OnyxEntry, -) { +function updateMoneyRequestTaxRate({transactionID, optimisticReportActionID, taxCode, policy, policyTagList, policyCategories}: UpdateMoneyRequestTaxRateParams) { const transactionChanges = { taxCode, }; diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index da3a244a2db2..3e14610652df 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -74,7 +74,14 @@ function IOURequestStepTaxRatePage({ navigateBack(); return; } - IOU.updateMoneyRequestTaxRate(transaction?.transactionID ?? '', report?.reportID ?? '', newTaxCode, policy, policyTags, policyCategories); + IOU.updateMoneyRequestTaxRate({ + transactionID: transaction?.transactionID ?? '', + optimisticReportActionID: report?.reportID ?? '', + taxCode: newTaxCode, + policy, + policyTagList: policyTags, + policyCategories, + }); navigateBack(); return; } From 8dce58a29da1500c7178168f31affbb669abeb4a Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 13:37:51 +0100 Subject: [PATCH 04/82] add taxAmount to UpdateMoneyRequestTaxRateParams types --- src/libs/actions/IOU.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 04dd151506bb..53fc9e408a06 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -2383,15 +2383,17 @@ type UpdateMoneyRequestTaxRateParams = { transactionID: string; optimisticReportActionID: string; taxCode: string; + taxAmount?: number; policy: OnyxEntry; policyTagList: OnyxEntry; policyCategories: OnyxEntry; }; /** Updates the created tax rate of an expense */ -function updateMoneyRequestTaxRate({transactionID, optimisticReportActionID, taxCode, policy, policyTagList, policyCategories}: UpdateMoneyRequestTaxRateParams) { +function updateMoneyRequestTaxRate({transactionID, optimisticReportActionID, taxCode, taxAmount, policy, policyTagList, policyCategories}: UpdateMoneyRequestTaxRateParams) { const transactionChanges = { taxCode, + ...(taxAmount && {taxAmount}), }; const {params, onyxData} = getUpdateMoneyRequestParams(transactionID, optimisticReportActionID, transactionChanges, policy, policyTagList, policyCategories, true); API.write('UpdateMoneyRequestTaxRate', params, onyxData); From 228c47705cc4a06d8d0a343be222e8e952523039 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 14:36:36 +0100 Subject: [PATCH 05/82] should optimistically update tax amount when updating tax rate --- .../iou/request/step/IOURequestStepTaxRatePage.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 3e14610652df..55d43370c477 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -68,6 +68,12 @@ function IOURequestStepTaxRatePage({ : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { + if (!transaction || !taxes.text || !taxRates) { + Navigation.goBack(backTo); + return; + } + const taxAmount = getTaxAmount(taxRates, taxes.text, TransactionUtils.getAmount(transaction, false, true)); + if (isEditing) { const newTaxCode = taxes.data.code; if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { @@ -78,6 +84,7 @@ function IOURequestStepTaxRatePage({ transactionID: transaction?.transactionID ?? '', optimisticReportActionID: report?.reportID ?? '', taxCode: newTaxCode, + taxAmount: CurrencyUtils.convertToBackendAmount(taxAmount ?? 0), policy, policyTagList: policyTags, policyCategories, @@ -85,11 +92,7 @@ function IOURequestStepTaxRatePage({ navigateBack(); return; } - if (!transaction || !taxes.text || !taxRates) { - Navigation.goBack(backTo); - return; - } - const taxAmount = getTaxAmount(taxRates, taxes.text, transaction?.amount); + if (taxAmount === undefined) { Navigation.goBack(backTo); return; From a0ac9bac20da8c89b5a5f2e9bbaee1e314e7bb49 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 18 Apr 2024 14:39:33 +0100 Subject: [PATCH 06/82] fix lint --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 55d43370c477..c310e88dc928 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -73,7 +73,7 @@ function IOURequestStepTaxRatePage({ return; } const taxAmount = getTaxAmount(taxRates, taxes.text, TransactionUtils.getAmount(transaction, false, true)); - + if (isEditing) { const newTaxCode = taxes.data.code; if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { From 3ba09e8dd2e48269392a56fa39919315e0a75b1e Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 19 Apr 2024 10:03:47 +0100 Subject: [PATCH 07/82] fix lint --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index 972f9972aaea..e612d04eb733 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -20,7 +20,6 @@ import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; -import type {TaxRatesWithDefault, Transaction} from '@src/types/onyx'; import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import StepScreenWrapper from './StepScreenWrapper'; @@ -56,7 +55,7 @@ type IOURequestStepAmountProps = IOURequestStepAmountOnyxProps & /** The transaction object being modified in Onyx */ transaction: OnyxEntry; }; -function getTaxAmount(transaction: OnyxEntry, taxRates: TaxRatesWithDefault | undefined, newAmount: number) { +function getTaxAmount(transaction: OnyxEntry, taxRates: OnyxTypes.TaxRatesWithDefault | undefined, newAmount: number) { if (!transaction?.amount) { return; } From 3cd43a43916f79f572623d31187860fc8340ae21 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 12:58:24 +0100 Subject: [PATCH 08/82] update policy getTaxRatesSection --- src/libs/OptionsListUtils.ts | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 2aad4179c337..dab3e8439455 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -159,6 +159,8 @@ type GetOptionsConfig = { includeSelectedOptions?: boolean; includeTaxRates?: boolean; taxRates?: TaxRatesWithDefault; + policy?: OnyxEntry; + transaction?: OnyxEntry; includePolicyReportFieldOptions?: boolean; policyReportFieldOptions?: string[]; recentlyUsedPolicyReportFieldOptions?: string[]; @@ -1328,13 +1330,23 @@ function getReportFieldOptionsSection(options: string[], recentlyUsedOptions: st /** * Transforms tax rates to a new object format - to add codes and new name with concatenated name and value. * - * @param taxRates - The original tax rates object. + * @param policy - The policy which the user has access to and which the report is tied to. * @returns The transformed tax rates object.g */ -function transformedTaxRates(taxRates: TaxRatesWithDefault | undefined): Record { - const defaultTaxKey = taxRates?.defaultExternalID; +function transformedTaxRates(policy?: OnyxEntry, transaction?: OnyxEntry): Record { + const taxRates = policy?.taxRates; + const defaultExternalID = taxRates?.defaultExternalID; + const foreignTaxDefault = taxRates?.foreignTaxDefault; + const defaultTaxKey = () => { + if (!transaction) { + return defaultExternalID; + } + + return policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + }; + const getModifiedName = (data: TaxRate, code: string) => - `${data.name} (${data.value})${defaultTaxKey === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; + `${data.name} (${data.value})${defaultTaxKey() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); return taxes; } @@ -1364,10 +1376,10 @@ function getTaxRatesOptions(taxRates: Array>): TaxRatesOption[] /** * Builds the section list for tax rates */ -function getTaxRatesSection(taxRates: TaxRatesWithDefault | undefined, selectedOptions: Category[], searchInputValue: string): TaxSection[] { +function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptions: Category[], searchInputValue: string, transaction?: OnyxEntry): TaxSection[] { const policyRatesSections = []; - const taxes = transformedTaxRates(taxRates); + const taxes = transformedTaxRates(policy, transaction); const sortedTaxRates = sortTaxRates(taxes); const enabledTaxRates = sortedTaxRates.filter((taxRate) => !taxRate.isDisabled); @@ -1578,7 +1590,8 @@ function getOptions( includeSelectedOptions = false, transactionViolations = {}, includeTaxRates, - taxRates, + policy, + transaction, includeSelfDM = false, includePolicyReportFieldOptions = false, policyReportFieldOptions = [], @@ -1614,7 +1627,7 @@ function getOptions( } if (includeTaxRates) { - const taxRatesOptions = getTaxRatesSection(taxRates, selectedOptions as Category[], searchInputValue); + const taxRatesOptions = getTaxRatesSection(policy, selectedOptions as Category[], searchInputValue, transaction); return { recentReports: [], From 31d6d0d901bfb6a2f21b076764e6095853014494 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 12:59:26 +0100 Subject: [PATCH 09/82] update TaxPicker --- src/components/TaxPicker.tsx | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/components/TaxPicker.tsx b/src/components/TaxPicker.tsx index 0aed28681d5c..8fd24558f538 100644 --- a/src/components/TaxPicker.tsx +++ b/src/components/TaxPicker.tsx @@ -4,17 +4,22 @@ import type {OnyxEntry} from 'react-native-onyx'; import type {EdgeInsets} from 'react-native-safe-area-context'; import useLocalize from '@hooks/useLocalize'; import useStyleUtils from '@hooks/useStyleUtils'; +import * as IOUUtils from '@libs/IOUUtils'; import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import CONST from '@src/CONST'; +import type {IOUAction} from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {Policy} from '@src/types/onyx'; +import type {Policy, Transaction} from '@src/types/onyx'; import SelectionList from './SelectionList'; import RadioListItem from './SelectionList/RadioListItem'; type TaxPickerOnyxProps = { /** The policy which the user has access to and which the report is tied to */ policy: OnyxEntry; + + /** All the data for the transaction */ + transaction: OnyxEntry; }; type TaxPickerProps = TaxPickerOnyxProps & { @@ -25,6 +30,10 @@ type TaxPickerProps = TaxPickerOnyxProps & { // eslint-disable-next-line react/no-unused-prop-types policyID?: string; + /** ID of the transaction */ + // eslint-disable-next-line react/no-unused-prop-types + transactionID?: string; + /** * Safe area insets required for reflecting the portion of the view, * that is not covered by navigation bars, tab bars, toolbars, and other ancestor views. @@ -33,9 +42,13 @@ type TaxPickerProps = TaxPickerOnyxProps & { /** Callback to fire when a tax is pressed */ onSubmit: (tax: OptionsListUtils.TaxRatesOption) => void; + + /** The action to take */ + // eslint-disable-next-line react/no-unused-prop-types + action?: IOUAction; }; -function TaxPicker({selectedTaxRate = '', policy, insets, onSubmit}: TaxPickerProps) { +function TaxPicker({selectedTaxRate = '', policy, transaction, transactionID, insets, onSubmit}: TaxPickerProps) { const StyleUtils = useStyleUtils(); const {translate} = useLocalize(); const [searchValue, setSearchValue] = useState(''); @@ -55,12 +68,15 @@ function TaxPicker({selectedTaxRate = '', policy, insets, onSubmit}: TaxPickerPr { name: selectedTaxRate, enabled: true, - accountID: null, + isSelected: true, }, ]; }, [selectedTaxRate]); - const sections = useMemo(() => OptionsListUtils.getTaxRatesSection(taxRates, selectedOptions as OptionsListUtils.Category[], searchValue), [taxRates, searchValue, selectedOptions]); + const sections = useMemo( + () => OptionsListUtils.getTaxRatesSection(policy, selectedOptions as OptionsListUtils.Category[], searchValue, transaction), + [searchValue, selectedOptions, policy, transaction], + ); const headerMessage = OptionsListUtils.getHeaderMessageForNonUserList(sections[0].data.length > 0, searchValue); @@ -88,4 +104,12 @@ export default withOnyx({ policy: { key: ({policyID}) => `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, }, + transaction: { + key: ({transactionID, action}) => { + if (action === CONST.IOU.ACTION.CREATE || IOUUtils.isMovingTransactionFromTrackExpense(action)) { + return `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}` as `${typeof ONYXKEYS.COLLECTION.TRANSACTION}${string}`; + } + return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`; + }, + }, })(TaxPicker); From b2829fc18dd91b022593415e78ea7d9e795609b2 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 13:00:01 +0100 Subject: [PATCH 10/82] update IOURequestStepTaxRatePage --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index c310e88dc928..73b83d7f14f8 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -31,8 +31,8 @@ type IOURequestStepTaxRatePageProps = IOURequestStepTaxRatePageOnyxProps & transaction: OnyxEntry; }; -function getTaxAmount(taxRates: TaxRatesWithDefault, selectedTaxRate: string, amount: number): number | undefined { - const percentage = Object.values(OptionsListUtils.transformedTaxRates(taxRates)).find((taxRate) => taxRate.modifiedName?.includes(selectedTaxRate))?.value; +function getTaxAmount(policy: OnyxEntry, selectedTaxRate: string, amount: number): number | undefined { + const percentage = Object.values(OptionsListUtils.transformedTaxRates(policy)).find((taxRate) => taxRate.modifiedName?.includes(selectedTaxRate))?.value; if (percentage) { return TransactionUtils.calculateTaxAmount(percentage, amount); } @@ -72,7 +72,7 @@ function IOURequestStepTaxRatePage({ Navigation.goBack(backTo); return; } - const taxAmount = getTaxAmount(taxRates, taxes.text, TransactionUtils.getAmount(transaction, false, true)); + const taxAmount = getTaxAmount(policy, taxes.text, TransactionUtils.getAmount(transaction, false, true)); if (isEditing) { const newTaxCode = taxes.data.code; @@ -114,7 +114,9 @@ function IOURequestStepTaxRatePage({ ); From e9a2ebd85d7b37aedab23b680e34c95435694616 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 17:31:13 +0100 Subject: [PATCH 11/82] set taxCode and use foreignTaxDefault and defaultExternalId based on currency --- .../iou/request/step/IOURequestStepTaxRatePage.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 73b83d7f14f8..18285f6baeb5 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -53,6 +53,8 @@ function IOURequestStepTaxRatePage({ const isEditing = action === CONST.IOU.ACTION.EDIT; const taxRates = policy?.taxRates; const defaultExternalID = taxRates?.defaultExternalID; + const foreignTaxDefault = taxRates?.foreignTaxDefault; + const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; const transactionDetails = ReportUtils.getTransactionDetails(transaction); const transactionTaxCode = transactionDetails?.taxCode; @@ -60,11 +62,13 @@ function IOURequestStepTaxRatePage({ Navigation.goBack(backTo); }; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const moneyRequestSelectedTaxRate = transaction?.taxRate?.keyForList || (taxRates && TransactionUtils.getDefaultTaxName(taxRates)); + const moneyRequestSelectedTaxRate = + Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName || + (transaction && TransactionUtils.getDefaultTaxName(policy, transaction)); const editingSelectedTaxRate = taxRates && - (transactionTaxCode === defaultExternalID - ? transaction && TransactionUtils.getDefaultTaxName(taxRates, transaction) + (transactionTaxCode === defaultTaxKey + ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { @@ -98,7 +102,7 @@ function IOURequestStepTaxRatePage({ return; } const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(taxAmount); - IOU.setMoneyRequestTaxRate(transaction?.transactionID, taxes); + IOU.setMoneyRequestTaxRate(transaction?.transactionID, taxes?.data?.code ?? ''); IOU.setMoneyRequestTaxAmount(transaction.transactionID, amountInSmallestCurrencyUnits, true); Navigation.goBack(backTo); @@ -112,7 +116,7 @@ function IOURequestStepTaxRatePage({ testID={IOURequestStepTaxRatePage.displayName} > Date: Wed, 24 Apr 2024 17:57:18 +0100 Subject: [PATCH 12/82] set taxcode and not taxRate --- src/libs/actions/IOU.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 9ed228155204..782a84a2ab97 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -5835,8 +5835,8 @@ function setMoneyRequestCurrency(currency: string) { Onyx.merge(ONYXKEYS.IOU, {currency}); } -function setMoneyRequestTaxRate(transactionID: string, taxRate: TaxRatesOption) { - Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, {taxRate}); +function setMoneyRequestTaxRate(transactionID: string, taxCode: string) { + Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, {taxCode}); } function setMoneyRequestTaxAmount(transactionID: string, taxAmount: number, isDraft: boolean) { From 7855c95074d941373acd34957c8858b06464f4ca Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 17:59:00 +0100 Subject: [PATCH 13/82] modify default TaxName props --- src/libs/TransactionUtils.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index eb794d2199f0..6d395ab8a924 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -2,9 +2,11 @@ import lodashHas from 'lodash/has'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; +import * as OptionsListUtils from '@libs/OptionsListUtils'; +import * as TransactionUtils from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {RecentWaypoint, Report, TaxRate, TaxRates, TaxRatesWithDefault, Transaction, TransactionViolation} from '@src/types/onyx'; +import type {Policy, RecentWaypoint, Report, TaxRate, TaxRates, Transaction, TransactionViolation} from '@src/types/onyx'; import type {Comment, Receipt, TransactionChanges, TransactionPendingFieldsKey, Waypoint, WaypointCollection} from '@src/types/onyx/Transaction'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import type {IOURequestType} from './actions/IOU'; @@ -631,11 +633,14 @@ function getRateID(transaction: OnyxEntry): string | undefined { /** * Gets the default tax name */ -function getDefaultTaxName(taxRates: TaxRatesWithDefault, transaction?: Transaction) { - const defaultTaxKey = taxRates.defaultExternalID; +function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry) { + const taxRates = policy?.taxRates; + const defaultExternalID = taxRates?.defaultExternalID; + const foreignTaxDefault = taxRates?.foreignTaxDefault; + const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; const defaultTaxName = - (defaultTaxKey && `${taxRates.taxes[defaultTaxKey]?.name} (${taxRates.taxes[defaultTaxKey]?.value}) ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}`) || ''; - return transaction?.taxRate?.text ?? defaultTaxName; + (defaultTaxKey && `${taxRates?.taxes[defaultTaxKey]?.name} (${taxRates?.taxes[defaultTaxKey]?.value}) ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}`) || ''; + return Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; } /** From 36e731f7509fa4d7476e7b9e30dff57d23d11f03 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 18:02:15 +0100 Subject: [PATCH 14/82] update defaultTaxKey --- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 0abc5ab06116..9b42640b6e00 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -72,8 +72,10 @@ function IOURequestStepConfirmation({ const receiptFilename = transaction?.filename; const receiptPath = transaction?.receipt?.source; const receiptType = transaction?.receipt?.type; + const defaultExternalID = policy?.taxRates?.defaultExternalID; const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; - const transactionTaxCode = transaction?.taxRate ? transaction.taxRate.data?.code : foreignTaxDefault; + const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const transactionTaxCode = transaction?.taxCode ? transaction?.taxCode : defaultTaxKey; const transactionTaxAmount = transaction?.taxAmount; const isSharingTrackExpense = action === CONST.IOU.ACTION.SHARE; const isCategorizingTrackExpense = action === CONST.IOU.ACTION.CATEGORIZE; From f66df7b9418486b6853007c6e2d89f04f33bf6ec Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 18:02:49 +0100 Subject: [PATCH 15/82] use modified getDefaultTaxName --- src/components/MoneyRequestConfirmationList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 552b849e74a3..6d0253368f3c 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -293,7 +293,7 @@ function MoneyRequestConfirmationList({ isDistanceRequest ? currency : iouCurrencyCode, ); const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transaction?.taxAmount, iouCurrencyCode); - const taxRateTitle = taxRates && transaction ? TransactionUtils.getDefaultTaxName(taxRates, transaction) : ''; + const taxRateTitle = transaction ? TransactionUtils.getDefaultTaxName(policy, transaction) : ''; const previousTransactionAmount = usePrevious(transaction?.amount); From 7c29f9663a8498b0a460e5fe07db570f2ca75322 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:10:24 +0100 Subject: [PATCH 16/82] set default tax code --- src/components/ReportActionItem/MoneyRequestView.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 08bcc16cbbee..2a01068b314e 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -134,11 +134,15 @@ function MoneyRequestView({ const taxRates = policy?.taxRates; const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transactionTaxAmount, transactionCurrency); + const defaultExternalID = taxRates?.defaultExternalID; + const foreignTaxDefault = taxRates?.foreignTaxDefault; + const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const taxRatesDescription = taxRates?.name; const taxRateTitle = taxRates && - (transactionTaxCode === taxRates?.defaultExternalID - ? transaction && TransactionUtils.getDefaultTaxName(taxRates, transaction) + (transactionTaxCode === defaultTaxKey + ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) : transactionTaxCode && TransactionUtils.getTaxName(taxRates?.taxes, transactionTaxCode)); // Flags for allowing or disallowing editing an expense From 6330d7dfd67fc0ce92d5e040da9405ca7b1d7faf Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:13:58 +0100 Subject: [PATCH 17/82] update defaultTaxKey to defaultTaxCode --- src/components/ReportActionItem/MoneyRequestView.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 2a01068b314e..3c6949bfc0ec 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -136,12 +136,12 @@ function MoneyRequestView({ const defaultExternalID = taxRates?.defaultExternalID; const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const defaultTaxCode = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; const taxRatesDescription = taxRates?.name; const taxRateTitle = taxRates && - (transactionTaxCode === defaultTaxKey + (transactionTaxCode === defaultTaxCode ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) : transactionTaxCode && TransactionUtils.getTaxName(taxRates?.taxes, transactionTaxCode)); From cdeb5bd3d7b6736a5aa9667dfe85efb5e2841c78 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:16:08 +0100 Subject: [PATCH 18/82] update defaultTaxKey to defaultTaxCode --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 18285f6baeb5..ba9ad0205c17 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -54,7 +54,7 @@ function IOURequestStepTaxRatePage({ const taxRates = policy?.taxRates; const defaultExternalID = taxRates?.defaultExternalID; const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const defaultTaxCode = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; const transactionDetails = ReportUtils.getTransactionDetails(transaction); const transactionTaxCode = transactionDetails?.taxCode; @@ -67,7 +67,7 @@ function IOURequestStepTaxRatePage({ (transaction && TransactionUtils.getDefaultTaxName(policy, transaction)); const editingSelectedTaxRate = taxRates && - (transactionTaxCode === defaultTaxKey + (transactionTaxCode === defaultTaxCode ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); From 8e08bb99c591eef9644b2f67f5b0578686d4be06 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:23:39 +0100 Subject: [PATCH 19/82] add getDefaultTaxCode function --- src/libs/TransactionUtils.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 6d395ab8a924..f06360306fa8 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -630,16 +630,23 @@ function getRateID(transaction: OnyxEntry): string | undefined { return transaction?.comment?.customUnit?.customUnitRateID?.toString(); } +/** + * Gets the default tax code based on selected currency + */ +function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry) { + const defaultExternalID = policy?.taxRates?.defaultExternalID; + const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; + return policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; +} + /** * Gets the default tax name */ function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry) { const taxRates = policy?.taxRates; - const defaultExternalID = taxRates?.defaultExternalID; - const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const defaultTaxCode = getDefaultTaxCode(policy, transaction); const defaultTaxName = - (defaultTaxKey && `${taxRates?.taxes[defaultTaxKey]?.name} (${taxRates?.taxes[defaultTaxKey]?.value}) ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}`) || ''; + (defaultTaxCode && `${taxRates?.taxes[defaultTaxCode]?.name} (${taxRates?.taxes[defaultTaxCode]?.value}) ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}`) || ''; return Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; } @@ -656,6 +663,7 @@ export { buildOptimisticTransaction, calculateTaxAmount, getTaxName, + getDefaultTaxCode, getDefaultTaxName, getEnabledTaxRateCount, getUpdatedTransaction, From dd6f0a6f0feb7c6c1bb224f94f8ab96fec759026 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:25:47 +0100 Subject: [PATCH 20/82] use getDefaultTaxCode function --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index ba9ad0205c17..4efb3b805a73 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -52,9 +52,7 @@ function IOURequestStepTaxRatePage({ const isEditing = action === CONST.IOU.ACTION.EDIT; const taxRates = policy?.taxRates; - const defaultExternalID = taxRates?.defaultExternalID; - const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxCode = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); const transactionDetails = ReportUtils.getTransactionDetails(transaction); const transactionTaxCode = transactionDetails?.taxCode; From 042bf2e1d654dd2c34d80b4c03a7607a1c877f95 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:26:57 +0100 Subject: [PATCH 21/82] use getDefaultTaxCode function --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 3c6949bfc0ec..e229931dbb2b 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -136,7 +136,7 @@ function MoneyRequestView({ const defaultExternalID = taxRates?.defaultExternalID; const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxCode = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); const taxRatesDescription = taxRates?.name; const taxRateTitle = From 45fd4f5064671150cf88ba8c433943383ec28233 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:27:43 +0100 Subject: [PATCH 22/82] remove unused var --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index e229931dbb2b..84856bed83a9 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -134,8 +134,6 @@ function MoneyRequestView({ const taxRates = policy?.taxRates; const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transactionTaxAmount, transactionCurrency); - const defaultExternalID = taxRates?.defaultExternalID; - const foreignTaxDefault = taxRates?.foreignTaxDefault; const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); const taxRatesDescription = taxRates?.name; From 536526293251f0bad7236874d7b5318e7ccdab0f Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:54:05 +0100 Subject: [PATCH 23/82] use getDefaultTaxCode function --- src/libs/OptionsListUtils.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 9a579c1ea629..1f2c51bfb553 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -1328,20 +1328,20 @@ function getReportFieldOptionsSection(options: string[], recentlyUsedOptions: st * @param policy - The policy which the user has access to and which the report is tied to. * @returns The transformed tax rates object.g */ -function transformedTaxRates(policy?: OnyxEntry, transaction?: OnyxEntry): Record { +function transformedTaxRates(policy: OnyxEntry | undefined, transaction?: OnyxEntry): Record { const taxRates = policy?.taxRates; const defaultExternalID = taxRates?.defaultExternalID; - const foreignTaxDefault = taxRates?.foreignTaxDefault; - const defaultTaxKey = () => { + + const defaultTaxCode = () => { if (!transaction) { return defaultExternalID; } - return policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + return policy && TransactionUtils.getDefaultTaxCode(policy, transaction); }; const getModifiedName = (data: TaxRate, code: string) => - `${data.name} (${data.value})${defaultTaxKey() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; + `${data.name} (${data.value})${defaultTaxCode() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); return taxes; } From 57425e408d7911ea8bd29500045b597ee286172e Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 20:55:24 +0100 Subject: [PATCH 24/82] use getDefaultTaxCode function --- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 9b42640b6e00..97447f6e2078 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -72,10 +72,8 @@ function IOURequestStepConfirmation({ const receiptFilename = transaction?.filename; const receiptPath = transaction?.receipt?.source; const receiptType = transaction?.receipt?.type; - const defaultExternalID = policy?.taxRates?.defaultExternalID; - const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; - const defaultTaxKey = policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; - const transactionTaxCode = transaction?.taxCode ? transaction?.taxCode : defaultTaxKey; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); + const transactionTaxCode = transaction?.taxCode ? transaction?.taxCode : defaultTaxCode; const transactionTaxAmount = transaction?.taxAmount; const isSharingTrackExpense = action === CONST.IOU.ACTION.SHARE; const isCategorizingTrackExpense = action === CONST.IOU.ACTION.CATEGORIZE; From 930b070593e1f3ad40c6a222c9c9258b984aa1d3 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:01:37 +0100 Subject: [PATCH 25/82] fix lint --- src/components/TaxPicker.tsx | 2 +- src/libs/TransactionUtils.ts | 5 +++-- src/libs/actions/IOU.ts | 1 - src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/TaxPicker.tsx b/src/components/TaxPicker.tsx index 8fd24558f538..24ea459ae341 100644 --- a/src/components/TaxPicker.tsx +++ b/src/components/TaxPicker.tsx @@ -48,7 +48,7 @@ type TaxPickerProps = TaxPickerOnyxProps & { action?: IOUAction; }; -function TaxPicker({selectedTaxRate = '', policy, transaction, transactionID, insets, onSubmit}: TaxPickerProps) { +function TaxPicker({selectedTaxRate = '', policy, transaction, insets, onSubmit}: TaxPickerProps) { const StyleUtils = useStyleUtils(); const {translate} = useLocalize(); const [searchValue, setSearchValue] = useState(''); diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index f06360306fa8..6c53d47d6929 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -2,8 +2,6 @@ import lodashHas from 'lodash/has'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; -import * as OptionsListUtils from '@libs/OptionsListUtils'; -import * as TransactionUtils from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Policy, RecentWaypoint, Report, TaxRate, TaxRates, Transaction, TransactionViolation} from '@src/types/onyx'; @@ -14,7 +12,9 @@ import {isCorporateCard, isExpensifyCard} from './CardUtils'; import DateUtils from './DateUtils'; import * as Localize from './Localize'; import * as NumberUtils from './NumberUtils'; +import * as OptionsListUtils from './OptionsListUtils'; import {getCleanedTagName} from './PolicyUtils'; +import * as TransactionUtils from './TransactionUtils'; let allTransactions: OnyxCollection = {}; @@ -646,6 +646,7 @@ function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; } diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 782a84a2ab97..c2f4e4d3e516 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -34,7 +34,6 @@ import * as LocalePhoneNumber from '@libs/LocalePhoneNumber'; import * as Localize from '@libs/Localize'; import Navigation from '@libs/Navigation/Navigation'; import * as NextStepUtils from '@libs/NextStepUtils'; -import type {TaxRatesOption} from '@libs/OptionsListUtils'; import Permissions from '@libs/Permissions'; import * as PhoneNumber from '@libs/PhoneNumber'; import * as PolicyUtils from '@libs/PolicyUtils'; diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 4efb3b805a73..833429da1de7 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -59,8 +59,9 @@ function IOURequestStepTaxRatePage({ const navigateBack = () => { Navigation.goBack(backTo); }; - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + const moneyRequestSelectedTaxRate = + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName || (transaction && TransactionUtils.getDefaultTaxName(policy, transaction)); const editingSelectedTaxRate = From eec7b8900aee3a82cb4191a35c042fa88355e085 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:13:08 +0100 Subject: [PATCH 26/82] fix lint --- src/libs/TransactionUtils.ts | 3 +-- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 6c53d47d6929..43585afb0aff 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -14,7 +14,6 @@ import * as Localize from './Localize'; import * as NumberUtils from './NumberUtils'; import * as OptionsListUtils from './OptionsListUtils'; import {getCleanedTagName} from './PolicyUtils'; -import * as TransactionUtils from './TransactionUtils'; let allTransactions: OnyxCollection = {}; @@ -636,7 +635,7 @@ function getRateID(transaction: OnyxEntry): string | undefined { function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry) { const defaultExternalID = policy?.taxRates?.defaultExternalID; const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault; - return policy?.outputCurrency === TransactionUtils.getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; + return policy?.outputCurrency === getCurrency(transaction) ? defaultExternalID : foreignTaxDefault; } /** diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 833429da1de7..e2d4d418abde 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -12,7 +12,7 @@ import * as IOU from '@userActions/IOU'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; -import type {Policy, PolicyCategories, PolicyTagList, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; +import type {Policy, PolicyCategories, PolicyTagList, Transaction} from '@src/types/onyx'; import StepScreenWrapper from './StepScreenWrapper'; import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; @@ -61,7 +61,7 @@ function IOURequestStepTaxRatePage({ }; const moneyRequestSelectedTaxRate = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName || (transaction && TransactionUtils.getDefaultTaxName(policy, transaction)); const editingSelectedTaxRate = From 9d0b84386ee52d6783a41e7e0f56c0bc2d41e719 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:20:06 +0100 Subject: [PATCH 27/82] fix lint --- src/libs/TransactionUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 43585afb0aff..5cd4bc7e7435 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -12,7 +12,7 @@ import {isCorporateCard, isExpensifyCard} from './CardUtils'; import DateUtils from './DateUtils'; import * as Localize from './Localize'; import * as NumberUtils from './NumberUtils'; -import * as OptionsListUtils from './OptionsListUtils'; +import {transformedTaxRates} from './OptionsListUtils'; import {getCleanedTagName} from './PolicyUtils'; let allTransactions: OnyxCollection = {}; @@ -647,7 +647,7 @@ function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; } /** From dc136320607120205af5ceee32803a4fd874ebf8 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:44:58 +0100 Subject: [PATCH 28/82] update getTaxName --- src/libs/TransactionUtils.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 5cd4bc7e7435..e7fa4e214e7e 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -653,10 +653,8 @@ function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; } export { From 16b32c61e8df52476ebec344939ddaf1305f2960 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:45:57 +0100 Subject: [PATCH 29/82] use update getTaxName --- src/components/ReportActionItem/MoneyRequestView.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 84856bed83a9..c30c8443f0da 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -134,14 +134,12 @@ function MoneyRequestView({ const taxRates = policy?.taxRates; const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transactionTaxAmount, transactionCurrency); - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); - const taxRatesDescription = taxRates?.name; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); const taxRateTitle = - taxRates && - (transactionTaxCode === defaultTaxCode + transactionTaxCode === defaultTaxCode ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) - : transactionTaxCode && TransactionUtils.getTaxName(taxRates?.taxes, transactionTaxCode)); + : transactionTaxCode && TransactionUtils.getTaxName(policy, transaction); // Flags for allowing or disallowing editing an expense const isSettled = ReportUtils.isSettled(moneyRequestReport?.reportID); From 2fd6906e13f1c1a7aff258711a2185278e9e3424 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:48:37 +0100 Subject: [PATCH 30/82] use update getTaxName and getDefaultTaxName --- .../iou/request/step/IOURequestStepTaxRatePage.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index e2d4d418abde..6a07cbe0f487 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -60,15 +60,9 @@ function IOURequestStepTaxRatePage({ Navigation.goBack(backTo); }; - const moneyRequestSelectedTaxRate = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - Object.values(OptionsListUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName || - (transaction && TransactionUtils.getDefaultTaxName(policy, transaction)); - const editingSelectedTaxRate = - taxRates && - (transactionTaxCode === defaultTaxCode - ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) - : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + const moneyRequestSelectedTaxRate = TransactionUtils.getTaxName(policy, transaction) || TransactionUtils.getDefaultTaxName(policy, transaction); + const editingSelectedTaxRate = transactionTaxCode === defaultTaxCode ? TransactionUtils.getDefaultTaxName(policy, transaction) : TransactionUtils.getTaxName(policy, transaction); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { if (!transaction || !taxes.text || !taxRates) { From 2850e397f25e88397f0caba3f492f2d9f3f0460f Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 21:50:03 +0100 Subject: [PATCH 31/82] cleanup taxRateTitle --- src/components/ReportActionItem/MoneyRequestView.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index c30c8443f0da..43a496f6466c 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -136,10 +136,7 @@ function MoneyRequestView({ const taxRatesDescription = taxRates?.name; const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); - const taxRateTitle = - transactionTaxCode === defaultTaxCode - ? transaction && TransactionUtils.getDefaultTaxName(policy, transaction) - : transactionTaxCode && TransactionUtils.getTaxName(policy, transaction); + const taxRateTitle = transactionTaxCode === defaultTaxCode ? TransactionUtils.getDefaultTaxName(policy, transaction) : TransactionUtils.getTaxName(policy, transaction); // Flags for allowing or disallowing editing an expense const isSettled = ReportUtils.isSettled(moneyRequestReport?.reportID); From da28145258c0ffbf5c92ce3315731f35a8398fd7 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 22:04:11 +0100 Subject: [PATCH 32/82] add getTaxRateTitle --- src/libs/TransactionUtils.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index e7fa4e214e7e..cbeb1106d771 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -14,6 +14,7 @@ import * as Localize from './Localize'; import * as NumberUtils from './NumberUtils'; import {transformedTaxRates} from './OptionsListUtils'; import {getCleanedTagName} from './PolicyUtils'; +import {getTransactionDetails} from './ReportUtils'; let allTransactions: OnyxCollection = {}; @@ -657,12 +658,19 @@ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry taxRate.code === transaction?.taxCode)?.modifiedName; } +function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { + const {taxCode: transactionTaxCode} = getTransactionDetails(transaction) ?? {}; + const defaultTaxCode = getDefaultTaxCode(policy, transaction); + return transactionTaxCode === defaultTaxCode ? getDefaultTaxName(policy, transaction) : getTaxName(policy, transaction); +} + export { buildOptimisticTransaction, calculateTaxAmount, getTaxName, getDefaultTaxCode, getDefaultTaxName, + getTaxRateTitle, getEnabledTaxRateCount, getUpdatedTransaction, getDescription, From 2213bc0e9c6eeea58ab9612a76e15a4bf5478c7d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 22:04:26 +0100 Subject: [PATCH 33/82] use getTaxRateTitle --- src/components/ReportActionItem/MoneyRequestView.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 43a496f6466c..ad85e774f022 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -135,8 +135,7 @@ function MoneyRequestView({ const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transactionTaxAmount, transactionCurrency); const taxRatesDescription = taxRates?.name; - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); - const taxRateTitle = transactionTaxCode === defaultTaxCode ? TransactionUtils.getDefaultTaxName(policy, transaction) : TransactionUtils.getTaxName(policy, transaction); + const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); // Flags for allowing or disallowing editing an expense const isSettled = ReportUtils.isSettled(moneyRequestReport?.reportID); From f157b2d401543d9b29548b1f0a8bfa7cc40e50e6 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 22:04:33 +0100 Subject: [PATCH 34/82] use getTaxRateTitle --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 6a07cbe0f487..ba8534e15036 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -62,7 +62,7 @@ function IOURequestStepTaxRatePage({ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const moneyRequestSelectedTaxRate = TransactionUtils.getTaxName(policy, transaction) || TransactionUtils.getDefaultTaxName(policy, transaction); - const editingSelectedTaxRate = transactionTaxCode === defaultTaxCode ? TransactionUtils.getDefaultTaxName(policy, transaction) : TransactionUtils.getTaxName(policy, transaction); + const editingSelectedTaxRate = TransactionUtils.getTaxRateTitle(policy, transaction); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { if (!transaction || !taxes.text || !taxRates) { From 9be99606cb572c14e879637f46e0aae27b25ea44 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 22:31:20 +0100 Subject: [PATCH 35/82] update getDefaultTaxName --- src/libs/TransactionUtils.ts | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index cbeb1106d771..604112450656 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -640,22 +640,19 @@ function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { - const taxRates = policy?.taxRates; - const defaultTaxCode = getDefaultTaxCode(policy, transaction); - const defaultTaxName = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - (defaultTaxCode && `${taxRates?.taxes[defaultTaxCode]?.name} (${taxRates?.taxes[defaultTaxCode]?.value}) ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}`) || ''; - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName ?? defaultTaxName; +function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; } /** - * Gets the tax name + * Gets the default tax name */ -function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; +function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry) { + const defaultTaxCode = getDefaultTaxCode(policy, transaction); + const defaultTaxName = Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; + return getTaxName(policy, transaction) ?? defaultTaxName; } function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { From 381fd11c9e3cea4a172716f6255fd1608341aeec Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 22:31:44 +0100 Subject: [PATCH 36/82] use getTaxRateTitle --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index ba8534e15036..6c86c146b8ac 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -52,17 +52,12 @@ function IOURequestStepTaxRatePage({ const isEditing = action === CONST.IOU.ACTION.EDIT; const taxRates = policy?.taxRates; - const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); - const transactionDetails = ReportUtils.getTransactionDetails(transaction); - const transactionTaxCode = transactionDetails?.taxCode; const navigateBack = () => { Navigation.goBack(backTo); }; - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const moneyRequestSelectedTaxRate = TransactionUtils.getTaxName(policy, transaction) || TransactionUtils.getDefaultTaxName(policy, transaction); - const editingSelectedTaxRate = TransactionUtils.getTaxRateTitle(policy, transaction); + const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { if (!transaction || !taxes.text || !taxRates) { @@ -109,7 +104,7 @@ function IOURequestStepTaxRatePage({ testID={IOURequestStepTaxRatePage.displayName} > Date: Wed, 24 Apr 2024 23:20:21 +0100 Subject: [PATCH 37/82] fix cycle dependency --- src/libs/OptionsListUtils.ts | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 1f2c51bfb553..807d62fdf075 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -1322,30 +1322,6 @@ function getReportFieldOptionsSection(options: string[], recentlyUsedOptions: st return reportFieldOptionsSections; } -/** - * Transforms tax rates to a new object format - to add codes and new name with concatenated name and value. - * - * @param policy - The policy which the user has access to and which the report is tied to. - * @returns The transformed tax rates object.g - */ -function transformedTaxRates(policy: OnyxEntry | undefined, transaction?: OnyxEntry): Record { - const taxRates = policy?.taxRates; - const defaultExternalID = taxRates?.defaultExternalID; - - const defaultTaxCode = () => { - if (!transaction) { - return defaultExternalID; - } - - return policy && TransactionUtils.getDefaultTaxCode(policy, transaction); - }; - - const getModifiedName = (data: TaxRate, code: string) => - `${data.name} (${data.value})${defaultTaxCode() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; - const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); - return taxes; -} - /** * Sorts tax rates alphabetically by name. */ @@ -1374,7 +1350,7 @@ function getTaxRatesOptions(taxRates: Array>): TaxRatesOption[] function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptions: Category[], searchInputValue: string, transaction?: OnyxEntry): TaxSection[] { const policyRatesSections = []; - const taxes = transformedTaxRates(policy, transaction); + const taxes = TransactionUtils.transformedTaxRates(policy, transaction); const sortedTaxRates = sortTaxRates(taxes); const enabledTaxRates = sortedTaxRates.filter((taxRate) => !taxRate.isDisabled); @@ -2362,7 +2338,6 @@ export { hasEnabledTags, formatMemberForList, formatSectionsFromSearchTerm, - transformedTaxRates, getShareLogOptions, filterOptions, createOptionList, From f2f529d0b436796ac8c1703d3b175aadb8853f5e Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 23:20:45 +0100 Subject: [PATCH 38/82] remove transactionCode --- src/components/ReportActionItem/MoneyRequestView.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index ad85e774f022..ae14a9e5b707 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -111,7 +111,6 @@ function MoneyRequestView({ created: transactionDate, amount: transactionAmount, taxAmount: transactionTaxAmount, - taxCode: transactionTaxCode, currency: transactionCurrency, comment: transactionDescription, merchant: transactionMerchant, From fc152272993c116c1290fc8c3f39b998a50cd52b Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 24 Apr 2024 23:21:51 +0100 Subject: [PATCH 39/82] fix cycle dependency --- src/libs/TransactionUtils.ts | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 604112450656..bb42043008a3 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -12,9 +12,7 @@ import {isCorporateCard, isExpensifyCard} from './CardUtils'; import DateUtils from './DateUtils'; import * as Localize from './Localize'; import * as NumberUtils from './NumberUtils'; -import {transformedTaxRates} from './OptionsListUtils'; import {getCleanedTagName} from './PolicyUtils'; -import {getTransactionDetails} from './ReportUtils'; let allTransactions: OnyxCollection = {}; @@ -639,6 +637,30 @@ function getDefaultTaxCode(policy: OnyxEntry, transaction: OnyxEntry | undefined, transaction?: OnyxEntry): Record { + const taxRates = policy?.taxRates; + const defaultExternalID = taxRates?.defaultExternalID; + + const defaultTaxCode = () => { + if (!transaction) { + return defaultExternalID; + } + + return policy && getDefaultTaxCode(policy, transaction); + }; + + const getModifiedName = (data: TaxRate, code: string) => + `${data.name} (${data.value})${defaultTaxCode() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; + const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); + return taxes; +} + /** * Gets the tax name */ @@ -656,7 +678,7 @@ function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { - const {taxCode: transactionTaxCode} = getTransactionDetails(transaction) ?? {}; + const transactionTaxCode = getTaxCode(transaction) ?? {}; const defaultTaxCode = getDefaultTaxCode(policy, transaction); return transactionTaxCode === defaultTaxCode ? getDefaultTaxName(policy, transaction) : getTaxName(policy, transaction); } @@ -664,8 +686,9 @@ function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry Date: Wed, 24 Apr 2024 23:22:32 +0100 Subject: [PATCH 40/82] fix type import --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 6c86c146b8ac..3beb20bdcfa1 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -5,8 +5,7 @@ import TaxPicker from '@components/TaxPicker'; import useLocalize from '@hooks/useLocalize'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as OptionsListUtils from '@libs/OptionsListUtils'; -import * as ReportUtils from '@libs/ReportUtils'; +import type {TaxRatesOption} from '@libs/OptionsListUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import * as IOU from '@userActions/IOU'; import CONST from '@src/CONST'; @@ -32,7 +31,7 @@ type IOURequestStepTaxRatePageProps = IOURequestStepTaxRatePageOnyxProps & }; function getTaxAmount(policy: OnyxEntry, selectedTaxRate: string, amount: number): number | undefined { - const percentage = Object.values(OptionsListUtils.transformedTaxRates(policy)).find((taxRate) => taxRate.modifiedName?.includes(selectedTaxRate))?.value; + const percentage = Object.values(TransactionUtils.transformedTaxRates(policy)).find((taxRate) => taxRate.modifiedName?.includes(selectedTaxRate))?.value; if (percentage) { return TransactionUtils.calculateTaxAmount(percentage, amount); } @@ -59,7 +58,7 @@ function IOURequestStepTaxRatePage({ const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); - const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { + const updateTaxRates = (taxes: TaxRatesOption) => { if (!transaction || !taxes.text || !taxRates) { Navigation.goBack(backTo); return; From a5d238628b4af711279d6cebdffb47c072fa873d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 00:47:43 +0100 Subject: [PATCH 41/82] update getTaxRateTitle --- src/libs/TransactionUtils.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index bb42043008a3..4f949ca27e52 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -661,6 +661,13 @@ function transformedTaxRates(policy: OnyxEntry | undefined, transaction? return taxes; } +/** + * Gets the tax name for Workspace Taxes Settings + */ +function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: string) { + return Object.values(transformedTaxRates(policy)).find((taxRate) => taxRate.code === taxCode)?.modifiedName; +} + /** * Gets the tax name */ @@ -673,23 +680,19 @@ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { const defaultTaxCode = getDefaultTaxCode(policy, transaction); - const defaultTaxName = Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; - return getTaxName(policy, transaction) ?? defaultTaxName; + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; } function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { - const transactionTaxCode = getTaxCode(transaction) ?? {}; - const defaultTaxCode = getDefaultTaxCode(policy, transaction); - return transactionTaxCode === defaultTaxCode ? getDefaultTaxName(policy, transaction) : getTaxName(policy, transaction); + return getTaxName(policy, transaction) ?? getDefaultTaxName(policy, transaction); } export { buildOptimisticTransaction, calculateTaxAmount, + getWorkspaceTaxesSettingsName, getDefaultTaxCode, transformedTaxRates, - getTaxName, - getDefaultTaxName, getTaxRateTitle, getEnabledTaxRateCount, getUpdatedTransaction, From bdb39b58aab5662285f053321450bfd0f03bac65 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 00:48:28 +0100 Subject: [PATCH 42/82] use getTaxRateTitle --- src/components/MoneyRequestConfirmationList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 6d0253368f3c..fcbfce6cbae3 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -293,7 +293,7 @@ function MoneyRequestConfirmationList({ isDistanceRequest ? currency : iouCurrencyCode, ); const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transaction?.taxAmount, iouCurrencyCode); - const taxRateTitle = transaction ? TransactionUtils.getDefaultTaxName(policy, transaction) : ''; + const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); const previousTransactionAmount = usePrevious(transaction?.amount); From 521c669db3641f676fb224bd6d20002d358c6280 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 00:48:51 +0100 Subject: [PATCH 43/82] use getWorkspaceTaxesSettingsName --- .../taxes/WorkspaceTaxesSettingsForeignCurrency.tsx | 7 ++----- .../taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx b/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx index 3081df55fe69..9b2f84f4de5f 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx @@ -31,12 +31,9 @@ function WorkspaceTaxesSettingsForeignCurrency({ const {translate} = useLocalize(); const styles = useThemeStyles(); - const taxRates = policy?.taxRates; - const foreignTaxDefault = taxRates?.foreignTaxDefault ?? ''; - const defaultExternalID = taxRates?.defaultExternalID ?? ''; + const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault ?? ''; - const selectedTaxRate = - foreignTaxDefault === defaultExternalID ? taxRates && TransactionUtils.getDefaultTaxName(taxRates) : TransactionUtils.getTaxName(taxRates?.taxes ?? {}, foreignTaxDefault); + const selectedTaxRate = TransactionUtils.getWorkspaceTaxesSettingsName(policy, foreignTaxDefault); const submit = (taxes: OptionsListUtils.TaxRatesOption) => { setForeignCurrencyDefault(policyID, taxes.data.code ?? ''); diff --git a/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx b/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx index 630560f864b4..62a30d3aa579 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx @@ -32,7 +32,8 @@ function WorkspaceTaxesSettingsWorkspaceCurrency({ const {translate} = useLocalize(); const styles = useThemeStyles(); - const selectedTaxRate = policy?.taxRates && TransactionUtils.getDefaultTaxName(policy?.taxRates); + const defaultExternalID = policy?.taxRates?.defaultExternalID ?? ''; + const selectedTaxRate = policy?.taxRates && TransactionUtils.getWorkspaceTaxesSettingsName(policy, defaultExternalID); const submit = (taxes: OptionsListUtils.TaxRatesOption) => { setWorkspaceCurrencyDefault(policyID, taxes.data.code ?? ''); From f8d31a69dcddc3fd82e500f884d9869229328642 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 01:11:18 +0100 Subject: [PATCH 44/82] should not show default for workspace settings options --- src/libs/TransactionUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 4f949ca27e52..dd63d85164f3 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -656,7 +656,7 @@ function transformedTaxRates(policy: OnyxEntry | undefined, transaction? }; const getModifiedName = (data: TaxRate, code: string) => - `${data.name} (${data.value})${defaultTaxCode() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; + `${data.name} (${data.value})${defaultTaxCode() === code && transaction ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); return taxes; } From a584cf0b26938cccb40637e2658a0fe57ba4a26d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 01:54:28 +0100 Subject: [PATCH 45/82] use isSelected --- src/libs/OptionsListUtils.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index f2af182af3e0..e4c49d156ace 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -107,7 +107,7 @@ type TaxRatesOption = { tooltipText?: string; isDisabled?: boolean; keyForList?: string; - data: Partial; + isSelected?: boolean; }; type TaxSection = { @@ -1333,14 +1333,15 @@ function sortTaxRates(taxRates: TaxRates): TaxRate[] { /** * Builds the options for taxRates */ -function getTaxRatesOptions(taxRates: Array>): TaxRatesOption[] { - return taxRates.map((taxRate) => ({ - text: taxRate.modifiedName, - keyForList: taxRate.modifiedName, - searchText: taxRate.modifiedName, - tooltipText: taxRate.modifiedName, - isDisabled: taxRate.isDisabled, - data: taxRate, +function getTaxRatesOptions(taxRates: Array>, transactionTaxCode?: string): TaxRatesOption[] { + return taxRates.map(({code, modifiedName, isDisabled}) => ({ + code, + text: modifiedName, + keyForList: modifiedName, + searchText: modifiedName, + tooltipText: modifiedName, + isDisabled, + isSelected: code === transactionTaxCode, })); } @@ -1367,7 +1368,7 @@ function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptio // "Selected" sectiong title: '', shouldShow: false, - data: getTaxRatesOptions(selectedTaxRateOptions), + data: getTaxRatesOptions(selectedTaxRateOptions, transaction?.taxCode), }); return policyRatesSections; @@ -1380,7 +1381,7 @@ function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptio // "Search" section title: '', shouldShow: true, - data: getTaxRatesOptions(searchTaxRates), + data: getTaxRatesOptions(searchTaxRates, transaction?.taxCode), }); return policyRatesSections; @@ -1391,7 +1392,7 @@ function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptio // "All" section when items amount less than the threshold title: '', shouldShow: false, - data: getTaxRatesOptions(enabledTaxRates), + data: getTaxRatesOptions(enabledTaxRates, transaction?.taxCode), }); return policyRatesSections; @@ -1422,7 +1423,7 @@ function getTaxRatesSection(policy: OnyxEntry | undefined, selectedOptio // "All" section when number of items are more than the threshold title: '', shouldShow: true, - data: getTaxRatesOptions(filteredTaxRates), + data: getTaxRatesOptions(filteredTaxRates, transaction?.taxCode), }); return policyRatesSections; From e2624534115c6aa337f4e009aaa908241bc2607a Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 01:54:57 +0100 Subject: [PATCH 46/82] remove transaction check --- src/libs/TransactionUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index dd63d85164f3..4f949ca27e52 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -656,7 +656,7 @@ function transformedTaxRates(policy: OnyxEntry | undefined, transaction? }; const getModifiedName = (data: TaxRate, code: string) => - `${data.name} (${data.value})${defaultTaxCode() === code && transaction ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; + `${data.name} (${data.value})${defaultTaxCode() === code ? ` ${CONST.DOT_SEPARATOR} ${Localize.translateLocal('common.default')}` : ''}`; const taxes = Object.fromEntries(Object.entries(taxRates?.taxes ?? {}).map(([code, data]) => [code, {...data, code, modifiedName: getModifiedName(data, code), name: data.name}])); return taxes; } From 2e2da049328607377e8d157dc8b6c8d6cfb63a6d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 01:55:31 +0100 Subject: [PATCH 47/82] use code from selected tax --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 4 ++-- .../workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx | 2 +- .../taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 3beb20bdcfa1..6049dacd0d9b 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -66,7 +66,7 @@ function IOURequestStepTaxRatePage({ const taxAmount = getTaxAmount(policy, taxes.text, TransactionUtils.getAmount(transaction, false, true)); if (isEditing) { - const newTaxCode = taxes.data.code; + const newTaxCode = taxes.code; if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { navigateBack(); return; @@ -89,7 +89,7 @@ function IOURequestStepTaxRatePage({ return; } const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(taxAmount); - IOU.setMoneyRequestTaxRate(transaction?.transactionID, taxes?.data?.code ?? ''); + IOU.setMoneyRequestTaxRate(transaction?.transactionID, taxes?.code ?? ''); IOU.setMoneyRequestTaxAmount(transaction.transactionID, amountInSmallestCurrencyUnits, true); Navigation.goBack(backTo); diff --git a/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx b/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx index 9b2f84f4de5f..79c5346049d8 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesSettingsForeignCurrency.tsx @@ -36,7 +36,7 @@ function WorkspaceTaxesSettingsForeignCurrency({ const selectedTaxRate = TransactionUtils.getWorkspaceTaxesSettingsName(policy, foreignTaxDefault); const submit = (taxes: OptionsListUtils.TaxRatesOption) => { - setForeignCurrencyDefault(policyID, taxes.data.code ?? ''); + setForeignCurrencyDefault(policyID, taxes.code ?? ''); Navigation.goBack(ROUTES.WORKSPACE_TAXES_SETTINGS.getRoute(policyID)); }; diff --git a/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx b/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx index 62a30d3aa579..dcb310a201c5 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx @@ -36,7 +36,7 @@ function WorkspaceTaxesSettingsWorkspaceCurrency({ const selectedTaxRate = policy?.taxRates && TransactionUtils.getWorkspaceTaxesSettingsName(policy, defaultExternalID); const submit = (taxes: OptionsListUtils.TaxRatesOption) => { - setWorkspaceCurrencyDefault(policyID, taxes.data.code ?? ''); + setWorkspaceCurrencyDefault(policyID, taxes.code ?? ''); Navigation.goBack(ROUTES.WORKSPACE_TAXES_SETTINGS.getRoute(policyID)); }; From 3522c4edcbac7e5a82bcb1628741be2b69791e66 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 02:47:44 +0100 Subject: [PATCH 48/82] remove data type --- src/libs/ReportUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index f92106d40b6e..d467f01b5be7 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -439,7 +439,7 @@ type OptionData = { isSelfDM?: boolean; reportID?: string; enabled?: boolean; - data?: Partial; + code?: string; transactionThreadReportID?: string | null; } & Report; From 2ae28367fac0e8f5051cbc1559b25a00a7ac030a Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 02:48:19 +0100 Subject: [PATCH 49/82] fix OptionsListUtilsTest --- tests/unit/OptionsListUtilsTest.ts | 86 +++++++++++++----------------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/tests/unit/OptionsListUtilsTest.ts b/tests/unit/OptionsListUtilsTest.ts index 7a7930cb5871..260a93b6da7e 100644 --- a/tests/unit/OptionsListUtilsTest.ts +++ b/tests/unit/OptionsListUtilsTest.ts @@ -6,7 +6,7 @@ import CONST from '@src/CONST'; import * as OptionsListUtils from '@src/libs/OptionsListUtils'; import * as ReportUtils from '@src/libs/ReportUtils'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {PersonalDetails, Policy, PolicyCategories, Report, TaxRatesWithDefault} from '@src/types/onyx'; +import type {PersonalDetails, Policy, PolicyCategories, Report, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; import waitForBatchedUpdates from '../utils/waitForBatchedUpdates'; type PersonalDetailsList = Record; @@ -2522,99 +2522,85 @@ describe('OptionsListUtils', () => { }, }, }; + const policy = { + taxRates: taxRatesWithDefault, + } as Policy; + + const transaction = { + taxCode: 'CODE1', + } as Transaction; const resultList: OptionsListUtils.CategorySection[] = [ { - title: '', - shouldShow: false, - // data sorted alphabetically by name data: [ { - // Adds 'Default' title to default tax. - // Adds value to tax name for more description. - text: 'Tax exempt 1 (0%) • Default', + code: 'CODE1', + isDisabled: undefined, + isSelected: true, keyForList: 'Tax exempt 1 (0%) • Default', searchText: 'Tax exempt 1 (0%) • Default', + text: 'Tax exempt 1 (0%) • Default', tooltipText: 'Tax exempt 1 (0%) • Default', - isDisabled: undefined, - // creates a data option. - data: { - name: 'Tax exempt 1', - code: 'CODE1', - modifiedName: 'Tax exempt 1 (0%) • Default', - value: '0%', - }, }, { - text: 'Tax option 3 (5%)', + code: 'CODE3', + isDisabled: undefined, + isSelected: false, keyForList: 'Tax option 3 (5%)', searchText: 'Tax option 3 (5%)', + text: 'Tax option 3 (5%)', tooltipText: 'Tax option 3 (5%)', - isDisabled: undefined, - data: { - name: 'Tax option 3', - code: 'CODE3', - modifiedName: 'Tax option 3 (5%)', - value: '5%', - }, }, { - text: 'Tax rate 2 (3%)', + code: 'CODE2', + isDisabled: undefined, + isSelected: false, keyForList: 'Tax rate 2 (3%)', searchText: 'Tax rate 2 (3%)', + text: 'Tax rate 2 (3%)', tooltipText: 'Tax rate 2 (3%)', - isDisabled: undefined, - data: { - name: 'Tax rate 2', - code: 'CODE2', - modifiedName: 'Tax rate 2 (3%)', - value: '3%', - }, }, ], + shouldShow: false, + title: '', }, ]; const searchResultList: OptionsListUtils.CategorySection[] = [ { - title: '', - shouldShow: true, - // data sorted alphabetically by name data: [ { - text: 'Tax rate 2 (3%)', + code: 'CODE2', + isDisabled: undefined, + isSelected: false, keyForList: 'Tax rate 2 (3%)', searchText: 'Tax rate 2 (3%)', + text: 'Tax rate 2 (3%)', tooltipText: 'Tax rate 2 (3%)', - isDisabled: undefined, - data: { - name: 'Tax rate 2', - code: 'CODE2', - modifiedName: 'Tax rate 2 (3%)', - value: '3%', - }, }, ], + shouldShow: true, + title: '', }, ]; const wrongSearchResultList: OptionsListUtils.CategorySection[] = [ { - title: '', - shouldShow: true, data: [], + shouldShow: true, + title: '', }, ]; - const result = OptionsListUtils.getFilteredOptions([], [], [], emptySearch, [], [], false, false, false, {}, [], false, {}, [], false, false, true, taxRatesWithDefault); + const result = OptionsListUtils.getTaxRatesSection(policy, [], emptySearch, transaction); - expect(result.taxRatesOptions).toStrictEqual(resultList); + expect(result).toStrictEqual(resultList); - const searchResult = OptionsListUtils.getFilteredOptions([], [], [], search, [], [], false, false, false, {}, [], false, {}, [], false, false, true, taxRatesWithDefault); - expect(searchResult.taxRatesOptions).toStrictEqual(searchResultList); + const searchResult = OptionsListUtils.getTaxRatesSection(policy, [], search, transaction); + expect(searchResult).toStrictEqual(searchResultList); - const wrongSearchResult = OptionsListUtils.getFilteredOptions([], [], [], wrongSearch, [], [], false, false, false, {}, [], false, {}, [], false, false, true, taxRatesWithDefault); - expect(wrongSearchResult.taxRatesOptions).toStrictEqual(wrongSearchResultList); + const wrongSearchResult = OptionsListUtils.getTaxRatesSection(policy, [], wrongSearch, transaction); + expect(wrongSearchResult).toStrictEqual(wrongSearchResultList); }); it('formatMemberForList()', () => { From 1a0a317d61c5b402496ad1af433783d92d649ad4 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 25 Apr 2024 02:53:51 +0100 Subject: [PATCH 50/82] fix lint --- src/libs/ReportUtils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index d467f01b5be7..fed013d3992a 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -30,7 +30,6 @@ import type { ReportMetadata, Session, Task, - TaxRate, Transaction, TransactionViolation, UserWallet, From 7872da9a3b08efd5a87c94d1f36f5031f6415b73 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:07:38 +0100 Subject: [PATCH 51/82] update getTaxAmount for MoneyRequestConfirmationList --- src/components/MoneyRequestConfirmationList.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index fcbfce6cbae3..1aee8eb8e78e 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -173,8 +173,11 @@ type MoneyRequestConfirmationListProps = MoneyRequestConfirmationListOnyxProps & action?: IOUAction; }; -const getTaxAmount = (transaction: OnyxEntry, defaultTaxValue: string) => { - const percentage = (transaction?.taxRate ? transaction?.taxRate?.data?.value : defaultTaxValue) ?? ''; +const getTaxAmount = (transaction: OnyxEntry, policy: OnyxEntry) => { + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; + const getTaxValue = (taxCode: string) => Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + + const percentage = (transaction?.taxCode ? getTaxValue(transaction?.taxCode) : getTaxValue(defaultTaxCode)) ?? ''; return TransactionUtils.calculateTaxAmount(percentage, transaction?.amount ?? 0); }; @@ -364,7 +367,7 @@ function MoneyRequestConfirmationList({ // Calculate and set tax amount in transaction draft useEffect(() => { - const taxAmount = getTaxAmount(transaction, taxRates?.defaultValue ?? '').toString(); + const taxAmount = getTaxAmount(transaction, policy).toString(); const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(taxAmount)); if (transaction?.taxAmount && previousTransactionAmount === transaction?.amount) { From 799182f2756a4ea71077e3a20c1af6fee0cd3e6f Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:09:31 +0100 Subject: [PATCH 52/82] update getTaxAmount for IOURequestStepAmount --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index 52528267b263..f9a83eb375f4 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -55,13 +55,14 @@ type IOURequestStepAmountProps = IOURequestStepAmountOnyxProps & /** The transaction object being modified in Onyx */ transaction: OnyxEntry; }; -function getTaxAmount(transaction: OnyxEntry, taxRates: OnyxTypes.TaxRatesWithDefault | undefined, newAmount: number) { +function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry, newAmount: number) { if (!transaction?.amount) { return; } const transactionTaxCode = transaction?.taxCode ?? ''; - const defaultTaxValue = taxRates?.defaultValue; - const taxPercentage = (transactionTaxCode ? taxRates?.taxes[transactionTaxCode]?.value : defaultTaxValue) ?? ''; + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; + const getTaxValue = (taxCode: string) => Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + const taxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : getTaxValue(defaultTaxCode)) ?? ''; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); } function IOURequestStepAmount({ @@ -277,7 +278,7 @@ function IOURequestStepAmount({ return; } - const taxAmount = getTaxAmount(transaction, policy?.taxRates, newAmount); + const taxAmount = getTaxAmount(transaction, policy, newAmount); IOU.updateMoneyRequestAmountAndCurrency({transactionID, transactionThreadReportID: reportID, currency, amount: newAmount, taxAmount}); Navigation.dismissModal(); From 98f318028045f001f1d51cfe59f3a3e305d5bee5 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:10:01 +0100 Subject: [PATCH 53/82] update getTaxAmount for IOURequestStepTaxAmountPage --- .../iou/request/step/IOURequestStepTaxAmountPage.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index 22a00591b4fc..dcba1244f0f5 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -34,15 +34,17 @@ type IOURequestStepTaxAmountPageProps = IOURequestStepTaxAmountPageOnyxProps & transaction: OnyxEntry; }; -function getTaxAmount(transaction: OnyxEntry, taxRates: TaxRatesWithDefault | undefined, isEditing: boolean): number | undefined { +function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry, isEditing: boolean): number | undefined { if (!transaction?.amount) { return; } const transactionTaxAmount = TransactionUtils.getAmount(transaction); + const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; const transactionTaxCode = transaction?.taxCode ?? ''; - const defaultTaxValue = taxRates?.defaultValue; - const moneyRequestTaxPercentage = (transaction?.taxRate ? transaction?.taxRate?.data?.value : defaultTaxValue) ?? ''; - const editingTaxPercentage = (transactionTaxCode ? taxRates?.taxes[transactionTaxCode]?.value : moneyRequestTaxPercentage) ?? ''; + const getTaxValue = (taxCode: string) => Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + const defaultTaxValue = getTaxValue(defaultTaxCode); + const moneyRequestTaxPercentage = (transaction?.taxCode ? getTaxValue(transactionTaxCode) : defaultTaxValue) ?? ''; + const editingTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : moneyRequestTaxPercentage) ?? ''; const taxPercentage = isEditing ? editingTaxPercentage : moneyRequestTaxPercentage; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, transactionTaxAmount)); } @@ -150,7 +152,7 @@ function IOURequestStepTaxAmountPage({ isEditing={Boolean(backTo || isEditing)} currency={currency} amount={transactionDetails?.taxAmount} - taxAmount={getTaxAmount(transaction, taxRates, Boolean(backTo || isEditing))} + taxAmount={getTaxAmount(transaction, policy, Boolean(backTo || isEditing))} ref={(e) => (textInput.current = e)} onCurrencyButtonPress={navigateToCurrencySelectionPage} onSubmitButtonPress={updateTaxAmount} From 483f5d3b20cfd5e8c4023f28bdf925075ad321d0 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:16:26 +0100 Subject: [PATCH 54/82] use transactionTaxCode var --- src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index dcba1244f0f5..d4c731b6fc4c 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -39,11 +39,11 @@ function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; const defaultTaxValue = getTaxValue(defaultTaxCode); - const moneyRequestTaxPercentage = (transaction?.taxCode ? getTaxValue(transactionTaxCode) : defaultTaxValue) ?? ''; + const moneyRequestTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : defaultTaxValue) ?? ''; const editingTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : moneyRequestTaxPercentage) ?? ''; const taxPercentage = isEditing ? editingTaxPercentage : moneyRequestTaxPercentage; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, transactionTaxAmount)); From dab26d8057e0730bb0481c3b020907fe2844f068 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:33:08 +0100 Subject: [PATCH 55/82] add getTaxValue --- src/libs/TransactionUtils.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 4f949ca27e52..6e5fcb2a32a4 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -661,6 +661,13 @@ function transformedTaxRates(policy: OnyxEntry | undefined, transaction? return taxes; } +/** + * Gets the tax value of a selected tax + */ +function getTaxValue(policy: OnyxEntry, transaction: OnyxEntry, taxCode: string) { + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; +} + /** * Gets the tax name for Workspace Taxes Settings */ @@ -693,6 +700,7 @@ export { getWorkspaceTaxesSettingsName, getDefaultTaxCode, transformedTaxRates, + getTaxValue, getTaxRateTitle, getEnabledTaxRateCount, getUpdatedTransaction, From ffe1a806dc966a1c88859f54d3d5123cc9a2a780 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:33:42 +0100 Subject: [PATCH 56/82] use getTaxValue MoneyRequestConfirmationList --- src/components/MoneyRequestConfirmationList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 1aee8eb8e78e..d67692c7487c 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -175,7 +175,7 @@ type MoneyRequestConfirmationListProps = MoneyRequestConfirmationListOnyxProps & const getTaxAmount = (transaction: OnyxEntry, policy: OnyxEntry) => { const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; - const getTaxValue = (taxCode: string) => Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); const percentage = (transaction?.taxCode ? getTaxValue(transaction?.taxCode) : getTaxValue(defaultTaxCode)) ?? ''; return TransactionUtils.calculateTaxAmount(percentage, transaction?.amount ?? 0); From 61f31e111b6cd3b00ee51ab6b996893e00e470f7 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:33:59 +0100 Subject: [PATCH 57/82] use getTaxValue IOURequestStepAmount --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index f9a83eb375f4..d1876aad53d0 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -61,7 +61,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: Ony } const transactionTaxCode = transaction?.taxCode ?? ''; const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; - const getTaxValue = (taxCode: string) => Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); const taxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : getTaxValue(defaultTaxCode)) ?? ''; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); } From 7e7bcc059a630028dcc66947d62355f3bc246ba6 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:34:26 +0100 Subject: [PATCH 58/82] use getTaxValue IOURequestStepTaxAmountPage --- src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index d4c731b6fc4c..c897c1aebf0d 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -41,7 +41,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry Object.values(TransactionUtils.transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === taxCode)?.value; + const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); const defaultTaxValue = getTaxValue(defaultTaxCode); const moneyRequestTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : defaultTaxValue) ?? ''; const editingTaxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : moneyRequestTaxPercentage) ?? ''; From 3011f30762456720ee08fc1ef292f85c7d18dc08 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:38:31 +0100 Subject: [PATCH 59/82] fix lint --- src/components/MoneyRequestConfirmationList.tsx | 2 +- src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index d67692c7487c..4f2288020b3f 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -375,7 +375,7 @@ function MoneyRequestConfirmationList({ } IOU.setMoneyRequestTaxAmount(transactionID, amountInSmallestCurrencyUnits, true); - }, [taxRates?.defaultValue, transaction, transactionID, previousTransactionAmount]); + }, [policy, transaction, transactionID, previousTransactionAmount]); /** * Returns the participants with amount diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index c897c1aebf0d..5a79578cc8ba 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -15,7 +15,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import type {Policy, PolicyCategories, PolicyTagList, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; +import type {Policy, PolicyCategories, PolicyTagList, Transaction} from '@src/types/onyx'; import StepScreenWrapper from './StepScreenWrapper'; import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; @@ -67,7 +67,6 @@ function IOURequestStepTaxAmountPage({ const transactionDetails = ReportUtils.getTransactionDetails(transaction); const currency = CurrencyUtils.isValidCurrencyCode(selectedCurrency) ? selectedCurrency : transactionDetails?.currency; - const taxRates = policy?.taxRates; useFocusEffect( useCallback(() => { From aed16c79f0ebfd909f76bef8ae8b6a458cb8fb4a Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 13:51:07 +0100 Subject: [PATCH 60/82] add getModifiedTaxName --- src/libs/TransactionUtils.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 6e5fcb2a32a4..d85f5bf71080 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -668,6 +668,12 @@ function getTaxValue(policy: OnyxEntry, transaction: OnyxEntry taxRate.code === taxCode)?.value; } +/** + * Gets the tax modifiedName of a selected tax + */ +function getModifiedTaxName(policy: OnyxEntry, transaction: OnyxEntry, taxCode?: string) { + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => (taxRate.code === taxCode ? taxCode : transaction?.taxCode))?.modifiedName; +} /** * Gets the tax name for Workspace Taxes Settings */ @@ -679,7 +685,7 @@ function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: strin * Gets the tax name */ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; + return getModifiedTaxName(policy, transaction); } /** @@ -687,7 +693,7 @@ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { const defaultTaxCode = getDefaultTaxCode(policy, transaction); - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; + return getModifiedTaxName(policy, transaction, defaultTaxCode); } function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { From 9518d7321eddb83832b73ce4d53075950b6f2d0c Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 15:42:17 +0100 Subject: [PATCH 61/82] update tax name and default tax name --- src/libs/TransactionUtils.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index d85f5bf71080..6e5fcb2a32a4 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -668,12 +668,6 @@ function getTaxValue(policy: OnyxEntry, transaction: OnyxEntry taxRate.code === taxCode)?.value; } -/** - * Gets the tax modifiedName of a selected tax - */ -function getModifiedTaxName(policy: OnyxEntry, transaction: OnyxEntry, taxCode?: string) { - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => (taxRate.code === taxCode ? taxCode : transaction?.taxCode))?.modifiedName; -} /** * Gets the tax name for Workspace Taxes Settings */ @@ -685,7 +679,7 @@ function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: strin * Gets the tax name */ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - return getModifiedTaxName(policy, transaction); + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; } /** @@ -693,7 +687,7 @@ function getTaxName(policy: OnyxEntry, transaction: OnyxEntry, transaction: OnyxEntry) { const defaultTaxCode = getDefaultTaxCode(policy, transaction); - return getModifiedTaxName(policy, transaction, defaultTaxCode); + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; } function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { From b27f2155de0074433f502d2db19a86d7e51f52c9 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 15:45:12 +0100 Subject: [PATCH 62/82] update getTaxAmount for IOURequestStepTaxRatePage --- .../iou/request/step/IOURequestStepTaxRatePage.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 6049dacd0d9b..8f38f5fef114 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -30,10 +30,11 @@ type IOURequestStepTaxRatePageProps = IOURequestStepTaxRatePageOnyxProps & transaction: OnyxEntry; }; -function getTaxAmount(policy: OnyxEntry, selectedTaxRate: string, amount: number): number | undefined { - const percentage = Object.values(TransactionUtils.transformedTaxRates(policy)).find((taxRate) => taxRate.modifiedName?.includes(selectedTaxRate))?.value; - if (percentage) { - return TransactionUtils.calculateTaxAmount(percentage, amount); +function getTaxAmount(policy: OnyxEntry, transaction: OnyxEntry, selectedTaxCode: string, amount: number): number | undefined { + const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); + const taxPercentage = getTaxValue(selectedTaxCode); + if (taxPercentage) { + return TransactionUtils.calculateTaxAmount(taxPercentage, amount); } } @@ -59,11 +60,11 @@ function IOURequestStepTaxRatePage({ const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); const updateTaxRates = (taxes: TaxRatesOption) => { - if (!transaction || !taxes.text || !taxRates) { + if (!transaction || !taxes.code || !taxRates) { Navigation.goBack(backTo); return; } - const taxAmount = getTaxAmount(policy, taxes.text, TransactionUtils.getAmount(transaction, false, true)); + const taxAmount = getTaxAmount(policy, transaction, taxes?.code, TransactionUtils.getAmount(transaction, false, true)); if (isEditing) { const newTaxCode = taxes.code; From 1b41f8c86352ac040a309e2eb0c5a0e5f30d6e7d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 19:36:17 +0100 Subject: [PATCH 63/82] update getTaxAmount for MoneyRequestConfirmationList --- src/components/MoneyRequestConfirmationList.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index fb57dc7bb589..ca080c13fc95 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -180,10 +180,9 @@ type MoneyRequestConfirmationListProps = MoneyRequestConfirmationListOnyxProps & const getTaxAmount = (transaction: OnyxEntry, policy: OnyxEntry) => { const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; - const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); - const percentage = (transaction?.taxCode ? getTaxValue(transaction?.taxCode) : getTaxValue(defaultTaxCode)) ?? ''; - return TransactionUtils.calculateTaxAmount(percentage, transaction?.amount ?? 0); + const taxPercentage = TransactionUtils.getTaxValue(policy, transaction, transaction?.taxCode ?? defaultTaxCode) ?? ''; + return TransactionUtils.calculateTaxAmount(taxPercentage, transaction?.amount ?? 0); }; function MoneyRequestConfirmationList({ From 57882de1c5c2438cb798e36d853efd42a85f9503 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 19:40:51 +0100 Subject: [PATCH 64/82] update getTaxAmount for IOURequestStepAmount --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index d1876aad53d0..9de1563fa15a 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -61,8 +61,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: Ony } const transactionTaxCode = transaction?.taxCode ?? ''; const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction) ?? ''; - const getTaxValue = (taxCode: string) => TransactionUtils.getTaxValue(policy, transaction, taxCode); - const taxPercentage = (transactionTaxCode ? getTaxValue(transactionTaxCode) : getTaxValue(defaultTaxCode)) ?? ''; + const taxPercentage = TransactionUtils.getTaxValue(policy, transaction, transactionTaxCode ?? defaultTaxCode) ?? ''; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); } function IOURequestStepAmount({ From 25c2003e720bbf617f65533818aa6fef8a182aec Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 19:43:05 +0100 Subject: [PATCH 65/82] fix lint --- src/pages/iou/request/step/IOURequestStepAmount.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index 9de1563fa15a..b0e8b50fee9c 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -55,6 +55,7 @@ type IOURequestStepAmountProps = IOURequestStepAmountOnyxProps & /** The transaction object being modified in Onyx */ transaction: OnyxEntry; }; + function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry, newAmount: number) { if (!transaction?.amount) { return; @@ -64,6 +65,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: Ony const taxPercentage = TransactionUtils.getTaxValue(policy, transaction, transactionTaxCode ?? defaultTaxCode) ?? ''; return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, newAmount)); } + function IOURequestStepAmount({ report, route: { From 18bc37c1096b42536066d0c60827aea4615cf9fe Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 19:48:42 +0100 Subject: [PATCH 66/82] fix comment review --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 8f38f5fef114..ee132b091fbd 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -61,14 +61,15 @@ function IOURequestStepTaxRatePage({ const updateTaxRates = (taxes: TaxRatesOption) => { if (!transaction || !taxes.code || !taxRates) { - Navigation.goBack(backTo); + Navigation.goBack(); return; } + const taxAmount = getTaxAmount(policy, transaction, taxes?.code, TransactionUtils.getAmount(transaction, false, true)); if (isEditing) { const newTaxCode = taxes.code; - if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { + if (newTaxCode === TransactionUtils.getTaxCode(transaction)) { navigateBack(); return; } @@ -86,7 +87,7 @@ function IOURequestStepTaxRatePage({ } if (taxAmount === undefined) { - Navigation.goBack(backTo); + Navigation.goBack(); return; } const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(taxAmount); From f9a745c8f61e64a72b328a4ab55f5b676c841e3b Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Mon, 29 Apr 2024 20:01:50 +0100 Subject: [PATCH 67/82] Update src/libs/TransactionUtils.ts Co-authored-by: Monil Bhavsar --- src/libs/TransactionUtils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index b7fb2506a85f..89ad36b83231 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -640,7 +640,8 @@ function getRateID(transaction: OnyxEntry): string | undefined { } /** - * Gets the default tax code based on selected currency + * 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) { const defaultExternalID = policy?.taxRates?.defaultExternalID; From c25eca15fe495070ad3fa327d9708f0b4c04a839 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Tue, 30 Apr 2024 09:01:42 +0100 Subject: [PATCH 68/82] combine getTaxName and getDefaultTaxName --- src/libs/TransactionUtils.ts | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 348f34f84140..e23eee326b85 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -698,23 +698,9 @@ function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: strin return Object.values(transformedTaxRates(policy)).find((taxRate) => taxRate.code === taxCode)?.modifiedName; } -/** - * Gets the tax name - */ -function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === transaction?.taxCode)?.modifiedName; -} - -/** - * Gets the default tax name - */ -function getDefaultTaxName(policy: OnyxEntry, transaction: OnyxEntry) { - const defaultTaxCode = getDefaultTaxCode(policy, transaction); - return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === defaultTaxCode)?.modifiedName; -} - function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { - return getTaxName(policy, transaction) ?? getDefaultTaxName(policy, transaction); + const defaultTaxCode = getDefaultTaxCode(policy, transaction); + return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === (transaction?.taxCode ?? defaultTaxCode))?.modifiedName; } export { From 79bee2b1c8ce6671932955d3f68b6a48d248901d Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Tue, 30 Apr 2024 09:08:06 +0100 Subject: [PATCH 69/82] replace getTaxRateTitle with getTaxName --- src/libs/TransactionUtils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index e23eee326b85..9b0dfbbae376 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -698,7 +698,10 @@ function getWorkspaceTaxesSettingsName(policy: OnyxEntry, taxCode: strin return Object.values(transformedTaxRates(policy)).find((taxRate) => taxRate.code === taxCode)?.modifiedName; } -function getTaxRateTitle(policy: OnyxEntry, transaction: OnyxEntry) { +/** + * Gets the tax name + */ +function getTaxName(policy: OnyxEntry, transaction: OnyxEntry) { const defaultTaxCode = getDefaultTaxCode(policy, transaction); return Object.values(transformedTaxRates(policy, transaction)).find((taxRate) => taxRate.code === (transaction?.taxCode ?? defaultTaxCode))?.modifiedName; } @@ -710,7 +713,7 @@ export { getDefaultTaxCode, transformedTaxRates, getTaxValue, - getTaxRateTitle, + getTaxName, getEnabledTaxRateCount, getUpdatedTransaction, getDescription, From 843d33ca5d9f6915f2cb0b3d04f7e59759ca853c Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Tue, 30 Apr 2024 09:08:32 +0100 Subject: [PATCH 70/82] use getTaxName --- src/components/MoneyRequestConfirmationList.tsx | 2 +- src/components/ReportActionItem/MoneyRequestView.tsx | 2 +- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 601ddc4a2d05..f3dfd23667cd 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -312,7 +312,7 @@ function MoneyRequestConfirmationList({ isDistanceRequest ? currency : iouCurrencyCode, ); const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transaction?.taxAmount, iouCurrencyCode); - const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); + const taxRateTitle = TransactionUtils.getTaxName(policy, transaction); const previousTransactionAmount = usePrevious(transaction?.amount); diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index feaf378a1365..e5010b4e4cb4 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -137,7 +137,7 @@ function MoneyRequestView({ const formattedTaxAmount = CurrencyUtils.convertToDisplayString(transactionTaxAmount, transactionCurrency); const taxRatesDescription = taxRates?.name; - const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); + const taxRateTitle = TransactionUtils.getTaxName(policy, transaction); // Flags for allowing or disallowing editing an expense const isSettled = ReportUtils.isSettled(moneyRequestReport?.reportID); diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index ee132b091fbd..b27a15b992bd 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -57,7 +57,7 @@ function IOURequestStepTaxRatePage({ Navigation.goBack(backTo); }; - const taxRateTitle = TransactionUtils.getTaxRateTitle(policy, transaction); + const taxRateTitle = TransactionUtils.getTaxName(policy, transaction); const updateTaxRates = (taxes: TaxRatesOption) => { if (!transaction || !taxes.code || !taxRates) { From 0102a3febbb3b4c483a1c78caaec0480b33b0c1f Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 2 May 2024 23:54:31 +0100 Subject: [PATCH 71/82] add tax code and tax amount to buildOptimisticTransaction --- src/libs/TransactionUtils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index a7a668f948af..ae30d648a6aa 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -96,6 +96,8 @@ function buildOptimisticTransaction( existingTransactionID: string | null = null, category = '', tag = '', + taxCode = '', + taxAmount = 0, billable = false, pendingFields: Partial<{[K in TransactionPendingFieldsKey]: ValueOf}> | undefined = undefined, reimbursable = true, @@ -126,6 +128,8 @@ function buildOptimisticTransaction( filename, category, tag, + taxCode, + taxAmount, billable, reimbursable, }; From 4305c13bff5eab2a468e649a71c7526634a9bd27 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 3 May 2024 00:11:54 +0100 Subject: [PATCH 72/82] add taxCode and taxAmount types to CreateDistanceRequestParams --- src/libs/API/parameters/CreateDistanceRequestParams.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/API/parameters/CreateDistanceRequestParams.ts b/src/libs/API/parameters/CreateDistanceRequestParams.ts index b9adee4393ec..68469899af06 100644 --- a/src/libs/API/parameters/CreateDistanceRequestParams.ts +++ b/src/libs/API/parameters/CreateDistanceRequestParams.ts @@ -11,6 +11,8 @@ type CreateDistanceRequestParams = { created: string; category?: string; tag?: string; + taxCode?: string; + taxAmount?: number; billable?: boolean; transactionThreadReportID: string; createdReportActionIDForThread: string; From 876ee9a3272a42811c664566f53d424dd9291299 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 3 May 2024 00:12:58 +0100 Subject: [PATCH 73/82] update optimistic data for track expense --- src/libs/actions/IOU.ts | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index ad8cef4843d8..241bfe7bbdb3 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -1603,7 +1603,7 @@ function getSendInvoiceInformation( policyTagList?: OnyxEntry, policyCategories?: OnyxEntry, ): SendInvoiceInformation { - const {amount = 0, currency = '', created = '', merchant = '', category = '', tag = '', billable, comment, participants} = transaction ?? {}; + const {amount = 0, currency = '', created = '', merchant = '', category = '', tag = '', taxCode = '', taxAmount = 0, billable, comment, participants} = transaction ?? {}; const trimmedComment = (comment?.comment ?? '').trim(); const senderWorkspaceID = participants?.find((participant) => participant?.isSender)?.policyID ?? ''; const receiverParticipant = participants?.find((participant) => participant?.accountID); @@ -1649,6 +1649,8 @@ function getSendInvoiceInformation( undefined, category, tag, + taxCode, + taxAmount, billable, ); @@ -1746,6 +1748,8 @@ function getMoneyRequestInformation( existingTransactionID: string | undefined, category: string | undefined, tag: string | undefined, + taxCode: string | undefined, + taxAmount: number | undefined, billable: boolean | undefined, policy: OnyxEntry | undefined, policyTagList: OnyxEntry | undefined, @@ -1827,6 +1831,8 @@ function getMoneyRequestInformation( existingTransactionID, category, tag, + taxCode, + ReportUtils.isExpenseReport(iouReport) ? -(taxAmount ?? 0) : taxAmount, billable, isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, ); @@ -1957,6 +1963,8 @@ function getTrackExpenseInformation( receipt: Receipt | undefined, category: string | undefined, tag: string | undefined, + taxCode: string | undefined, + taxAmount: number | undefined, billable: boolean | undefined, policy: OnyxEntry | undefined, policyTagList: OnyxEntry | undefined, @@ -2037,6 +2045,8 @@ function getTrackExpenseInformation( existingTransactionID ?? null, category, tag, + taxCode, + taxAmount, billable, isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, false, @@ -2131,6 +2141,8 @@ function createDistanceRequest( created: string, category: string | undefined, tag: string | undefined, + taxCode: string | undefined, + taxAmount: number | undefined, amount: number, currency: string, merchant: string, @@ -2175,6 +2187,8 @@ function createDistanceRequest( undefined, category, tag, + taxCode, + taxAmount, billable, policy, policyTagList, @@ -2198,6 +2212,8 @@ function createDistanceRequest( created: currentCreated, category, tag, + taxCode, + taxAmount, billable, transactionThreadReportID, createdReportActionIDForThread, @@ -3256,6 +3272,8 @@ function requestMoney( isMovingTransactionFromTrackExpense ? (linkedTrackedExpenseReportAction?.originalMessage as IOUMessage)?.IOUTransactionID : undefined, category, tag, + taxCode, + taxAmount, billable, policy, policyTagList, @@ -3440,6 +3458,8 @@ function trackExpense( receipt, category, tag, + taxCode, + taxAmount, billable, policy, policyTagList, @@ -3647,6 +3667,8 @@ function createSplitsAndOnyxData( undefined, category, tag, + undefined, + undefined, billable, ); @@ -3875,6 +3897,8 @@ function createSplitsAndOnyxData( undefined, category, tag, + undefined, + undefined, billable, ); @@ -4182,6 +4206,8 @@ function startSplitBill({ undefined, category, tag, + undefined, + undefined, billable, ); @@ -4569,6 +4595,8 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA undefined, updatedTransaction?.category, updatedTransaction?.tag, + undefined, + undefined, updatedTransaction?.billable, ); From e7e88860b8345cc7bfd166b9dfaca4e6263716bc Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 3 May 2024 00:13:35 +0100 Subject: [PATCH 74/82] should submit taxCode and taxAmount for distance request --- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index c2aeb39ab561..fa43d07e8b4e 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -73,8 +73,8 @@ function IOURequestStepConfirmation({ const receiptPath = transaction?.receipt?.source; const receiptType = transaction?.receipt?.type; const defaultTaxCode = TransactionUtils.getDefaultTaxCode(policy, transaction); - const transactionTaxCode = transaction?.taxCode ? transaction?.taxCode : defaultTaxCode; - const transactionTaxAmount = transaction?.taxAmount; + const transactionTaxCode = (transaction?.taxCode ? transaction?.taxCode : defaultTaxCode) ?? ''; + const transactionTaxAmount = transaction?.taxAmount ?? 0; const isSharingTrackExpense = action === CONST.IOU.ACTION.SHARE; const isCategorizingTrackExpense = action === CONST.IOU.ACTION.CATEGORIZE; const isSubmittingFromTrackExpense = action === CONST.IOU.ACTION.SUBMIT; @@ -288,6 +288,8 @@ function IOURequestStepConfirmation({ transaction.created, transaction.category, transaction.tag, + transactionTaxCode, + transactionTaxAmount, transaction.amount, transaction.currency, transaction.merchant, @@ -299,7 +301,7 @@ function IOURequestStepConfirmation({ customUnitRateID, ); }, - [policy, policyCategories, policyTags, report, transaction], + [policy, policyCategories, policyTags, report, transaction, transactionTaxCode, transactionTaxAmount], ); const createTransaction = useCallback( From 764a76d69b8d4a899ed64ae65283010408789da0 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 3 May 2024 00:19:03 +0100 Subject: [PATCH 75/82] pass empty taxCode and taxAmount values to IOU.createDistanceRequest --- src/pages/iou/request/step/IOURequestStepDistance.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 50b53d0734c9..0d5972cffcb9 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -283,6 +283,8 @@ function IOURequestStepDistance({ transaction?.created ?? '', '', '', + '', + 0, 0, transaction?.currency ?? 'USD', translate('iou.fieldPending'), From 81e53e8fd269fc4f9c4b5efc5aaeffc440b7e146 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 3 May 2024 01:11:51 +0100 Subject: [PATCH 76/82] update error field --- .../export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx index bc4741e00b48..c33c161454bb 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx @@ -23,7 +23,7 @@ function QuickbooksOutOfPocketExpenseConfigurationPage({policy}: WithPolicyConne const isTaxesEnabled = Boolean(syncTax); const shouldShowTaxError = isTaxesEnabled && reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; const shouldShowLocationError = isLocationEnabled && reimbursableExpensesExportDestination !== CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; - const hasErrors = Boolean(errorFields?.exportEntity) || shouldShowTaxError || shouldShowLocationError; + const hasErrors = Boolean(errorFields?.reimbursableExpensesExportDestination) || shouldShowTaxError || shouldShowLocationError; return ( Date: Mon, 6 May 2024 11:46:27 +0100 Subject: [PATCH 77/82] undo: update error field --- .../export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx index c33c161454bb..bc4741e00b48 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx @@ -23,7 +23,7 @@ function QuickbooksOutOfPocketExpenseConfigurationPage({policy}: WithPolicyConne const isTaxesEnabled = Boolean(syncTax); const shouldShowTaxError = isTaxesEnabled && reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; const shouldShowLocationError = isLocationEnabled && reimbursableExpensesExportDestination !== CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; - const hasErrors = Boolean(errorFields?.reimbursableExpensesExportDestination) || shouldShowTaxError || shouldShowLocationError; + const hasErrors = Boolean(errorFields?.exportEntity) || shouldShowTaxError || shouldShowLocationError; return ( Date: Tue, 7 May 2024 11:55:00 +0100 Subject: [PATCH 78/82] update tax amount when transaction is selected --- src/components/MoneyRequestConfirmationList.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index c86a3d1d7010..90f86b1f6e3e 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -324,6 +324,7 @@ function MoneyRequestConfirmationList({ const taxRateTitle = TransactionUtils.getTaxName(policy, transaction); const previousTransactionAmount = usePrevious(transaction?.amount); + const previousTransactionCurrency = usePrevious(transaction?.currency); const isFocused = useIsFocused(); const [formError, debouncedFormError, setFormError] = useDebouncedState(''); @@ -380,7 +381,7 @@ function MoneyRequestConfirmationList({ const taxAmount = getTaxAmount(transaction, policy).toString(); const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(taxAmount)); - if (transaction?.taxAmount && previousTransactionAmount === transaction?.amount) { + if (transaction?.taxAmount && previousTransactionAmount === transaction?.amount && previousTransactionCurrency === transaction?.currency) { return IOU.setMoneyRequestTaxAmount(transaction?.transactionID, transaction?.taxAmount, true); } From 923a2abd812c32292f227f1d76184e162512cc41 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Tue, 7 May 2024 12:08:18 +0100 Subject: [PATCH 79/82] fix lint --- src/components/MoneyRequestConfirmationList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 90f86b1f6e3e..e02f20deb392 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -386,7 +386,7 @@ function MoneyRequestConfirmationList({ } IOU.setMoneyRequestTaxAmount(transactionID, amountInSmallestCurrencyUnits, true); - }, [policy, transaction, transactionID, previousTransactionAmount]); + }, [policy, transaction, transactionID, previousTransactionAmount, previousTransactionCurrency]); // If completing a split expense fails, set didConfirm to false to allow the user to edit the fields again if (isEditingSplitBill && didConfirm) { From 144746db215d71d05a0473acde3b21b045844e05 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Wed, 8 May 2024 23:22:47 +0100 Subject: [PATCH 80/82] fix lint --- src/libs/OptionsListUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 1085c727bfd5..3e49f366e52a 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -1360,7 +1360,7 @@ function getTaxRatesOptions(taxRates: Array>): TaxRatesOption[] searchText: modifiedName, tooltipText: modifiedName, isDisabled, - isSelected: isSelected, + isSelected, })); } From 52e8cc727c361d04812467c08dbbcff8a687ecbc Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Thu, 9 May 2024 12:25:46 +0100 Subject: [PATCH 81/82] revert: add backTo --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index b27a15b992bd..4b7ce90ab73b 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -87,7 +87,7 @@ function IOURequestStepTaxRatePage({ } if (taxAmount === undefined) { - Navigation.goBack(); + Navigation.goBack(backTo); return; } const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(taxAmount); From ea26dc9b010b53d2f6a01e45a7e0c3a8e9b2af84 Mon Sep 17 00:00:00 2001 From: Etotaziba Olei Date: Fri, 10 May 2024 12:43:49 +0100 Subject: [PATCH 82/82] use navigateBack --- src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 4b7ce90ab73b..9376aa65e4e6 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -87,14 +87,14 @@ function IOURequestStepTaxRatePage({ } if (taxAmount === undefined) { - Navigation.goBack(backTo); + navigateBack(); return; } const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(taxAmount); IOU.setMoneyRequestTaxRate(transaction?.transactionID, taxes?.code ?? ''); IOU.setMoneyRequestTaxAmount(transaction.transactionID, amountInSmallestCurrencyUnits, true); - Navigation.goBack(backTo); + navigateBack(); }; return (