@darkpos/pricing 1.0.93 → 1.0.96
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 +47 -60
- package/__TEST__/manualTest.test.js +1 -3
- package/__TEST__/modifier/addItemModifier.test.js +181 -60
- package/__TEST__/modifier/getInvalidRequiredModifiers.test.js +0 -1
- package/__TEST__/modifier/overrideModifiers.test.js +196 -0
- package/__TEST__/modifier.test.js +1 -4
- package/__TEST__/order/order-payment-modifier.test.js +3 -11
- package/__TEST__/order/order.test.js +0 -15
- package/lib/item/calculate.js +66 -18
- package/lib/item/getBasePrice.js +1 -3
- package/lib/item/getItemPrice.js +1 -12
- package/lib/item/getPriceWithoutModifiers.js +7 -5
- package/lib/item/index.js +6 -0
- package/lib/item/isOverwrittenPrice.js +4 -0
- package/lib/item/isOverwrittenQuantity.js +4 -0
- package/lib/item/overrideNotes.js +24 -0
- package/lib/item/removeModifier.js +1 -22
- package/lib/item/removeModifiers.js +1 -2
- package/lib/modifier/areConditionsMet.js +1 -1
- package/lib/modifier/calculate.js +20 -2
- package/lib/modifier/createDescription.js +6 -3
- package/lib/modifier/duplicate.js +3 -0
- package/lib/modifier/getOverrideAmount.js +7 -0
- package/lib/modifier/getOverrideNote.js +5 -0
- package/lib/modifier/getServiceOverride.js +5 -0
- package/lib/modifier/index.js +18 -12
- package/lib/modifier/{isManual.js → isManualOverride.js} +1 -1
- package/lib/modifier/{isMultiplier.js → isMultiplierOverride.js} +1 -1
- package/lib/modifier/isNotesOverride.js +7 -0
- package/lib/modifier/isOverrideSubtotal.js +9 -0
- package/lib/modifier/{isService.js → isServiceOverride.js} +1 -1
- package/lib/modifier/isTotalOverride.js +7 -0
- package/lib/order/addItem.js +10 -12
- package/lib/order/addItemModifier.js +9 -64
- package/lib/order/removeItemModifier.js +2 -33
- package/package.json +4 -2
- package/lib/modifier/createAmountOverrideModifier.js +0 -18
- package/lib/modifier/getService.js +0 -5
- package/lib/modifier/mutateModifier.js +0 -23
package/lib/order/addItem.js
CHANGED
|
@@ -218,18 +218,16 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
218
218
|
);
|
|
219
219
|
|
|
220
220
|
if (modifiersToAdd.length) {
|
|
221
|
-
nextOrder = modifiersToAdd
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
nextOrder
|
|
232
|
-
);
|
|
221
|
+
nextOrder = modifiersToAdd.reduce(
|
|
222
|
+
(acc, modifier) =>
|
|
223
|
+
actions.addItemModifier({
|
|
224
|
+
itemIndex: nextItemIndex,
|
|
225
|
+
order: acc,
|
|
226
|
+
modifier,
|
|
227
|
+
originalItem: item,
|
|
228
|
+
}),
|
|
229
|
+
nextOrder
|
|
230
|
+
);
|
|
233
231
|
}
|
|
234
232
|
|
|
235
233
|
const { reArrangedOrder, newIndex } = reArrangeNewItem({
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
2
2
|
const { math } = utils;
|
|
3
|
-
const { getComputeModField } = require('../modifier/utils');
|
|
4
|
-
|
|
5
|
-
const getPrice = ({ item, modifier }) => {
|
|
6
|
-
const compute = getComputeModField(modifier);
|
|
7
|
-
const amount = (modifier && compute && compute.amount) || 0;
|
|
8
|
-
const { price = 0 } = item;
|
|
9
|
-
if (modifierActions.isMultiplier(modifier)) return math.mul(price, amount);
|
|
10
|
-
return amount;
|
|
11
|
-
};
|
|
12
3
|
|
|
13
4
|
const filterByRemoveModifiers = (modifiers, modifier) => {
|
|
14
5
|
const { delModifiers = [] } = modifier;
|
|
@@ -89,8 +80,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
89
80
|
order,
|
|
90
81
|
modifier: _modifier,
|
|
91
82
|
item: itemProp,
|
|
92
|
-
customer,
|
|
93
|
-
originalItem,
|
|
94
83
|
onConditionsNotMet,
|
|
95
84
|
onError,
|
|
96
85
|
}) => {
|
|
@@ -107,64 +96,25 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
107
96
|
}
|
|
108
97
|
|
|
109
98
|
const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
|
|
110
|
-
|
|
111
|
-
const compute = getComputeModField(modifier);
|
|
99
|
+
const item = { ...itemProp };
|
|
112
100
|
const conditionsBag = areConditionsMet(item, modifier.conditions);
|
|
113
|
-
|
|
114
|
-
const isPriceOverride = modifierActions.isPriceOverride(modifier);
|
|
115
|
-
// is the modifier suggestion required
|
|
101
|
+
|
|
116
102
|
if (conditionsBag.length > 0 && !modifierActions.isRequired(modifier)) {
|
|
117
103
|
if (onConditionsNotMet) onConditionsNotMet(conditionsBag);
|
|
118
104
|
return item;
|
|
119
105
|
}
|
|
120
|
-
const modifierToAdd = modifierActions.
|
|
121
|
-
const modifierIndex = item.modifiers.findIndex(
|
|
122
|
-
ieach => ieach.modifierId === modifier._id
|
|
123
|
-
);
|
|
106
|
+
const modifierToAdd = modifierActions.duplicate(modifier);
|
|
124
107
|
|
|
125
|
-
|
|
126
|
-
if (modifierIndex > -1) item.modifiers[modifierIndex] = modifierToAdd;
|
|
127
|
-
else item.modifiers.push(modifierToAdd);
|
|
128
|
-
} else {
|
|
129
|
-
item.modifiers.push(modifierToAdd);
|
|
130
|
-
}
|
|
108
|
+
item.modifiers.push(modifierToAdd);
|
|
131
109
|
|
|
132
110
|
if (modifierActions.isRemoveModifier(modifier)) {
|
|
133
111
|
item.modifiers = filterByRemoveModifiers(item.modifiers, modifier);
|
|
134
112
|
}
|
|
135
113
|
|
|
136
|
-
|
|
137
|
-
item
|
|
138
|
-
|
|
139
|
-
price: compute.amount,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
114
|
+
item.properties = {
|
|
115
|
+
...(item.properties || {}),
|
|
116
|
+
};
|
|
142
117
|
|
|
143
|
-
if (modifierActions.isQuantityOverride(modifier)) {
|
|
144
|
-
if (modifier.compute && typeof modifier.compute.amount === 'number') {
|
|
145
|
-
item.quantity = modifier.compute.amount || 1;
|
|
146
|
-
} else if (typeof modifier.properties.override.fixedValue === 'number') {
|
|
147
|
-
item.quantity = modifier.properties.override.fixedValue;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (isPriceOverride) {
|
|
152
|
-
item.properties = {
|
|
153
|
-
...(item.properties || {}),
|
|
154
|
-
basePrice: item.price,
|
|
155
|
-
};
|
|
156
|
-
item.price = getPrice({ modifier: modifierToAdd, item });
|
|
157
|
-
} else {
|
|
158
|
-
item.properties = {
|
|
159
|
-
...(item.properties || {}),
|
|
160
|
-
basePrice: item.price,
|
|
161
|
-
};
|
|
162
|
-
item.price = itemActions.getItemPrice({
|
|
163
|
-
item,
|
|
164
|
-
itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
|
|
165
|
-
customer,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
118
|
return item;
|
|
169
119
|
};
|
|
170
120
|
|
|
@@ -204,7 +154,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
204
154
|
) {
|
|
205
155
|
return order;
|
|
206
156
|
}
|
|
207
|
-
// Remove if it has it already only if it is not group of value
|
|
157
|
+
// Remove if it has it already only if it is not group of value
|
|
208
158
|
|
|
209
159
|
const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
|
|
210
160
|
const isUnlimitedItemUse = modifierActions.isUnlimitedItemUse(modifier);
|
|
@@ -212,12 +162,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
212
162
|
const maxQuantity =
|
|
213
163
|
math.mul(item.quantity || 0, maxApplies) || item.quantity;
|
|
214
164
|
|
|
215
|
-
if (
|
|
216
|
-
!isUnlimitedItemUse &&
|
|
217
|
-
contains &&
|
|
218
|
-
usingCount >= maxQuantity &&
|
|
219
|
-
!modifierActions.isOverride(modifier)
|
|
220
|
-
) {
|
|
165
|
+
if (!isUnlimitedItemUse && contains && usingCount >= maxQuantity) {
|
|
221
166
|
if (maxApplies && onError) {
|
|
222
167
|
onError('modifier.has.reached.the.maximum.amount.of.applies');
|
|
223
168
|
return order;
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
module.exports = ({ actions, modifierActions,
|
|
2
|
-
const {
|
|
3
|
-
|
|
4
|
-
const getPrice = ({ item, modifier }) => {
|
|
5
|
-
const amount =
|
|
6
|
-
(modifier && modifier.compute && modifier.compute.amount) || 0;
|
|
7
|
-
const { price = 0 } = item;
|
|
8
|
-
if (modifierActions.isMultiplier(modifier)) return math.mul(price, amount);
|
|
9
|
-
return amount;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const removeModifier = ({ item, modifier, originalItem }) => {
|
|
1
|
+
module.exports = ({ actions, modifierActions, _ }) => {
|
|
2
|
+
const removeModifier = ({ item, modifier }) => {
|
|
13
3
|
const nextItem = { ...item, modifiers: [] };
|
|
14
4
|
|
|
15
5
|
nextItem.modifiers = item.modifiers.filter(each => {
|
|
@@ -19,17 +9,6 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
|
|
|
19
9
|
return each._id !== modifier._id;
|
|
20
10
|
});
|
|
21
11
|
|
|
22
|
-
if (modifierActions.isAmountOverride(modifier))
|
|
23
|
-
return {
|
|
24
|
-
...originalItem,
|
|
25
|
-
...nextItem,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
if (modifierActions.isPriceOverride(modifier))
|
|
29
|
-
nextItem.price = getPrice({ modifier, item: nextItem });
|
|
30
|
-
|
|
31
|
-
if (modifierActions.isQuantityOverride(modifier)) nextItem.quantity = 1;
|
|
32
|
-
|
|
33
12
|
return nextItem;
|
|
34
13
|
};
|
|
35
14
|
|
|
@@ -50,16 +29,11 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
|
|
|
50
29
|
return order;
|
|
51
30
|
|
|
52
31
|
let item = actions.getSelectedItem({ order, itemIndex });
|
|
53
|
-
const customer = actions.getCustomer(order);
|
|
54
32
|
|
|
55
33
|
const contains = modifierActions.contains(item.modifiers, modifier);
|
|
56
34
|
|
|
57
35
|
if (!contains) return order;
|
|
58
36
|
|
|
59
|
-
if (modifierActions.isRequiredAndOverride(modifier)) {
|
|
60
|
-
return order;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
37
|
// Remove
|
|
64
38
|
item = removeModifier({
|
|
65
39
|
item,
|
|
@@ -67,11 +41,6 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
|
|
|
67
41
|
originalItem,
|
|
68
42
|
});
|
|
69
43
|
|
|
70
|
-
item.price = itemActions.getItemPrice({
|
|
71
|
-
item,
|
|
72
|
-
itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
|
|
73
|
-
customer,
|
|
74
|
-
});
|
|
75
44
|
order.items[itemIndex] = item;
|
|
76
45
|
|
|
77
46
|
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.96",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
"test:paymentModifiers": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order-payment-modifier.test.js",
|
|
29
29
|
"test:addItem": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/addItem.test.js",
|
|
30
30
|
"test:getParentTotals": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/getParentTotals.test.js",
|
|
31
|
+
"test:overrideModifiers": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/overrideModifiers.test.js",
|
|
32
|
+
"test:addItemModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/addItemModifier.test.js",
|
|
31
33
|
"lint": "eslint --quiet lib/"
|
|
32
34
|
},
|
|
33
35
|
"publishConfig": {
|
|
@@ -52,5 +54,5 @@
|
|
|
52
54
|
"supertest": "^6.2.3",
|
|
53
55
|
"supervisor": "^0.12.0"
|
|
54
56
|
},
|
|
55
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "aed710f165a1442c14bba31c5936682faa6b9364"
|
|
56
58
|
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
module.exports = ({ constants, actions }) => {
|
|
2
|
-
const { Modifier } = constants;
|
|
3
|
-
|
|
4
|
-
return function createAmountOverrideModifier(params) {
|
|
5
|
-
return actions.create({
|
|
6
|
-
compute: {
|
|
7
|
-
amount: params.amount,
|
|
8
|
-
action: Modifier.Compute.Actions.OVERRIDE,
|
|
9
|
-
},
|
|
10
|
-
properties: {
|
|
11
|
-
override: { field: 'amount' },
|
|
12
|
-
},
|
|
13
|
-
attributes: [Modifier.Attributes.OVERRIDE],
|
|
14
|
-
name: `Modifier Amount ${Modifier.Compute.Actions.OVERRIDE}`,
|
|
15
|
-
included: true,
|
|
16
|
-
});
|
|
17
|
-
};
|
|
18
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module.exports = ({ _, actions }) =>
|
|
2
|
-
function mutateModifier(mod) {
|
|
3
|
-
const modifier = actions.duplicate(mod);
|
|
4
|
-
const fixedValue = _.get(modifier, 'properties.override.fixedValue', '');
|
|
5
|
-
const isAmountOverride = actions.isAmountOverride(mod);
|
|
6
|
-
const isPriceOverride = actions.isPriceOverride(mod);
|
|
7
|
-
|
|
8
|
-
if (isPriceOverride && fixedValue) {
|
|
9
|
-
modifier.compute = {
|
|
10
|
-
amount: fixedValue,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (isAmountOverride && fixedValue) {
|
|
15
|
-
modifier.compute = {
|
|
16
|
-
type: 'fixed',
|
|
17
|
-
amount: fixedValue,
|
|
18
|
-
action: 'add',
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return modifier;
|
|
23
|
-
};
|