@darkpos/pricing 1.0.66 → 1.0.68
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/getModifierTags.test.js +4 -3
- package/__TEST__/item.test.js +450 -1
- package/__TEST__/modifier/getInvalidRequiredModifiers.test.js +3877 -0
- package/__TEST__/modifier/hasModifier.test.js +72 -1
- package/__TEST__/order/addItem.test.js +103 -0
- package/lib/item/getAddModifiers.js +11 -0
- package/lib/item/getInvalidRequiredModifiers.js +12 -3
- package/lib/item/getModifierTags.js +2 -12
- package/lib/item/getRelatedItems.js +12 -0
- package/lib/item/hasAddModifiers.js +9 -0
- package/lib/item/hasModifier.js +23 -12
- package/lib/item/hasModifiers.js +2 -2
- package/lib/item/index.js +6 -2
- package/lib/item/removeModifier.js +42 -17
- package/lib/item/removeModifiers.js +2 -1
- package/lib/modifier/hasAddModifier.js +7 -0
- package/lib/modifier/index.js +2 -0
- package/lib/order/addItem.js +28 -1
- package/lib/order/getModifierRelations.js +7 -0
- package/lib/order/getRelatedItems.js +1 -0
- package/lib/order/index.js +2 -4
- package/lib/order/removeItem.js +79 -38
- package/lib/order/removeModifier.js +1 -0
- package/package.json +4 -2
- package/lib/item/removePaymentModifiers.js +0 -15
- package/lib/order/addDiscountModifier.js +0 -9
- package/lib/order/removeDiscountModifier.js +0 -16
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
const usePricing = require('../../index');
|
|
2
|
+
const mockStores = require('../mocks/stores');
|
|
2
3
|
|
|
3
|
-
const
|
|
4
|
+
const session = {
|
|
5
|
+
store: mockStores[0],
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const pricingService = usePricing(session);
|
|
4
9
|
|
|
5
10
|
describe('hasModifier Function', () => {
|
|
6
11
|
test('hasModifier should return false for an item that only has white(group modifier)', () => {
|
|
@@ -1623,4 +1628,70 @@ describe('hasModifier Function', () => {
|
|
|
1623
1628
|
|
|
1624
1629
|
expect(hasModifier).toBe(false);
|
|
1625
1630
|
});
|
|
1631
|
+
|
|
1632
|
+
test('hasModifier, using only 1 related items', () => {
|
|
1633
|
+
const relatedModItem = {
|
|
1634
|
+
_id: 'abc',
|
|
1635
|
+
name: 'related item abc',
|
|
1636
|
+
itemId: 'abc',
|
|
1637
|
+
};
|
|
1638
|
+
const groupMod = {
|
|
1639
|
+
_id: 'groupMod10',
|
|
1640
|
+
attributes: ['group'],
|
|
1641
|
+
properties: {
|
|
1642
|
+
group: {
|
|
1643
|
+
items: [relatedModItem],
|
|
1644
|
+
modifiers: [
|
|
1645
|
+
{
|
|
1646
|
+
_id: '123',
|
|
1647
|
+
name: 'related mod',
|
|
1648
|
+
},
|
|
1649
|
+
],
|
|
1650
|
+
},
|
|
1651
|
+
},
|
|
1652
|
+
};
|
|
1653
|
+
|
|
1654
|
+
const item = { _id: 1, itemId: 'ab', modifiers: [groupMod] };
|
|
1655
|
+
|
|
1656
|
+
const order = {
|
|
1657
|
+
items: [item],
|
|
1658
|
+
modifiers: [],
|
|
1659
|
+
};
|
|
1660
|
+
|
|
1661
|
+
// const modifier = groupMod;
|
|
1662
|
+
// const relatedItems = [];
|
|
1663
|
+
|
|
1664
|
+
// const result = pricingService.item.hasModifier({
|
|
1665
|
+
// item,
|
|
1666
|
+
// modifier,
|
|
1667
|
+
// relatedItems,
|
|
1668
|
+
// });
|
|
1669
|
+
|
|
1670
|
+
const { updatedOrder } = pricingService.order.addItem({
|
|
1671
|
+
order,
|
|
1672
|
+
item: {
|
|
1673
|
+
...relatedModItem,
|
|
1674
|
+
properties: {
|
|
1675
|
+
relatedItem: true,
|
|
1676
|
+
parentItemId: item.itemId,
|
|
1677
|
+
parentId: item._id,
|
|
1678
|
+
includeParent: true,
|
|
1679
|
+
relatedItemId: relatedModItem._id,
|
|
1680
|
+
},
|
|
1681
|
+
},
|
|
1682
|
+
});
|
|
1683
|
+
|
|
1684
|
+
expect(updatedOrder.items.length).toBe(2);
|
|
1685
|
+
|
|
1686
|
+
const result = pricingService.item.hasModifier({
|
|
1687
|
+
item: updatedOrder.items[1],
|
|
1688
|
+
modifier: groupMod,
|
|
1689
|
+
relatedItems: pricingService.order.getRelatedItems({
|
|
1690
|
+
order: updatedOrder,
|
|
1691
|
+
item: updatedOrder.items[1],
|
|
1692
|
+
}),
|
|
1693
|
+
});
|
|
1694
|
+
|
|
1695
|
+
expect(result).toBe(true);
|
|
1696
|
+
});
|
|
1626
1697
|
});
|
|
@@ -199,4 +199,107 @@ describe('addItem function', () => {
|
|
|
199
199
|
); // Check second modifier
|
|
200
200
|
expect(updatedOrder.items[0].modifiers).toHaveLength(2); // Added item should have modifiers
|
|
201
201
|
});
|
|
202
|
+
|
|
203
|
+
test('Add Related Item', () => {
|
|
204
|
+
const { addItem } = pricingService.order;
|
|
205
|
+
|
|
206
|
+
const parentItem = {
|
|
207
|
+
_id: '1',
|
|
208
|
+
quantity: 1,
|
|
209
|
+
price: 100,
|
|
210
|
+
modifiers: [],
|
|
211
|
+
name: 'the parent item',
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const { updatedOrder } = addItem({
|
|
215
|
+
order: { items: [] },
|
|
216
|
+
item: parentItem,
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
expect(updatedOrder.items).toHaveLength(1);
|
|
220
|
+
expect(updatedOrder.items[0]).toMatchObject({
|
|
221
|
+
name: 'the parent item',
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
const relatedItem = {
|
|
225
|
+
_id: 'related1',
|
|
226
|
+
name: 'the related item',
|
|
227
|
+
quantity: 1,
|
|
228
|
+
price: 100,
|
|
229
|
+
modifiers: [],
|
|
230
|
+
properties: {
|
|
231
|
+
relatedItem: true,
|
|
232
|
+
parentItemId: updatedOrder.items[0].itemId,
|
|
233
|
+
parentId: updatedOrder.items[0]._id,
|
|
234
|
+
includeParent: true,
|
|
235
|
+
addModifiers: [
|
|
236
|
+
{
|
|
237
|
+
_id: 'mod1',
|
|
238
|
+
name: 'General Repair Department',
|
|
239
|
+
attributes: ['group'],
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
const { updatedOrder: updatedOrder2 } = addItem({
|
|
246
|
+
order: updatedOrder,
|
|
247
|
+
item: relatedItem,
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
expect(updatedOrder2.items).toHaveLength(2);
|
|
251
|
+
expect(updatedOrder2.items[0]).toMatchObject({
|
|
252
|
+
name: 'the related item',
|
|
253
|
+
});
|
|
254
|
+
expect(updatedOrder2.items[1]).toMatchObject({
|
|
255
|
+
name: 'the parent item',
|
|
256
|
+
modifiers: [
|
|
257
|
+
{
|
|
258
|
+
name: 'General Repair Department',
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
const relatedItem2 = {
|
|
264
|
+
_id: 'related1',
|
|
265
|
+
name: 'the 2nd related item',
|
|
266
|
+
quantity: 1,
|
|
267
|
+
price: 100,
|
|
268
|
+
modifiers: [],
|
|
269
|
+
properties: {
|
|
270
|
+
relatedItem: true,
|
|
271
|
+
parentItemId: updatedOrder.items[0].itemId,
|
|
272
|
+
parentId: updatedOrder.items[0]._id,
|
|
273
|
+
includeParent: true,
|
|
274
|
+
addModifiers: [
|
|
275
|
+
{
|
|
276
|
+
_id: 'mod1',
|
|
277
|
+
name: 'General Repair Department',
|
|
278
|
+
attributes: ['group'],
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const { updatedOrder: updatedOrder3 } = addItem({
|
|
285
|
+
order: updatedOrder2,
|
|
286
|
+
item: relatedItem2,
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
expect(updatedOrder3.items).toHaveLength(3);
|
|
290
|
+
expect(updatedOrder3.items[0]).toMatchObject({
|
|
291
|
+
name: 'the 2nd related item',
|
|
292
|
+
});
|
|
293
|
+
expect(updatedOrder3.items[1]).toMatchObject({
|
|
294
|
+
name: 'the related item',
|
|
295
|
+
});
|
|
296
|
+
expect(updatedOrder3.items[2]).toMatchObject({
|
|
297
|
+
name: 'the parent item',
|
|
298
|
+
modifiers: [
|
|
299
|
+
{
|
|
300
|
+
name: 'General Repair Department',
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
});
|
|
304
|
+
});
|
|
202
305
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
module.exports = ({ modifierActions }) =>
|
|
2
|
-
function getInvalidRequiredModifiers({ item }) {
|
|
3
|
-
if (!item || !Array.isArray(item.modifiers)) return
|
|
1
|
+
module.exports = ({ modifierActions, actions }) =>
|
|
2
|
+
function getInvalidRequiredModifiers({ item, otherItems }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
4
4
|
const invalidModifiers = [];
|
|
5
5
|
|
|
6
6
|
item.modifiers.forEach(modifier => {
|
|
@@ -14,7 +14,16 @@ module.exports = ({ modifierActions }) =>
|
|
|
14
14
|
_id: itemModifier.modifierId || itemModifier._id,
|
|
15
15
|
modifier,
|
|
16
16
|
})
|
|
17
|
+
) &&
|
|
18
|
+
Array.isArray(otherItems) &&
|
|
19
|
+
modifierActions.isGroupOfItems(modifier) &&
|
|
20
|
+
!modifier.properties.group.items.some(relatedItem =>
|
|
21
|
+
otherItems.some(
|
|
22
|
+
otherItem =>
|
|
23
|
+
actions.isRelatedItem(otherItem) &&
|
|
24
|
+
otherItem.itemId === relatedItem._id
|
|
17
25
|
)
|
|
26
|
+
)
|
|
18
27
|
) {
|
|
19
28
|
invalidModifiers.push(modifier);
|
|
20
29
|
}
|
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
module.exports = ({ modifierActions, settings }) =>
|
|
2
|
-
function getModifierTags({
|
|
3
|
-
item,
|
|
4
|
-
includePaymentModifiers,
|
|
5
|
-
skipGrouping = false,
|
|
6
|
-
}) {
|
|
2
|
+
function getModifierTags({ item, skipGrouping = false }) {
|
|
7
3
|
const groupModifiers =
|
|
8
4
|
settings && settings.order && settings.order.groupModifiers;
|
|
9
5
|
|
|
10
6
|
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
11
7
|
|
|
12
8
|
let modifierTags = item.modifiers
|
|
13
|
-
.filter(
|
|
14
|
-
each =>
|
|
15
|
-
(modifierActions.isValid(each) ||
|
|
16
|
-
(modifierActions.isPaymentModifier(each) &&
|
|
17
|
-
includePaymentModifiers)) &&
|
|
18
|
-
!modifierActions.isGroup(each)
|
|
19
|
-
)
|
|
9
|
+
.filter(each => modifierActions.isValid(each))
|
|
20
10
|
.map(modifier => {
|
|
21
11
|
const { name, _id } = modifier;
|
|
22
12
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getRelatedItems({ items, item, compareId = true }) {
|
|
3
|
+
if (!items || !item) return [];
|
|
4
|
+
|
|
5
|
+
return items
|
|
6
|
+
.filter(each => each.properties && each.properties.relatedItem)
|
|
7
|
+
.filter(
|
|
8
|
+
each =>
|
|
9
|
+
each.properties.parentItemId === item.itemId &&
|
|
10
|
+
(compareId ? each.properties.parentId === item._id : true)
|
|
11
|
+
);
|
|
12
|
+
};
|
package/lib/item/hasModifier.js
CHANGED
|
@@ -1,27 +1,38 @@
|
|
|
1
1
|
module.exports = ({ modifierActions }) =>
|
|
2
|
-
function hasModifier({ item, modifier }) {
|
|
2
|
+
function hasModifier({ item, modifier, relatedItems, originalModifier }) {
|
|
3
3
|
if (!item || !modifier || !item.modifiers) return false;
|
|
4
4
|
|
|
5
|
+
console.log({ item, modifier, relatedItems });
|
|
6
|
+
|
|
7
|
+
const originalMod = originalModifier || modifier;
|
|
8
|
+
|
|
5
9
|
if (modifierActions.isGroupOfModifiers(modifier)) {
|
|
6
10
|
const relatedModifiers = modifier.properties.group.modifiers;
|
|
7
11
|
return [
|
|
8
12
|
modifierActions.removeGroupData({ modifier }),
|
|
9
13
|
...relatedModifiers,
|
|
10
14
|
].some(relatedModifier =>
|
|
11
|
-
hasModifier({
|
|
15
|
+
hasModifier({
|
|
16
|
+
item,
|
|
17
|
+
modifier: relatedModifier,
|
|
18
|
+
relatedItems,
|
|
19
|
+
originalModifier: originalMod,
|
|
20
|
+
})
|
|
12
21
|
);
|
|
13
22
|
}
|
|
14
23
|
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
const matchByModifier = item.modifiers.some(
|
|
25
|
+
each => !modifierActions.isGroup(each) && each.modifierId === modifier._id
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const matchByRelatedItems =
|
|
29
|
+
!!relatedItems &&
|
|
30
|
+
modifierActions.isGroupOfItems(originalMod) &&
|
|
31
|
+
relatedItems.some(relatedItem =>
|
|
32
|
+
originalMod.properties.group.items.some(
|
|
33
|
+
modItem => modItem._id === relatedItem.properties.relatedItemId
|
|
34
|
+
)
|
|
24
35
|
);
|
|
25
36
|
|
|
26
|
-
return
|
|
37
|
+
return matchByModifier || matchByRelatedItems;
|
|
27
38
|
};
|
package/lib/item/hasModifiers.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module.exports = ({ actions }) =>
|
|
2
|
-
function hasModifiers({ item, modifiers }) {
|
|
2
|
+
function hasModifiers({ item, modifiers, relatedItems }) {
|
|
3
3
|
if (!item || !modifiers || !item.modifiers) return false;
|
|
4
4
|
|
|
5
5
|
return modifiers.some(each =>
|
|
6
|
-
actions.hasModifier({ item, modifier: each })
|
|
6
|
+
actions.hasModifier({ item, modifier: each, relatedItems })
|
|
7
7
|
);
|
|
8
8
|
};
|
package/lib/item/index.js
CHANGED
|
@@ -31,7 +31,6 @@ const getItemModifiers = require('./getItemModifiers');
|
|
|
31
31
|
const getItemsBalance = require('./getItemsBalance');
|
|
32
32
|
const isFullyPaid = require('./isFullyPaid');
|
|
33
33
|
const getTotalPrice = require('./getTotalPrice');
|
|
34
|
-
const removePaymentModifiers = require('./removePaymentModifiers');
|
|
35
34
|
const getItems = require('./getItems');
|
|
36
35
|
const getAmounts = require('./getAmounts');
|
|
37
36
|
const hasPaymentMethodType = require('./hasPaymentMethodType');
|
|
@@ -48,6 +47,9 @@ const getBasePrice = require('./getBasePrice');
|
|
|
48
47
|
const removeModifiersByQuantity = require('./removeModifiersByQuantity');
|
|
49
48
|
const getModifiersBySingleValueId = require('./getModifiersBySingleValueId');
|
|
50
49
|
const getLastLocation = require('./getLastLocation');
|
|
50
|
+
const hasAddModifiers = require('./hasAddModifiers');
|
|
51
|
+
const getAddModifiers = require('./getAddModifiers');
|
|
52
|
+
const getRelatedItems = require('./getRelatedItems');
|
|
51
53
|
|
|
52
54
|
const itemActions = (deps = {}) => {
|
|
53
55
|
const actions = {};
|
|
@@ -91,7 +93,6 @@ const itemActions = (deps = {}) => {
|
|
|
91
93
|
getItemsBalance: getItemsBalance(innerDeps),
|
|
92
94
|
isFullyPaid: isFullyPaid(innerDeps),
|
|
93
95
|
getTotalPrice: getTotalPrice(innerDeps),
|
|
94
|
-
removePaymentModifiers: removePaymentModifiers(innerDeps),
|
|
95
96
|
getItems: getItems(innerDeps),
|
|
96
97
|
getAmounts: getAmounts(innerDeps),
|
|
97
98
|
hasPaymentMethodType: hasPaymentMethodType(innerDeps),
|
|
@@ -109,6 +110,9 @@ const itemActions = (deps = {}) => {
|
|
|
109
110
|
removeModifiersByQuantity: removeModifiersByQuantity(innerDeps),
|
|
110
111
|
getModifiersBySingleValueId: getModifiersBySingleValueId(innerDeps),
|
|
111
112
|
getLastLocation: getLastLocation(innerDeps),
|
|
113
|
+
hasAddModifiers: hasAddModifiers(innerDeps),
|
|
114
|
+
getAddModifiers: getAddModifiers(innerDeps),
|
|
115
|
+
getRelatedItems: getRelatedItems(innerDeps),
|
|
112
116
|
});
|
|
113
117
|
|
|
114
118
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -1,36 +1,61 @@
|
|
|
1
1
|
module.exports = ({ modifierActions, _, actions }) => {
|
|
2
2
|
const isValid = (itemModifiers, modifier) =>
|
|
3
|
-
!!modifierActions.findById(itemModifiers, modifier._id)
|
|
3
|
+
!!modifierActions.findById(itemModifiers, modifier._id) &&
|
|
4
|
+
(!modifier.required || !modifier._parentId);
|
|
4
5
|
|
|
5
|
-
return function removeModifier({
|
|
6
|
+
return function removeModifier({
|
|
7
|
+
item,
|
|
8
|
+
modifier,
|
|
9
|
+
customer,
|
|
10
|
+
originalItem,
|
|
11
|
+
order,
|
|
12
|
+
}) {
|
|
6
13
|
const nextItem = _.cloneDeep(item);
|
|
7
14
|
const itemModifiers = item.modifiers || [];
|
|
8
|
-
let modifiersToApply = [];
|
|
9
15
|
|
|
10
16
|
if (!isValid(itemModifiers, modifier)) return item;
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
const addModifiers = modifierActions.getRelatedModifiers({
|
|
19
|
+
modifier,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
console.log(item, '<=====', actions.getRelatedItems({ order, item }));
|
|
23
|
+
|
|
24
|
+
const modifiersToApply = [
|
|
25
|
+
modifier,
|
|
26
|
+
...addModifiers.filter(
|
|
27
|
+
addMod =>
|
|
28
|
+
!addMod.required &&
|
|
29
|
+
(!order ||
|
|
30
|
+
!actions.hasModifier({
|
|
31
|
+
item: {
|
|
32
|
+
...item,
|
|
33
|
+
modifiers: item.modifiers.filter(
|
|
34
|
+
mod => mod._id !== modifier._id
|
|
35
|
+
),
|
|
36
|
+
},
|
|
37
|
+
modifier: addMod,
|
|
38
|
+
relatedItems: actions.getRelatedItems({
|
|
39
|
+
items: order.items,
|
|
40
|
+
item,
|
|
41
|
+
}),
|
|
42
|
+
originalModifier: addMod,
|
|
43
|
+
}))
|
|
44
|
+
),
|
|
45
|
+
];
|
|
23
46
|
|
|
24
|
-
modifiersToApply.push(modifier);
|
|
25
47
|
// Remove
|
|
26
48
|
const nextModifiers = item.modifiers.filter(
|
|
27
49
|
each =>
|
|
28
50
|
!modifiersToApply.find(
|
|
29
|
-
mod =>
|
|
51
|
+
mod =>
|
|
52
|
+
each._parentId === mod._id ||
|
|
53
|
+
each._id === mod._id ||
|
|
54
|
+
each.modifierId === mod._id
|
|
30
55
|
)
|
|
31
56
|
);
|
|
32
57
|
|
|
33
|
-
const hasOverride =
|
|
58
|
+
const hasOverride = nextModifiers.find(each =>
|
|
34
59
|
modifierActions.isOverride(each)
|
|
35
60
|
);
|
|
36
61
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module.exports = ({ actions }) =>
|
|
2
|
-
function removeModifiers({ item, modifiers, originalItem, customer }) {
|
|
2
|
+
function removeModifiers({ item, modifiers, originalItem, customer, order }) {
|
|
3
3
|
const newItem = modifiers.reduce(
|
|
4
4
|
(nextItem, modifier) =>
|
|
5
5
|
actions.removeModifier({
|
|
@@ -7,6 +7,7 @@ module.exports = ({ actions }) =>
|
|
|
7
7
|
modifier,
|
|
8
8
|
originalItem,
|
|
9
9
|
customer,
|
|
10
|
+
order,
|
|
10
11
|
}),
|
|
11
12
|
item
|
|
12
13
|
);
|
package/lib/modifier/index.js
CHANGED
|
@@ -141,6 +141,7 @@ const isQuantityMultiplier = require('./isQuantityMultiplier');
|
|
|
141
141
|
const isCompute = require('./isCompute');
|
|
142
142
|
const isFixedOverride = require('./isFixedOverride');
|
|
143
143
|
const isLocked = require('./isLocked');
|
|
144
|
+
const hasAddModifier = require('./hasAddModifier');
|
|
144
145
|
|
|
145
146
|
const modifierActions = (deps = {}) => {
|
|
146
147
|
const actions = {};
|
|
@@ -295,6 +296,7 @@ const modifierActions = (deps = {}) => {
|
|
|
295
296
|
isCompute: isCompute(innerDeps),
|
|
296
297
|
isFixedOverride: isFixedOverride(innerDeps),
|
|
297
298
|
isLocked: isLocked(innerDeps),
|
|
299
|
+
hasAddModifier: hasAddModifier(innerDeps),
|
|
298
300
|
});
|
|
299
301
|
|
|
300
302
|
Object.keys(freezedActions).forEach(actionName => {
|
package/lib/order/addItem.js
CHANGED
|
@@ -169,7 +169,7 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
169
169
|
modifiersToAdd.push(...inheritedModifiers);
|
|
170
170
|
// Remove parent if it is only a repair Item
|
|
171
171
|
if (!itemActions.isParentIncluded(orderItem)) {
|
|
172
|
-
order = actions.removeItem({ order, item: parent
|
|
172
|
+
order = actions.removeItem({ order, item: parent });
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -249,6 +249,33 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
249
249
|
nextOrder.items.splice(idxToRemove, 1);
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
+
if (itemActions.isRelatedItem(item) && itemActions.hasAddModifiers(item)) {
|
|
253
|
+
const parentItem = itemActions.getParentItem(nextOrder.items, item);
|
|
254
|
+
const parentIndex = actions.getItemIndex({
|
|
255
|
+
order: nextOrder,
|
|
256
|
+
item: parentItem,
|
|
257
|
+
});
|
|
258
|
+
const relatedModifiersToAdd = itemActions
|
|
259
|
+
.getAddModifiers(item)
|
|
260
|
+
.filter(
|
|
261
|
+
mod =>
|
|
262
|
+
!parentItem.modifiers.some(
|
|
263
|
+
itemMod => itemMod.modifierId === mod._id
|
|
264
|
+
)
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
nextOrder = relatedModifiersToAdd.reduce(
|
|
268
|
+
(acc, modifier) =>
|
|
269
|
+
actions.addItemModifier({
|
|
270
|
+
itemIndex: parentIndex,
|
|
271
|
+
order: acc,
|
|
272
|
+
modifier,
|
|
273
|
+
originalItem: parentItem,
|
|
274
|
+
}),
|
|
275
|
+
nextOrder
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
|
|
252
279
|
return {
|
|
253
280
|
updatedOrder: nextOrder,
|
|
254
281
|
itemIndex: nextItemIndex,
|
package/lib/order/index.js
CHANGED
|
@@ -32,9 +32,7 @@ const calculate = require('./calculate');
|
|
|
32
32
|
const isParent = require('./isParent');
|
|
33
33
|
const canSplit = require('./canSplit');
|
|
34
34
|
const removeModifier = require('./removeModifier');
|
|
35
|
-
const removeDiscountModifier = require('./removeDiscountModifier');
|
|
36
35
|
const addModifier = require('./addModifier');
|
|
37
|
-
const addDiscountModifier = require('./addDiscountModifier');
|
|
38
36
|
const calculateDue = require('./calculateDue');
|
|
39
37
|
const toggleModifier = require('./toggleModifier');
|
|
40
38
|
const voidOrder = require('./void');
|
|
@@ -89,6 +87,7 @@ const manualSplitByQuantity = require('./manualSplitByQuantity');
|
|
|
89
87
|
const applyPayment = require('./applyPayment');
|
|
90
88
|
const getBalance = require('./getBalance');
|
|
91
89
|
const getLastLocation = require('./getLastLocation');
|
|
90
|
+
const getModifierRelations = require('./getModifierRelations');
|
|
92
91
|
|
|
93
92
|
const orderActions = (deps = {}) => {
|
|
94
93
|
const actions = {};
|
|
@@ -132,9 +131,7 @@ const orderActions = (deps = {}) => {
|
|
|
132
131
|
isParent: isParent(innerDeps),
|
|
133
132
|
canSplit: canSplit(innerDeps),
|
|
134
133
|
removeModifier: removeModifier(innerDeps),
|
|
135
|
-
removeDiscountModifier: removeDiscountModifier(innerDeps),
|
|
136
134
|
addModifier: addModifier(innerDeps),
|
|
137
|
-
addDiscountModifier: addDiscountModifier(innerDeps),
|
|
138
135
|
calculateDue: calculateDue(innerDeps),
|
|
139
136
|
toggleModifier: toggleModifier(innerDeps),
|
|
140
137
|
voidOrder: voidOrder(innerDeps),
|
|
@@ -189,6 +186,7 @@ const orderActions = (deps = {}) => {
|
|
|
189
186
|
applyPayment: applyPayment(innerDeps),
|
|
190
187
|
getOrdersBalance: getOrdersBalance(innerDeps),
|
|
191
188
|
getLastLocation: getLastLocation(innerDeps),
|
|
189
|
+
getModifierRelations: getModifierRelations(innerDeps),
|
|
192
190
|
});
|
|
193
191
|
|
|
194
192
|
Object.keys(freezedActions).forEach(actionName => {
|