@darkpos/pricing 1.0.75 → 1.0.77
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/unpick.item.test.js +21 -0
- package/__TEST__/order/pickEndDate.test.js +7 -18
- package/__TEST__/order/unpick.order.test.js +97 -0
- package/lib/item/getPipeModifiers.js +1 -1
- package/lib/item/getRelatedModifiers.js +14 -0
- package/lib/item/hasModifier.js +13 -14
- package/lib/item/index.js +4 -0
- package/lib/item/removeModifier.js +1 -1
- package/lib/item/unpick.js +15 -0
- package/lib/modifier/getAddModifiers.js +6 -0
- package/lib/modifier/getItemModifiers.js +1 -1
- package/lib/modifier/getRelatedModifiers.js +24 -4
- package/lib/modifier/index.js +12 -4
- package/lib/modifier/isGroupPath.js +8 -0
- package/lib/modifier/isRelatedModifier.js +4 -12
- package/lib/modifier/isRelatedModifierById.js +14 -0
- package/lib/modifier/isSpreadFrom.js +7 -0
- package/lib/order/addItemModifier.js +1 -1
- package/lib/order/index.js +2 -0
- package/lib/order/unpick.js +28 -0
- package/lib/store/getRecommendedEndDate.js +16 -7
- package/lib/store/pickEndDate.js +7 -5
- package/package.json +2 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const usePricing = require('../../index');
|
|
2
|
+
const mockStores = require('../mocks/stores');
|
|
3
|
+
|
|
4
|
+
const session = {
|
|
5
|
+
store: mockStores[0],
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const pricingService = usePricing(session);
|
|
9
|
+
|
|
10
|
+
describe('Item actions - unpick item', () => {
|
|
11
|
+
test('unpick item', () => {
|
|
12
|
+
const orderItem = {
|
|
13
|
+
price: 30,
|
|
14
|
+
quantity: 2,
|
|
15
|
+
status: { picked: { value: true, date: new Date() } },
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const newItem = pricingService.item.unpickItem(orderItem);
|
|
19
|
+
expect(newItem.status.picked).toStrictEqual({ value: false, date: '' });
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -19,10 +19,9 @@ describe('pickEndDate function', () => {
|
|
|
19
19
|
test('Get EndDate, today is an Skip date', () => {
|
|
20
20
|
const schedule = {
|
|
21
21
|
addDays: 1,
|
|
22
|
-
hour: 17,
|
|
23
|
-
minute: 0,
|
|
24
22
|
skipDays: [7],
|
|
25
23
|
cutHour: { hour: 16, minute: 0 },
|
|
24
|
+
readyHour: { hour: 17, minute: 0 },
|
|
26
25
|
cutDay: 2,
|
|
27
26
|
};
|
|
28
27
|
|
|
@@ -37,8 +36,7 @@ describe('pickEndDate function', () => {
|
|
|
37
36
|
test('Order falls on a closed day', () => {
|
|
38
37
|
const schedule = {
|
|
39
38
|
addDays: 1,
|
|
40
|
-
hour: 14,
|
|
41
|
-
minute: 0,
|
|
39
|
+
readyHour: { hour: 14, minute: 0 },
|
|
42
40
|
skipDays: [7], // Skip Sunday
|
|
43
41
|
cutHour: { hour: 16, minute: 0 },
|
|
44
42
|
cutDay: 2,
|
|
@@ -55,8 +53,7 @@ describe('pickEndDate function', () => {
|
|
|
55
53
|
test('Get endDate if today is friday and Saturday and Sunday are skip days', () => {
|
|
56
54
|
const schedule = {
|
|
57
55
|
addDays: 1,
|
|
58
|
-
hour: 17,
|
|
59
|
-
minute: 0,
|
|
56
|
+
readyHour: { hour: 17, minute: 0 },
|
|
60
57
|
skipDays: [6, 7], // Skip Saturday and Sunday
|
|
61
58
|
cutHour: { hour: 16, minute: 0 },
|
|
62
59
|
cutDay: 5,
|
|
@@ -73,8 +70,7 @@ describe('pickEndDate function', () => {
|
|
|
73
70
|
test('Order time before cut-off hour', () => {
|
|
74
71
|
const schedule = {
|
|
75
72
|
addDays: 0, // Same day
|
|
76
|
-
hour: 17,
|
|
77
|
-
minute: 0,
|
|
73
|
+
readyHour: { hour: 17, minute: 0 },
|
|
78
74
|
skipDays: [],
|
|
79
75
|
cutHour: { hour: 16, minute: 0 }, // Cut-off at 4 PM
|
|
80
76
|
cutDay: 5,
|
|
@@ -90,18 +86,13 @@ describe('pickEndDate function', () => {
|
|
|
90
86
|
|
|
91
87
|
test('Order time after cut-off hour', () => {
|
|
92
88
|
const schedule = {
|
|
93
|
-
hour: 17,
|
|
94
|
-
minute: 0,
|
|
89
|
+
readyHour: { hour: 17, minute: 0 },
|
|
95
90
|
cutDay: 5,
|
|
96
91
|
skipDays: [],
|
|
97
92
|
cutHour: {
|
|
98
93
|
hour: 0,
|
|
99
94
|
minute: 0,
|
|
100
95
|
},
|
|
101
|
-
time: {
|
|
102
|
-
hour: 16,
|
|
103
|
-
minute: 0,
|
|
104
|
-
},
|
|
105
96
|
addDays: 1,
|
|
106
97
|
recommended: 'nothing_recommended',
|
|
107
98
|
};
|
|
@@ -117,8 +108,7 @@ describe('pickEndDate function', () => {
|
|
|
117
108
|
test('Get EndDate, there are skip dates in between', () => {
|
|
118
109
|
const schedule = {
|
|
119
110
|
addDays: 1,
|
|
120
|
-
hour: 17,
|
|
121
|
-
minute: 0,
|
|
111
|
+
readyHour: { hour: 17, minute: 0 },
|
|
122
112
|
skipDays: [7, 0],
|
|
123
113
|
cutHour: { hour: 16, minute: 0 },
|
|
124
114
|
cutDay: 2,
|
|
@@ -135,8 +125,7 @@ describe('pickEndDate function', () => {
|
|
|
135
125
|
test('Get EndDate, Now date is an skip day', () => {
|
|
136
126
|
const schedule = {
|
|
137
127
|
addDays: 1,
|
|
138
|
-
hour: 20,
|
|
139
|
-
minute: 0,
|
|
128
|
+
readyHour: { hour: 20, minute: 0 },
|
|
140
129
|
skipDays: [1, 7],
|
|
141
130
|
cutHour: { hour: 16, minute: 0 },
|
|
142
131
|
cutDay: 2,
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const usePricing = require('../../index');
|
|
2
|
+
const mockStores = require('../mocks/stores');
|
|
3
|
+
|
|
4
|
+
const session = {
|
|
5
|
+
store: mockStores[0],
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const pricingService = usePricing(session);
|
|
9
|
+
|
|
10
|
+
describe('Order actions - unpick order', () => {
|
|
11
|
+
test('unpick items in parent order', () => {
|
|
12
|
+
const orderItem = {
|
|
13
|
+
price: 30,
|
|
14
|
+
quantity: 2,
|
|
15
|
+
status: { picked: { value: true, date: new Date() } },
|
|
16
|
+
};
|
|
17
|
+
const order = { items: [orderItem], status: { fullyPicked: true } };
|
|
18
|
+
const newOrder = pricingService.order.unpickOrder(order);
|
|
19
|
+
expect(newOrder.status.fullyPicked).toBe(false);
|
|
20
|
+
newOrder.items.map(item =>
|
|
21
|
+
expect(item.status.picked).toStrictEqual({ value: false, date: '' })
|
|
22
|
+
);
|
|
23
|
+
});
|
|
24
|
+
test('unpick 10 items in parent order', () => {
|
|
25
|
+
const orderItem = {
|
|
26
|
+
price: 30,
|
|
27
|
+
quantity: 2,
|
|
28
|
+
status: { picked: { value: true, date: new Date() } },
|
|
29
|
+
};
|
|
30
|
+
const order = {
|
|
31
|
+
status: { fullyPicked: true },
|
|
32
|
+
items: [
|
|
33
|
+
orderItem,
|
|
34
|
+
orderItem,
|
|
35
|
+
orderItem,
|
|
36
|
+
orderItem,
|
|
37
|
+
orderItem,
|
|
38
|
+
orderItem,
|
|
39
|
+
orderItem,
|
|
40
|
+
orderItem,
|
|
41
|
+
orderItem,
|
|
42
|
+
orderItem,
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
const newOrder = pricingService.order.unpickOrder(order);
|
|
46
|
+
expect(newOrder.status.fullyPicked).toBe(false);
|
|
47
|
+
newOrder.items.map(item =>
|
|
48
|
+
expect(item.status.picked).toStrictEqual({ value: false, date: '' })
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
test('unpick items in parent order with items that are not picked', () => {
|
|
52
|
+
const orderItem = {
|
|
53
|
+
price: 30,
|
|
54
|
+
quantity: 2,
|
|
55
|
+
status: { picked: { value: true, date: new Date() } },
|
|
56
|
+
};
|
|
57
|
+
const orderItemNotPicked = {
|
|
58
|
+
price: 30,
|
|
59
|
+
quantity: 2,
|
|
60
|
+
status: { picked: { value: false, date: '' } },
|
|
61
|
+
};
|
|
62
|
+
const order = {
|
|
63
|
+
items: [orderItem, orderItemNotPicked],
|
|
64
|
+
status: { fullyPicked: true },
|
|
65
|
+
};
|
|
66
|
+
const newOrder = pricingService.order.unpickOrder(order);
|
|
67
|
+
expect(newOrder.status.fullyPicked).toBe(false);
|
|
68
|
+
newOrder.items.map(item =>
|
|
69
|
+
expect(item.status.picked).toStrictEqual({ value: false, date: '' })
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('unpick items in parent order with items and suborder with items picked', () => {
|
|
74
|
+
const orderItem = {
|
|
75
|
+
price: 30,
|
|
76
|
+
quantity: 2,
|
|
77
|
+
status: { picked: { value: true, date: new Date() } },
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const subOrder = { items: [orderItem], status: { fullyPicked: true } };
|
|
81
|
+
const order = {
|
|
82
|
+
items: [orderItem],
|
|
83
|
+
orders: [subOrder],
|
|
84
|
+
status: { fullyPicked: true },
|
|
85
|
+
};
|
|
86
|
+
const newOrder = pricingService.order.unpickOrder(order);
|
|
87
|
+
newOrder.items.map(item =>
|
|
88
|
+
expect(item.status.picked).toStrictEqual({ value: false, date: '' })
|
|
89
|
+
);
|
|
90
|
+
newOrder.orders.map(_order => {
|
|
91
|
+
expect(_order.status.fullyPicked).toBe(false);
|
|
92
|
+
return _order.items.map(item =>
|
|
93
|
+
expect(item.status.picked).toStrictEqual({ value: false, date: '' })
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -3,7 +3,7 @@ module.exports = ({ modifierActions }) =>
|
|
|
3
3
|
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
4
4
|
return item.modifiers.filter(
|
|
5
5
|
modifier =>
|
|
6
|
-
modifierActions.
|
|
6
|
+
modifierActions.isGroup(modifier) &&
|
|
7
7
|
modifierActions.isRequired(modifier) &&
|
|
8
8
|
modifierActions.enableAutoPopup(modifier)
|
|
9
9
|
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function getRelatedModifiers({ item }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
4
|
+
|
|
5
|
+
const relatedModifiers = [];
|
|
6
|
+
|
|
7
|
+
item.modifiers.forEach(itemMod => {
|
|
8
|
+
if (modifierActions.isRelatedModifier(itemMod)) {
|
|
9
|
+
relatedModifiers.push(itemMod);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
return relatedModifiers;
|
|
14
|
+
};
|
package/lib/item/hasModifier.js
CHANGED
|
@@ -2,15 +2,6 @@ module.exports = ({ modifierActions }) =>
|
|
|
2
2
|
function hasModifier({ item, modifier, relatedItems }) {
|
|
3
3
|
if (!item || !modifier || !item.modifiers) return false;
|
|
4
4
|
|
|
5
|
-
const isGroupPath = groupPath =>
|
|
6
|
-
groupPath &&
|
|
7
|
-
(groupPath.includes(modifier.modifierId) ||
|
|
8
|
-
groupPath.includes(modifier._id));
|
|
9
|
-
|
|
10
|
-
const isSpreadFrom = spreadFromId =>
|
|
11
|
-
spreadFromId &&
|
|
12
|
-
(spreadFromId === modifier.modifierId || spreadFromId === modifier._id);
|
|
13
|
-
|
|
14
5
|
if (modifierActions.isGroup(modifier)) {
|
|
15
6
|
const matchByRelatedModifier = item.modifiers.some(itemMod => {
|
|
16
7
|
if (
|
|
@@ -20,8 +11,14 @@ module.exports = ({ modifierActions }) =>
|
|
|
20
11
|
)
|
|
21
12
|
return false;
|
|
22
13
|
return (
|
|
23
|
-
isGroupPath(
|
|
24
|
-
|
|
14
|
+
modifierActions.isGroupPath({
|
|
15
|
+
groupPath: itemMod.properties.groupPath,
|
|
16
|
+
modifier,
|
|
17
|
+
}) ||
|
|
18
|
+
modifierActions.isSpreadFrom({
|
|
19
|
+
spreadFromId: itemMod.properties.spreadFrom,
|
|
20
|
+
modifier,
|
|
21
|
+
})
|
|
25
22
|
);
|
|
26
23
|
});
|
|
27
24
|
|
|
@@ -29,9 +26,11 @@ module.exports = ({ modifierActions }) =>
|
|
|
29
26
|
!!relatedItems &&
|
|
30
27
|
modifierActions.isGroup(modifier) &&
|
|
31
28
|
relatedItems.some(relatedItem =>
|
|
32
|
-
isGroupPath(
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
modifierActions.isGroupPath({
|
|
30
|
+
groupPath:
|
|
31
|
+
relatedItem.properties && relatedItem.properties.groupPath,
|
|
32
|
+
modifier,
|
|
33
|
+
})
|
|
35
34
|
);
|
|
36
35
|
|
|
37
36
|
return matchByRelatedModifier || matchByRelatedItems;
|
package/lib/item/index.js
CHANGED
|
@@ -50,6 +50,8 @@ const getLastLocation = require('./getLastLocation');
|
|
|
50
50
|
const hasAddModifiers = require('./hasAddModifiers');
|
|
51
51
|
const getAddModifiers = require('./getAddModifiers');
|
|
52
52
|
const getRelatedItems = require('./getRelatedItems');
|
|
53
|
+
const getRelatedModifiers = require('./getRelatedModifiers');
|
|
54
|
+
const unpickItem = require('./unpick');
|
|
53
55
|
|
|
54
56
|
const itemActions = (deps = {}) => {
|
|
55
57
|
const actions = {};
|
|
@@ -113,6 +115,8 @@ const itemActions = (deps = {}) => {
|
|
|
113
115
|
hasAddModifiers: hasAddModifiers(innerDeps),
|
|
114
116
|
getAddModifiers: getAddModifiers(innerDeps),
|
|
115
117
|
getRelatedItems: getRelatedItems(innerDeps),
|
|
118
|
+
getRelatedModifiers: getRelatedModifiers(innerDeps),
|
|
119
|
+
unpickItem: unpickItem(innerDeps),
|
|
116
120
|
});
|
|
117
121
|
|
|
118
122
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function unpickItem(item) {
|
|
3
|
+
if (!item) return item;
|
|
4
|
+
const nextItem = { ...item };
|
|
5
|
+
if (nextItem.status) {
|
|
6
|
+
nextItem.status = {
|
|
7
|
+
...nextItem.status,
|
|
8
|
+
picked: {
|
|
9
|
+
value: false,
|
|
10
|
+
date: '',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return nextItem;
|
|
15
|
+
};
|
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
module.exports = () =>
|
|
2
|
-
function getRelatedModifiers({
|
|
3
|
-
if (!
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getRelatedModifiers({ groupModifier, modifiers }) {
|
|
3
|
+
if (!actions.isGroup(groupModifier) || !Array.isArray(modifiers)) return [];
|
|
4
4
|
|
|
5
|
-
const relatedModifiers =
|
|
5
|
+
const relatedModifiers = [];
|
|
6
|
+
|
|
7
|
+
const otherModifiers = modifiers.filter(
|
|
8
|
+
mod =>
|
|
9
|
+
!actions.isGroup(mod) && mod._id !== groupModifier._id && mod.properties
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
otherModifiers.forEach(mod => {
|
|
13
|
+
if (
|
|
14
|
+
actions.isGroupPath({
|
|
15
|
+
groupPath: mod.properties.groupPath,
|
|
16
|
+
modifier: groupModifier,
|
|
17
|
+
}) ||
|
|
18
|
+
actions.isSpreadFrom({
|
|
19
|
+
spreadFromId: mod.properties.spreadFrom,
|
|
20
|
+
modifier: groupModifier,
|
|
21
|
+
})
|
|
22
|
+
) {
|
|
23
|
+
relatedModifiers.push(mod);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
6
26
|
|
|
7
27
|
return relatedModifiers;
|
|
8
28
|
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -43,7 +43,7 @@ const getPreferences = require('./getPreferences');
|
|
|
43
43
|
const getPromotionModifiers = require('./getPromotionModifiers');
|
|
44
44
|
const getPromptMessage = require('./getPromptMessage');
|
|
45
45
|
const getProperty = require('./getProperty');
|
|
46
|
-
const
|
|
46
|
+
const getAddModifiers = require('./getAddModifiers');
|
|
47
47
|
const getRecommendedModifiers = require('./getRecommendedModifiers');
|
|
48
48
|
const getRequiredModifiers = require('./getRequiredModifiers');
|
|
49
49
|
const getSubscriptionItem = require('./getSubscriptionItem');
|
|
@@ -114,7 +114,7 @@ const isFixedDiscount = require('./isFixedDiscount');
|
|
|
114
114
|
const removeLocked = require('./removeLocked');
|
|
115
115
|
const hasItems = require('./hasItems');
|
|
116
116
|
const removeGroupData = require('./removeGroupData');
|
|
117
|
-
const
|
|
117
|
+
const isRelatedModifierById = require('./isRelatedModifierById');
|
|
118
118
|
const getGroupedModifiers = require('./getGroupedModifiers');
|
|
119
119
|
const isOptionsOverride = require('./isOptionsOverride');
|
|
120
120
|
const getGroupedModifierLabels = require('./getGroupedModifierLabels');
|
|
@@ -146,6 +146,10 @@ const removeGroupRelations = require('./removeGroupRelations');
|
|
|
146
146
|
const getManualModifiers = require('./getManualModifiers');
|
|
147
147
|
const shouldSpreadModifier = require('./shouldSpreadModifier');
|
|
148
148
|
const spreadSingleGroupModifiers = require('./spreadSingleGroupModifiers');
|
|
149
|
+
const isGroupPath = require('./isGroupPath');
|
|
150
|
+
const isSpreadFrom = require('./isSpreadFrom');
|
|
151
|
+
const getRelatedModifiers = require('./getRelatedModifiers');
|
|
152
|
+
const isRelatedModifier = require('./isRelatedModifier');
|
|
149
153
|
|
|
150
154
|
const modifierActions = (deps = {}) => {
|
|
151
155
|
const actions = {};
|
|
@@ -201,7 +205,7 @@ const modifierActions = (deps = {}) => {
|
|
|
201
205
|
getPromotionModifiers: getPromotionModifiers(innerDeps),
|
|
202
206
|
getPromptMessage: getPromptMessage(innerDeps),
|
|
203
207
|
getProperty: getProperty(innerDeps),
|
|
204
|
-
|
|
208
|
+
getAddModifiers: getAddModifiers(innerDeps),
|
|
205
209
|
getRecommendedModifiers: getRecommendedModifiers(innerDeps),
|
|
206
210
|
getRequiredModifiers: getRequiredModifiers(innerDeps),
|
|
207
211
|
getSubscriptionItem: getSubscriptionItem(innerDeps),
|
|
@@ -271,7 +275,7 @@ const modifierActions = (deps = {}) => {
|
|
|
271
275
|
isAdd: isAdd(innerDeps),
|
|
272
276
|
mutateModifier: mutateModifier(innerDeps),
|
|
273
277
|
removeGroupData: removeGroupData(innerDeps),
|
|
274
|
-
|
|
278
|
+
isRelatedModifierById: isRelatedModifierById(innerDeps),
|
|
275
279
|
getGroupedModifiers: getGroupedModifiers(innerDeps),
|
|
276
280
|
isOptionsOverride: isOptionsOverride(innerDeps),
|
|
277
281
|
getGroupedModifierLabels: getGroupedModifierLabels(innerDeps),
|
|
@@ -305,6 +309,10 @@ const modifierActions = (deps = {}) => {
|
|
|
305
309
|
getManualModifiers: getManualModifiers(innerDeps),
|
|
306
310
|
shouldSpreadModifier: shouldSpreadModifier(innerDeps),
|
|
307
311
|
spreadSingleGroupModifiers: spreadSingleGroupModifiers(innerDeps),
|
|
312
|
+
isGroupPath: isGroupPath(innerDeps),
|
|
313
|
+
isSpreadFrom: isSpreadFrom(innerDeps),
|
|
314
|
+
getRelatedModifiers: getRelatedModifiers(innerDeps),
|
|
315
|
+
isRelatedModifier: isRelatedModifier(innerDeps),
|
|
308
316
|
});
|
|
309
317
|
|
|
310
318
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
module.exports = (
|
|
2
|
-
function isRelatedModifier(
|
|
3
|
-
if (!modifier || !
|
|
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;
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function isRelatedModifier(modifier) {
|
|
3
|
+
if (!modifier || !modifier.properties) return false;
|
|
4
|
+
return !!modifier.properties.groupPath || modifier.properties.spreadFrom;
|
|
13
5
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function isRelatedModifierById({ _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 =>
|
|
9
|
+
isRelatedModifierById({ _id, modifier: relatedModifier })
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return modifier._id === _id || modifier.modifierId === _id;
|
|
14
|
+
};
|
|
@@ -249,7 +249,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
249
249
|
// Recursive Rules:
|
|
250
250
|
if (modifierActions.hasAddModifiers(modifier)) {
|
|
251
251
|
const relatedModifiers = modifierActions
|
|
252
|
-
.
|
|
252
|
+
.getAddModifiers({ modifier })
|
|
253
253
|
.filter(each => !modifierActions.contains(item.modifiers, each));
|
|
254
254
|
|
|
255
255
|
item = relatedModifiers.reduce(
|
package/lib/order/index.js
CHANGED
|
@@ -38,6 +38,7 @@ const toggleModifier = require('./toggleModifier');
|
|
|
38
38
|
const voidOrder = require('./void');
|
|
39
39
|
const holdOrder = require('./hold');
|
|
40
40
|
const openOrder = require('./open');
|
|
41
|
+
const unpickOrder = require('./unpick');
|
|
41
42
|
const isDetailed = require('./isDetailed');
|
|
42
43
|
const splitByDepartments = require('./splitByDepartments');
|
|
43
44
|
const autoSplit = require('./autoSplit');
|
|
@@ -138,6 +139,7 @@ const orderActions = (deps = {}) => {
|
|
|
138
139
|
voidOrder: voidOrder(innerDeps),
|
|
139
140
|
holdOrder: holdOrder(innerDeps),
|
|
140
141
|
openOrder: openOrder(innerDeps),
|
|
142
|
+
unpickOrder: unpickOrder(innerDeps),
|
|
141
143
|
isDetailed: isDetailed(innerDeps),
|
|
142
144
|
splitByDepartments: splitByDepartments(innerDeps),
|
|
143
145
|
autoSplit: autoSplit(innerDeps),
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module.exports = ({ itemActions }) =>
|
|
2
|
+
function unpickOrder(order) {
|
|
3
|
+
if (!order) return order;
|
|
4
|
+
const nextOrder = { ...order };
|
|
5
|
+
if (order.items.length > 0) {
|
|
6
|
+
const orderItems = [...(order.items || [])].map(item =>
|
|
7
|
+
itemActions.unpickItem(item)
|
|
8
|
+
);
|
|
9
|
+
if (nextOrder.status && nextOrder.status.fullyPicked) {
|
|
10
|
+
nextOrder.status.fullyPicked = false;
|
|
11
|
+
}
|
|
12
|
+
nextOrder.items = orderItems;
|
|
13
|
+
}
|
|
14
|
+
if (order.orders && order.orders.length > 0) {
|
|
15
|
+
const suborderWithItems = order.orders.map(_order => {
|
|
16
|
+
const nextsubOrder = {
|
|
17
|
+
..._order,
|
|
18
|
+
items: _order.items.map(item => itemActions.unpickItem(item)),
|
|
19
|
+
};
|
|
20
|
+
if (nextsubOrder.status && nextsubOrder.status.fullyPicked) {
|
|
21
|
+
nextsubOrder.status.fullyPicked = false;
|
|
22
|
+
}
|
|
23
|
+
return nextsubOrder;
|
|
24
|
+
});
|
|
25
|
+
nextOrder.orders = suborderWithItems;
|
|
26
|
+
}
|
|
27
|
+
return nextOrder;
|
|
28
|
+
};
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
module.exports = ({ actions, settings }) =>
|
|
2
2
|
function getRecommendedEndDate() {
|
|
3
|
-
const
|
|
3
|
+
const readySchedule =
|
|
4
4
|
settings.order &&
|
|
5
5
|
settings.order.endDate &&
|
|
6
|
-
settings.order.endDate.
|
|
6
|
+
settings.order.endDate.readySchedule;
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
if (readySchedule) {
|
|
9
|
+
const dayOfWeek = new Date().getDay();
|
|
10
|
+
const day = dayOfWeek || 7;
|
|
11
|
+
const schedule = settings.order.endDate.readySchedule.find(item =>
|
|
12
|
+
item.dayOfWeek.includes(day)
|
|
13
|
+
);
|
|
14
|
+
return schedule
|
|
15
|
+
? actions.pickEndDate({
|
|
16
|
+
...schedule,
|
|
17
|
+
})
|
|
18
|
+
: null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return null;
|
|
13
22
|
};
|
package/lib/store/pickEndDate.js
CHANGED
|
@@ -13,8 +13,7 @@ module.exports = ({ settings, _, moment }) => {
|
|
|
13
13
|
return function pickEndDate(schedule = {}) {
|
|
14
14
|
const {
|
|
15
15
|
addDays: addDaysParam,
|
|
16
|
-
|
|
17
|
-
minute,
|
|
16
|
+
readyHour,
|
|
18
17
|
skipDays = [],
|
|
19
18
|
cutHour,
|
|
20
19
|
cutDay = 0,
|
|
@@ -33,13 +32,16 @@ module.exports = ({ settings, _, moment }) => {
|
|
|
33
32
|
|
|
34
33
|
if (
|
|
35
34
|
(cutHour && todayHours > cutHour.hour) ||
|
|
36
|
-
(todayHours >= cutHour.hour && todayMinutes > cutHour.minute)
|
|
35
|
+
(cutHour && todayHours >= cutHour.hour && todayMinutes > cutHour.minute)
|
|
37
36
|
) {
|
|
38
37
|
endDateTZ = endDateTZ.add(cutDay, 'days');
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
if (hour !== undefined)
|
|
42
|
-
|
|
40
|
+
if (readyHour && readyHour.hour !== undefined)
|
|
41
|
+
endDateTZ.set('hour', readyHour.hour);
|
|
42
|
+
if (readyHour && readyHour.minute !== undefined)
|
|
43
|
+
endDateTZ.set('minute', readyHour.minute);
|
|
44
|
+
|
|
43
45
|
endDateTZ.set('second', 0);
|
|
44
46
|
|
|
45
47
|
const isSkipDay = endDateIsoWeekDay => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.77",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"supertest": "^6.2.3",
|
|
52
52
|
"supervisor": "^0.12.0"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "5ef669119ac8baec449e3c0aee06151d0cd4ad63"
|
|
55
55
|
}
|