@darkpos/pricing 1.0.114 → 1.0.116

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.
@@ -1728,7 +1728,21 @@ describe('hasModifier Function', () => {
1728
1728
  expect(updatedOrder2.items[1]).toMatchObject({
1729
1729
  _id: 1,
1730
1730
  itemId: 'ab',
1731
- modifiers: [],
1731
+ modifiers: [
1732
+ {
1733
+ _id: 'groupMod10',
1734
+ attributes: ['group'],
1735
+ properties: {
1736
+ group: {
1737
+ items: [{ _id: 'abc', name: 'related item abc', itemId: 'abc' }],
1738
+ modifiers: [{ _id: '123', name: 'related mod' }],
1739
+ },
1740
+ },
1741
+ conditions: { valid: true },
1742
+ compute: null,
1743
+ _computed: { amount: 0, description: 'undefined' },
1744
+ },
1745
+ ],
1732
1746
  price: 0,
1733
1747
  total: 0,
1734
1748
  subTotals: {
@@ -4,7 +4,10 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
4
4
  //
5
5
 
6
6
  const calculateOne = (inputItem, opts = {}) => {
7
- const item = _.cloneDeep(inputItem);
7
+ const item = _.cloneDeep({
8
+ ...inputItem,
9
+ quantity: math.max(0, Number(inputItem.quantity) || 0),
10
+ });
8
11
  const amountToPay =
9
12
  typeof opts.amountToPay === 'number' ? opts.amountToPay : 0;
10
13
  const paymentMethod = opts.paymentMethod || null;
@@ -41,11 +44,9 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
41
44
  }
42
45
 
43
46
  const modifiers = [];
44
- let { modifiers: itemModifiersPrev = [] } =
45
- actions.removeModifiersByQuantity(item);
46
47
 
47
- itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
48
- modifiers: itemModifiersPrev,
48
+ const itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
49
+ modifiers: item.modifiers,
49
50
  customer,
50
51
  });
51
52
 
package/lib/item/index.js CHANGED
@@ -43,7 +43,7 @@ const getTotalsDifference = require('./getTotalsDifference');
43
43
  const getTotalNeareastDifference = require('./getTotalNeareastDifference');
44
44
  const getNoteTags = require('./getNoteTags');
45
45
  const getBasePrice = require('./getBasePrice');
46
- const removeModifiersByQuantity = require('./removeModifiersByQuantity');
46
+ const validateModifiersByQuantity = require('./validateModifiersByQuantity');
47
47
  const getModifiersBySingleValueId = require('./getModifiersBySingleValueId');
48
48
  const getLastLocation = require('./getLastLocation');
49
49
  const hasAddModifiers = require('./hasAddModifiers');
@@ -126,7 +126,7 @@ const itemActions = (deps = {}) => {
126
126
  getTotalNeareastDifference: getTotalNeareastDifference(innerDeps),
127
127
  getNoteTags: getNoteTags(innerDeps),
128
128
  getBasePrice: getBasePrice(innerDeps),
129
- removeModifiersByQuantity: removeModifiersByQuantity(innerDeps),
129
+ validateModifiersByQuantity: validateModifiersByQuantity(innerDeps),
130
130
  getModifiersBySingleValueId: getModifiersBySingleValueId(innerDeps),
131
131
  getLastLocation: getLastLocation(innerDeps),
132
132
  hasAddModifiers: hasAddModifiers(innerDeps),
@@ -1,4 +1,4 @@
1
- module.exports = ({ modifierActions }) =>
1
+ module.exports = ({ modifierActions, actions }) =>
2
2
  function validateModifiers({
3
3
  item,
4
4
  itemModifiers,
@@ -11,7 +11,7 @@ module.exports = ({ modifierActions }) =>
11
11
  customer,
12
12
  }) {
13
13
  const validatedModifiers = [];
14
- const firstValidatedModifiers = itemModifiers.map(each =>
14
+ let firstValidatedModifiers = itemModifiers.map(each =>
15
15
  modifierActions.validate(each, {
16
16
  item,
17
17
  startRequestDate,
@@ -24,6 +24,11 @@ module.exports = ({ modifierActions }) =>
24
24
  })
25
25
  );
26
26
 
27
+ firstValidatedModifiers = actions.validateModifiersByQuantity({
28
+ modifiers: firstValidatedModifiers,
29
+ quantity: item.quantity,
30
+ });
31
+
27
32
  const isIdMatch = (mod, modifierId) => {
28
33
  if (typeof mod === 'string') return mod === modifierId;
29
34
  return mod._id === modifierId;
@@ -58,13 +63,8 @@ module.exports = ({ modifierActions }) =>
58
63
  nextValidModifier.conditions.valid;
59
64
 
60
65
  if (shouldInvalidateAddModifier || shouldInvalidateDelModifier) {
61
- nextValidModifier = {
62
- ...nextValidModifier,
63
- conditions: {
64
- ...validModifier.conditions,
65
- valid: false,
66
- },
67
- };
66
+ nextValidModifier =
67
+ modifierActions.markModifierAsNotValid(nextValidModifier);
68
68
  }
69
69
 
70
70
  if (
@@ -0,0 +1,32 @@
1
+ module.exports = ({ modifierActions, utils }) =>
2
+ function validateModifiersByQuantity({ modifiers, quantity }) {
3
+ if (!modifiers || !Array.isArray(modifiers)) {
4
+ return [];
5
+ }
6
+
7
+ const modifierCounts = {};
8
+
9
+ return modifiers.map(modifier => {
10
+ if (
11
+ modifierActions.isPaymentModifier(modifier) ||
12
+ modifierActions.isCalculatedPaymentModifier(modifier) ||
13
+ modifierActions.isGroupOfModifiers(modifier) ||
14
+ !modifier.modifierId ||
15
+ !modifierActions.isDirect(modifier) ||
16
+ modifierActions.isUnlimitedItemUse(modifier)
17
+ )
18
+ return modifier;
19
+
20
+ const count = modifierCounts[modifier.modifierId] || 0;
21
+
22
+ const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
23
+ const maxQuantity = utils.math.mul(quantity || 0, maxApplies) || quantity;
24
+
25
+ if (count < maxQuantity) {
26
+ modifierCounts[modifier.modifierId] = count + 1;
27
+ return modifier;
28
+ }
29
+
30
+ return modifierActions.markModifierAsNotValid(modifier);
31
+ });
32
+ };
@@ -177,6 +177,7 @@ const isAutoSplit = require('./isAutoSplit');
177
177
  const isKeepRelatedItems = require('./isKeepRelatedItems');
178
178
  const isSplitDepartment = require('./isSplitDepartment');
179
179
  const isModifierValid = require('./isModifierValid');
180
+ const markModifierAsNotValid = require('./markModifierAsNotValid');
180
181
 
181
182
  const modifierActions = (deps = {}) => {
182
183
  const actions = {};
@@ -367,6 +368,7 @@ const modifierActions = (deps = {}) => {
367
368
  isKeepRelatedItems: isKeepRelatedItems(innerDeps),
368
369
  isSplitDepartment: isSplitDepartment(innerDeps),
369
370
  isModifierValid: isModifierValid(innerDeps),
371
+ markModifierAsNotValid: markModifierAsNotValid(innerDeps),
370
372
  });
371
373
 
372
374
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,10 @@
1
+ module.exports = () =>
2
+ function markModifierAsNotValid(modifier) {
3
+ return {
4
+ ...modifier,
5
+ conditions: {
6
+ ...modifier.conditions,
7
+ valid: false,
8
+ },
9
+ };
10
+ };
@@ -6,7 +6,6 @@ module.exports = ({ itemActions }) =>
6
6
  {
7
7
  ...item,
8
8
  price: 0,
9
- modifiers: [],
10
9
  },
11
10
  {}
12
11
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.114",
3
+ "version": "1.0.116",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -55,5 +55,5 @@
55
55
  "supertest": "^6.2.3",
56
56
  "supervisor": "^0.12.0"
57
57
  },
58
- "gitHead": "cf91c373155b5fe5207ec9234abffd772fd3df40"
58
+ "gitHead": "f61e54dc3685291e31f65a542255e54d6c0923fe"
59
59
  }
@@ -1,36 +0,0 @@
1
- module.exports = ({ modifierActions, utils }) =>
2
- function removeModifiersByQuantity(item) {
3
- if (!item || !Array.isArray(item.modifiers)) {
4
- return item;
5
- }
6
-
7
- const modifierCounts = {};
8
-
9
- return {
10
- ...item,
11
- modifiers: item.modifiers.filter(modifier => {
12
- if (
13
- modifierActions.isPaymentModifier(modifier) ||
14
- modifierActions.isCalculatedPaymentModifier(modifier) ||
15
- modifierActions.isGroupOfModifiers(modifier) ||
16
- !modifier.modifierId ||
17
- !modifierActions.isDirect(modifier) ||
18
- modifierActions.isUnlimitedItemUse(modifier)
19
- )
20
- return true;
21
-
22
- const count = modifierCounts[modifier.modifierId] || 0;
23
-
24
- const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
25
- const maxQuantity =
26
- utils.math.mul(item.quantity || 0, maxApplies) || item.quantity;
27
-
28
- if (count < maxQuantity) {
29
- modifierCounts[modifier.modifierId] = count + 1;
30
- return true;
31
- }
32
-
33
- return false;
34
- }),
35
- };
36
- };