@@ -4,13 +4,14 @@ import type {LocaleContextProps} from '@components/LocaleContextProvider';
4
4
import type { RateAndUnit } from '@src/CONST' ;
5
5
import CONST from '@src/CONST' ;
6
6
import ONYXKEYS from '@src/ONYXKEYS' ;
7
- import type { LastSelectedDistanceRates , Report } from '@src/types/onyx' ;
7
+ import type { LastSelectedDistanceRates , Report , Transaction } from '@src/types/onyx' ;
8
8
import type { Unit } from '@src/types/onyx/Policy' ;
9
9
import type Policy from '@src/types/onyx/Policy' ;
10
10
import type { EmptyObject } from '@src/types/utils/EmptyObject' ;
11
11
import * as CurrencyUtils from './CurrencyUtils' ;
12
12
import * as PolicyUtils from './PolicyUtils' ;
13
13
import * as ReportUtils from './ReportUtils' ;
14
+ import * as TransactionUtils from './TransactionUtils' ;
14
15
15
16
type MileageRate = {
16
17
customUnitRateID ?: string ;
@@ -53,7 +54,7 @@ function getDefaultMileageRate(policy: OnyxEntry<Policy> | EmptyObject): Mileage
53
54
return null ;
54
55
}
55
56
56
- const distanceUnit = Object . values ( policy . customUnits ) . find ( ( unit ) => unit . name === CONST . CUSTOM_UNITS . NAME_DISTANCE ) ;
57
+ const distanceUnit = PolicyUtils . getCustomUnit ( policy ) ;
57
58
if ( ! distanceUnit ?. rates ) {
58
59
return null ;
59
60
}
@@ -193,7 +194,7 @@ function getMileageRates(policy: OnyxEntry<Policy>): Record<string, MileageRate>
193
194
return mileageRates ;
194
195
}
195
196
196
- const distanceUnit = Object . values ( policy . customUnits ) . find ( ( unit ) => unit . name === CONST . CUSTOM_UNITS . NAME_DISTANCE ) ;
197
+ const distanceUnit = PolicyUtils . getCustomUnit ( policy ) ;
197
198
if ( ! distanceUnit ?. rates ) {
198
199
return mileageRates ;
199
200
}
@@ -266,6 +267,24 @@ function getCustomUnitRateID(reportID: string) {
266
267
return customUnitRateID ;
267
268
}
268
269
270
+ function calculateTaxAmount ( policy : OnyxEntry < Policy > , transaction : OnyxEntry < Transaction > , customUnitRateID : string ) {
271
+ const distanceUnit = PolicyUtils . getCustomUnit ( policy ) ;
272
+ const customUnitID = distanceUnit ?. customUnitID ;
273
+ if ( ! policy ?. customUnits || ! customUnitID ) {
274
+ return 0 ;
275
+ }
276
+ const policyCustomUnitRate = policy ?. customUnits [ customUnitID ] . rates [ customUnitRateID ] ;
277
+ const unit = policy ?. customUnits [ customUnitID ] ?. attributes ?. unit ?? CONST . CUSTOM_UNITS . DISTANCE_UNIT_MILES ;
278
+ const rate = policyCustomUnitRate ?. rate ?? 0 ;
279
+ const distance = TransactionUtils . getDistance ( transaction ) ;
280
+ const amount = getDistanceRequestAmount ( distance , unit , rate ) ;
281
+ const taxClaimablePercentage = policyCustomUnitRate . attributes ?. taxClaimablePercentage ?? 0 ;
282
+ const taxRateExternalID = policyCustomUnitRate . attributes ?. taxRateExternalID ?? '' ;
283
+ const taxableAmount = amount * taxClaimablePercentage ;
284
+ const taxPercentage = TransactionUtils . getTaxValue ( policy , transaction , taxRateExternalID ) ?? '' ;
285
+ return TransactionUtils . calculateTaxAmount ( taxPercentage , taxableAmount ) ;
286
+ }
287
+
269
288
export default {
270
289
getDefaultMileageRate,
271
290
getDistanceMerchant,
@@ -276,6 +295,7 @@ export default {
276
295
getRateForP2P,
277
296
getCustomUnitRateID,
278
297
convertToDistanceInMeters,
298
+ calculateTaxAmount,
279
299
} ;
280
300
281
301
export type { MileageRate } ;
0 commit comments