@darkpos/pricing 1.0.12 → 1.0.14
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/lib/modifier/getCreditModifiersTotal.js +14 -0
- package/lib/modifier/getFixedModifiersTotal.js +16 -0
- package/lib/modifier/getSplittedModifiers.js +75 -16
- package/lib/modifier/hasCreditModifier.js +4 -0
- package/lib/modifier/hasFixedModifier.js +4 -0
- package/lib/modifier/index.js +8 -0
- package/lib/order/addItem.js +2 -50
- package/lib/order/adjustCreditModifiersDifference.js +34 -0
- package/lib/order/adjustFixedModifiersDifference.js +36 -0
- package/lib/order/getCreditModifiersTotal.js +15 -0
- package/lib/order/getFixedModifiersTotal.js +15 -0
- package/lib/order/getOrderItemSubscriptions.js +43 -0
- package/lib/order/index.js +18 -0
- package/lib/order/splitAndCalculate.js +16 -0
- package/lib/order/splitByDepartments.js +30 -51
- package/lib/order/spreadModifiers.js +21 -0
- package/lib/order/validateCreditModifiersTotal.js +23 -0
- package/lib/order/validateFixedModifiersTotal.js +23 -0
- package/package.json +2 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ utils }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function getCreditModifiersTotal(modifiers) {
|
|
5
|
+
if (!Array.isArray(modifiers)) return 0;
|
|
6
|
+
|
|
7
|
+
const creditModifiers = modifiers.filter(mod => mod.type === 'credit');
|
|
8
|
+
|
|
9
|
+
return creditModifiers.reduce(
|
|
10
|
+
(acc, modifier) => math.add(acc, modifier.properties.maxAmount || 0),
|
|
11
|
+
0
|
|
12
|
+
);
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module.exports = ({ utils }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function getFixedModifiersTotal(modifiers) {
|
|
5
|
+
if (!Array.isArray(modifiers)) return 0;
|
|
6
|
+
|
|
7
|
+
const fixedModifiers = modifiers.filter(
|
|
8
|
+
mod => mod.compute.type === 'fixed'
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
return fixedModifiers.reduce(
|
|
12
|
+
(acc, modifier) => math.add(acc, modifier.compute.amount || 0),
|
|
13
|
+
0
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
module.exports = ({ utils }) => {
|
|
2
2
|
const { math, helpers } = utils;
|
|
3
|
+
|
|
4
|
+
const divideModifierAmount = ({
|
|
5
|
+
totalOriginOrder,
|
|
6
|
+
modifierAmount,
|
|
7
|
+
totalSplitedOrder,
|
|
8
|
+
}) =>
|
|
9
|
+
totalOriginOrder
|
|
10
|
+
? math.div(
|
|
11
|
+
math.mul(modifierAmount, totalSplitedOrder || 0),
|
|
12
|
+
totalOriginOrder
|
|
13
|
+
)
|
|
14
|
+
: 0;
|
|
15
|
+
|
|
16
|
+
const splitCreditModifier = ({
|
|
17
|
+
modifier,
|
|
18
|
+
totalOriginOrder,
|
|
19
|
+
totalSplitedOrder,
|
|
20
|
+
}) => {
|
|
21
|
+
const maxAmount = divideModifierAmount({
|
|
22
|
+
modifierAmount: modifier.properties.maxAmount,
|
|
23
|
+
totalOriginOrder,
|
|
24
|
+
totalSplitedOrder,
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
...modifier,
|
|
28
|
+
compute: {
|
|
29
|
+
...modifier.compute,
|
|
30
|
+
_id: helpers.getObjectID(),
|
|
31
|
+
},
|
|
32
|
+
properties: {
|
|
33
|
+
...modifier.properties,
|
|
34
|
+
maxAmount,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const splitFixedModifier = ({
|
|
40
|
+
modifier,
|
|
41
|
+
totalOriginOrder,
|
|
42
|
+
totalSplitedOrder,
|
|
43
|
+
}) => {
|
|
44
|
+
const amount = divideModifierAmount({
|
|
45
|
+
modifierAmount: modifier.compute.amount,
|
|
46
|
+
totalOriginOrder,
|
|
47
|
+
totalSplitedOrder,
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
...modifier,
|
|
51
|
+
compute: {
|
|
52
|
+
...modifier.compute,
|
|
53
|
+
_id: helpers.getObjectID(),
|
|
54
|
+
amount,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
3
59
|
return function getSplittedModifiers(
|
|
4
60
|
modifiers,
|
|
5
61
|
totalOriginOrder,
|
|
@@ -7,22 +63,25 @@ module.exports = ({ utils }) => {
|
|
|
7
63
|
) {
|
|
8
64
|
return modifiers.map(each => {
|
|
9
65
|
const modifier = { ...each };
|
|
10
|
-
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
66
|
+
|
|
67
|
+
if (modifier.type === 'credit') {
|
|
68
|
+
return splitCreditModifier({
|
|
69
|
+
modifier,
|
|
70
|
+
totalOriginOrder,
|
|
71
|
+
totalSplitedOrder,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (
|
|
76
|
+
modifier.compute &&
|
|
77
|
+
modifier.compute.type === 'fixed' &&
|
|
78
|
+
modifier.compute.amount
|
|
79
|
+
) {
|
|
80
|
+
return splitFixedModifier({
|
|
81
|
+
modifier,
|
|
82
|
+
totalOriginOrder,
|
|
83
|
+
totalSplitedOrder,
|
|
84
|
+
});
|
|
26
85
|
}
|
|
27
86
|
return modifier;
|
|
28
87
|
});
|
package/lib/modifier/index.js
CHANGED
|
@@ -61,6 +61,8 @@ const getSplittedModifiers = require('./getSplittedModifiers');
|
|
|
61
61
|
const getSuggestion = require('./getSuggestion');
|
|
62
62
|
const getUnhiddenModifiers = require('./getUnhiddenModifiers');
|
|
63
63
|
const getUsingCount = require('./getUsingCount');
|
|
64
|
+
const getFixedModifiersTotal = require('./getFixedModifiersTotal');
|
|
65
|
+
const getCreditModifiersTotal = require('./getCreditModifiersTotal');
|
|
64
66
|
const hasAddModifiers = require('./hasAddModifiers');
|
|
65
67
|
const hasAllTag = require('./hasAllTag');
|
|
66
68
|
const hasAttribute = require('./hasAttribute');
|
|
@@ -70,6 +72,8 @@ const hasDisplayPrompt = require('./hasDisplayPrompt');
|
|
|
70
72
|
const hasMatchTags = require('./hasMatchTags');
|
|
71
73
|
const hasModifier = require('./hasModifier');
|
|
72
74
|
const hasRelatedItems = require('./hasRelatedItems');
|
|
75
|
+
const hasFixedModifier = require('./hasFixedModifier');
|
|
76
|
+
const hasCreditModifier = require('./hasCreditModifier');
|
|
73
77
|
const includePiecesInQuantity = require('./includePiecesInQuantity');
|
|
74
78
|
const includesInGroup = require('./includesInGroup');
|
|
75
79
|
const isTrackUsageSubscription = require('./isTrackUsageSubscription');
|
|
@@ -184,6 +188,8 @@ const modifierActions = (deps = {}) => {
|
|
|
184
188
|
getSuggestion: getSuggestion(innerDeps),
|
|
185
189
|
getUnhiddenModifiers: getUnhiddenModifiers(innerDeps),
|
|
186
190
|
getUsingCount: getUsingCount(innerDeps),
|
|
191
|
+
getFixedModifiersTotal: getFixedModifiersTotal(innerDeps),
|
|
192
|
+
getCreditModifiersTotal: getCreditModifiersTotal(innerDeps),
|
|
187
193
|
hasAddModifiers: hasAddModifiers(innerDeps),
|
|
188
194
|
hasAllTag: hasAllTag(innerDeps),
|
|
189
195
|
hasNoTags: hasNoTags(innerDeps),
|
|
@@ -194,6 +200,8 @@ const modifierActions = (deps = {}) => {
|
|
|
194
200
|
hasRelatedItems: hasRelatedItems(innerDeps),
|
|
195
201
|
hasAttribute: hasAttribute(innerDeps),
|
|
196
202
|
hasAttributes: hasAttributes(innerDeps),
|
|
203
|
+
hasFixedModifier: hasFixedModifier(innerDeps),
|
|
204
|
+
hasCreditModifier: hasCreditModifier(innerDeps),
|
|
197
205
|
includePiecesInQuantity: includePiecesInQuantity(innerDeps),
|
|
198
206
|
includesInGroup: includesInGroup(innerDeps),
|
|
199
207
|
isTrackUsageSubscription: isTrackUsageSubscription(innerDeps),
|
package/lib/order/addItem.js
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
module.exports = ({
|
|
2
|
-
actions,
|
|
3
|
-
itemActions,
|
|
4
|
-
modifierActions,
|
|
5
|
-
utils,
|
|
6
|
-
settings,
|
|
7
|
-
_,
|
|
8
|
-
}) => {
|
|
9
|
-
const { math } = utils;
|
|
1
|
+
module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
10
2
|
const orderSettings = _.get(settings, 'order');
|
|
11
3
|
|
|
12
4
|
const getQuantity = ({ order, item, pendingItemIndex = -1 }) => {
|
|
@@ -55,46 +47,6 @@ module.exports = ({
|
|
|
55
47
|
};
|
|
56
48
|
};
|
|
57
49
|
|
|
58
|
-
const getSubscription = ({ order, item, combined, cache }) => {
|
|
59
|
-
const [hasSubscription, remaining, used] = actions.hasRemainingSubscription(
|
|
60
|
-
{
|
|
61
|
-
order,
|
|
62
|
-
item,
|
|
63
|
-
combined,
|
|
64
|
-
}
|
|
65
|
-
);
|
|
66
|
-
let orderItem = item;
|
|
67
|
-
|
|
68
|
-
if (!hasSubscription) return orderItem;
|
|
69
|
-
|
|
70
|
-
const subscriptionModifiers = modifierActions.getSubscriptionModifiers(
|
|
71
|
-
orderItem.modifiers
|
|
72
|
-
);
|
|
73
|
-
if (!_.isEmpty(subscriptionModifiers)) {
|
|
74
|
-
orderItem = itemActions.removeModifiers({
|
|
75
|
-
item: orderItem,
|
|
76
|
-
modifiers: subscriptionModifiers,
|
|
77
|
-
cache,
|
|
78
|
-
customer: order.customer,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const { quantity, price } = orderItem;
|
|
83
|
-
let numberOfUses = quantity;
|
|
84
|
-
if (remaining) {
|
|
85
|
-
const left = remaining - (used || 0);
|
|
86
|
-
if (quantity > left) numberOfUses = left;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const modifier = modifierActions.createSubscriptionModifier({
|
|
90
|
-
amount: math.mul(numberOfUses, price),
|
|
91
|
-
properties: { subscription: { numberOfUses } },
|
|
92
|
-
});
|
|
93
|
-
orderItem.modifiers.push(modifier);
|
|
94
|
-
|
|
95
|
-
return orderItem;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
50
|
const addOrderItem = ({ itemIndex, order, item }) => {
|
|
99
51
|
if (itemIndex > -1) {
|
|
100
52
|
const updatedOrder = actions.updateItem({
|
|
@@ -241,7 +193,7 @@ module.exports = ({
|
|
|
241
193
|
if (!_.isEmpty(requiredModifiers))
|
|
242
194
|
modifiersToAdd.push(...requiredModifiers);
|
|
243
195
|
|
|
244
|
-
orderItem =
|
|
196
|
+
orderItem = actions.getOrderItemSubscriptions({
|
|
245
197
|
order,
|
|
246
198
|
item: orderItem,
|
|
247
199
|
combined,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function adjustCreditModifiersDifference({ subOrders, difference }) {
|
|
5
|
+
const selectedSubOrderIndex = subOrders.findIndex(
|
|
6
|
+
subOrder =>
|
|
7
|
+
modifierActions.hasCreditModifier(subOrder.modifiers) &&
|
|
8
|
+
actions.isOpen(subOrder) &&
|
|
9
|
+
subOrder.total > difference
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
if (selectedSubOrderIndex !== -1) {
|
|
13
|
+
const subOrderToUpdate = {
|
|
14
|
+
...subOrders[selectedSubOrderIndex],
|
|
15
|
+
};
|
|
16
|
+
const modifierToUpdateIdx = subOrderToUpdate.modifiers.findIndex(
|
|
17
|
+
mod => mod.type === 'credit'
|
|
18
|
+
);
|
|
19
|
+
const prevAmount =
|
|
20
|
+
subOrderToUpdate.modifiers[modifierToUpdateIdx].properties.maxAmount;
|
|
21
|
+
|
|
22
|
+
subOrderToUpdate.modifiers[modifierToUpdateIdx].properties.maxAmount =
|
|
23
|
+
math.add(prevAmount, difference);
|
|
24
|
+
|
|
25
|
+
subOrders.splice(
|
|
26
|
+
selectedSubOrderIndex,
|
|
27
|
+
1,
|
|
28
|
+
actions.calculate(subOrderToUpdate)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return subOrders;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function adjustFixedModifiersDifference({ subOrders, difference }) {
|
|
5
|
+
const selectedSubOrderIndex = subOrders.findIndex(
|
|
6
|
+
subOrder =>
|
|
7
|
+
modifierActions.hasFixedModifier(subOrder.modifiers) &&
|
|
8
|
+
actions.isOpen(subOrder) &&
|
|
9
|
+
subOrder.total > difference
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
if (selectedSubOrderIndex !== -1) {
|
|
13
|
+
const subOrderToUpdate = {
|
|
14
|
+
...subOrders[selectedSubOrderIndex],
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const modifierToUpdateIdx = subOrderToUpdate.modifiers.findIndex(
|
|
18
|
+
mod => mod.compute.type === 'fixed'
|
|
19
|
+
);
|
|
20
|
+
const prevAmount =
|
|
21
|
+
subOrderToUpdate.modifiers[modifierToUpdateIdx].compute.amount;
|
|
22
|
+
|
|
23
|
+
subOrderToUpdate.modifiers[modifierToUpdateIdx].compute.amount = math.add(
|
|
24
|
+
prevAmount,
|
|
25
|
+
difference
|
|
26
|
+
);
|
|
27
|
+
subOrders.splice(
|
|
28
|
+
selectedSubOrderIndex,
|
|
29
|
+
1,
|
|
30
|
+
actions.calculate(subOrderToUpdate)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return subOrders;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = ({ utils, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function getCreditModifiersTotal(orders) {
|
|
5
|
+
if (!Array.isArray(orders)) return 0;
|
|
6
|
+
return orders.reduce(
|
|
7
|
+
(acc, subOrder) =>
|
|
8
|
+
math.add(
|
|
9
|
+
acc,
|
|
10
|
+
modifierActions.getCreditModifiersTotal(subOrder.modifiers)
|
|
11
|
+
),
|
|
12
|
+
0
|
|
13
|
+
);
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = ({ utils, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function getFixedModifiersTotal(orders) {
|
|
5
|
+
if (!Array.isArray(orders)) return 0;
|
|
6
|
+
return orders.reduce(
|
|
7
|
+
(acc, subOrder) =>
|
|
8
|
+
math.add(
|
|
9
|
+
acc,
|
|
10
|
+
modifierActions.getFixedModifiersTotal(subOrder.modifiers)
|
|
11
|
+
),
|
|
12
|
+
0
|
|
13
|
+
);
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return ({ order, item, combined, cache }) => {
|
|
5
|
+
const [hasSubscription, remaining, used] = actions.hasRemainingSubscription(
|
|
6
|
+
{
|
|
7
|
+
order,
|
|
8
|
+
item,
|
|
9
|
+
combined,
|
|
10
|
+
}
|
|
11
|
+
);
|
|
12
|
+
let orderItem = item;
|
|
13
|
+
|
|
14
|
+
if (!hasSubscription) return orderItem;
|
|
15
|
+
|
|
16
|
+
const subscriptionModifiers = modifierActions.getSubscriptionModifiers(
|
|
17
|
+
orderItem.modifiers
|
|
18
|
+
);
|
|
19
|
+
if (!_.isEmpty(subscriptionModifiers)) {
|
|
20
|
+
orderItem = itemActions.removeModifiers({
|
|
21
|
+
item: orderItem,
|
|
22
|
+
modifiers: subscriptionModifiers,
|
|
23
|
+
cache,
|
|
24
|
+
customer: order.customer,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const { quantity, price } = orderItem;
|
|
29
|
+
let numberOfUses = quantity;
|
|
30
|
+
if (remaining) {
|
|
31
|
+
const left = remaining - (used || 0);
|
|
32
|
+
if (quantity > left) numberOfUses = left;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const modifier = modifierActions.createSubscriptionModifier({
|
|
36
|
+
amount: math.mul(numberOfUses, price),
|
|
37
|
+
properties: { subscription: { numberOfUses } },
|
|
38
|
+
});
|
|
39
|
+
orderItem.modifiers.push(modifier);
|
|
40
|
+
|
|
41
|
+
return orderItem;
|
|
42
|
+
};
|
|
43
|
+
};
|
package/lib/order/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const getSelectedItem = require('./getSelectedItem');
|
|
|
8
8
|
const updateItem = require('./updateItem');
|
|
9
9
|
const removeItemByIndex = require('./removeItemByIndex');
|
|
10
10
|
const addItem = require('./addItem');
|
|
11
|
+
const getOrderItemSubscriptions = require('./getOrderItemSubscriptions');
|
|
11
12
|
const duplicateItem = require('./duplicateItem');
|
|
12
13
|
const getCustomer = require('./getCustomer');
|
|
13
14
|
const setCustomer = require('./setCustomer');
|
|
@@ -71,6 +72,14 @@ const getScheduleByCustomer = require('./getScheduleByCustomer');
|
|
|
71
72
|
const pickEndDate = require('./pickEndDate');
|
|
72
73
|
const getAppliedCredit = require('./getAppliedCredit');
|
|
73
74
|
const addCreditModifier = require('./addCreditModifier');
|
|
75
|
+
const adjustCreditModifiersDifference = require('./adjustCreditModifiersDifference');
|
|
76
|
+
const adjustFixedModifiersDifference = require('./adjustFixedModifiersDifference');
|
|
77
|
+
const getCreditModifiersTotal = require('./getCreditModifiersTotal');
|
|
78
|
+
const getFixedModifiersTotal = require('./getFixedModifiersTotal');
|
|
79
|
+
const splitAndCalculate = require('./splitAndCalculate');
|
|
80
|
+
const spreadModifiers = require('./spreadModifiers');
|
|
81
|
+
const validateCreditModifiersTotal = require('./validateCreditModifiersTotal');
|
|
82
|
+
const validateFixedModifiersTotal = require('./validateFixedModifiersTotal');
|
|
74
83
|
|
|
75
84
|
const orderActions = (deps = {}) => {
|
|
76
85
|
const actions = {};
|
|
@@ -90,6 +99,7 @@ const orderActions = (deps = {}) => {
|
|
|
90
99
|
updateItem: updateItem(innerDeps),
|
|
91
100
|
removeItemByIndex: removeItemByIndex(innerDeps),
|
|
92
101
|
addItem: addItem(innerDeps),
|
|
102
|
+
getOrderItemSubscriptions: getOrderItemSubscriptions(innerDeps),
|
|
93
103
|
duplicateItem: duplicateItem(innerDeps),
|
|
94
104
|
getCustomer: getCustomer(innerDeps),
|
|
95
105
|
setCustomer: setCustomer(innerDeps),
|
|
@@ -154,6 +164,14 @@ const orderActions = (deps = {}) => {
|
|
|
154
164
|
pickEndDate: pickEndDate(innerDeps),
|
|
155
165
|
getAppliedCredit: getAppliedCredit(innerDeps),
|
|
156
166
|
addCreditModifier: addCreditModifier(innerDeps),
|
|
167
|
+
adjustCreditModifiersDifference: adjustCreditModifiersDifference(innerDeps),
|
|
168
|
+
adjustFixedModifiersDifference: adjustFixedModifiersDifference(innerDeps),
|
|
169
|
+
getCreditModifiersTotal: getCreditModifiersTotal(innerDeps),
|
|
170
|
+
getFixedModifiersTotal: getFixedModifiersTotal(innerDeps),
|
|
171
|
+
splitAndCalculate: splitAndCalculate(innerDeps),
|
|
172
|
+
spreadModifiers: spreadModifiers(innerDeps),
|
|
173
|
+
validateCreditModifiersTotal: validateCreditModifiersTotal(innerDeps),
|
|
174
|
+
validateFixedModifiersTotal: validateFixedModifiersTotal(innerDeps),
|
|
157
175
|
});
|
|
158
176
|
|
|
159
177
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module.exports = ({ actions, modifierActions }) =>
|
|
2
|
+
function splitAndCalculate({ parentOrder, subOrders }) {
|
|
3
|
+
if (!parentOrder || !Array.isArray(subOrders)) return [];
|
|
4
|
+
return subOrders.map(each => {
|
|
5
|
+
const { subTotal } = actions.calculate(each);
|
|
6
|
+
const newOrder = {
|
|
7
|
+
...each,
|
|
8
|
+
modifiers: modifierActions.getSplittedModifiers(
|
|
9
|
+
parentOrder.modifiers,
|
|
10
|
+
parentOrder.subTotal,
|
|
11
|
+
subTotal
|
|
12
|
+
),
|
|
13
|
+
};
|
|
14
|
+
return actions.calculate(newOrder);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module.exports = ({
|
|
2
2
|
utils,
|
|
3
3
|
_,
|
|
4
|
+
actions,
|
|
4
5
|
itemActions,
|
|
5
6
|
modifierActions,
|
|
6
|
-
actions,
|
|
7
7
|
settings,
|
|
8
8
|
}) => {
|
|
9
9
|
const orderSettings = _.get(settings, 'order');
|
|
10
|
-
const { date,
|
|
10
|
+
const { date, helpers } = utils;
|
|
11
11
|
const noteDefaults = {
|
|
12
12
|
message: '',
|
|
13
13
|
attributes: [],
|
|
@@ -17,25 +17,6 @@ module.exports = ({
|
|
|
17
17
|
__typename: 'Note',
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
const getSplitModifiers = (modifiers, totalOriginOrder, totalSplitedOrder) =>
|
|
21
|
-
modifiers.map(each => {
|
|
22
|
-
const modifier = { ...each };
|
|
23
|
-
if (modifier.type === 'fixed' && modifier.amount) {
|
|
24
|
-
const amount = totalOriginOrder
|
|
25
|
-
? math.div(
|
|
26
|
-
math.mul(modifier.amount, totalSplitedOrder || 0),
|
|
27
|
-
totalOriginOrder
|
|
28
|
-
)
|
|
29
|
-
: 0;
|
|
30
|
-
return {
|
|
31
|
-
...modifier,
|
|
32
|
-
_id: helpers.getObjectID(),
|
|
33
|
-
amount,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
return modifier;
|
|
37
|
-
});
|
|
38
|
-
|
|
39
20
|
const joinItemQuantity = orders =>
|
|
40
21
|
orders.map(order => {
|
|
41
22
|
const items = order.items.reduce((arr, item) => {
|
|
@@ -67,29 +48,29 @@ module.exports = ({
|
|
|
67
48
|
|
|
68
49
|
const getOrder =
|
|
69
50
|
({ order, name }) =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
51
|
+
(items, index) => {
|
|
52
|
+
let displayId = '';
|
|
53
|
+
if (orderSettings.allowSuborder)
|
|
54
|
+
displayId = `${order.displayId}-${index}`;
|
|
55
|
+
else if (index === 1) displayId = order.displayId;
|
|
56
|
+
return {
|
|
57
|
+
...order,
|
|
58
|
+
_id: helpers.getObjectID(),
|
|
59
|
+
displayId,
|
|
60
|
+
discount: 0,
|
|
61
|
+
tax: 0,
|
|
62
|
+
parentId: orderSettings.allowSuborder ? order._id : null,
|
|
63
|
+
items,
|
|
64
|
+
modifiers: [],
|
|
65
|
+
notes: [
|
|
66
|
+
...(order.notes || []),
|
|
67
|
+
{
|
|
68
|
+
...noteDefaults,
|
|
69
|
+
message: `Split from ${order.displayId}, for department ${name}`,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
91
73
|
};
|
|
92
|
-
};
|
|
93
74
|
|
|
94
75
|
const getDepartmentName = item => {
|
|
95
76
|
const deps = itemActions.getDepartmentModifiers(item);
|
|
@@ -127,7 +108,7 @@ module.exports = ({
|
|
|
127
108
|
newOrder =>
|
|
128
109
|
newOrder.items &&
|
|
129
110
|
itemActions.getItemsTotalPieces(newOrder.items) + totalPieces <=
|
|
130
|
-
|
|
111
|
+
maxItems &&
|
|
131
112
|
departmentName === getDepartmentName(newOrder.items[0])
|
|
132
113
|
);
|
|
133
114
|
if (index > -1) splitOrders[index].items.push(item);
|
|
@@ -139,13 +120,11 @@ module.exports = ({
|
|
|
139
120
|
|
|
140
121
|
splitOrders = joinItemQuantity(splitOrders);
|
|
141
122
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
...each,
|
|
146
|
-
modifiers: getSplitModifiers(order.modifiers, order.subTotal, subTotal),
|
|
147
|
-
};
|
|
148
|
-
return actions.calculate(newOrder);
|
|
123
|
+
splitOrders = actions.spreadModifiers({
|
|
124
|
+
parentOrder: order,
|
|
125
|
+
subOrders: splitOrders,
|
|
149
126
|
});
|
|
127
|
+
|
|
128
|
+
return splitOrders;
|
|
150
129
|
};
|
|
151
130
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function spreadModifiers({ parentOrder, subOrders }) {
|
|
3
|
+
let subOrdersWithCalculatedModifiers = actions.splitAndCalculate({
|
|
4
|
+
parentOrder,
|
|
5
|
+
subOrders,
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
// Validation
|
|
9
|
+
|
|
10
|
+
subOrdersWithCalculatedModifiers = actions.validateFixedModifiersTotal({
|
|
11
|
+
parentOrder,
|
|
12
|
+
subOrders: [...subOrdersWithCalculatedModifiers],
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
subOrdersWithCalculatedModifiers = actions.validateCreditModifiersTotal({
|
|
16
|
+
parentOrder,
|
|
17
|
+
subOrders: [...subOrdersWithCalculatedModifiers],
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
return subOrdersWithCalculatedModifiers;
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function validateCreditModifiersTotal({ parentOrder, subOrders }) {
|
|
5
|
+
const creditModifiersTotalAmount = modifierActions.getCreditModifiersTotal(
|
|
6
|
+
parentOrder.modifiers
|
|
7
|
+
);
|
|
8
|
+
const subOrdersCreditModifiersTotalAmount =
|
|
9
|
+
actions.getCreditModifiersTotal(subOrders);
|
|
10
|
+
|
|
11
|
+
if (creditModifiersTotalAmount !== subOrdersCreditModifiersTotalAmount) {
|
|
12
|
+
return actions.adjustCreditModifiersDifference({
|
|
13
|
+
subOrders: [...subOrders],
|
|
14
|
+
difference: math.sub(
|
|
15
|
+
creditModifiersTotalAmount,
|
|
16
|
+
subOrdersCreditModifiersTotalAmount
|
|
17
|
+
),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return subOrders;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, modifierActions }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function validateFixedModifiersTotal({ parentOrder, subOrders }) {
|
|
5
|
+
const fixedModifiersTotalAmount = modifierActions.getFixedModifiersTotal(
|
|
6
|
+
parentOrder.modifiers
|
|
7
|
+
);
|
|
8
|
+
const subOrdersFixedModifiersTotalAmount =
|
|
9
|
+
actions.getFixedModifiersTotal(subOrders);
|
|
10
|
+
|
|
11
|
+
if (fixedModifiersTotalAmount !== subOrdersFixedModifiersTotalAmount) {
|
|
12
|
+
return actions.adjustFixedModifiersDifference({
|
|
13
|
+
subOrders: [...subOrders],
|
|
14
|
+
difference: math.sub(
|
|
15
|
+
fixedModifiersTotalAmount,
|
|
16
|
+
subOrdersFixedModifiersTotalAmount
|
|
17
|
+
),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return subOrders;
|
|
22
|
+
};
|
|
23
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"supertest": "^6.2.3",
|
|
36
36
|
"supervisor": "^0.12.0"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "67ed395c1d86589b37c5adcb74606a8db7423536"
|
|
39
39
|
}
|