@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.
- package/__TEST__/item.test.js +25 -0
- package/__TEST__/modifier/addItemModifier.test.js +138 -0
- package/__TEST__/modifier.test.js +10 -142
- package/__TEST__/order/conditionsNotMet.test.js +309 -58
- package/__TEST__/order/order-payment-modifier.test.js +10 -8
- package/__TEST__/order/order.test.js +18 -12
- package/lib/item/calculate.js +10 -11
- package/lib/item/index.js +2 -0
- package/lib/item/removeModifier.js +15 -18
- package/lib/item/validateModifiers.js +71 -0
- package/lib/modifier/getDepartmentModifiers.js +1 -1
- package/lib/modifier/getInheritedModifiers.js +1 -1
- package/lib/modifier/index.js +0 -2
- package/lib/order/addItemModifier.js +8 -87
- package/lib/order/removeItemModifier.js +8 -1
- package/package.json +2 -2
- package/lib/modifier/purifyModifiers.js +0 -15
|
@@ -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
|
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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": "
|
|
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
|
-
};
|