@darkpos/pricing 1.0.45 → 1.0.47
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__/modifier/hasModifier.test.js +1626 -0
- package/__TEST__/order/addItem.test.js +14 -8
- package/lib/item/getInvalidRequiredModifiers.js +24 -0
- package/lib/item/getItemModifiersDescription.js +2 -1
- package/lib/item/getPipeModifiers.js +10 -0
- package/lib/item/hasModifier.js +21 -9
- package/lib/item/hasModifiers.js +3 -4
- package/lib/item/index.js +4 -2
- package/lib/modifier/duplicate.js +1 -1
- package/lib/modifier/getGroupRelatedModifiers.js +5 -1
- package/lib/modifier/getItemModifiers.js +1 -3
- package/lib/modifier/index.js +4 -0
- package/lib/modifier/isRelatedModifier.js +13 -0
- package/lib/modifier/removeGroupData.js +20 -0
- package/lib/order/addItem.js +23 -11
- package/lib/order/addItemModifier.js +9 -2
- package/lib/order/updateItemQuantity.js +2 -1
- package/package.json +3 -2
- package/lib/item/isSelected.js +0 -13
|
@@ -26,7 +26,11 @@ describe('addItem function', () => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
// Call the function
|
|
29
|
-
const
|
|
29
|
+
const {
|
|
30
|
+
updatedOrder,
|
|
31
|
+
itemIndex,
|
|
32
|
+
item: addedItem,
|
|
33
|
+
} = addItem({
|
|
30
34
|
order,
|
|
31
35
|
item,
|
|
32
36
|
itemIndex: -1, // No existing item in order
|
|
@@ -67,7 +71,11 @@ describe('addItem function', () => {
|
|
|
67
71
|
};
|
|
68
72
|
|
|
69
73
|
// Call the function
|
|
70
|
-
const
|
|
74
|
+
const {
|
|
75
|
+
updatedOrder,
|
|
76
|
+
itemIndex,
|
|
77
|
+
item: addedItem,
|
|
78
|
+
} = addItem({
|
|
71
79
|
order,
|
|
72
80
|
item,
|
|
73
81
|
itemIndex: -1, // Assuming no explicit index
|
|
@@ -99,7 +107,7 @@ describe('addItem function', () => {
|
|
|
99
107
|
};
|
|
100
108
|
|
|
101
109
|
// Call the function with an overridden quantity
|
|
102
|
-
const
|
|
110
|
+
const { updatedOrder, item: addedItem } = addItem({
|
|
103
111
|
order,
|
|
104
112
|
item,
|
|
105
113
|
itemIndex: -1, // Assuming no explicit index
|
|
@@ -153,7 +161,7 @@ describe('addItem function', () => {
|
|
|
153
161
|
},
|
|
154
162
|
{
|
|
155
163
|
_id: '66cdf18a1e48455e128a4f64',
|
|
156
|
-
modifierId:
|
|
164
|
+
modifierId: null,
|
|
157
165
|
_parentId: null,
|
|
158
166
|
name: null,
|
|
159
167
|
sku: null,
|
|
@@ -179,7 +187,7 @@ describe('addItem function', () => {
|
|
|
179
187
|
};
|
|
180
188
|
|
|
181
189
|
// Call the function
|
|
182
|
-
const
|
|
190
|
+
const { updatedOrder } = addItem({
|
|
183
191
|
order,
|
|
184
192
|
item,
|
|
185
193
|
itemIndex: -1, // Assuming no explicit index
|
|
@@ -190,9 +198,7 @@ describe('addItem function', () => {
|
|
|
190
198
|
// Assertions
|
|
191
199
|
expect(updatedOrder.items).toHaveLength(1); // Should have one item
|
|
192
200
|
expect(updatedOrder.items[0].modifiers).toHaveLength(2); // Item should have two modifiers
|
|
193
|
-
expect(updatedOrder.items[0].modifiers[0].modifierId).toBe(
|
|
194
|
-
'66cdf18a1e48455e128a4f63'
|
|
195
|
-
); // Check first modifier
|
|
201
|
+
expect(updatedOrder.items[0].modifiers[0].modifierId).toBe('mod1'); // Check first modifier
|
|
196
202
|
expect(updatedOrder.items[0].modifiers[1].modifierId).toBe(
|
|
197
203
|
'66cdf18a1e48455e128a4f64'
|
|
198
204
|
); // Check second modifier
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function getInvalidRequiredModifiers({ item }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return true;
|
|
4
|
+
const invalidModifiers = [];
|
|
5
|
+
|
|
6
|
+
item.modifiers.forEach(modifier => {
|
|
7
|
+
if (
|
|
8
|
+
modifierActions.isRequired(modifier) &&
|
|
9
|
+
modifierActions.isGroupOfModifiers(modifier) &&
|
|
10
|
+
!item.modifiers
|
|
11
|
+
.filter(mod => mod._id !== modifier._id)
|
|
12
|
+
.some(itemModifier =>
|
|
13
|
+
modifierActions.isRelatedModifier({
|
|
14
|
+
_id: itemModifier.modifierId || itemModifier._id,
|
|
15
|
+
modifier,
|
|
16
|
+
})
|
|
17
|
+
)
|
|
18
|
+
) {
|
|
19
|
+
invalidModifiers.push(modifier);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return invalidModifiers;
|
|
24
|
+
};
|
|
@@ -10,7 +10,8 @@ module.exports = ({ modifierActions, _, settings }) =>
|
|
|
10
10
|
modifierActions.isValid(each) &&
|
|
11
11
|
!modifierActions.isAmountOverride(each) &&
|
|
12
12
|
!modifierActions.isDepartment(each) &&
|
|
13
|
-
modifierActions.isDirect(each)
|
|
13
|
+
modifierActions.isDirect(each) &&
|
|
14
|
+
!modifierActions.isGroupOfModifiers(each)
|
|
14
15
|
)
|
|
15
16
|
.map(modifier => {
|
|
16
17
|
const { name, _id, compute = {} } = modifier;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function getPipeModifiers({ item }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
4
|
+
return item.modifiers.filter(
|
|
5
|
+
modifier =>
|
|
6
|
+
modifierActions.isGroupOfModifiers(modifier) &&
|
|
7
|
+
modifierActions.isRequired(modifier) &&
|
|
8
|
+
modifierActions.enableAutoPopup(modifier)
|
|
9
|
+
);
|
|
10
|
+
};
|
package/lib/item/hasModifier.js
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
|
-
module.exports = () =>
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
2
|
function hasModifier({ item, modifier }) {
|
|
3
3
|
if (!item || !modifier || !item.modifiers) return false;
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
if (modifierActions.isGroupOfModifiers(modifier)) {
|
|
6
|
+
const relatedModifiers = modifier.properties.group.modifiers;
|
|
7
|
+
return [
|
|
8
|
+
modifierActions.removeGroupData({ modifier }),
|
|
9
|
+
...relatedModifiers,
|
|
10
|
+
].some(relatedModifier =>
|
|
11
|
+
hasModifier({ item, modifier: relatedModifier })
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const itemModifier = item.modifiers
|
|
16
|
+
.filter(itemMod => !modifierActions.isGroupOfModifiers(itemMod))
|
|
17
|
+
.find(
|
|
18
|
+
each =>
|
|
19
|
+
(each.modifierId &&
|
|
20
|
+
(each.modifierId === modifier.modifierId ||
|
|
21
|
+
each.modifierId === modifier._id)) ||
|
|
22
|
+
(typeof each.modifier === 'object' &&
|
|
23
|
+
each.modifier._id === modifier.modifierId)
|
|
24
|
+
);
|
|
13
25
|
|
|
14
26
|
return !!itemModifier;
|
|
15
27
|
};
|
package/lib/item/hasModifiers.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
module.exports = () =>
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
2
|
function hasModifiers({ item, modifiers }) {
|
|
3
3
|
if (!item || !modifiers || !item.modifiers) return false;
|
|
4
4
|
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
!!modifiers.find(each => each._id === itemModifier.modifierId)
|
|
5
|
+
return modifiers.some(each =>
|
|
6
|
+
actions.hasModifier({ item, modifier: each })
|
|
8
7
|
);
|
|
9
8
|
};
|
package/lib/item/index.js
CHANGED
|
@@ -9,7 +9,6 @@ const removeModifiers = require('./removeModifiers');
|
|
|
9
9
|
const findOriginalItem = require('./findOriginalItem');
|
|
10
10
|
const create = require('./create');
|
|
11
11
|
const hasModifier = require('./hasModifier');
|
|
12
|
-
const isSelected = require('./isSelected');
|
|
13
12
|
const hasModifiers = require('./hasModifiers');
|
|
14
13
|
const addIndirectModifier = require('./addIndirectModifier');
|
|
15
14
|
const calculate = require('./calculate');
|
|
@@ -40,6 +39,8 @@ const hasPaymentMethodType = require('./hasPaymentMethodType');
|
|
|
40
39
|
const removePaymentModifiersByPaymentId = require('./removePaymentModifiersByPaymentId');
|
|
41
40
|
const hasPaymentModifierWithPaymentId = require('./hasPaymentModifierWithPaymentId');
|
|
42
41
|
const getBalance = require('./getBalance');
|
|
42
|
+
const getPipeModifiers = require('./getPipeModifiers');
|
|
43
|
+
const getInvalidRequiredModifiers = require('./getInvalidRequiredModifiers');
|
|
43
44
|
|
|
44
45
|
const itemActions = (deps = {}) => {
|
|
45
46
|
const actions = {};
|
|
@@ -61,7 +62,6 @@ const itemActions = (deps = {}) => {
|
|
|
61
62
|
findOriginalItem: findOriginalItem(innerDeps),
|
|
62
63
|
create: create(innerDeps),
|
|
63
64
|
hasModifier: hasModifier(innerDeps),
|
|
64
|
-
isSelected: isSelected(innerDeps),
|
|
65
65
|
hasModifiers: hasModifiers(innerDeps),
|
|
66
66
|
addIndirectModifier: addIndirectModifier(innerDeps),
|
|
67
67
|
calculate: calculate(innerDeps),
|
|
@@ -93,6 +93,8 @@ const itemActions = (deps = {}) => {
|
|
|
93
93
|
removePaymentModifiersByPaymentId(innerDeps),
|
|
94
94
|
hasPaymentModifierWithPaymentId: hasPaymentModifierWithPaymentId(innerDeps),
|
|
95
95
|
getBalance: getBalance(innerDeps),
|
|
96
|
+
getPipeModifiers: getPipeModifiers(innerDeps),
|
|
97
|
+
getInvalidRequiredModifiers: getInvalidRequiredModifiers(innerDeps),
|
|
96
98
|
});
|
|
97
99
|
|
|
98
100
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -19,7 +19,11 @@ module.exports = ({ actions }) => {
|
|
|
19
19
|
return arr;
|
|
20
20
|
}, []);
|
|
21
21
|
|
|
22
|
-
if (actions.includesInGroup(modifier))
|
|
22
|
+
if (actions.includesInGroup(modifier))
|
|
23
|
+
groupModifiers.unshift({
|
|
24
|
+
...actions.removeGroupData({ modifier }),
|
|
25
|
+
required: false,
|
|
26
|
+
});
|
|
23
27
|
|
|
24
28
|
return groupModifiers;
|
|
25
29
|
};
|
|
@@ -6,9 +6,7 @@ module.exports = ({ actions }) =>
|
|
|
6
6
|
});
|
|
7
7
|
|
|
8
8
|
const enabledModifiers = matchedModifiers.filter(
|
|
9
|
-
each =>
|
|
10
|
-
(actions.isDefault(each) || actions.isRequired(each)) &&
|
|
11
|
-
!(actions.isGroupOfValues(each) || actions.isGroupOfModifiers(each))
|
|
9
|
+
each => actions.isDefault(each) || actions.isRequired(each)
|
|
12
10
|
);
|
|
13
11
|
|
|
14
12
|
const relatedModifiers = enabledModifiers
|
package/lib/modifier/index.js
CHANGED
|
@@ -126,6 +126,8 @@ const mutateModifier = require('./mutateModifier');
|
|
|
126
126
|
const isFixedDiscount = require('./isFixedDiscount');
|
|
127
127
|
const removeLocked = require('./removeLocked');
|
|
128
128
|
const hasItems = require('./hasItems');
|
|
129
|
+
const removeGroupData = require('./removeGroupData');
|
|
130
|
+
const isRelatedModifier = require('./isRelatedModifier');
|
|
129
131
|
const getGroupedModifiers = require('./getGroupedModifiers');
|
|
130
132
|
const getNotesToModifierTags = require('./getNotesToModifierTags');
|
|
131
133
|
const isOptionsOverride = require('./isOptionsOverride');
|
|
@@ -281,6 +283,8 @@ const modifierActions = (deps = {}) => {
|
|
|
281
283
|
isFee: isFee(innerDeps),
|
|
282
284
|
isAdd: isAdd(innerDeps),
|
|
283
285
|
mutateModifier: mutateModifier(innerDeps),
|
|
286
|
+
removeGroupData: removeGroupData(innerDeps),
|
|
287
|
+
isRelatedModifier: isRelatedModifier(innerDeps),
|
|
284
288
|
getGroupedModifiers: getGroupedModifiers(innerDeps),
|
|
285
289
|
getNotesToModifierTags: getNotesToModifierTags(innerDeps),
|
|
286
290
|
isOptionsOverride: isOptionsOverride(innerDeps),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function isRelatedModifier({ _id, modifier }) {
|
|
3
|
+
if (!modifier || !_id) return false;
|
|
4
|
+
|
|
5
|
+
if (actions.isGroupOfModifiers(modifier)) {
|
|
6
|
+
const relatedModifiers = modifier.properties.group.modifiers;
|
|
7
|
+
return [actions.removeGroupData({ modifier }), ...relatedModifiers].some(
|
|
8
|
+
relatedModifier => isRelatedModifier({ _id, modifier: relatedModifier })
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return modifier._id === _id || modifier.modifierId === _id;
|
|
13
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module.exports = ({ constants }) => {
|
|
2
|
+
const { Modifier } = constants;
|
|
3
|
+
|
|
4
|
+
return function removeGroupData({ modifier }) {
|
|
5
|
+
if (!modifier) return modifier;
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
...modifier,
|
|
9
|
+
properties:
|
|
10
|
+
modifier.properties && modifier.properties.group
|
|
11
|
+
? { ...modifier.properties, group: null }
|
|
12
|
+
: modifier.properties,
|
|
13
|
+
attributes: Array.isArray(modifier.attributes)
|
|
14
|
+
? modifier.attributes.filter(
|
|
15
|
+
attribute => attribute !== Modifier.Attributes.GROUP
|
|
16
|
+
)
|
|
17
|
+
: modifier.attributes,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
package/lib/order/addItem.js
CHANGED
|
@@ -187,6 +187,7 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
187
187
|
!_.isEmpty(orderItem.modifiers)
|
|
188
188
|
)
|
|
189
189
|
requiredModifiers = getUnselectedModifiers(orderItem, requiredModifiers);
|
|
190
|
+
|
|
190
191
|
if (!_.isEmpty(requiredModifiers)) {
|
|
191
192
|
modifiersToAdd.push(
|
|
192
193
|
...requiredModifiers.filter(
|
|
@@ -213,17 +214,23 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
213
214
|
let [nextOrder, nextItemIndex] = params;
|
|
214
215
|
const [, , nextItem] = params;
|
|
215
216
|
|
|
217
|
+
const overrideModifiers = modifiersToAdd.filter(modToAdd =>
|
|
218
|
+
modifierActions.isOverride(modToAdd)
|
|
219
|
+
);
|
|
220
|
+
|
|
216
221
|
if (modifiersToAdd.length) {
|
|
217
|
-
nextOrder = modifiersToAdd
|
|
218
|
-
(
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
222
|
+
nextOrder = modifiersToAdd
|
|
223
|
+
.filter(modToAdd => !modifierActions.isOverride(modToAdd))
|
|
224
|
+
.reduce(
|
|
225
|
+
(acc, modifier) =>
|
|
226
|
+
actions.addItemModifier({
|
|
227
|
+
itemIndex: nextItemIndex,
|
|
228
|
+
order: acc,
|
|
229
|
+
modifier,
|
|
230
|
+
cache,
|
|
231
|
+
}),
|
|
232
|
+
nextOrder
|
|
233
|
+
);
|
|
227
234
|
}
|
|
228
235
|
|
|
229
236
|
const { reArrangedOrder, newIndex } = reArrangeNewItem({
|
|
@@ -243,6 +250,11 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
243
250
|
nextOrder.items.splice(idxToRemove, 1);
|
|
244
251
|
}
|
|
245
252
|
|
|
246
|
-
return
|
|
253
|
+
return {
|
|
254
|
+
updatedOrder: nextOrder,
|
|
255
|
+
itemIndex: nextItemIndex,
|
|
256
|
+
item: nextItem,
|
|
257
|
+
overrideModifiers,
|
|
258
|
+
};
|
|
247
259
|
};
|
|
248
260
|
};
|
|
@@ -173,7 +173,14 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
173
173
|
const customer = actions.getCustomer(order);
|
|
174
174
|
const contains =
|
|
175
175
|
!_.isEmpty(item.modifiers) &&
|
|
176
|
-
modifierActions.contains(
|
|
176
|
+
modifierActions.contains(
|
|
177
|
+
item.modifiers.filter(
|
|
178
|
+
mod =>
|
|
179
|
+
!modifierActions.isRequired(mod) &&
|
|
180
|
+
!modifierActions.isGroupOfModifiers(mod)
|
|
181
|
+
),
|
|
182
|
+
modifier
|
|
183
|
+
);
|
|
177
184
|
|
|
178
185
|
const usingCount = contains
|
|
179
186
|
? modifierActions.getUsingCount(item.modifiers, modifier)
|
|
@@ -237,7 +244,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
237
244
|
|
|
238
245
|
if (modifierActions.hasRelatedItems(modifier)) {
|
|
239
246
|
order = modifier.properties.group.items.reduce((acc, each) => {
|
|
240
|
-
const
|
|
247
|
+
const { updatedOrder: nextOrder } = actions.addItem({
|
|
241
248
|
item: {
|
|
242
249
|
...each,
|
|
243
250
|
itemId: each._id,
|
|
@@ -14,7 +14,7 @@ module.exports = ({ actions, settings, _ }) => {
|
|
|
14
14
|
const updatedQuantity = reset
|
|
15
15
|
? quantity
|
|
16
16
|
: parseInt(`${item.quantity}${quantity}`, 10);
|
|
17
|
-
|
|
17
|
+
const { updatedOrder } = actions.updateItem({
|
|
18
18
|
order,
|
|
19
19
|
itemIndex,
|
|
20
20
|
item: {
|
|
@@ -22,6 +22,7 @@ module.exports = ({ actions, settings, _ }) => {
|
|
|
22
22
|
quantity: updatedQuantity,
|
|
23
23
|
},
|
|
24
24
|
});
|
|
25
|
+
return updatedOrder;
|
|
25
26
|
}
|
|
26
27
|
if (isBefore) {
|
|
27
28
|
return actions.addItem({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.47",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"test:me": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order-payment-modifier.test.js",
|
|
16
16
|
"test:order": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order.test.js",
|
|
17
17
|
"test:validateConditions": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/validateConditionsCalculate.test.js",
|
|
18
|
+
"test:hasModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/hasModifier.test.js",
|
|
18
19
|
"lint": "eslint --quiet lib/"
|
|
19
20
|
},
|
|
20
21
|
"publishConfig": {
|
|
@@ -38,5 +39,5 @@
|
|
|
38
39
|
"supertest": "^6.2.3",
|
|
39
40
|
"supervisor": "^0.12.0"
|
|
40
41
|
},
|
|
41
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "98185abdf0b1e4c22098c17b8eb1fde30c673093"
|
|
42
43
|
}
|
package/lib/item/isSelected.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module.exports = ({ modifierActions, actions }) =>
|
|
2
|
-
function isSelected({ item, modifier }) {
|
|
3
|
-
if (!item || !item.modifiers || !modifier) return false;
|
|
4
|
-
let hasModifier = actions.hasModifier({ item, modifier });
|
|
5
|
-
|
|
6
|
-
if (!hasModifier && modifierActions.isGroupOfModifiers(modifier))
|
|
7
|
-
hasModifier = actions.hasModifiers({
|
|
8
|
-
item,
|
|
9
|
-
modifiers: modifier.properties.group.modifiers,
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
return hasModifier;
|
|
13
|
-
};
|