@darkpos/pricing 1.0.5 → 1.0.6
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/.eslintrc +8 -10
- package/__TEST__/item.test.js +137 -99
- package/__TEST__/order.test.js +50 -36
- package/index.js +1 -25
- package/lib/constants/index.js +5 -0
- package/lib/constants/status.js +39 -0
- package/lib/index.js +36 -0
- package/lib/item/addIndirectModifier.js +34 -17
- package/lib/item/calculate.js +41 -19
- package/lib/item/create.js +35 -0
- package/lib/item/filterByDirectModifiers.js +5 -6
- package/lib/item/findOriginalItem.js +8 -0
- package/lib/item/getBalanceToPay.js +12 -0
- package/lib/item/getDepartmentModifiers.js +5 -0
- package/lib/item/getDiscountModifiers.js +7 -0
- package/lib/item/getItemModifiers.js +16 -0
- package/lib/item/getItemModifiersDescription.js +22 -0
- package/lib/item/getItemPrice.js +57 -0
- package/lib/item/getItemsTotalPaid.js +9 -0
- package/lib/item/getItemsTotalPieces.js +7 -0
- package/lib/item/getNotIncludedModifiers.js +11 -0
- package/lib/item/getParentItem.js +5 -0
- package/lib/item/getPendingIndex.js +5 -0
- package/lib/item/getTotal.js +8 -0
- package/lib/item/getTotalPieces.js +7 -0
- package/lib/item/getTotals.js +25 -0
- package/lib/item/hasCreateSubscription.js +7 -0
- package/lib/item/hasModifier.js +15 -0
- package/lib/item/hasModifierWithValue.js +11 -0
- package/lib/item/hasModifiers.js +9 -0
- package/lib/item/hasSubscription.js +5 -0
- package/lib/item/index.js +80 -10
- package/lib/item/isParentIncluded.js +4 -0
- package/lib/item/isRelatedItem.js +4 -0
- package/lib/item/isSelected.js +13 -0
- package/lib/item/openRecommendationDialog.js +4 -0
- package/lib/item/removeModifier.js +84 -0
- package/lib/item/removeModifierById.js +8 -0
- package/lib/item/removeModifiers.js +14 -0
- package/lib/order/addCreditModifier.js +27 -0
- package/lib/order/addDiscountModifier.js +9 -0
- package/lib/order/addItem.js +292 -0
- package/lib/order/addItemModifier.js +214 -0
- package/lib/order/addModifier.js +9 -0
- package/lib/order/addModifierToAllItems.js +16 -0
- package/lib/order/addNote.js +25 -0
- package/lib/order/addTable.js +11 -0
- package/lib/order/calculate.js +51 -16
- package/lib/order/calculateDue.js +15 -0
- package/lib/order/calculateOrdersDue.js +26 -0
- package/lib/order/canSplit.js +4 -0
- package/lib/order/changeEndDate.js +15 -0
- package/lib/order/changeLocation.js +20 -0
- package/lib/order/changeStartDate.js +14 -0
- package/lib/order/combineSubOrders.js +14 -0
- package/lib/order/containsSerial.js +5 -0
- package/lib/order/create.js +67 -0
- package/lib/order/createParent.js +9 -0
- package/lib/order/duplicateItem.js +16 -0
- package/lib/order/findItemIndex.js +6 -0
- package/lib/order/getAppliedCredit.js +5 -0
- package/lib/order/getBalance.js +9 -0
- package/lib/order/getCustomer.js +4 -0
- package/lib/order/getCustomerStoreCredit.js +14 -0
- package/lib/order/getCustomerSubscriptions.js +8 -0
- package/lib/order/getCustomerSubscriptionsByItem.js +14 -0
- package/lib/order/getDepartmentModifiers.js +9 -0
- package/lib/order/getEndDate.js +6 -0
- package/lib/order/getItemByItemId.js +6 -0
- package/lib/order/getItemIndex.js +9 -0
- package/lib/order/getItemsToPay.js +17 -0
- package/lib/order/getMenuItemsByCustomer.js +19 -0
- package/lib/order/getNumberOfItems.js +12 -0
- package/lib/order/getOrdersPieces.js +10 -0
- package/lib/order/getPendingItemIndex.js +5 -0
- package/lib/order/getRelatedItems.js +11 -0
- package/lib/order/getSameItems.js +14 -0
- package/lib/order/getScheduleByCustomer.js +20 -0
- package/lib/order/getScreenCustomerNotes.js +12 -0
- package/lib/order/getSelectedItem.js +6 -0
- package/lib/order/getStartDate.js +4 -0
- package/lib/order/getTip.js +10 -0
- package/lib/order/getTotalPieces.js +17 -0
- package/lib/order/getTotals.js +28 -0
- package/lib/order/hasAggregate.js +20 -0
- package/lib/order/hasItem.js +7 -0
- package/lib/order/hasRemainingSubscription.js +67 -0
- package/lib/order/hold.js +12 -0
- package/lib/order/index.js +166 -5
- package/lib/order/isDetailed.js +4 -0
- package/lib/order/isHold.js +4 -0
- package/lib/order/isNew.js +4 -0
- package/lib/order/isOpen.js +4 -0
- package/lib/order/isParent.js +7 -0
- package/lib/order/merge.js +96 -0
- package/lib/order/open.js +11 -0
- package/lib/order/pickEndDate.js +70 -0
- package/lib/order/removeApplyModifier.js +24 -0
- package/lib/order/removeDiscountModifier.js +16 -0
- package/lib/order/removeItem.js +56 -0
- package/lib/order/removeItemByIndex.js +5 -0
- package/lib/order/removeItemModifier.js +69 -0
- package/lib/order/removeModifier.js +21 -0
- package/lib/order/removeModifierByAttribute.js +23 -0
- package/lib/order/removeModifiersWithPaymentMethods.js +29 -0
- package/lib/order/removeModifiersWithPaymentTypes.js +27 -0
- package/lib/order/setCustomer.js +50 -0
- package/lib/order/splitByDepartments.js +151 -0
- package/lib/order/toggleModifier.js +9 -0
- package/lib/order/updateItem.js +8 -0
- package/lib/order/updateItemQuantity.js +35 -0
- package/lib/order/void.js +11 -0
- package/package.json +16 -18
|
@@ -1,36 +1,53 @@
|
|
|
1
|
-
module.exports = ({ utils,
|
|
1
|
+
module.exports = ({ utils, modifierActions }) => {
|
|
2
2
|
const { math } = utils;
|
|
3
3
|
|
|
4
|
-
return function addIndirectModifier(
|
|
4
|
+
return function addIndirectModifier(orderTotal, items, modifier) {
|
|
5
5
|
const itemsModifiers = {};
|
|
6
6
|
// get distributed price in order level
|
|
7
|
-
const {
|
|
8
|
-
price:
|
|
7
|
+
const { _computed } = modifierActions.calculate(modifier, {
|
|
8
|
+
price: orderTotal,
|
|
9
9
|
quantity: 1,
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
const orderModifierTotal = math.abs(
|
|
12
|
+
const orderModifierTotal = math.abs(_computed.amount);
|
|
13
13
|
const totalDistributed = items.reduce((acc, item) => {
|
|
14
|
-
const inheritedModifier =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
const inheritedModifier = modifierActions.createIndirectModifier(
|
|
15
|
+
modifier,
|
|
16
|
+
{
|
|
17
|
+
orderTotal,
|
|
18
|
+
itemTotal: item.total,
|
|
19
|
+
itemQuantity: item.quantity,
|
|
20
|
+
}
|
|
21
|
+
);
|
|
19
22
|
itemsModifiers[item._id] = inheritedModifier;
|
|
20
|
-
return math.add(
|
|
23
|
+
return math.add(
|
|
24
|
+
acc,
|
|
25
|
+
math.mul(inheritedModifier.compute.amount, item.quantity)
|
|
26
|
+
);
|
|
21
27
|
}, 0);
|
|
22
28
|
|
|
23
29
|
// check validation
|
|
24
30
|
if (math.abs(totalDistributed) !== math.abs(orderModifierTotal)) {
|
|
25
31
|
const difference = math.sub(orderModifierTotal, totalDistributed);
|
|
26
32
|
// console.log('difference => ', difference);
|
|
27
|
-
const selectedItem = items.find(
|
|
33
|
+
const selectedItem = items.find(
|
|
34
|
+
item => math.sub(item.total, difference) > 0
|
|
35
|
+
);
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if (selectedItem) {
|
|
38
|
+
const inheritedModifier = itemsModifiers[selectedItem._id];
|
|
39
|
+
itemsModifiers[selectedItem._id] = {
|
|
40
|
+
...inheritedModifier,
|
|
41
|
+
compute: {
|
|
42
|
+
...inheritedModifier.compute,
|
|
43
|
+
amount: math.add(
|
|
44
|
+
inheritedModifier.compute.amount,
|
|
45
|
+
math.div(difference, selectedItem.quantity)
|
|
46
|
+
),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return itemsModifiers;
|
|
34
51
|
}
|
|
35
52
|
|
|
36
53
|
return itemsModifiers;
|
package/lib/item/calculate.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
module.exports = ({ _, utils, modifierActions }) => {
|
|
2
3
|
const { math } = utils;
|
|
3
4
|
//
|
|
4
|
-
const calculateOne =
|
|
5
|
+
const calculateOne = inputItem => {
|
|
6
|
+
const item = _.cloneDeep(inputItem);
|
|
5
7
|
if (!item) return item;
|
|
6
8
|
|
|
7
9
|
const subTotals = {
|
|
@@ -18,18 +20,37 @@ module.exports = ({ utils, modifierService }) => {
|
|
|
18
20
|
subTotals._simple = math.mul(price, quantity);
|
|
19
21
|
|
|
20
22
|
const modifiers = [];
|
|
23
|
+
const { modifiers: itemModifiers = [] } = item;
|
|
24
|
+
const amountOverride = itemModifiers.find(each =>
|
|
25
|
+
modifierActions.isAmountOverride(each)
|
|
26
|
+
);
|
|
21
27
|
|
|
22
|
-
|
|
28
|
+
const modifiersToCompute = itemModifiers.filter(
|
|
29
|
+
each =>
|
|
30
|
+
!modifierActions.isOverride(each) && each.compute && each.compute.type
|
|
31
|
+
);
|
|
32
|
+
if (amountOverride) modifiersToCompute.push(amountOverride);
|
|
33
|
+
|
|
34
|
+
const modifiersToNotCompute = itemModifiers
|
|
35
|
+
.filter(
|
|
36
|
+
each =>
|
|
37
|
+
!modifiersToCompute.find(
|
|
38
|
+
ceach => ceach.modifierId === each.modifierId
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
.map(each => modifierActions.calculate(each, { skip: true }));
|
|
42
|
+
|
|
43
|
+
if (modifiersToCompute.length) {
|
|
23
44
|
// sort modifiers based on sort
|
|
24
|
-
const sortedModifiers =
|
|
45
|
+
const sortedModifiers = modifierActions.sort(modifiersToCompute);
|
|
25
46
|
let computedPrice = price;
|
|
26
47
|
let prvPrice = 0;
|
|
27
48
|
let prvSort;
|
|
28
49
|
|
|
29
|
-
for (const
|
|
30
|
-
const included =
|
|
31
|
-
const direct =
|
|
32
|
-
const sort =
|
|
50
|
+
for (const modifier of sortedModifiers) {
|
|
51
|
+
const included = modifierActions.isIncluded(modifier);
|
|
52
|
+
const direct = modifierActions.isDirect(modifier);
|
|
53
|
+
const sort = modifierActions.getProperty(modifier, 'sort');
|
|
33
54
|
// check if add amount to computedPrice;
|
|
34
55
|
if (sort !== prvSort) {
|
|
35
56
|
computedPrice = math.add(computedPrice, prvPrice);
|
|
@@ -37,15 +58,19 @@ module.exports = ({ utils, modifierService }) => {
|
|
|
37
58
|
prvSort = null;
|
|
38
59
|
}
|
|
39
60
|
|
|
40
|
-
const _modifier =
|
|
61
|
+
const _modifier = modifierActions.calculate(modifier, {
|
|
41
62
|
price: computedPrice,
|
|
42
63
|
quantity,
|
|
64
|
+
skip: !!amountOverride,
|
|
43
65
|
});
|
|
44
|
-
// console.log('computedPrice => ', computedPrice);
|
|
45
66
|
|
|
46
67
|
modifiers.push(_modifier);
|
|
47
|
-
const {
|
|
48
|
-
|
|
68
|
+
const { type, _computed } = _modifier;
|
|
69
|
+
// console.log('computedPrice => ', _computed);
|
|
70
|
+
let computedAmount = math.mul(_computed.amount, quantity);
|
|
71
|
+
// subscription modifiers have fixed amount and can't be multiplied by quantity
|
|
72
|
+
if (modifierActions.isSubscription(_modifier))
|
|
73
|
+
computedAmount = _computed.amount;
|
|
49
74
|
|
|
50
75
|
if (included) {
|
|
51
76
|
subTotals._included = math.add(subTotals._included, computedAmount);
|
|
@@ -53,10 +78,7 @@ module.exports = ({ utils, modifierService }) => {
|
|
|
53
78
|
prvSort = sort;
|
|
54
79
|
} else {
|
|
55
80
|
subTotals._xincluded = math.add(subTotals._xincluded, computedAmount);
|
|
56
|
-
subTotals[
|
|
57
|
-
subTotals[category] || 0,
|
|
58
|
-
computedAmount
|
|
59
|
-
);
|
|
81
|
+
subTotals[type] = math.add(subTotals[type] || 0, computedAmount);
|
|
60
82
|
}
|
|
61
83
|
if (direct)
|
|
62
84
|
subTotals._direct = math.add(subTotals._direct, computedAmount);
|
|
@@ -70,16 +92,16 @@ module.exports = ({ utils, modifierService }) => {
|
|
|
70
92
|
|
|
71
93
|
return {
|
|
72
94
|
...item,
|
|
73
|
-
modifiers,
|
|
95
|
+
modifiers: [...modifiersToNotCompute, ...modifiers],
|
|
74
96
|
subTotals,
|
|
75
97
|
total,
|
|
76
98
|
};
|
|
77
99
|
};
|
|
78
100
|
|
|
79
101
|
//
|
|
80
|
-
const calculateMany = (items = []) => items.map(
|
|
102
|
+
const calculateMany = (items = []) => items.map(item => calculateOne(item));
|
|
81
103
|
|
|
82
|
-
return function
|
|
104
|
+
return function calculate(item) {
|
|
83
105
|
if (Array.isArray(item)) return calculateMany(item);
|
|
84
106
|
return calculateOne(item);
|
|
85
107
|
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module.exports = ({ utils }) => {
|
|
2
|
+
const { helpers } = utils;
|
|
3
|
+
|
|
4
|
+
const defaultItem = {
|
|
5
|
+
location: {},
|
|
6
|
+
status: {
|
|
7
|
+
picked: { value: false, date: '' },
|
|
8
|
+
paid: { value: false, date: '' },
|
|
9
|
+
tracker: [],
|
|
10
|
+
},
|
|
11
|
+
name: '',
|
|
12
|
+
description: '',
|
|
13
|
+
pieces: 0,
|
|
14
|
+
modifiersTotalAmount: 0,
|
|
15
|
+
total: 0,
|
|
16
|
+
totalPaid: 0,
|
|
17
|
+
price: 0,
|
|
18
|
+
quantity: 0,
|
|
19
|
+
path: [],
|
|
20
|
+
notes: [],
|
|
21
|
+
menuId: null,
|
|
22
|
+
serial: null,
|
|
23
|
+
sku: null,
|
|
24
|
+
modifiers: [],
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return function create(params) {
|
|
28
|
+
return {
|
|
29
|
+
...defaultItem,
|
|
30
|
+
...params,
|
|
31
|
+
__typename: 'OrderItem',
|
|
32
|
+
_id: helpers.getObjectID(),
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Remove order modifiers from items
|
|
3
3
|
*/
|
|
4
|
-
module.exports = ({
|
|
4
|
+
module.exports = ({ modifierActions }) =>
|
|
5
5
|
//
|
|
6
|
-
|
|
7
|
-
return items.map(
|
|
6
|
+
function filterByDirectModifiers(items = []) {
|
|
7
|
+
return items.map(item => ({
|
|
8
8
|
...item,
|
|
9
|
-
modifiers: (item.modifiers || []).filter(
|
|
10
|
-
|
|
9
|
+
modifiers: (item.modifiers || []).filter(modifier =>
|
|
10
|
+
modifierActions.isDirect(modifier)
|
|
11
11
|
),
|
|
12
12
|
}));
|
|
13
13
|
};
|
|
14
|
-
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = ({ utils }) =>
|
|
2
|
+
function getBalanceToPay({ orderItems = [] }) {
|
|
3
|
+
const total = orderItems.reduce(
|
|
4
|
+
(t, item) => utils.math.add(t, item && item.total),
|
|
5
|
+
0
|
|
6
|
+
);
|
|
7
|
+
const totalPaid = orderItems.reduce(
|
|
8
|
+
(t, item) => utils.math.add(t, item && item.totalPaid),
|
|
9
|
+
0
|
|
10
|
+
);
|
|
11
|
+
return utils.math.sub(total, totalPaid);
|
|
12
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function getItemModifiers(item, orderModifiers) {
|
|
3
|
+
const existsInOrderModifier = modifier =>
|
|
4
|
+
orderModifiers &&
|
|
5
|
+
orderModifiers.find(each => each.modifierId === modifier.modifierId);
|
|
6
|
+
|
|
7
|
+
let modifiers = [];
|
|
8
|
+
if (!item || !Array.isArray(item.modifiers)) return modifiers;
|
|
9
|
+
|
|
10
|
+
modifiers.push(...item.modifiers);
|
|
11
|
+
|
|
12
|
+
if (Array.isArray(orderModifiers) && orderModifiers.length)
|
|
13
|
+
modifiers = modifiers.filter(each => !existsInOrderModifier(each));
|
|
14
|
+
|
|
15
|
+
return modifiers.filter(modifierActions.isDirect);
|
|
16
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function getItemModifiersDescription(item) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return [];
|
|
4
|
+
const description = item.modifiers
|
|
5
|
+
.filter(
|
|
6
|
+
each =>
|
|
7
|
+
!modifierActions.isHidden(each) &&
|
|
8
|
+
!modifierActions.isAmountOverride(each) &&
|
|
9
|
+
modifierActions.isDirect(each)
|
|
10
|
+
)
|
|
11
|
+
.map(modifier => {
|
|
12
|
+
const { name } = modifier;
|
|
13
|
+
let label = name;
|
|
14
|
+
if (modifierActions.isGroupOfValues(modifier))
|
|
15
|
+
label = modifierActions.getSelectedValues(modifier) || label;
|
|
16
|
+
|
|
17
|
+
return label;
|
|
18
|
+
})
|
|
19
|
+
.join(', ');
|
|
20
|
+
|
|
21
|
+
return description;
|
|
22
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module.exports = ({ actions, modifierActions, utils }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
const getCustomerTags = (customer = {}) =>
|
|
5
|
+
((customer && customer.tags) || []).filter(Boolean);
|
|
6
|
+
|
|
7
|
+
return function getItemPrice({ item, cache, customer }) {
|
|
8
|
+
const modifiers = item.modifiers || [];
|
|
9
|
+
let { priceLevels } = item;
|
|
10
|
+
|
|
11
|
+
// get cache Item
|
|
12
|
+
if (cache && cache.items) {
|
|
13
|
+
const orgItem = actions.findOriginalItem({
|
|
14
|
+
item,
|
|
15
|
+
cache,
|
|
16
|
+
});
|
|
17
|
+
({ priceLevels } = orgItem);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (!priceLevels) return 0;
|
|
21
|
+
|
|
22
|
+
const extendedTags = modifierActions.getExtendedTags(modifiers);
|
|
23
|
+
const customerTags = getCustomerTags(customer).concat(extendedTags);
|
|
24
|
+
|
|
25
|
+
const matchedPriceLevels = priceLevels.filter(
|
|
26
|
+
priceLevel =>
|
|
27
|
+
priceLevel.tags &&
|
|
28
|
+
priceLevel.tags.every(tag => customerTags.includes(tag))
|
|
29
|
+
);
|
|
30
|
+
if (!matchedPriceLevels.length) return 0;
|
|
31
|
+
const maxPriceLevel = matchedPriceLevels.reduce(
|
|
32
|
+
(prevPriceLevel, priceLevel) => {
|
|
33
|
+
const curLength = priceLevel.tags.length;
|
|
34
|
+
const preLength = prevPriceLevel.tags.length;
|
|
35
|
+
|
|
36
|
+
if (curLength > preLength) return priceLevel;
|
|
37
|
+
if (preLength === curLength && priceLevel.value < prevPriceLevel.value)
|
|
38
|
+
return priceLevel;
|
|
39
|
+
|
|
40
|
+
return prevPriceLevel;
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const { value } = maxPriceLevel;
|
|
45
|
+
|
|
46
|
+
const overridPriceModifier = modifiers.find(each =>
|
|
47
|
+
modifierActions.isPriceOverride(each)
|
|
48
|
+
);
|
|
49
|
+
if (overridPriceModifier && overridPriceModifier.compute) {
|
|
50
|
+
if (modifierActions.isMultiplier(overridPriceModifier))
|
|
51
|
+
return math.mul(value, overridPriceModifier.compute.amount);
|
|
52
|
+
return overridPriceModifier.compute.amount;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return value;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getNotIncludedModifiers({ item, modifiers }) {
|
|
3
|
+
if (!item || !item.modifiers || !modifiers) return [];
|
|
4
|
+
return modifiers.filter(
|
|
5
|
+
each =>
|
|
6
|
+
!item.modifiers.find(
|
|
7
|
+
modifier =>
|
|
8
|
+
each._id === modifier.modifierId || each._id === modifier._id
|
|
9
|
+
)
|
|
10
|
+
);
|
|
11
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module.exports = ({ utils }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
return function getTotals(items) {
|
|
4
|
+
if (!Array.isArray(items)) return { total: 0, subTotals: {} };
|
|
5
|
+
return items.reduce(
|
|
6
|
+
(acc, item) => {
|
|
7
|
+
const subTotals = {};
|
|
8
|
+
const { subTotals: itemSubTotals = {} } = item;
|
|
9
|
+
const keys = Object.keys(itemSubTotals);
|
|
10
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
11
|
+
for (const key of keys)
|
|
12
|
+
subTotals[key] = math.add(
|
|
13
|
+
acc.subTotals[key] || 0,
|
|
14
|
+
itemSubTotals[key]
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
total: math.add(acc.total, item.total),
|
|
19
|
+
subTotals,
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
{ total: 0, subTotals: {} }
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function hasModifier({ item, modifier }) {
|
|
3
|
+
if (!item || !modifier || !item.modifiers) return false;
|
|
4
|
+
|
|
5
|
+
const itemModifier = item.modifiers.find(
|
|
6
|
+
each =>
|
|
7
|
+
(each.modifierId &&
|
|
8
|
+
(each.modifierId === modifier.modifierId ||
|
|
9
|
+
each.modifierId === modifier._id)) ||
|
|
10
|
+
(typeof each.modifier === 'object' &&
|
|
11
|
+
each.modifier._id === modifier.modifierId)
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
return !!itemModifier;
|
|
15
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function hasModifierWithValue({ item, modifier, value }) {
|
|
3
|
+
if (!item || !modifier || !item.modifiers) return false;
|
|
4
|
+
const relatedModifier = item.modifiers.find(
|
|
5
|
+
itemModifier => modifier._id === itemModifier.modifierId
|
|
6
|
+
);
|
|
7
|
+
return modifierActions.isValueSelected({
|
|
8
|
+
modifier: relatedModifier,
|
|
9
|
+
value,
|
|
10
|
+
});
|
|
11
|
+
};
|
package/lib/item/index.js
CHANGED
|
@@ -1,12 +1,82 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
const getItemsTotalPieces = require('./getItemsTotalPieces');
|
|
2
|
+
const getTotalPieces = require('./getTotalPieces');
|
|
3
|
+
const removeModifier = require('./removeModifier');
|
|
4
|
+
const removeModifiers = require('./removeModifiers');
|
|
5
|
+
const findOriginalItem = require('./findOriginalItem');
|
|
6
|
+
const create = require('./create');
|
|
7
|
+
const hasModifier = require('./hasModifier');
|
|
8
|
+
const isSelected = require('./isSelected');
|
|
9
|
+
const hasModifiers = require('./hasModifiers');
|
|
10
|
+
const openRecommendationDialog = require('./openRecommendationDialog');
|
|
11
|
+
const addIndirectModifier = require('./addIndirectModifier');
|
|
12
|
+
const calculate = require('./calculate');
|
|
13
|
+
const filterByDirectModifiers = require('./filterByDirectModifiers');
|
|
14
|
+
const getItemPrice = require('./getItemPrice');
|
|
15
|
+
const getDepartmentModifiers = require('./getDepartmentModifiers');
|
|
16
|
+
const hasSubscription = require('./hasSubscription');
|
|
17
|
+
const removeModifierById = require('./removeModifierById');
|
|
18
|
+
const getDiscountModifiers = require('./getDiscountModifiers');
|
|
19
|
+
const getTotal = require('./getTotal');
|
|
20
|
+
const getPendingIndex = require('./getPendingIndex');
|
|
21
|
+
const getTotals = require('./getTotals');
|
|
22
|
+
const getNotIncludedModifiers = require('./getNotIncludedModifiers');
|
|
23
|
+
const hasModifierWithValue = require('./hasModifierWithValue');
|
|
24
|
+
const getBalanceToPay = require('./getBalanceToPay');
|
|
25
|
+
const getItemsTotalPaid = require('./getItemsTotalPaid');
|
|
26
|
+
const getItemModifiersDescription = require('./getItemModifiersDescription');
|
|
27
|
+
const isRelatedItem = require('./isRelatedItem');
|
|
28
|
+
const getParentItem = require('./getParentItem');
|
|
29
|
+
const isParentIncluded = require('./isParentIncluded');
|
|
30
|
+
const hasCreateSubscription = require('./hasCreateSubscription');
|
|
31
|
+
const getItemModifiers = require('./getItemModifiers');
|
|
32
|
+
|
|
33
|
+
const itemActions = (deps = {}) => {
|
|
34
|
+
const actions = {};
|
|
35
|
+
|
|
36
|
+
const innerDeps = {
|
|
37
|
+
...deps,
|
|
38
|
+
actions,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const freezedActions = Object.freeze({
|
|
42
|
+
getItemsTotalPieces: getItemsTotalPieces(innerDeps),
|
|
43
|
+
getTotalPieces: getTotalPieces(innerDeps),
|
|
44
|
+
removeModifier: removeModifier(innerDeps),
|
|
45
|
+
removeModifiers: removeModifiers(innerDeps),
|
|
46
|
+
findOriginalItem: findOriginalItem(innerDeps),
|
|
47
|
+
create: create(innerDeps),
|
|
48
|
+
hasModifier: hasModifier(innerDeps),
|
|
49
|
+
isSelected: isSelected(innerDeps),
|
|
50
|
+
hasModifiers: hasModifiers(innerDeps),
|
|
51
|
+
openRecommendationDialog: openRecommendationDialog(innerDeps),
|
|
52
|
+
addIndirectModifier: addIndirectModifier(innerDeps),
|
|
53
|
+
calculate: calculate(innerDeps),
|
|
54
|
+
filterByDirectModifiers: filterByDirectModifiers(innerDeps),
|
|
55
|
+
getItemPrice: getItemPrice(innerDeps),
|
|
56
|
+
getDepartmentModifiers: getDepartmentModifiers(innerDeps),
|
|
57
|
+
hasSubscription: hasSubscription(innerDeps),
|
|
58
|
+
removeModifierById: removeModifierById(innerDeps),
|
|
59
|
+
getDiscountModifiers: getDiscountModifiers(innerDeps),
|
|
60
|
+
getTotal: getTotal(innerDeps),
|
|
61
|
+
getPendingIndex: getPendingIndex(innerDeps),
|
|
62
|
+
getTotals: getTotals(innerDeps),
|
|
63
|
+
getNotIncludedModifiers: getNotIncludedModifiers(innerDeps),
|
|
64
|
+
hasModifierWithValue: hasModifierWithValue(innerDeps),
|
|
65
|
+
getBalanceToPay: getBalanceToPay(innerDeps),
|
|
66
|
+
getItemsTotalPaid: getItemsTotalPaid(innerDeps),
|
|
67
|
+
getItemModifiersDescription: getItemModifiersDescription(innerDeps),
|
|
68
|
+
isRelatedItem: isRelatedItem(innerDeps),
|
|
69
|
+
getParentItem: getParentItem(innerDeps),
|
|
70
|
+
isParentIncluded: isParentIncluded(innerDeps),
|
|
71
|
+
hasCreateSubscription: hasCreateSubscription(innerDeps),
|
|
72
|
+
getItemModifiers: getItemModifiers(innerDeps),
|
|
11
73
|
});
|
|
74
|
+
|
|
75
|
+
Object.keys(freezedActions).forEach(actionName => {
|
|
76
|
+
actions[actionName] = freezedActions[actionName];
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
return freezedActions;
|
|
12
80
|
};
|
|
81
|
+
|
|
82
|
+
module.exports = itemActions;
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
};
|