@unchainedshop/utils 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/calculation.d.ts +1 -1
- package/lib/calculation.js +4 -1
- package/lib/calculation.js.map +1 -1
- package/lib/director/BaseDiscountAdapter.d.ts +1 -1
- package/lib/director/BaseDiscountAdapter.js.map +1 -1
- package/lib/director/BaseDiscountDirector.d.ts +1 -1
- package/lib/director/BaseDiscountDirector.js.map +1 -1
- package/lib/director/BasePricingDirector.js.map +1 -1
- package/package.json +4 -4
- package/src/calculation.test.ts +0 -23
- package/src/calculation.ts +6 -2
- package/src/director/BaseDiscountAdapter.ts +1 -1
- package/src/director/BaseDiscountDirector.ts +4 -2
- package/src/director/BasePricingDirector.ts +1 -1
package/lib/calculation.d.ts
CHANGED
|
@@ -7,12 +7,12 @@ export declare const resolveRatioAndTaxDivisorForPricingSheet: (pricing: IBasePr
|
|
|
7
7
|
export declare const calculateAmountToSplit: (configuration: {
|
|
8
8
|
rate?: number;
|
|
9
9
|
fixedRate?: number;
|
|
10
|
-
alreadyDeducted?: number;
|
|
11
10
|
}, amount: number) => number;
|
|
12
11
|
export declare const applyRate: (configuration: {
|
|
13
12
|
fixedRate?: number;
|
|
14
13
|
rate?: number;
|
|
15
14
|
}, amount: any) => number;
|
|
15
|
+
export declare const getTaxAmount: (total: number, rate: number, isNetPrice: boolean) => number;
|
|
16
16
|
export declare const resolveAmountAndTax: ({ ratio, taxDivisor }: {
|
|
17
17
|
ratio?: number;
|
|
18
18
|
taxDivisor?: number;
|
package/lib/calculation.js
CHANGED
|
@@ -23,13 +23,16 @@ export const calculateAmountToSplit = (configuration, amount) => {
|
|
|
23
23
|
const deductionAmount = configuration.rate
|
|
24
24
|
? amount * configuration.rate
|
|
25
25
|
: Math.min(configuration.fixedRate, amount);
|
|
26
|
-
const leftInDiscount = Math.max(0, deductionAmount
|
|
26
|
+
const leftInDiscount = Math.max(0, deductionAmount);
|
|
27
27
|
return leftInDiscount;
|
|
28
28
|
};
|
|
29
29
|
export const applyRate = (configuration, amount) => {
|
|
30
30
|
const { rate, fixedRate } = configuration;
|
|
31
31
|
return rate ? amount * rate : Math.min(fixedRate || 0, amount);
|
|
32
32
|
};
|
|
33
|
+
export const getTaxAmount = (total, rate, isNetPrice) => {
|
|
34
|
+
return isNetPrice ? total * rate : total - total / (1 + rate);
|
|
35
|
+
};
|
|
33
36
|
export const resolveAmountAndTax = ({ ratio, taxDivisor }, amount) => {
|
|
34
37
|
const shareAmount = Number.isFinite(ratio) ? amount * ratio : 0;
|
|
35
38
|
const shareTaxAmount = Number.isFinite(taxDivisor) && taxDivisor !== 0 ? shareAmount - shareAmount / taxDivisor : 0;
|
package/lib/calculation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculation.js","sourceRoot":"","sources":["../src/calculation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,SAAiB,EAAE,EAAE,CAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,wCAAwC,GAAG,CACtD,OAA8C,EAC9C,KAAa,EACb,EAAE;IACF,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,KAAK,GAAG,KAAK;QACpB,UAAU,EAAE,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,
|
|
1
|
+
{"version":3,"file":"calculation.js","sourceRoot":"","sources":["../src/calculation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IDiscountAdapter } from '@unchainedshop/types/discount.js';
|
|
2
|
-
export declare const BaseDiscountAdapter: Omit<IDiscountAdapter
|
|
2
|
+
export declare const BaseDiscountAdapter: Omit<IDiscountAdapter<unknown>, 'key' | 'label' | 'version'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDiscountAdapter.js","sourceRoot":"","sources":["../../src/director/BaseDiscountAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,CAAC,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"BaseDiscountAdapter.js","sourceRoot":"","sources":["../../src/director/BaseDiscountAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,CAAC,MAAM,mBAAmB,GAAiE;IAC/F,UAAU,EAAE,CAAC;IAEb,uBAAuB,EAAE,KAAK,IAAI,EAAE;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yEAAyE;IACzE,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACpB,6DAA6D;QAC7D,sEAAsE;QACtE,0BAA0B;QAC1B,0CAA0C;QAC1C,0DAA0D;QAC1D,eAAe;QACf,2BAA2B;QAC3B,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qEAAqE;QACrE,iFAAiF;QACjF,qFAAqF;QACrF,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,yEAAyE;QACzE,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8DAA8D;QAC9D,0CAA0C;QAC1C,0DAA0D;QAC1D,eAAe;QACf,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qEAAqE;QACrE,4BAA4B;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,GAAG,CAAC,OAAe,EAAE,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;QAC9D,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IDiscountDirector } from '@unchainedshop/types/discount.js';
|
|
2
|
-
export declare const BaseDiscountDirector: (directorName: string) => IDiscountDirector
|
|
2
|
+
export declare const BaseDiscountDirector: <DiscountConfigurationType>(directorName: string) => IDiscountDirector<DiscountConfigurationType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDiscountDirector.js","sourceRoot":"","sources":["../../src/director/BaseDiscountDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"file":"BaseDiscountDirector.js","sourceRoot":"","sources":["../../src/director/BaseDiscountDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAAoB,EAC0B,EAAE;IAChD,MAAM,YAAY,GAAG,YAAY,CAA8C,YAAY,EAAE;QAC3F,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,YAAY;QAEf,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;YAExD,OAAO;gBACL,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAClD,IAAI,CAAC,OAAO,CAAC,KAAK;wBAAE,OAAO,IAAI,CAAC;oBAEhC,GAAG,CAAC,0DAA0D,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE/E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,YAAY;yBACT,WAAW,EAAE;yBACb,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;yBACnE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBACrB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBACnD,OAAO;4BACL,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,OAAO,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC;yBACzD,CAAC;oBACJ,CAAC,CAAC,CACL,CAAC;oBAEF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC;gBAChE,CAAC;gBAED,KAAK,CAAC,mBAAmB;oBACvB,IAAI,CAAC,OAAO,CAAC,KAAK;wBAAE,OAAO,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,YAAY,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBACnD,OAAO;4BACL,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,OAAO,EAAE,MAAM,OAAO,CAAC,0BAA0B,EAAE;yBACpD,CAAC;oBACJ,CAAC,CAAC,CACH,CAAC;oBAEF,MAAM,cAAc,GAAG,SAAS;yBAC7B,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;yBACzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAEzB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,GAAG,CAAC,6BAA6B,cAAc,CAAC,MAAM,mBAAmB,CAAC,CAAC;oBAC7E,CAAC;oBACD,OAAO,cAAc,CAAC;gBACxB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePricingDirector.js","sourceRoot":"","sources":["../../src/director/BasePricingDirector.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAMjC,YAAoB,EAOpB,EAAE;IACF,MAAM,YAAY,GAAG,YAAY,CAAiB,YAAY,EAAE;QAC9D,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAMV;QACF,GAAG,YAAY;QACf,mBAAmB,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,EAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAE;YACnE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAExE,IAAI,WAAW,GAAuB,EAAE,CAAC;YAEzC,MAAM,OAAO,GAAwD;gBACnE,KAAK,CAAC,SAAS;oBACb,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC;wBACxC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;4BACzB,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;wBACzC,CAAC;qBACF,CAAC,CAAC;oBAEH,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;wBACrE,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC;wBAClD,IAAI,CAAC,mBAAmB;4BAAE,OAAO,IAAI,CAAC;wBAEtC,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"BasePricingDirector.js","sourceRoot":"","sources":["../../src/director/BasePricingDirector.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAMjC,YAAoB,EAOpB,EAAE;IACF,MAAM,YAAY,GAAG,YAAY,CAAiB,YAAY,EAAE;QAC9D,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAMV;QACF,GAAG,YAAY;QACf,mBAAmB,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,EAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAE;YACnE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAExE,IAAI,WAAW,GAAuB,EAAE,CAAC;YAEzC,MAAM,OAAO,GAAwD;gBACnE,KAAK,CAAC,SAAS;oBACb,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC;wBACxC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;4BACzB,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;wBACzC,CAAC;qBACF,CAAC,CAAC;oBAEH,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;wBACrE,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC;wBAClD,IAAI,CAAC,mBAAmB;4BAAE,OAAO,IAAI,CAAC;wBAEtC,MAAM,SAAS,GAAyB,MAAM,OAAO,CAAC,GAAG,CACvD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;4BACzC,UAAU,EAAE,QAAQ,CAAC,GAAG;4BACxB,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iCAAiC,CACrF,QAAQ,EACR,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,gBAAgB,EAAE,EACvB,OAAO,CACR;yBACF,CAAC,CAAC,CACJ,CAAC;wBAEF,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gCAC9B,OAAO;gCACP,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gCACzC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC;6BAC3E,CAAC,CAAC;4BAEH,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;4BACxD,IAAI,CAAC,qBAAqB;gCAAE,OAAO,IAAI,CAAC;4BACxC,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;4BAChE,OAAO,WAAW,CAAC;wBACrB,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;wBACxC,CAAC;wBACD,OAAO,mBAAmB,CAAC;oBAC7B,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;oBAExB,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,cAAc;oBACZ,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,UAAU;oBACR,OAAO,OAAO,CAAC;gBACjB,CAAC;aACF,CAAC;YAEF,OAAO,OAEN,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/utils",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"main": "lib/utils-index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/utils-index.js",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
},
|
|
31
31
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@unchainedshop/logger": "^2.
|
|
33
|
+
"@unchainedshop/logger": "^2.7.0",
|
|
34
34
|
"abort-controller": "3.0.0",
|
|
35
35
|
"hashids": "^2.3.0",
|
|
36
36
|
"locale": "0.1.0",
|
|
37
37
|
"simpl-schema": "=3.2.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@types/node": "^20.11.
|
|
41
|
-
"@unchainedshop/types": "^2.
|
|
40
|
+
"@types/node": "^20.11.17",
|
|
41
|
+
"@unchainedshop/types": "^2.7.0",
|
|
42
42
|
"jest": "^29.7.0",
|
|
43
43
|
"typescript": "^5.3.3"
|
|
44
44
|
}
|
package/src/calculation.test.ts
CHANGED
|
@@ -214,7 +214,6 @@ describe('calculateAmountToSplit', () => {
|
|
|
214
214
|
it('calculates the correct amount to split when using a rate', () => {
|
|
215
215
|
const configuration = {
|
|
216
216
|
rate: 0.1,
|
|
217
|
-
alreadyDeducted: 0,
|
|
218
217
|
};
|
|
219
218
|
const amount = 1000;
|
|
220
219
|
expect(calculateAmountToSplit(configuration, amount)).toBe(100);
|
|
@@ -223,34 +222,14 @@ describe('calculateAmountToSplit', () => {
|
|
|
223
222
|
it('calculates the correct amount to split when using a fixed rate', () => {
|
|
224
223
|
const configuration = {
|
|
225
224
|
fixedRate: 50,
|
|
226
|
-
alreadyDeducted: 0,
|
|
227
225
|
};
|
|
228
226
|
const amount = 1000;
|
|
229
227
|
expect(calculateAmountToSplit(configuration, amount)).toBe(50);
|
|
230
228
|
});
|
|
231
229
|
|
|
232
|
-
it('calculates the correct amount to split when alreadyDeducted is non-zero', () => {
|
|
233
|
-
const configuration = {
|
|
234
|
-
rate: 0.1,
|
|
235
|
-
alreadyDeducted: 10,
|
|
236
|
-
};
|
|
237
|
-
const amount = 1000;
|
|
238
|
-
expect(calculateAmountToSplit(configuration, amount)).toBe(90);
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it('returns 0 when the amount to deduct is less than or equal to alreadyDeducted', () => {
|
|
242
|
-
const configuration = {
|
|
243
|
-
rate: 0.1,
|
|
244
|
-
alreadyDeducted: 100,
|
|
245
|
-
};
|
|
246
|
-
const amount = 1000;
|
|
247
|
-
expect(calculateAmountToSplit(configuration, amount)).toBe(0);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
230
|
it('returns 0 when the amount is less than or equal to 0', () => {
|
|
251
231
|
const configuration = {
|
|
252
232
|
rate: 0.1,
|
|
253
|
-
alreadyDeducted: 0,
|
|
254
233
|
};
|
|
255
234
|
const amount = 0;
|
|
256
235
|
expect(calculateAmountToSplit(configuration, amount)).toBe(0);
|
|
@@ -260,7 +239,6 @@ describe('calculateAmountToSplit', () => {
|
|
|
260
239
|
it('returns 0 when amount is negative', () => {
|
|
261
240
|
const configuration = {
|
|
262
241
|
rate: 0.1,
|
|
263
|
-
alreadyDeducted: 0,
|
|
264
242
|
};
|
|
265
243
|
const amount = -1000;
|
|
266
244
|
expect(calculateAmountToSplit(configuration, amount)).toBe(0);
|
|
@@ -269,7 +247,6 @@ describe('calculateAmountToSplit', () => {
|
|
|
269
247
|
it('returns 0 when configuration rate is negative', () => {
|
|
270
248
|
const configuration = {
|
|
271
249
|
rate: -0.1,
|
|
272
|
-
alreadyDeducted: 0,
|
|
273
250
|
};
|
|
274
251
|
const amount = 1000;
|
|
275
252
|
expect(calculateAmountToSplit(configuration, amount)).toBe(0);
|
package/src/calculation.ts
CHANGED
|
@@ -28,14 +28,14 @@ export const resolveRatioAndTaxDivisorForPricingSheet = (
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
export const calculateAmountToSplit = (
|
|
31
|
-
configuration: { rate?: number; fixedRate?: number
|
|
31
|
+
configuration: { rate?: number; fixedRate?: number },
|
|
32
32
|
amount: number,
|
|
33
33
|
) => {
|
|
34
34
|
const deductionAmount = configuration.rate
|
|
35
35
|
? amount * configuration.rate
|
|
36
36
|
: Math.min(configuration.fixedRate, amount);
|
|
37
37
|
|
|
38
|
-
const leftInDiscount = Math.max(0, deductionAmount
|
|
38
|
+
const leftInDiscount = Math.max(0, deductionAmount);
|
|
39
39
|
return leftInDiscount;
|
|
40
40
|
};
|
|
41
41
|
|
|
@@ -44,6 +44,10 @@ export const applyRate = (configuration: { fixedRate?: number; rate?: number },
|
|
|
44
44
|
return rate ? amount * rate : Math.min(fixedRate || 0, amount);
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
+
export const getTaxAmount = (total: number, rate: number, isNetPrice: boolean) => {
|
|
48
|
+
return isNetPrice ? total * rate : total - total / (1 + rate);
|
|
49
|
+
};
|
|
50
|
+
|
|
47
51
|
export const resolveAmountAndTax = (
|
|
48
52
|
{ ratio, taxDivisor }: { ratio?: number; taxDivisor?: number },
|
|
49
53
|
amount: number,
|
|
@@ -2,7 +2,7 @@ import { log, LogLevel } from '@unchainedshop/logger';
|
|
|
2
2
|
|
|
3
3
|
import { IDiscountAdapter } from '@unchainedshop/types/discount.js';
|
|
4
4
|
|
|
5
|
-
export const BaseDiscountAdapter: Omit<IDiscountAdapter
|
|
5
|
+
export const BaseDiscountAdapter: Omit<IDiscountAdapter<unknown>, 'key' | 'label' | 'version'> = {
|
|
6
6
|
orderIndex: 0,
|
|
7
7
|
|
|
8
8
|
isManualAdditionAllowed: async () => {
|
|
@@ -2,8 +2,10 @@ import { IDiscountAdapter, IDiscountDirector } from '@unchainedshop/types/discou
|
|
|
2
2
|
import { log } from '@unchainedshop/logger';
|
|
3
3
|
import { BaseDirector } from './BaseDirector.js';
|
|
4
4
|
|
|
5
|
-
export const BaseDiscountDirector = (
|
|
6
|
-
|
|
5
|
+
export const BaseDiscountDirector = <DiscountConfigurationType>(
|
|
6
|
+
directorName: string,
|
|
7
|
+
): IDiscountDirector<DiscountConfigurationType> => {
|
|
8
|
+
const baseDirector = BaseDirector<IDiscountAdapter<DiscountConfigurationType>>(directorName, {
|
|
7
9
|
adapterSortKey: 'orderIndex',
|
|
8
10
|
});
|
|
9
11
|
|
|
@@ -57,7 +57,7 @@ export const BasePricingDirector = <
|
|
|
57
57
|
const resolvedCalculation = await previousPromise;
|
|
58
58
|
if (!resolvedCalculation) return null;
|
|
59
59
|
|
|
60
|
-
const discounts: Array<Discount
|
|
60
|
+
const discounts: Array<Discount<any>> = await Promise.all(
|
|
61
61
|
context.discounts.map(async (discount) => ({
|
|
62
62
|
discountId: discount._id,
|
|
63
63
|
configuration: await context.modules.orders.discounts.configurationForPricingAdapterKey(
|