@darkpos/pricing 1.0.45 → 1.0.47

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.
@@ -26,7 +26,11 @@ describe('addItem function', () => {
26
26
  };
27
27
 
28
28
  // Call the function
29
- const [updatedOrder, itemIndex, addedItem] = addItem({
29
+ const {
30
+ updatedOrder,
31
+ itemIndex,
32
+ item: addedItem,
33
+ } = addItem({
30
34
  order,
31
35
  item,
32
36
  itemIndex: -1, // No existing item in order
@@ -67,7 +71,11 @@ describe('addItem function', () => {
67
71
  };
68
72
 
69
73
  // Call the function
70
- const [updatedOrder, itemIndex, addedItem] = addItem({
74
+ const {
75
+ updatedOrder,
76
+ itemIndex,
77
+ item: addedItem,
78
+ } = addItem({
71
79
  order,
72
80
  item,
73
81
  itemIndex: -1, // Assuming no explicit index
@@ -99,7 +107,7 @@ describe('addItem function', () => {
99
107
  };
100
108
 
101
109
  // Call the function with an overridden quantity
102
- const [updatedOrder, , addedItem] = addItem({
110
+ const { updatedOrder, item: addedItem } = addItem({
103
111
  order,
104
112
  item,
105
113
  itemIndex: -1, // Assuming no explicit index
@@ -153,7 +161,7 @@ describe('addItem function', () => {
153
161
  },
154
162
  {
155
163
  _id: '66cdf18a1e48455e128a4f64',
156
- modifierId: 'mod2',
164
+ modifierId: null,
157
165
  _parentId: null,
158
166
  name: null,
159
167
  sku: null,
@@ -179,7 +187,7 @@ describe('addItem function', () => {
179
187
  };
180
188
 
181
189
  // Call the function
182
- const [updatedOrder] = addItem({
190
+ const { updatedOrder } = addItem({
183
191
  order,
184
192
  item,
185
193
  itemIndex: -1, // Assuming no explicit index
@@ -190,9 +198,7 @@ describe('addItem function', () => {
190
198
  // Assertions
191
199
  expect(updatedOrder.items).toHaveLength(1); // Should have one item
192
200
  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
201
+ expect(updatedOrder.items[0].modifiers[0].modifierId).toBe('mod1'); // Check first modifier
196
202
  expect(updatedOrder.items[0].modifiers[1].modifierId).toBe(
197
203
  '66cdf18a1e48455e128a4f64'
198
204
  ); // 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
+ };
@@ -187,6 +187,7 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
187
187
  !_.isEmpty(orderItem.modifiers)
188
188
  )
189
189
  requiredModifiers = getUnselectedModifiers(orderItem, requiredModifiers);
190
+
190
191
  if (!_.isEmpty(requiredModifiers)) {
191
192
  modifiersToAdd.push(
192
193
  ...requiredModifiers.filter(
@@ -213,17 +214,23 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
213
214
  let [nextOrder, nextItemIndex] = params;
214
215
  const [, , nextItem] = params;
215
216
 
217
+ const overrideModifiers = modifiersToAdd.filter(modToAdd =>
218
+ modifierActions.isOverride(modToAdd)
219
+ );
220
+
216
221
  if (modifiersToAdd.length) {
217
- nextOrder = modifiersToAdd.reduce(
218
- (acc, modifier) =>
219
- actions.addItemModifier({
220
- itemIndex: nextItemIndex,
221
- order: acc,
222
- modifier,
223
- cache,
224
- }),
225
- nextOrder
226
- );
222
+ nextOrder = modifiersToAdd
223
+ .filter(modToAdd => !modifierActions.isOverride(modToAdd))
224
+ .reduce(
225
+ (acc, modifier) =>
226
+ actions.addItemModifier({
227
+ itemIndex: nextItemIndex,
228
+ order: acc,
229
+ modifier,
230
+ cache,
231
+ }),
232
+ nextOrder
233
+ );
227
234
  }
228
235
 
229
236
  const { reArrangedOrder, newIndex } = reArrangeNewItem({
@@ -243,6 +250,11 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
243
250
  nextOrder.items.splice(idxToRemove, 1);
244
251
  }
245
252
 
246
- return [nextOrder, nextItemIndex, nextItem];
253
+ return {
254
+ updatedOrder: nextOrder,
255
+ itemIndex: nextItemIndex,
256
+ item: nextItem,
257
+ overrideModifiers,
258
+ };
247
259
  };
248
260
  };
@@ -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)
@@ -237,7 +244,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
237
244
 
238
245
  if (modifierActions.hasRelatedItems(modifier)) {
239
246
  order = modifier.properties.group.items.reduce((acc, each) => {
240
- const [nextOrder] = actions.addItem({
247
+ const { updatedOrder: nextOrder } = actions.addItem({
241
248
  item: {
242
249
  ...each,
243
250
  itemId: each._id,
@@ -14,7 +14,7 @@ module.exports = ({ actions, settings, _ }) => {
14
14
  const updatedQuantity = reset
15
15
  ? quantity
16
16
  : parseInt(`${item.quantity}${quantity}`, 10);
17
- return actions.updateItem({
17
+ const { updatedOrder } = actions.updateItem({
18
18
  order,
19
19
  itemIndex,
20
20
  item: {
@@ -22,6 +22,7 @@ module.exports = ({ actions, settings, _ }) => {
22
22
  quantity: updatedQuantity,
23
23
  },
24
24
  });
25
+ return updatedOrder;
25
26
  }
26
27
  if (isBefore) {
27
28
  return actions.addItem({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
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": "98185abdf0b1e4c22098c17b8eb1fde30c673093"
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
- };