@darkpos/pricing 1.0.99 → 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.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 +0 -87
- 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,88 +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,
|
|
84
9
|
originalItem,
|
|
85
|
-
onConditionsNotMet,
|
|
86
10
|
onError,
|
|
87
11
|
}) => {
|
|
88
12
|
if (
|
|
@@ -99,20 +23,11 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
99
23
|
|
|
100
24
|
const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
|
|
101
25
|
const item = { ...itemProp };
|
|
102
|
-
const conditionsBag = areConditionsMet(item, modifier.conditions);
|
|
103
26
|
|
|
104
|
-
if (conditionsBag.length > 0 && !modifierActions.isRequired(modifier)) {
|
|
105
|
-
if (onConditionsNotMet) onConditionsNotMet(conditionsBag);
|
|
106
|
-
return item;
|
|
107
|
-
}
|
|
108
27
|
const modifierToAdd = modifierActions.duplicate(modifier);
|
|
109
28
|
|
|
110
29
|
item.modifiers.push(modifierToAdd);
|
|
111
30
|
|
|
112
|
-
if (modifierActions.isRemoveModifier(modifier)) {
|
|
113
|
-
item.modifiers = filterByRemoveModifiers(item.modifiers, modifier);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
31
|
item.properties = {
|
|
117
32
|
...(item.properties || {}),
|
|
118
33
|
};
|
|
@@ -131,7 +46,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
131
46
|
modifier,
|
|
132
47
|
itemIndex,
|
|
133
48
|
originalItem,
|
|
134
|
-
onConditionsNotMet,
|
|
135
49
|
onError,
|
|
136
50
|
}) {
|
|
137
51
|
let order = _.cloneDeep(orderProp);
|
|
@@ -225,7 +139,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
225
139
|
modifier,
|
|
226
140
|
originalItem,
|
|
227
141
|
customer,
|
|
228
|
-
onConditionsNotMet,
|
|
229
142
|
onError,
|
|
230
143
|
});
|
|
231
144
|
|
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
|
-
};
|