@darkpos/pricing 1.0.97 → 1.0.100

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.
@@ -0,0 +1,71 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function validateModifiers({
3
+ item,
4
+ itemModifiers,
5
+ startRequestDate,
6
+ endRequestDate,
7
+ allItems,
8
+ paymentMethod,
9
+ paymentType,
10
+ isPrepay,
11
+ }) {
12
+ const validatedModifiers = [];
13
+ const firstValidatedModifiers = itemModifiers.map(each =>
14
+ modifierActions.validate(each, {
15
+ item,
16
+ startRequestDate,
17
+ endRequestDate,
18
+ allItems,
19
+ paymentMethod,
20
+ paymentType,
21
+ isPrepay,
22
+ })
23
+ );
24
+
25
+ firstValidatedModifiers.forEach(validModifier => {
26
+ const parentAddModifier = firstValidatedModifiers.find(
27
+ validMod =>
28
+ validMod.addModifiers &&
29
+ validMod.addModifiers.some(
30
+ addMod => addMod._id === validModifier.modifierId
31
+ )
32
+ );
33
+
34
+ const parentDelModifier = firstValidatedModifiers.find(
35
+ validMod =>
36
+ validMod.delModifiers &&
37
+ validMod.delModifiers.some(
38
+ delMod => delMod._id === validModifier.modifierId
39
+ )
40
+ );
41
+
42
+ let nextValidModifier = { ...validModifier };
43
+ const shouldInvalidateAddModifier =
44
+ parentAddModifier &&
45
+ !parentAddModifier.conditions.valid &&
46
+ nextValidModifier.conditions.valid;
47
+
48
+ const shouldInvalidateDelModifier =
49
+ parentDelModifier &&
50
+ parentDelModifier.conditions.valid &&
51
+ nextValidModifier.conditions.valid;
52
+
53
+ if (shouldInvalidateAddModifier || shouldInvalidateDelModifier) {
54
+ nextValidModifier = {
55
+ ...nextValidModifier,
56
+ conditions: {
57
+ ...validModifier.conditions,
58
+ valid: false,
59
+ },
60
+ };
61
+ }
62
+
63
+ if (
64
+ !validatedModifiers.some(validMod => validMod._id === validModifier._id)
65
+ ) {
66
+ validatedModifiers.push(nextValidModifier);
67
+ }
68
+ });
69
+
70
+ return validatedModifiers;
71
+ };
@@ -5,7 +5,7 @@ module.exports = ({ actions, utils }) => {
5
5
  return function getDepartmentModifiers(modifiers) {
6
6
  if (!modifiers || !Array.isArray(modifiers)) return [];
7
7
  return modifiers
8
- .filter(each => actions.isDepartment(each))
8
+ .filter(each => actions.isValid(each) && actions.isDepartment(each))
9
9
  .sort((mod1, mod2) => math.sub(getOrder(mod1), getOrder(mod2)));
10
10
  };
11
11
  };
@@ -25,6 +25,6 @@ module.exports = ({ actions }) => {
25
25
  if (inheritedModifiers.length) modifiers.push(...inheritedModifiers);
26
26
  }
27
27
 
28
- return actions.purifyModifiers(modifiers);
28
+ return modifiers;
29
29
  };
30
30
  };
@@ -102,7 +102,6 @@ const isPaymentTypeModifier = require('./isPaymentTypeModifier');
102
102
  const isPreferences = require('./isPreferences');
103
103
  const isCompact = require('./isCompact');
104
104
  const isCredit = require('./isCredit');
105
- const purifyModifiers = require('./purifyModifiers');
106
105
  const sort = require('./sort');
107
106
  const isPaymentModifier = require('./isPaymentModifier');
108
107
  const isSubtract = require('./isSubtract');
@@ -278,7 +277,6 @@ const modifierActions = (deps = {}) => {
278
277
  isCompact: isCompact(innerDeps),
279
278
  isCredit: isCredit(innerDeps),
280
279
  isIncluded: isIncluded(innerDeps),
281
- purifyModifiers: purifyModifiers(innerDeps),
282
280
  sort: sort(innerDeps),
283
281
  isPaymentModifier: isPaymentModifier(innerDeps),
284
282
  isSubtract: isSubtract(innerDeps),
@@ -1,86 +1,12 @@
1
1
  module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
2
2
  const { math } = utils;
3
3
 
4
- const filterByRemoveModifiers = (modifiers, modifier) => {
5
- const { delModifiers = [] } = modifier;
6
-
7
- return modifiers.filter(
8
- each => !modifierActions.findById(delModifiers, each.modifierId)
9
- );
10
- };
11
-
12
- const areConditionsMet = (item, conditions) => {
13
- const conditionsBag = [];
14
- if (!conditions || !conditions.rules) return conditionsBag;
15
- // Find conditions with itemPieces as key
16
- const itemPiecesConditions = conditions.rules.filter(
17
- each => each.key === 'itemPieces'
18
- );
19
- if (itemPiecesConditions.length > 0) {
20
- itemPiecesConditions.forEach(each => {
21
- if (
22
- !modifierActions.validateNumberCondition(
23
- item.pieces,
24
- each.value,
25
- each.operand
26
- )
27
- ) {
28
- conditionsBag.push({
29
- name: `${each.operand}.itemPieces`,
30
- value: each.value,
31
- current: item.pieces,
32
- });
33
- }
34
- });
35
- }
36
- const itemQtyConditions = conditions.rules.filter(
37
- each => each.key === 'itemQuantity'
38
- );
39
- if (itemQtyConditions.length > 0) {
40
- itemQtyConditions.forEach(each => {
41
- if (
42
- !modifierActions.validateNumberCondition(
43
- item.quantity,
44
- each.value,
45
- each.operand
46
- )
47
- ) {
48
- conditionsBag.push({
49
- name: `${each.operand}.itemQuantity`,
50
- value: each.value,
51
- current: item.quantity,
52
- });
53
- }
54
- });
55
- }
56
- const requiredModifiersConditions = conditions.rules.filter(
57
- each => each.key === 'modifiers'
58
- );
59
- if (requiredModifiersConditions.length > 0) {
60
- requiredModifiersConditions.forEach(each => {
61
- if (
62
- !modifierActions.validateRequiredModifiers(
63
- item.modifiers,
64
- each.value,
65
- each.operand
66
- )
67
- ) {
68
- conditionsBag.push({
69
- name: `${each.operand}.modifiers`,
70
- value: each.value,
71
- current: item.modifiers,
72
- });
73
- }
74
- });
75
- }
76
- return conditionsBag;
77
- };
78
-
79
4
  const addModifier = ({
80
5
  order,
81
6
  modifier: _modifier,
82
7
  item: itemProp,
83
- onConditionsNotMet,
8
+ customer,
9
+ originalItem,
84
10
  onError,
85
11
  }) => {
86
12
  if (
@@ -97,24 +23,21 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
97
23
 
98
24
  const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
99
25
  const item = { ...itemProp };
100
- const conditionsBag = areConditionsMet(item, modifier.conditions);
101
26
 
102
- if (conditionsBag.length > 0 && !modifierActions.isRequired(modifier)) {
103
- if (onConditionsNotMet) onConditionsNotMet(conditionsBag);
104
- return item;
105
- }
106
27
  const modifierToAdd = modifierActions.duplicate(modifier);
107
28
 
108
29
  item.modifiers.push(modifierToAdd);
109
30
 
110
- if (modifierActions.isRemoveModifier(modifier)) {
111
- item.modifiers = filterByRemoveModifiers(item.modifiers, modifier);
112
- }
113
-
114
31
  item.properties = {
115
32
  ...(item.properties || {}),
116
33
  };
117
34
 
35
+ item.price = itemActions.getItemPrice({
36
+ item,
37
+ itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
38
+ customer,
39
+ });
40
+
118
41
  return item;
119
42
  };
120
43
 
@@ -123,7 +46,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
123
46
  modifier,
124
47
  itemIndex,
125
48
  originalItem,
126
- onConditionsNotMet,
127
49
  onError,
128
50
  }) {
129
51
  let order = _.cloneDeep(orderProp);
@@ -217,7 +139,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
217
139
  modifier,
218
140
  originalItem,
219
141
  customer,
220
- onConditionsNotMet,
221
142
  onError,
222
143
  });
223
144
 
@@ -1,4 +1,4 @@
1
- module.exports = ({ actions, modifierActions, _ }) => {
1
+ module.exports = ({ actions, modifierActions, itemActions, _ }) => {
2
2
  const removeModifier = ({ item, modifier }) => {
3
3
  const nextItem = { ...item, modifiers: [] };
4
4
 
@@ -29,6 +29,7 @@ module.exports = ({ actions, modifierActions, _ }) => {
29
29
  return order;
30
30
 
31
31
  let item = actions.getSelectedItem({ order, itemIndex });
32
+ const customer = actions.getCustomer(order);
32
33
 
33
34
  const contains = modifierActions.contains(item.modifiers, modifier);
34
35
 
@@ -41,6 +42,12 @@ module.exports = ({ actions, modifierActions, _ }) => {
41
42
  originalItem,
42
43
  });
43
44
 
45
+ item.price = itemActions.getItemPrice({
46
+ item,
47
+ itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
48
+ customer,
49
+ });
50
+
44
51
  order.items[itemIndex] = item;
45
52
 
46
53
  return order;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.97",
3
+ "version": "1.0.100",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -54,5 +54,5 @@
54
54
  "supertest": "^6.2.3",
55
55
  "supervisor": "^0.12.0"
56
56
  },
57
- "gitHead": "f0f3b0c934c2061d16a7237e6173d317dc15e811"
57
+ "gitHead": "dbe4e7f639282d1eb04927708dac5195275fe5e4"
58
58
  }
@@ -1,15 +0,0 @@
1
- module.exports = ({ actions }) =>
2
- function purifyModifiers(modifiers) {
3
- if (!modifiers) return [];
4
- const removeIds = modifiers
5
- .filter(modifier => actions.isRemoveModifier(modifier))
6
- .reduce(
7
- (acc, modifier) => [
8
- ...acc,
9
- modifier.properties.delModifiers.map(each => each._id),
10
- ],
11
- []
12
- );
13
-
14
- return modifiers.filter(each => !removeIds.includes(each.modifierId));
15
- };