@darkpos/pricing 1.0.71 → 1.0.73

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.
@@ -1651,22 +1651,19 @@ describe('hasModifier Function', () => {
1651
1651
  },
1652
1652
  };
1653
1653
 
1654
- const item = { _id: 1, itemId: 'ab', modifiers: [groupMod] };
1654
+ const item = {
1655
+ _id: 1,
1656
+ itemId: 'ab',
1657
+ modifiers: [groupMod],
1658
+ price: 500,
1659
+ total: 10000,
1660
+ };
1655
1661
 
1656
1662
  const order = {
1657
1663
  items: [item],
1658
1664
  modifiers: [],
1659
1665
  };
1660
1666
 
1661
- // const modifier = groupMod;
1662
- // const relatedItems = [];
1663
-
1664
- // const result = pricingService.item.hasModifier({
1665
- // item,
1666
- // modifier,
1667
- // relatedItems,
1668
- // });
1669
-
1670
1667
  const { updatedOrder } = pricingService.order.addItem({
1671
1668
  order,
1672
1669
  item: {
@@ -1676,12 +1673,30 @@ describe('hasModifier Function', () => {
1676
1673
  parentItemId: item.itemId,
1677
1674
  parentId: item._id,
1678
1675
  includeParent: true,
1679
- relatedItemId: relatedModItem._id,
1676
+ groupPath: ',groupMod10',
1680
1677
  },
1681
1678
  },
1682
1679
  });
1683
1680
 
1684
1681
  expect(updatedOrder.items.length).toBe(2);
1682
+ expect(updatedOrder.items[1]).toMatchObject({
1683
+ _id: 1,
1684
+ itemId: 'ab',
1685
+ modifiers: [
1686
+ {
1687
+ _id: 'groupMod10',
1688
+ attributes: ['group'],
1689
+ properties: {
1690
+ group: {
1691
+ items: [{ _id: 'abc', name: 'related item abc', itemId: 'abc' }],
1692
+ modifiers: [{ _id: '123', name: 'related mod' }],
1693
+ },
1694
+ },
1695
+ },
1696
+ ],
1697
+ price: 500,
1698
+ total: 10000,
1699
+ });
1685
1700
 
1686
1701
  const result = pricingService.item.hasModifier({
1687
1702
  item: updatedOrder.items[1],
@@ -1693,5 +1708,47 @@ describe('hasModifier Function', () => {
1693
1708
  });
1694
1709
 
1695
1710
  expect(result).toBe(true);
1711
+
1712
+ const { updatedOrder: updatedOrder2 } = pricingService.order.addItem({
1713
+ order,
1714
+ item: {
1715
+ ...relatedModItem,
1716
+ properties: {
1717
+ relatedItem: true,
1718
+ parentItemId: item.itemId,
1719
+ parentId: item._id,
1720
+ includeParent: false,
1721
+ groupPath: ',groupMod10',
1722
+ },
1723
+ },
1724
+ });
1725
+
1726
+ expect(updatedOrder2.items.length).toBe(2);
1727
+
1728
+ expect(updatedOrder2.items[1]).toMatchObject({
1729
+ _id: 1,
1730
+ itemId: 'ab',
1731
+ modifiers: [],
1732
+ price: 0,
1733
+ total: 0,
1734
+ subTotals: {
1735
+ _included: 0,
1736
+ _xincluded: 0,
1737
+ _direct: 0,
1738
+ _xdirect: 0,
1739
+ _actual: 0,
1740
+ },
1741
+ });
1742
+
1743
+ const result2 = pricingService.item.hasModifier({
1744
+ item: updatedOrder2.items[1],
1745
+ modifier: groupMod,
1746
+ relatedItems: pricingService.order.getRelatedItems({
1747
+ order: updatedOrder2,
1748
+ item: updatedOrder2.items[1],
1749
+ }),
1750
+ });
1751
+
1752
+ expect(result2).toBe(true);
1696
1753
  });
1697
1754
  });
@@ -6,7 +6,7 @@ module.exports = ({ modifierActions, actions }) =>
6
6
  item.modifiers.forEach(modifier => {
7
7
  if (
8
8
  modifierActions.isRequired(modifier) &&
9
- modifierActions.isGroupOfModifiers(modifier) &&
9
+ modifierActions.isGroup(modifier) &&
10
10
  !actions.hasModifier({ item, modifier, relatedItems })
11
11
  ) {
12
12
  invalidModifiers.push(modifier);
@@ -1,36 +1,36 @@
1
1
  module.exports = ({ modifierActions }) =>
2
- function hasModifier({ item, modifier, relatedItems, originalModifier }) {
2
+ function hasModifier({ item, modifier, relatedItems }) {
3
3
  if (!item || !modifier || !item.modifiers) return false;
4
4
 
5
- const originalMod = originalModifier || modifier;
5
+ const isGroupPath = groupPath =>
6
+ groupPath &&
7
+ (groupPath.includes(modifier.modifierId) ||
8
+ groupPath.includes(modifier._id));
6
9
 
7
- if (modifierActions.isGroupOfModifiers(modifier)) {
8
- const relatedModifiers = modifier.properties.group.modifiers;
9
- return [
10
- modifierActions.removeGroupData({ modifier }),
11
- ...relatedModifiers,
12
- ].some(relatedModifier =>
13
- hasModifier({
14
- item,
15
- modifier: relatedModifier,
16
- relatedItems,
17
- originalModifier: originalMod,
18
- })
19
- );
10
+ if (modifierActions.isGroup(modifier)) {
11
+ const matchByRelatedModifier = item.modifiers.some(itemMod => {
12
+ if (
13
+ modifierActions.isGroup(itemMod) ||
14
+ !itemMod.properties ||
15
+ !itemMod.properties.groupPath
16
+ )
17
+ return false;
18
+ return isGroupPath(itemMod.properties.groupPath);
19
+ });
20
+
21
+ const matchByRelatedItems =
22
+ !!relatedItems &&
23
+ modifierActions.isGroup(modifier) &&
24
+ relatedItems.some(relatedItem =>
25
+ isGroupPath(
26
+ relatedItem.properties && relatedItem.properties.groupPath
27
+ )
28
+ );
29
+
30
+ return matchByRelatedModifier || matchByRelatedItems;
20
31
  }
21
32
 
22
- const matchByModifier = item.modifiers.some(
33
+ return item.modifiers.some(
23
34
  each => !modifierActions.isGroup(each) && each.modifierId === modifier._id
24
35
  );
25
-
26
- const matchByRelatedItems =
27
- !!relatedItems &&
28
- modifierActions.isGroupOfItems(originalMod) &&
29
- relatedItems.some(relatedItem =>
30
- originalMod.properties.group.items.some(
31
- modItem => modItem._id === relatedItem.properties.relatedItemId
32
- )
33
- );
34
-
35
- return matchByModifier || matchByRelatedItems;
36
36
  };
@@ -37,7 +37,6 @@ module.exports = ({ modifierActions, _, actions }) => {
37
37
  items: order.items,
38
38
  item,
39
39
  }),
40
- originalModifier: addMod,
41
40
  }))
42
41
  ),
43
42
  ];
@@ -142,6 +142,7 @@ const isCompute = require('./isCompute');
142
142
  const isFixedOverride = require('./isFixedOverride');
143
143
  const isLocked = require('./isLocked');
144
144
  const hasAddModifier = require('./hasAddModifier');
145
+ const removeGroupRelations = require('./removeGroupRelations');
145
146
 
146
147
  const modifierActions = (deps = {}) => {
147
148
  const actions = {};
@@ -297,6 +298,7 @@ const modifierActions = (deps = {}) => {
297
298
  isFixedOverride: isFixedOverride(innerDeps),
298
299
  isLocked: isLocked(innerDeps),
299
300
  hasAddModifier: hasAddModifier(innerDeps),
301
+ removeGroupRelations: removeGroupRelations(innerDeps),
300
302
  });
301
303
 
302
304
  Object.keys(freezedActions).forEach(actionName => {
@@ -6,7 +6,8 @@ module.exports = ({ actions, constants }) => {
6
6
  actions.hasAttribute(modifier, Modifier.Attributes.GROUP) &&
7
7
  properties &&
8
8
  properties.group &&
9
- (properties.group.modifiers || []).length
9
+ ((properties.group.modifiers || []).length ||
10
+ !!properties.group.manualModifiers)
10
11
  );
11
12
  };
12
13
  };
@@ -0,0 +1,22 @@
1
+ module.exports = ({ actions }) =>
2
+ function removeGroupRelations(modifier) {
3
+ if (
4
+ !actions.isGroup(modifier) ||
5
+ !modifier.properties ||
6
+ !modifier.properties.group
7
+ )
8
+ return modifier;
9
+
10
+ return {
11
+ ...modifier,
12
+ properties: {
13
+ ...modifier.properties,
14
+ group: {
15
+ ...modifier.properties.group,
16
+ modifiers: [],
17
+ items: [],
18
+ manualModifiers: '',
19
+ },
20
+ },
21
+ };
22
+ };
@@ -168,8 +168,8 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
168
168
  if (!_.isEmpty(inheritedModifiers))
169
169
  modifiersToAdd.push(...inheritedModifiers);
170
170
  // Remove parent if it is only a repair Item
171
- if (!itemActions.isParentIncluded(orderItem)) {
172
- order = actions.removeItem({ order, item: parent });
171
+ if (!itemActions.isParentIncluded(orderItem) && !!parent) {
172
+ order = actions.resetItem({ order, item: parent });
173
173
  }
174
174
  }
175
175
  }
@@ -249,7 +249,11 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
249
249
  nextOrder.items.splice(idxToRemove, 1);
250
250
  }
251
251
 
252
- if (itemActions.isRelatedItem(item) && itemActions.hasAddModifiers(item)) {
252
+ if (
253
+ itemActions.isRelatedItem(item) &&
254
+ itemActions.hasAddModifiers(item) &&
255
+ itemActions.isParentIncluded(item)
256
+ ) {
253
257
  const parentItem = itemActions.getParentItem(nextOrder.items, item);
254
258
  const parentIndex = actions.getItemIndex({
255
259
  order: nextOrder,
@@ -92,7 +92,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
92
92
  originalItem,
93
93
  onConditionsNotMet,
94
94
  }) => {
95
- const modifier = _modifier; // to avoid no param reassign lint rule
95
+ const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
96
96
  let item = { ...itemProp };
97
97
  const compute = getComputeModField(modifier);
98
98
  const conditionsBag = areConditionsMet(item, modifier.conditions);
@@ -88,6 +88,7 @@ const applyPayment = require('./applyPayment');
88
88
  const getBalance = require('./getBalance');
89
89
  const getLastLocation = require('./getLastLocation');
90
90
  const getModifierRelations = require('./getModifierRelations');
91
+ const resetItem = require('./resetItem');
91
92
 
92
93
  const orderActions = (deps = {}) => {
93
94
  const actions = {};
@@ -187,6 +188,7 @@ const orderActions = (deps = {}) => {
187
188
  getOrdersBalance: getOrdersBalance(innerDeps),
188
189
  getLastLocation: getLastLocation(innerDeps),
189
190
  getModifierRelations: getModifierRelations(innerDeps),
191
+ resetItem: resetItem(innerDeps),
190
192
  });
191
193
 
192
194
  Object.keys(freezedActions).forEach(actionName => {
@@ -38,7 +38,6 @@ module.exports = ({ actions, itemActions }) => {
38
38
  order: prevOrder,
39
39
  item: parentItem,
40
40
  }),
41
- originalModifier: addModifier,
42
41
  })
43
42
  ) {
44
43
  const updatedItem = itemActions.removeModifier({
@@ -0,0 +1,25 @@
1
+ module.exports = ({ itemActions }) =>
2
+ function resetItem({ item, order }) {
3
+ if (!item) return undefined;
4
+
5
+ const itemReset = itemActions.calculate(
6
+ {
7
+ ...item,
8
+ price: 0,
9
+ modifiers: [],
10
+ },
11
+ {}
12
+ );
13
+
14
+ const nextItems = order.items;
15
+ const parentIndex = order.items.findIndex(
16
+ eachItem => eachItem._id === itemReset._id
17
+ );
18
+
19
+ nextItems.splice(parentIndex, 1, itemReset);
20
+
21
+ return {
22
+ ...order,
23
+ items: nextItems,
24
+ };
25
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.71",
3
+ "version": "1.0.73",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -17,6 +17,7 @@
17
17
  "test:validateConditions": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/validateConditionsCalculate.test.js",
18
18
  "test:hasModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/hasModifier.test.js",
19
19
  "test:item": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/item.test.js",
20
+ "test:manualTest": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/manualTest.test.js",
20
21
  "test:split": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/split.test.js",
21
22
  "test:getModifierTags": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/item/getModifierTags.test.js",
22
23
  "test:createIndirectModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/createIndirectModifier.test.js",
@@ -49,5 +50,5 @@
49
50
  "supertest": "^6.2.3",
50
51
  "supervisor": "^0.12.0"
51
52
  },
52
- "gitHead": "95b6471cd80c91a665a81a66fe95e12cdf45ca27"
53
+ "gitHead": "276e28f676960107d60027bc70e22f698e6e124e"
53
54
  }