@unchainedshop/utils 2.4.2 → 2.5.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.
@@ -1,9 +1,6 @@
1
- export type PricingInterface = {
2
- taxSum: () => number;
3
- gross: () => number;
4
- };
1
+ import { IBasePricingSheet, PricingCalculation } from '@unchainedshop/types/pricing.js';
5
2
  export declare const roundToNext: (value: number, precision: number) => number;
6
- export declare const resolveRatioAndTaxDivisorForPricingSheet: (pricing: PricingInterface, total: number) => {
3
+ export declare const resolveRatioAndTaxDivisorForPricingSheet: (pricing: IBasePricingSheet<PricingCalculation>, total: number) => {
7
4
  ratio: number;
8
5
  taxDivisor: number;
9
6
  };
@@ -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,CAAC,OAAyB,EAAE,KAAa,EAAE,EAAE;IACnG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;QAC3B,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;KACH;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;QACrB,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;KACH;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,aAA8E,EAC9E,MAAc,EACd,EAAE;IACF,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI;QACxC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI;QAC7B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,aAAa,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAoD,EAAE,MAAM,EAAE,EAAE;IACxF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,EAAE,KAAK,EAAE,UAAU,EAA2C,EAC9D,MAAc,EACd,EAAE;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,cAAc,GAClB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IAC9D,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,CAAC,qBAAqB,GAAG,WAAW,EAAE,gBAAgB,GAAG,cAAc,CAAC,CAAC;IAClF,CAAC,EACD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;AACJ,CAAC,CAAC"}
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;QAC3B,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;KACH;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;QACrB,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;SACd,CAAC;KACH;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,aAA8E,EAC9E,MAAc,EACd,EAAE;IACF,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI;QACxC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI;QAC7B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,aAAa,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAoD,EAAE,MAAM,EAAE,EAAE;IACxF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,EAAE,KAAK,EAAE,UAAU,EAA2C,EAC9D,MAAc,EACd,EAAE;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,cAAc,GAClB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IAC9D,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,CAAC,qBAAqB,GAAG,WAAW,EAAE,gBAAgB,GAAG,cAAc,CAAC,CAAC;IAClF,CAAC,EACD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,14 +1,13 @@
1
1
  export const BasePricingSheet = (params) => {
2
- const calculation = params.calculation || [];
3
2
  const pricingSheet = {
4
- calculation,
3
+ calculation: params.calculation || [],
5
4
  currency: params.currency,
6
5
  quantity: params.quantity,
7
6
  getRawPricingSheet() {
8
- return calculation;
7
+ return this.calculation;
9
8
  },
10
9
  isValid() {
11
- return calculation.length > 0;
10
+ return this.calculation.length > 0;
12
11
  },
13
12
  sum(filter) {
14
13
  return this.filterBy(filter)
@@ -22,32 +21,28 @@ export const BasePricingSheet = (params) => {
22
21
  return this.sum();
23
22
  },
24
23
  net() {
25
- return this.gross() - this.taxSum();
24
+ return this.sum() - this.taxSum();
26
25
  },
27
26
  total({ category, useNetPrice } = { useNetPrice: false }) {
28
- if (!category) {
29
- return {
30
- amount: Math.round(useNetPrice ? this.net() : this.gross()),
31
- currency: params.currency,
32
- };
33
- }
27
+ const grossAmountForCategory = this.sum(category && { category });
28
+ const taxAmountForCategory = this.taxSum(category && { baseCategory: category });
34
29
  return {
35
- amount: Math.round(this.sum({ category })),
36
- currency: params.currency,
30
+ amount: Math.round(useNetPrice ? grossAmountForCategory - taxAmountForCategory : grossAmountForCategory),
31
+ currency: this.currency,
37
32
  };
38
33
  },
39
34
  filterBy(filter) {
40
- const filteredCalculation = Object.keys(filter || {}).reduce((oldCalculation, filterKey) => oldCalculation.filter((row) => !!row && (filter[filterKey] === undefined || row[filterKey] === filter[filterKey])), calculation);
35
+ const filteredCalculation = Object.keys(filter || {}).reduce((oldCalculation, filterKey) => oldCalculation.filter((row) => !!row && (filter[filterKey] === undefined || row[filterKey] === filter[filterKey])), this.calculation);
41
36
  return filteredCalculation;
42
37
  },
43
38
  resetCalculation(calculationSheet) {
44
39
  calculationSheet.filterBy().forEach(({ amount, ...row }) => {
45
- pricingSheet.calculation.push({
40
+ this.calculation.push({
46
41
  ...row,
47
42
  amount: amount * -1,
48
43
  });
49
44
  });
50
- return pricingSheet.calculation;
45
+ return this.calculation;
51
46
  },
52
47
  };
53
48
  return pricingSheet;
@@ -1 +1 @@
1
- {"version":3,"file":"BasePricingSheet.js","sourceRoot":"","sources":["../../src/director/BasePricingSheet.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAuC,EACP,EAAE;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAmC;QACnD,WAAW;QACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QAEzB,kBAAkB;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO;YACL,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,GAAG,CAAC,MAAM;YACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;iBACzB,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,CAAC,GAAW,EAAE,cAA2B,EAAE,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK;YACH,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC3D,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC;aACH;YAED,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAS,CAAC,CAAC;gBACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM;YACb,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAC1D,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAC5B,cAAc,CAAC,MAAM,CACnB,CAAC,GAAgB,EAAE,EAAE,CACnB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CACrF,EACH,WAAW,CACZ,CAAC;YAEF,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,gBAAgB,CAAC,gBAAgB;YAC/B,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,EAAe,EAAE,EAAE;gBACtE,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC5B,GAAG,GAAG;oBACN,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;iBACL,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,WAAW,CAAC;QAClC,CAAC;KACF,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"BasePricingSheet.js","sourceRoot":"","sources":["../../src/director/BasePricingSheet.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAuC,EACP,EAAE;IAClC,MAAM,YAAY,GAAmC;QACnD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QAEzB,kBAAkB;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,GAAG,CAAC,MAAM;YACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;iBACzB,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,CAAC,GAAW,EAAE,cAA2B,EAAE,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK;YACH,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;YACtD,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClE,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjF,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAChB,WAAW,CAAC,CAAC,CAAC,sBAAsB,GAAG,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CACrF;gBACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM;YACb,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAC1D,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAC5B,cAAc,CAAC,MAAM,CACnB,CAAC,GAAgB,EAAE,EAAE,CACnB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CACrF,EACH,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,gBAAgB,CAAC,gBAAgB;YAC/B,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,EAAe,EAAE,EAAE;gBACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBACpB,GAAG,GAAG;oBACN,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;iBACL,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;KACF,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/utils",
3
- "version": "2.4.2",
3
+ "version": "2.5.0",
4
4
  "main": "lib/utils-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/utils-index.js",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "homepage": "https://github.com/unchainedshop/unchained#readme",
32
32
  "dependencies": {
33
- "@unchainedshop/logger": "^2.4.2",
33
+ "@unchainedshop/logger": "^2.5.0",
34
34
  "abort-controller": "3.0.0",
35
35
  "hashids": "^2.3.0",
36
36
  "locale": "0.1.0",
@@ -38,8 +38,8 @@
38
38
  "simpl-schema": "=3.2.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@types/node": "^18.17.14",
42
- "@unchainedshop/types": "^2.4.2",
41
+ "@types/node": "^18.17.15",
42
+ "@unchainedshop/types": "^2.5.0",
43
43
  "jest": "^29.6.4",
44
44
  "typescript": "^5.2.2"
45
45
  }
@@ -25,36 +25,40 @@ describe('roundToNext', () => {
25
25
 
26
26
  describe("resolveRatioAndTaxDivisorForPricingSheet", () => {
27
27
  it('total is 0 and pricing is provided', () => {
28
- const pricing = {
28
+ const pricing: any = {
29
29
  taxSum: () => 10,
30
30
  gross: () => 20,
31
+ net: () => 10,
31
32
  };
32
33
  const result = resolveRatioAndTaxDivisorForPricingSheet(pricing, 0);
33
34
  expect(result).toEqual({ ratio: 1, taxDivisor: 1 });
34
35
  });
35
36
 
36
37
  it('gross - tax is 0', () => {
37
- const pricing = {
38
+ const pricing: any = {
38
39
  taxSum: () => 10,
39
40
  gross: () => 10,
41
+ net: () => 0,
40
42
  };
41
43
  const result = resolveRatioAndTaxDivisorForPricingSheet(pricing, 20);
42
44
  expect(result).toEqual({ ratio: 0, taxDivisor: 0 });
43
45
  });
44
46
 
45
47
  it('gross - tax is not 0', () => {
46
- const pricing = {
48
+ const pricing: any = {
47
49
  taxSum: () => 10,
48
50
  gross: () => 20,
51
+ net: () => 10,
49
52
  };
50
53
  const result = resolveRatioAndTaxDivisorForPricingSheet(pricing, 20);
51
54
  expect(result).toEqual({ ratio: 1, taxDivisor: 2 });
52
55
  });
53
56
 
54
57
  it('taxSum is 0', () => {
55
- const pricing = {
58
+ const pricing: any = {
56
59
  taxSum: () => 0,
57
60
  gross: () => 20,
61
+ net: () => 20,
58
62
  };
59
63
  const result = resolveRatioAndTaxDivisorForPricingSheet(pricing, 20);
60
64
  expect(result).toEqual({ ratio: 1, taxDivisor: 1 });
@@ -1,9 +1,12 @@
1
- export type PricingInterface = { taxSum: () => number; gross: () => number };
1
+ import { IBasePricingSheet, PricingCalculation } from '@unchainedshop/types/pricing.js';
2
2
 
3
3
  export const roundToNext = (value: number, precision: number) =>
4
4
  Math.ceil(value / precision) * precision;
5
5
 
6
- export const resolveRatioAndTaxDivisorForPricingSheet = (pricing: PricingInterface, total: number) => {
6
+ export const resolveRatioAndTaxDivisorForPricingSheet = (
7
+ pricing: IBasePricingSheet<PricingCalculation>,
8
+ total: number,
9
+ ) => {
7
10
  if (total === 0 || !pricing) {
8
11
  return {
9
12
  ratio: 1,
@@ -7,19 +7,17 @@ import {
7
7
  export const BasePricingSheet = <Calculation extends PricingCalculation>(
8
8
  params: PricingSheetParams<Calculation>,
9
9
  ): IBasePricingSheet<Calculation> => {
10
- const calculation = params.calculation || [];
11
-
12
10
  const pricingSheet: IBasePricingSheet<Calculation> = {
13
- calculation,
11
+ calculation: params.calculation || [],
14
12
  currency: params.currency,
15
13
  quantity: params.quantity,
16
14
 
17
15
  getRawPricingSheet() {
18
- return calculation;
16
+ return this.calculation;
19
17
  },
20
18
 
21
19
  isValid() {
22
- return calculation.length > 0;
20
+ return this.calculation.length > 0;
23
21
  },
24
22
 
25
23
  sum(filter) {
@@ -37,20 +35,17 @@ export const BasePricingSheet = <Calculation extends PricingCalculation>(
37
35
  },
38
36
 
39
37
  net() {
40
- return this.gross() - this.taxSum();
38
+ return this.sum() - this.taxSum();
41
39
  },
42
40
 
43
41
  total({ category, useNetPrice } = { useNetPrice: false }) {
44
- if (!category) {
45
- return {
46
- amount: Math.round(useNetPrice ? this.net() : this.gross()),
47
- currency: params.currency,
48
- };
49
- }
50
-
42
+ const grossAmountForCategory = this.sum(category && { category });
43
+ const taxAmountForCategory = this.taxSum(category && { baseCategory: category });
51
44
  return {
52
- amount: Math.round(this.sum({ category } as any)),
53
- currency: params.currency,
45
+ amount: Math.round(
46
+ useNetPrice ? grossAmountForCategory - taxAmountForCategory : grossAmountForCategory,
47
+ ),
48
+ currency: this.currency,
54
49
  };
55
50
  },
56
51
 
@@ -61,7 +56,7 @@ export const BasePricingSheet = <Calculation extends PricingCalculation>(
61
56
  (row: Calculation) =>
62
57
  !!row && (filter[filterKey] === undefined || row[filterKey] === filter[filterKey]),
63
58
  ),
64
- calculation,
59
+ this.calculation,
65
60
  );
66
61
 
67
62
  return filteredCalculation;
@@ -69,12 +64,12 @@ export const BasePricingSheet = <Calculation extends PricingCalculation>(
69
64
 
70
65
  resetCalculation(calculationSheet) {
71
66
  calculationSheet.filterBy().forEach(({ amount, ...row }: Calculation) => {
72
- pricingSheet.calculation.push({
67
+ this.calculation.push({
73
68
  ...row,
74
69
  amount: amount * -1,
75
70
  } as Calculation);
76
71
  });
77
- return pricingSheet.calculation;
72
+ return this.calculation;
78
73
  },
79
74
  };
80
75