@darkpos/pricing 1.0.93 → 1.0.95
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 +46 -48
- package/__TEST__/modifier/addItemModifier.test.js +181 -60
- package/__TEST__/modifier/overrideModifiers.test.js +196 -0
- package/__TEST__/order/order-payment-modifier.test.js +3 -11
- package/lib/item/calculate.js +66 -18
- 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 +1 -1
- 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 +15 -62
- package/lib/order/removeItemModifier.js +2 -27
- 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
|
@@ -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;
|
|
@@ -107,64 +98,31 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
107
98
|
}
|
|
108
99
|
|
|
109
100
|
const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
|
|
110
|
-
|
|
111
|
-
const compute = getComputeModField(modifier);
|
|
101
|
+
const item = { ...itemProp };
|
|
112
102
|
const conditionsBag = areConditionsMet(item, modifier.conditions);
|
|
113
|
-
|
|
114
|
-
const isPriceOverride = modifierActions.isPriceOverride(modifier);
|
|
115
|
-
// is the modifier suggestion required
|
|
103
|
+
|
|
116
104
|
if (conditionsBag.length > 0 && !modifierActions.isRequired(modifier)) {
|
|
117
105
|
if (onConditionsNotMet) onConditionsNotMet(conditionsBag);
|
|
118
106
|
return item;
|
|
119
107
|
}
|
|
120
|
-
const modifierToAdd = modifierActions.
|
|
121
|
-
const modifierIndex = item.modifiers.findIndex(
|
|
122
|
-
ieach => ieach.modifierId === modifier._id
|
|
123
|
-
);
|
|
108
|
+
const modifierToAdd = modifierActions.duplicate(modifier);
|
|
124
109
|
|
|
125
|
-
|
|
126
|
-
if (modifierIndex > -1) item.modifiers[modifierIndex] = modifierToAdd;
|
|
127
|
-
else item.modifiers.push(modifierToAdd);
|
|
128
|
-
} else {
|
|
129
|
-
item.modifiers.push(modifierToAdd);
|
|
130
|
-
}
|
|
110
|
+
item.modifiers.push(modifierToAdd);
|
|
131
111
|
|
|
132
112
|
if (modifierActions.isRemoveModifier(modifier)) {
|
|
133
113
|
item.modifiers = filterByRemoveModifiers(item.modifiers, modifier);
|
|
134
114
|
}
|
|
135
115
|
|
|
136
|
-
|
|
137
|
-
item
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
}
|
|
116
|
+
item.properties = {
|
|
117
|
+
...(item.properties || {}),
|
|
118
|
+
basePrice: item.price,
|
|
119
|
+
};
|
|
120
|
+
item.price = itemActions.getItemPrice({
|
|
121
|
+
item,
|
|
122
|
+
itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
|
|
123
|
+
customer,
|
|
124
|
+
});
|
|
150
125
|
|
|
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
126
|
return item;
|
|
169
127
|
};
|
|
170
128
|
|
|
@@ -204,7 +162,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
204
162
|
) {
|
|
205
163
|
return order;
|
|
206
164
|
}
|
|
207
|
-
// Remove if it has it already only if it is not group of value
|
|
165
|
+
// Remove if it has it already only if it is not group of value
|
|
208
166
|
|
|
209
167
|
const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
|
|
210
168
|
const isUnlimitedItemUse = modifierActions.isUnlimitedItemUse(modifier);
|
|
@@ -212,12 +170,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
212
170
|
const maxQuantity =
|
|
213
171
|
math.mul(item.quantity || 0, maxApplies) || item.quantity;
|
|
214
172
|
|
|
215
|
-
if (
|
|
216
|
-
!isUnlimitedItemUse &&
|
|
217
|
-
contains &&
|
|
218
|
-
usingCount >= maxQuantity &&
|
|
219
|
-
!modifierActions.isOverride(modifier)
|
|
220
|
-
) {
|
|
173
|
+
if (!isUnlimitedItemUse && contains && usingCount >= maxQuantity) {
|
|
221
174
|
if (maxApplies && onError) {
|
|
222
175
|
onError('modifier.has.reached.the.maximum.amount.of.applies');
|
|
223
176
|
return order;
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
module.exports = ({ actions, modifierActions, itemActions,
|
|
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, itemActions, _ }) => {
|
|
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
|
|
|
@@ -56,10 +35,6 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
|
|
|
56
35
|
|
|
57
36
|
if (!contains) return order;
|
|
58
37
|
|
|
59
|
-
if (modifierActions.isRequiredAndOverride(modifier)) {
|
|
60
|
-
return order;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
38
|
// Remove
|
|
64
39
|
item = removeModifier({
|
|
65
40
|
item,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.95",
|
|
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": "edb497d37801c9749d2c3722a67657abe77c9ab6"
|
|
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
|
-
};
|