@darkpos/pricing 1.0.45 → 1.0.46

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.
@@ -153,7 +153,7 @@ describe('addItem function', () => {
153
153
  },
154
154
  {
155
155
  _id: '66cdf18a1e48455e128a4f64',
156
- modifierId: 'mod2',
156
+ modifierId: null,
157
157
  _parentId: null,
158
158
  name: null,
159
159
  sku: null,
@@ -190,9 +190,7 @@ describe('addItem function', () => {
190
190
  // Assertions
191
191
  expect(updatedOrder.items).toHaveLength(1); // Should have one item
192
192
  expect(updatedOrder.items[0].modifiers).toHaveLength(2); // Item should have two modifiers
193
- expect(updatedOrder.items[0].modifiers[0].modifierId).toBe(
194
- '66cdf18a1e48455e128a4f63'
195
- ); // Check first modifier
193
+ expect(updatedOrder.items[0].modifiers[0].modifierId).toBe('mod1'); // Check first modifier
196
194
  expect(updatedOrder.items[0].modifiers[1].modifierId).toBe(
197
195
  '66cdf18a1e48455e128a4f64'
198
196
  ); // Check second modifier
@@ -0,0 +1,24 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getInvalidRequiredModifiers({ item }) {
3
+ if (!item || !Array.isArray(item.modifiers)) return true;
4
+ const invalidModifiers = [];
5
+
6
+ item.modifiers.forEach(modifier => {
7
+ if (
8
+ modifierActions.isRequired(modifier) &&
9
+ modifierActions.isGroupOfModifiers(modifier) &&
10
+ !item.modifiers
11
+ .filter(mod => mod._id !== modifier._id)
12
+ .some(itemModifier =>
13
+ modifierActions.isRelatedModifier({
14
+ _id: itemModifier.modifierId || itemModifier._id,
15
+ modifier,
16
+ })
17
+ )
18
+ ) {
19
+ invalidModifiers.push(modifier);
20
+ }
21
+ });
22
+
23
+ return invalidModifiers;
24
+ };
@@ -10,7 +10,8 @@ module.exports = ({ modifierActions, _, settings }) =>
10
10
  modifierActions.isValid(each) &&
11
11
  !modifierActions.isAmountOverride(each) &&
12
12
  !modifierActions.isDepartment(each) &&
13
- modifierActions.isDirect(each)
13
+ modifierActions.isDirect(each) &&
14
+ !modifierActions.isGroupOfModifiers(each)
14
15
  )
15
16
  .map(modifier => {
16
17
  const { name, _id, compute = {} } = modifier;
@@ -0,0 +1,10 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getPipeModifiers({ item }) {
3
+ if (!item || !Array.isArray(item.modifiers)) return [];
4
+ return item.modifiers.filter(
5
+ modifier =>
6
+ modifierActions.isGroupOfModifiers(modifier) &&
7
+ modifierActions.isRequired(modifier) &&
8
+ modifierActions.enableAutoPopup(modifier)
9
+ );
10
+ };
@@ -1,15 +1,27 @@
1
- module.exports = () =>
1
+ module.exports = ({ modifierActions }) =>
2
2
  function hasModifier({ item, modifier }) {
3
3
  if (!item || !modifier || !item.modifiers) return false;
4
4
 
5
- const itemModifier = item.modifiers.find(
6
- each =>
7
- (each.modifierId &&
8
- (each.modifierId === modifier.modifierId ||
9
- each.modifierId === modifier._id)) ||
10
- (typeof each.modifier === 'object' &&
11
- each.modifier._id === modifier.modifierId)
12
- );
5
+ if (modifierActions.isGroupOfModifiers(modifier)) {
6
+ const relatedModifiers = modifier.properties.group.modifiers;
7
+ return [
8
+ modifierActions.removeGroupData({ modifier }),
9
+ ...relatedModifiers,
10
+ ].some(relatedModifier =>
11
+ hasModifier({ item, modifier: relatedModifier })
12
+ );
13
+ }
14
+
15
+ const itemModifier = item.modifiers
16
+ .filter(itemMod => !modifierActions.isGroupOfModifiers(itemMod))
17
+ .find(
18
+ each =>
19
+ (each.modifierId &&
20
+ (each.modifierId === modifier.modifierId ||
21
+ each.modifierId === modifier._id)) ||
22
+ (typeof each.modifier === 'object' &&
23
+ each.modifier._id === modifier.modifierId)
24
+ );
13
25
 
14
26
  return !!itemModifier;
15
27
  };
@@ -1,9 +1,8 @@
1
- module.exports = () =>
1
+ module.exports = ({ actions }) =>
2
2
  function hasModifiers({ item, modifiers }) {
3
3
  if (!item || !modifiers || !item.modifiers) return false;
4
4
 
5
- return item.modifiers.some(
6
- itemModifier =>
7
- !!modifiers.find(each => each._id === itemModifier.modifierId)
5
+ return modifiers.some(each =>
6
+ actions.hasModifier({ item, modifier: each })
8
7
  );
9
8
  };
package/lib/item/index.js CHANGED
@@ -9,7 +9,6 @@ const removeModifiers = require('./removeModifiers');
9
9
  const findOriginalItem = require('./findOriginalItem');
10
10
  const create = require('./create');
11
11
  const hasModifier = require('./hasModifier');
12
- const isSelected = require('./isSelected');
13
12
  const hasModifiers = require('./hasModifiers');
14
13
  const addIndirectModifier = require('./addIndirectModifier');
15
14
  const calculate = require('./calculate');
@@ -40,6 +39,8 @@ const hasPaymentMethodType = require('./hasPaymentMethodType');
40
39
  const removePaymentModifiersByPaymentId = require('./removePaymentModifiersByPaymentId');
41
40
  const hasPaymentModifierWithPaymentId = require('./hasPaymentModifierWithPaymentId');
42
41
  const getBalance = require('./getBalance');
42
+ const getPipeModifiers = require('./getPipeModifiers');
43
+ const getInvalidRequiredModifiers = require('./getInvalidRequiredModifiers');
43
44
 
44
45
  const itemActions = (deps = {}) => {
45
46
  const actions = {};
@@ -61,7 +62,6 @@ const itemActions = (deps = {}) => {
61
62
  findOriginalItem: findOriginalItem(innerDeps),
62
63
  create: create(innerDeps),
63
64
  hasModifier: hasModifier(innerDeps),
64
- isSelected: isSelected(innerDeps),
65
65
  hasModifiers: hasModifiers(innerDeps),
66
66
  addIndirectModifier: addIndirectModifier(innerDeps),
67
67
  calculate: calculate(innerDeps),
@@ -93,6 +93,8 @@ const itemActions = (deps = {}) => {
93
93
  removePaymentModifiersByPaymentId(innerDeps),
94
94
  hasPaymentModifierWithPaymentId: hasPaymentModifierWithPaymentId(innerDeps),
95
95
  getBalance: getBalance(innerDeps),
96
+ getPipeModifiers: getPipeModifiers(innerDeps),
97
+ getInvalidRequiredModifiers: getInvalidRequiredModifiers(innerDeps),
96
98
  });
97
99
 
98
100
  Object.keys(freezedActions).forEach(actionName => {
@@ -5,7 +5,7 @@ module.exports = ({ utils }) => {
5
5
 
6
6
  return {
7
7
  ...modifier,
8
- modifierId: modifier._id,
8
+ modifierId: modifier.modifierId || modifier._id,
9
9
  _id: helpers.getObjectID(),
10
10
  };
11
11
  };
@@ -19,7 +19,11 @@ module.exports = ({ actions }) => {
19
19
  return arr;
20
20
  }, []);
21
21
 
22
- if (actions.includesInGroup(modifier)) groupModifiers.unshift(modifier);
22
+ if (actions.includesInGroup(modifier))
23
+ groupModifiers.unshift({
24
+ ...actions.removeGroupData({ modifier }),
25
+ required: false,
26
+ });
23
27
 
24
28
  return groupModifiers;
25
29
  };
@@ -6,9 +6,7 @@ module.exports = ({ actions }) =>
6
6
  });
7
7
 
8
8
  const enabledModifiers = matchedModifiers.filter(
9
- each =>
10
- (actions.isDefault(each) || actions.isRequired(each)) &&
11
- !(actions.isGroupOfValues(each) || actions.isGroupOfModifiers(each))
9
+ each => actions.isDefault(each) || actions.isRequired(each)
12
10
  );
13
11
 
14
12
  const relatedModifiers = enabledModifiers
@@ -126,6 +126,8 @@ const mutateModifier = require('./mutateModifier');
126
126
  const isFixedDiscount = require('./isFixedDiscount');
127
127
  const removeLocked = require('./removeLocked');
128
128
  const hasItems = require('./hasItems');
129
+ const removeGroupData = require('./removeGroupData');
130
+ const isRelatedModifier = require('./isRelatedModifier');
129
131
  const getGroupedModifiers = require('./getGroupedModifiers');
130
132
  const getNotesToModifierTags = require('./getNotesToModifierTags');
131
133
  const isOptionsOverride = require('./isOptionsOverride');
@@ -281,6 +283,8 @@ const modifierActions = (deps = {}) => {
281
283
  isFee: isFee(innerDeps),
282
284
  isAdd: isAdd(innerDeps),
283
285
  mutateModifier: mutateModifier(innerDeps),
286
+ removeGroupData: removeGroupData(innerDeps),
287
+ isRelatedModifier: isRelatedModifier(innerDeps),
284
288
  getGroupedModifiers: getGroupedModifiers(innerDeps),
285
289
  getNotesToModifierTags: getNotesToModifierTags(innerDeps),
286
290
  isOptionsOverride: isOptionsOverride(innerDeps),
@@ -0,0 +1,13 @@
1
+ module.exports = ({ actions }) =>
2
+ function isRelatedModifier({ _id, modifier }) {
3
+ if (!modifier || !_id) return false;
4
+
5
+ if (actions.isGroupOfModifiers(modifier)) {
6
+ const relatedModifiers = modifier.properties.group.modifiers;
7
+ return [actions.removeGroupData({ modifier }), ...relatedModifiers].some(
8
+ relatedModifier => isRelatedModifier({ _id, modifier: relatedModifier })
9
+ );
10
+ }
11
+
12
+ return modifier._id === _id || modifier.modifierId === _id;
13
+ };
@@ -0,0 +1,20 @@
1
+ module.exports = ({ constants }) => {
2
+ const { Modifier } = constants;
3
+
4
+ return function removeGroupData({ modifier }) {
5
+ if (!modifier) return modifier;
6
+
7
+ return {
8
+ ...modifier,
9
+ properties:
10
+ modifier.properties && modifier.properties.group
11
+ ? { ...modifier.properties, group: null }
12
+ : modifier.properties,
13
+ attributes: Array.isArray(modifier.attributes)
14
+ ? modifier.attributes.filter(
15
+ attribute => attribute !== Modifier.Attributes.GROUP
16
+ )
17
+ : modifier.attributes,
18
+ };
19
+ };
20
+ };
@@ -173,7 +173,14 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
173
173
  const customer = actions.getCustomer(order);
174
174
  const contains =
175
175
  !_.isEmpty(item.modifiers) &&
176
- modifierActions.contains(item.modifiers, modifier);
176
+ modifierActions.contains(
177
+ item.modifiers.filter(
178
+ mod =>
179
+ !modifierActions.isRequired(mod) &&
180
+ !modifierActions.isGroupOfModifiers(mod)
181
+ ),
182
+ modifier
183
+ );
177
184
 
178
185
  const usingCount = contains
179
186
  ? modifierActions.getUsingCount(item.modifiers, modifier)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.45",
3
+ "version": "1.0.46",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -15,6 +15,7 @@
15
15
  "test:me": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order-payment-modifier.test.js",
16
16
  "test:order": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order.test.js",
17
17
  "test:validateConditions": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/validateConditionsCalculate.test.js",
18
+ "test:hasModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/hasModifier.test.js",
18
19
  "lint": "eslint --quiet lib/"
19
20
  },
20
21
  "publishConfig": {
@@ -38,5 +39,5 @@
38
39
  "supertest": "^6.2.3",
39
40
  "supervisor": "^0.12.0"
40
41
  },
41
- "gitHead": "3bfaa3655ef26d0dc0fb60bdc40caee1e3693ccb"
42
+ "gitHead": "e048578555dc3d2147bbc4e5b4e0d55809261dcc"
42
43
  }
@@ -1,13 +0,0 @@
1
- module.exports = ({ modifierActions, actions }) =>
2
- function isSelected({ item, modifier }) {
3
- if (!item || !item.modifiers || !modifier) return false;
4
- let hasModifier = actions.hasModifier({ item, modifier });
5
-
6
- if (!hasModifier && modifierActions.isGroupOfModifiers(modifier))
7
- hasModifier = actions.hasModifiers({
8
- item,
9
- modifiers: modifier.properties.group.modifiers,
10
- });
11
-
12
- return hasModifier;
13
- };