@darkpos/pricing 1.0.117 → 1.0.120

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.
@@ -281,3 +281,41 @@ test('getInvalidRequiredModifiers having related items', () => {
281
281
  name: 'White',
282
282
  });
283
283
  });
284
+
285
+ test('getInvalidRequiredModifiers having override modifiers', () => {
286
+ const item = {
287
+ modifiers: [
288
+ {
289
+ _id: '675354ee39a47228afd1f1a4',
290
+ attributes: ['override'],
291
+ modifierId: '6751f7eeb60c71cefee138ee',
292
+ name: 'Override modamount fixed 10',
293
+ group: 'Upcharge',
294
+ type: 'fee',
295
+ tags: ['default', 'all'],
296
+ direct: true,
297
+ required: true,
298
+ properties: {
299
+ override: {
300
+ type: 'fixed',
301
+ field: 'amount',
302
+ fixedValue: undefined,
303
+ multiplier: false,
304
+ },
305
+ },
306
+ },
307
+ ],
308
+ _id: '67dc63610c106ab7d481d7dd',
309
+ itemId: '62cdbfd01ee1b4001932821a',
310
+ };
311
+
312
+ const response = pricingService.item.getInvalidRequiredModifiers({
313
+ item,
314
+ });
315
+
316
+ expect(response.length).toBe(1);
317
+ expect(response[0]).toMatchObject({
318
+ _id: '675354ee39a47228afd1f1a4',
319
+ name: 'Override modamount fixed 10',
320
+ });
321
+ });
@@ -6,8 +6,9 @@ module.exports = ({ modifierActions, actions }) =>
6
6
  item.modifiers.forEach(modifier => {
7
7
  if (
8
8
  modifierActions.isRequired(modifier) &&
9
- modifierActions.isGroup(modifier) &&
10
- !actions.hasModifier({ item, modifier, relatedItems })
9
+ ((modifierActions.isGroup(modifier) &&
10
+ !actions.hasModifier({ item, modifier, relatedItems })) ||
11
+ modifierActions.isEmptyOverride(modifier))
11
12
  ) {
12
13
  invalidModifiers.push(modifier);
13
14
  }
@@ -3,8 +3,9 @@ module.exports = ({ modifierActions }) =>
3
3
  if (!item || !Array.isArray(item.modifiers)) return [];
4
4
  return item.modifiers.filter(
5
5
  modifier =>
6
- modifierActions.isGroup(modifier) &&
7
6
  modifierActions.isRequired(modifier) &&
8
- modifierActions.enableAutoPopup(modifier)
7
+ ((modifierActions.isGroup(modifier) &&
8
+ modifierActions.enableAutoPopup(modifier)) ||
9
+ modifierActions.isOverride(modifier))
9
10
  );
10
11
  };
package/lib/item/index.js CHANGED
@@ -70,6 +70,7 @@ const adjustNegativeTotal = require('./adjustNegativeTotal');
70
70
  const applyNotesOverridesToItem = require('./applyNotesOverridesToItem');
71
71
  const getModifiersToNotCompute = require('./getModifiersToNotCompute');
72
72
  const getSplitDepartment = require('./getSplitDepartment');
73
+ const isPriceChanged = require('./isPriceChanged');
73
74
 
74
75
  const itemActions = (deps = {}) => {
75
76
  const actions = {};
@@ -153,6 +154,7 @@ const itemActions = (deps = {}) => {
153
154
  applyNotesOverridesToItem: applyNotesOverridesToItem(innerDeps),
154
155
  getModifiersToNotCompute: getModifiersToNotCompute(innerDeps),
155
156
  getSplitDepartment: getSplitDepartment(innerDeps),
157
+ isPriceChanged: isPriceChanged(innerDeps),
156
158
  });
157
159
 
158
160
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function isPriceChanged(item) {
3
+ if (!item || !item.properties) return false;
4
+ return !!item.properties.priceChanged;
5
+ };
@@ -47,6 +47,9 @@ module.exports = ({ actions, utils }) => {
47
47
  }
48
48
 
49
49
  if (actions.isAdd(paymentModifier)) {
50
+ if (amountToPay > itemBalance) {
51
+ amountToPay = itemBalance;
52
+ }
50
53
  return actions.calculatePaymentFeeModifier({
51
54
  amountToPay,
52
55
  paymentModifier,
@@ -178,6 +178,7 @@ const isKeepRelatedItems = require('./isKeepRelatedItems');
178
178
  const isSplitDepartment = require('./isSplitDepartment');
179
179
  const isModifierValid = require('./isModifierValid');
180
180
  const markModifierAsNotValid = require('./markModifierAsNotValid');
181
+ const isEmptyOverride = require('./isEmptyOverride');
181
182
 
182
183
  const modifierActions = (deps = {}) => {
183
184
  const actions = {};
@@ -369,6 +370,7 @@ const modifierActions = (deps = {}) => {
369
370
  isSplitDepartment: isSplitDepartment(innerDeps),
370
371
  isModifierValid: isModifierValid(innerDeps),
371
372
  markModifierAsNotValid: markModifierAsNotValid(innerDeps),
373
+ isEmptyOverride: isEmptyOverride(innerDeps),
372
374
  });
373
375
 
374
376
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,14 @@
1
+ module.exports = ({ actions }) =>
2
+ function isEmptyOverride(modifier) {
3
+ if (!actions.isOverride(modifier) || actions.isNotesOverride(modifier))
4
+ return false;
5
+ const computeAmount = modifier.compute && modifier.compute.amount;
6
+ const { fixedValue } = modifier.properties.override;
7
+
8
+ console.log({ computeAmount, fixedValue });
9
+
10
+ const result =
11
+ typeof computeAmount !== 'number' && typeof fixedValue !== 'number';
12
+
13
+ return result;
14
+ };
@@ -218,10 +218,6 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
218
218
  let [nextOrder, nextItemIndex] = params;
219
219
  const [, , nextItem] = params;
220
220
 
221
- const overrideModifiers = modifiersToAdd.filter(modToAdd =>
222
- modifierActions.isOverride(modToAdd)
223
- );
224
-
225
221
  if (modifiersToAdd.length) {
226
222
  nextOrder = modifiersToAdd.reduce(
227
223
  (acc, modifier) =>
@@ -287,7 +283,6 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
287
283
  updatedOrder: nextOrder,
288
284
  itemIndex: nextItemIndex,
289
285
  item: nextItem,
290
- overrideModifiers,
291
286
  };
292
287
  };
293
288
  };
@@ -39,6 +39,8 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
39
39
  ...(item.properties || {}),
40
40
  };
41
41
 
42
+ if (itemActions.isPriceChanged(item)) return item;
43
+
42
44
  item.price = itemActions.getItemPrice({
43
45
  item,
44
46
  itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
@@ -65,7 +67,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
65
67
  }
66
68
 
67
69
  const customer = actions.getCustomer(order);
68
- const contains =
70
+ let contains =
69
71
  !_.isEmpty(item.modifiers) &&
70
72
  modifierActions.contains(
71
73
  item.modifiers.filter(mod => !modifierActions.isGroupOfModifiers(mod)),
@@ -97,13 +99,21 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
97
99
  return order;
98
100
  }
99
101
 
102
+ const isOverride = modifierActions.isOverride(modifier);
103
+
100
104
  order = actions.removeItemModifier({
101
105
  order,
102
106
  modifier,
103
107
  itemIndex,
104
108
  originalItem,
109
+ forceRemove: isOverride,
105
110
  });
106
- return order;
111
+
112
+ if (!isOverride) {
113
+ return order;
114
+ }
115
+ contains = false;
116
+ item = actions.getSelectedItem({ order, itemIndex });
107
117
  }
108
118
 
109
119
  const modifiersToRemove = itemActions.getModifiersBySingleValueId({
@@ -17,14 +17,16 @@ module.exports = ({ actions, modifierActions, itemActions, _ }) => {
17
17
  modifier,
18
18
  itemIndex,
19
19
  originalItem,
20
+ forceRemove,
20
21
  }) {
21
22
  const order = _.cloneDeep(orderProp);
22
23
 
23
24
  if (
24
- !order ||
25
- itemIndex < 0 ||
26
- !modifier ||
27
- modifierActions.isRequired(modifier)
25
+ !forceRemove &&
26
+ (!order ||
27
+ itemIndex < 0 ||
28
+ !modifier ||
29
+ modifierActions.isRequired(modifier))
28
30
  )
29
31
  return order;
30
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.117",
3
+ "version": "1.0.120",
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": "3519ea921f066379601e455e8d838bdad9378dd0"
58
+ "gitHead": "60acf14d0f3046fd5c04ca2ddc0fbc89832eb561"
59
59
  }