diff --git a/src/CONST.ts b/src/CONST.ts index 3c53f083abac..a00be3f94ba4 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -4132,6 +4132,22 @@ const CONST = { SESSION_STORAGE_KEYS: { INITIAL_URL: 'INITIAL_URL', }, + DEFAULT_TAX: { + defaultExternalID: 'id_TAX_EXEMPT', + defaultValue: '0%', + foreignTaxDefault: 'id_TAX_EXEMPT', + name: 'Tax', + taxes: { + id_TAX_EXEMPT: { + name: 'Tax exempt', + value: '0%', + }, + id_TAX_RATE_1: { + name: 'Tax Rate 1', + value: '5%', + }, + }, + }, } as const; type Country = keyof typeof CONST.ALL_COUNTRIES; diff --git a/src/libs/API/parameters/EnablePolicyTaxesParams.ts b/src/libs/API/parameters/EnablePolicyTaxesParams.ts index 4a235d5d6a1f..5517bd442231 100644 --- a/src/libs/API/parameters/EnablePolicyTaxesParams.ts +++ b/src/libs/API/parameters/EnablePolicyTaxesParams.ts @@ -1,6 +1,7 @@ type EnablePolicyTaxesParams = { policyID: string; enabled: boolean; + taxFields?: string; }; export default EnablePolicyTaxesParams; diff --git a/src/libs/actions/Policy.ts b/src/libs/actions/Policy.ts index 1f48525e3378..afb2d307b2a5 100644 --- a/src/libs/actions/Policy.ts +++ b/src/libs/actions/Policy.ts @@ -83,6 +83,7 @@ import type { ReimbursementAccount, Report, ReportAction, + TaxRatesWithDefault, Transaction, } from '@src/types/onyx'; import type {ErrorFields, Errors, OnyxValueWithOfflineFeedback, PendingAction} from '@src/types/onyx/OnyxCommon'; @@ -3664,6 +3665,62 @@ function enablePolicyTags(policyID: string, enabled: boolean) { } function enablePolicyTaxes(policyID: string, enabled: boolean) { + const defaultTaxRates: TaxRatesWithDefault = CONST.DEFAULT_TAX; + const taxRatesData: OnyxData = { + optimisticData: [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + taxRates: { + ...defaultTaxRates, + taxes: { + ...Object.keys(defaultTaxRates.taxes).reduce( + (prevTaxesData, taxKey) => ({ + ...prevTaxesData, + [taxKey]: { + ...defaultTaxRates.taxes[taxKey], + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + }, + }), + {}, + ), + }, + }, + }, + }, + ], + successData: [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + taxRates: { + taxes: { + ...Object.keys(defaultTaxRates.taxes).reduce( + (prevTaxesData, taxKey) => ({ + ...prevTaxesData, + [taxKey]: {pendingAction: null}, + }), + {}, + ), + }, + }, + }, + }, + ], + failureData: [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + taxRates: undefined, + }, + }, + ], + }; + const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; + const shouldAddDefaultTaxRatesData = (!policy?.taxRates || isEmptyObject(policy.taxRates)) && enabled; const onyxData: OnyxData = { optimisticData: [ { @@ -3678,6 +3735,7 @@ function enablePolicyTaxes(policyID: string, enabled: boolean) { }, }, }, + ...(shouldAddDefaultTaxRatesData ? taxRatesData.optimisticData ?? [] : []), ], successData: [ { @@ -3689,6 +3747,7 @@ function enablePolicyTaxes(policyID: string, enabled: boolean) { }, }, }, + ...(shouldAddDefaultTaxRatesData ? taxRatesData.successData ?? [] : []), ], failureData: [ { @@ -3703,11 +3762,14 @@ function enablePolicyTaxes(policyID: string, enabled: boolean) { }, }, }, + ...(shouldAddDefaultTaxRatesData ? taxRatesData.failureData ?? [] : []), ], }; const parameters: EnablePolicyTaxesParams = {policyID, enabled}; - + if (shouldAddDefaultTaxRatesData) { + parameters.taxFields = JSON.stringify(defaultTaxRates); + } API.write(WRITE_COMMANDS.ENABLE_POLICY_TAXES, parameters, onyxData); if (enabled) {