@darkpos/pricing 1.0.43 → 1.0.45
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/getItemsModifierDescription.test.js +75 -78
- package/__TEST__/mocks/addItemMock.js +18729 -19357
- package/__TEST__/mocks/partially-paid/order-modifiers.json +48 -51
- package/__TEST__/mocks/partially-paid/order-partially-paid.json +893 -860
- package/__TEST__/mocks/scripts/calculate-partially-paid/index.js +2 -2
- package/__TEST__/mocks/scripts/calculate-unpaid/index.js +2 -2
- package/__TEST__/mocks/unpaid/order-modifiers.json +48 -52
- package/__TEST__/modifier/calculate.test.js +1 -0
- package/__TEST__/modifier/getMatchTagsModifiers.test.js +72 -18
- package/__TEST__/modifier/getModifierIndex.test.js +10 -7
- package/__TEST__/modifier/getRecommendedModifiers.test.js +6 -4
- package/__TEST__/modifier/hasAttribute.test.js +11 -5
- package/__TEST__/modifier/hasMatchTags.test.js +33 -11
- package/__TEST__/modifier/sort.test.js +1 -1
- package/__TEST__/order/conditionsNotMet.test.js +133 -0
- package/__TEST__/order/manualSplit.test.js +104 -0
- package/__TEST__/order/order-payment-modifier.test.js +1117 -0
- package/__TEST__/order/order.test.js +53 -105
- package/__TEST__/order/pickEndDate.test.js +7 -153
- package/__TEST__/order/validateConditionsCalculate.test.js +396 -0
- package/lib/constants/index.js +1 -1
- package/lib/index.js +11 -2
- package/lib/item/calculate.js +93 -18
- package/lib/item/getAmounts.js +14 -0
- package/lib/item/getBalance.js +0 -1
- package/lib/item/getItemModifiersDescription.js +1 -0
- package/lib/item/getItemsBalance.js +9 -0
- package/lib/item/getItemsTotals.js +27 -0
- package/lib/item/getTotal.js +3 -1
- package/lib/item/hasPaymentMethodType.js +17 -0
- package/lib/item/hasPaymentModifierWithPaymentId.js +9 -0
- package/lib/item/index.js +15 -8
- package/lib/item/removePaymentModifiersByPaymentId.js +13 -0
- package/lib/modifier/areConditionsMet.js +61 -0
- package/lib/modifier/calculatePaymentDiscountModifier.js +31 -0
- package/lib/modifier/calculatePaymentFeeModifier.js +27 -0
- package/lib/modifier/calculatePaymentModifier.js +67 -0
- package/lib/modifier/createDiscountModifier.js +2 -1
- package/lib/modifier/createFeeModifier.js +2 -1
- package/lib/modifier/getChildren.js +8 -0
- package/lib/modifier/getComputedAmount.js +9 -0
- package/lib/modifier/hasPaymentMethodType.js +14 -0
- package/lib/modifier/index.js +33 -9
- package/lib/modifier/isCalculatedPaymentModifier.js +4 -0
- package/lib/modifier/isChild.js +6 -0
- package/lib/modifier/isDiscount.js +6 -2
- package/lib/modifier/isFee.js +5 -2
- package/lib/modifier/isPaymentMethodModifier.js +4 -1
- package/lib/modifier/isPaymentTypeModifier.js +4 -1
- package/lib/modifier/isPercentage.js +10 -0
- package/lib/modifier/isValid.js +12 -0
- package/lib/modifier/sort.js +28 -0
- package/lib/modifier/validate.js +14 -0
- package/lib/modifier/validateDateDaysDiff.js +30 -0
- package/lib/modifier/validateInArr.js +12 -0
- package/lib/modifier/validateNumberCondition.js +20 -0
- package/lib/modifier/validateRequiredModifiers.js +16 -0
- package/lib/order/addItemModifier.js +72 -28
- package/lib/order/applyPayment.js +61 -0
- package/lib/order/calculate.js +45 -22
- package/lib/order/getBalance.js +0 -1
- package/lib/order/getOrdersBalance.js +8 -0
- package/lib/order/index.js +9 -10
- package/lib/order/manualSplit.js +34 -0
- package/lib/order/manualSplitByQuantity.js +50 -0
- package/lib/store/getRecommendedEndDate.js +13 -0
- package/lib/store/index.js +25 -0
- package/package.json +6 -4
- package/lib/item/getBalanceToPay.js +0 -12
- package/lib/item/getTotals.js +0 -40
- package/lib/item/markModifiersAsLocked.js +0 -11
- package/lib/modifier/createPaymentModifier.js +0 -12
- package/lib/modifier/findByPaymentMethod.js +0 -10
- package/lib/modifier/findByPaymentType.js +0 -10
- package/lib/modifier/getLockedModifiers.js +0 -5
- package/lib/order/markModifiersAsLocked.js +0 -14
- package/lib/order/removeModifiersWithPaymentMethods.js +0 -29
- package/lib/order/removeModifiersWithPaymentTypes.js +0 -27
- package/lib/{order → store}/pickEndDate.js +2 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function hasPaymentModifierWithPaymentId({ item, paymentId }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers) || !paymentId) return false;
|
|
4
|
+
|
|
5
|
+
return item.modifiers.some(
|
|
6
|
+
modifier =>
|
|
7
|
+
modifierActions.getProperty(modifier, 'paymentId') === paymentId
|
|
8
|
+
);
|
|
9
|
+
};
|
package/lib/item/index.js
CHANGED
|
@@ -20,10 +20,9 @@ const removeModifierById = require('./removeModifierById');
|
|
|
20
20
|
const getDiscountModifiers = require('./getDiscountModifiers');
|
|
21
21
|
const getTotal = require('./getTotal');
|
|
22
22
|
const getPendingIndex = require('./getPendingIndex');
|
|
23
|
-
const
|
|
23
|
+
const getItemsTotals = require('./getItemsTotals');
|
|
24
24
|
const getNotIncludedModifiers = require('./getNotIncludedModifiers');
|
|
25
25
|
const hasModifierWithValue = require('./hasModifierWithValue');
|
|
26
|
-
const getBalanceToPay = require('./getBalanceToPay');
|
|
27
26
|
const getItemsTotalPaid = require('./getItemsTotalPaid');
|
|
28
27
|
const getItemModifiersDescription = require('./getItemModifiersDescription');
|
|
29
28
|
const isRelatedItem = require('./isRelatedItem');
|
|
@@ -31,12 +30,16 @@ const getParentItem = require('./getParentItem');
|
|
|
31
30
|
const isParentIncluded = require('./isParentIncluded');
|
|
32
31
|
const hasCreateSubscription = require('./hasCreateSubscription');
|
|
33
32
|
const getItemModifiers = require('./getItemModifiers');
|
|
34
|
-
const
|
|
35
|
-
const getBalance = require('./getBalance');
|
|
33
|
+
const getItemsBalance = require('./getItemsBalance');
|
|
36
34
|
const isFullyPaid = require('./isFullyPaid');
|
|
37
35
|
const getTotalPrice = require('./getTotalPrice');
|
|
38
36
|
const removePaymentModifiers = require('./removePaymentModifiers');
|
|
39
37
|
const getItems = require('./getItems');
|
|
38
|
+
const getAmounts = require('./getAmounts');
|
|
39
|
+
const hasPaymentMethodType = require('./hasPaymentMethodType');
|
|
40
|
+
const removePaymentModifiersByPaymentId = require('./removePaymentModifiersByPaymentId');
|
|
41
|
+
const hasPaymentModifierWithPaymentId = require('./hasPaymentModifierWithPaymentId');
|
|
42
|
+
const getBalance = require('./getBalance');
|
|
40
43
|
|
|
41
44
|
const itemActions = (deps = {}) => {
|
|
42
45
|
const actions = {};
|
|
@@ -69,10 +72,9 @@ const itemActions = (deps = {}) => {
|
|
|
69
72
|
getDiscountModifiers: getDiscountModifiers(innerDeps),
|
|
70
73
|
getTotal: getTotal(innerDeps),
|
|
71
74
|
getPendingIndex: getPendingIndex(innerDeps),
|
|
72
|
-
|
|
75
|
+
getItemsTotals: getItemsTotals(innerDeps),
|
|
73
76
|
getNotIncludedModifiers: getNotIncludedModifiers(innerDeps),
|
|
74
77
|
hasModifierWithValue: hasModifierWithValue(innerDeps),
|
|
75
|
-
getBalanceToPay: getBalanceToPay(innerDeps),
|
|
76
78
|
getItemsTotalPaid: getItemsTotalPaid(innerDeps),
|
|
77
79
|
getItemModifiersDescription: getItemModifiersDescription(innerDeps),
|
|
78
80
|
isRelatedItem: isRelatedItem(innerDeps),
|
|
@@ -80,12 +82,17 @@ const itemActions = (deps = {}) => {
|
|
|
80
82
|
isParentIncluded: isParentIncluded(innerDeps),
|
|
81
83
|
hasCreateSubscription: hasCreateSubscription(innerDeps),
|
|
82
84
|
getItemModifiers: getItemModifiers(innerDeps),
|
|
83
|
-
|
|
84
|
-
getBalance: getBalance(innerDeps),
|
|
85
|
+
getItemsBalance: getItemsBalance(innerDeps),
|
|
85
86
|
isFullyPaid: isFullyPaid(innerDeps),
|
|
86
87
|
getTotalPrice: getTotalPrice(innerDeps),
|
|
87
88
|
removePaymentModifiers: removePaymentModifiers(innerDeps),
|
|
88
89
|
getItems: getItems(innerDeps),
|
|
90
|
+
getAmounts: getAmounts(innerDeps),
|
|
91
|
+
hasPaymentMethodType: hasPaymentMethodType(innerDeps),
|
|
92
|
+
removePaymentModifiersByPaymentId:
|
|
93
|
+
removePaymentModifiersByPaymentId(innerDeps),
|
|
94
|
+
hasPaymentModifierWithPaymentId: hasPaymentModifierWithPaymentId(innerDeps),
|
|
95
|
+
getBalance: getBalance(innerDeps),
|
|
89
96
|
});
|
|
90
97
|
|
|
91
98
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = ({ modifierActions }) =>
|
|
2
|
+
function removePaymentModifiersByPaymentId({ item, paymentId }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers) || !paymentId) return item;
|
|
4
|
+
|
|
5
|
+
return {
|
|
6
|
+
...item,
|
|
7
|
+
modifiers: item.modifiers.filter(
|
|
8
|
+
modifier =>
|
|
9
|
+
!modifierActions.getProperty(modifier, 'paymentId') ||
|
|
10
|
+
modifierActions.getProperty(modifier, 'paymentId') !== paymentId
|
|
11
|
+
),
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module.exports = ({ actions }) => {
|
|
2
|
+
const modifierConditionPass = (
|
|
3
|
+
modifier,
|
|
4
|
+
{ item, startRequestDate, endRequestDate }
|
|
5
|
+
) =>
|
|
6
|
+
modifier.conditions && Array.isArray(modifier.conditions.rules)
|
|
7
|
+
? modifier.conditions.rules.every(condition => {
|
|
8
|
+
switch (condition.key) {
|
|
9
|
+
case 'itemPieces':
|
|
10
|
+
return actions.validateNumberCondition(
|
|
11
|
+
item.pieces,
|
|
12
|
+
condition.value,
|
|
13
|
+
condition.operand
|
|
14
|
+
);
|
|
15
|
+
case 'itemQuantity':
|
|
16
|
+
return actions.validateNumberCondition(
|
|
17
|
+
item.quantity,
|
|
18
|
+
condition.value,
|
|
19
|
+
condition.operand
|
|
20
|
+
);
|
|
21
|
+
case 'modifiers':
|
|
22
|
+
return actions.validateRequiredModifiers(
|
|
23
|
+
item.modifiers,
|
|
24
|
+
condition.value,
|
|
25
|
+
condition.operand
|
|
26
|
+
);
|
|
27
|
+
case 'endDateDays':
|
|
28
|
+
return actions.validateDateDaysDiff(
|
|
29
|
+
startRequestDate,
|
|
30
|
+
endRequestDate,
|
|
31
|
+
condition.value,
|
|
32
|
+
condition.operand
|
|
33
|
+
);
|
|
34
|
+
case 'paymentMethods':
|
|
35
|
+
return false;
|
|
36
|
+
case 'paymentTypes':
|
|
37
|
+
return false;
|
|
38
|
+
default:
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}) || modifier.locked
|
|
42
|
+
: true;
|
|
43
|
+
|
|
44
|
+
function areConditionsMet(modifier, opts) {
|
|
45
|
+
const {
|
|
46
|
+
item = null,
|
|
47
|
+
endRequestDate = null,
|
|
48
|
+
startRequestDate = null,
|
|
49
|
+
} = opts;
|
|
50
|
+
// const recommendedEndDate = storeActions.getRecommendedEndDate();
|
|
51
|
+
return (
|
|
52
|
+
modifier &&
|
|
53
|
+
modifierConditionPass(modifier, {
|
|
54
|
+
item,
|
|
55
|
+
startRequestDate,
|
|
56
|
+
endRequestDate,
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
return areConditionsMet;
|
|
61
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, constants }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function calculatePaymentDiscountModifier({
|
|
5
|
+
paymentModifier,
|
|
6
|
+
amountToPay,
|
|
7
|
+
}) {
|
|
8
|
+
let amount = 0;
|
|
9
|
+
|
|
10
|
+
if (actions.isFixed(paymentModifier)) {
|
|
11
|
+
amount = paymentModifier.compute.amount;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (actions.isPercentage(paymentModifier)) {
|
|
15
|
+
const discountAmount = math.div(paymentModifier.compute.amount, 100);
|
|
16
|
+
|
|
17
|
+
amount = math.sub(
|
|
18
|
+
math.div(amountToPay, math.sub(1, discountAmount)),
|
|
19
|
+
amountToPay
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return actions.createDiscountModifier({
|
|
24
|
+
amount,
|
|
25
|
+
type: constants.Modifier.Compute.Types.FIXED,
|
|
26
|
+
modifierId: paymentModifier.modifierId,
|
|
27
|
+
_id: paymentModifier._id,
|
|
28
|
+
properties: paymentModifier.properties,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module.exports = ({ utils, actions, constants }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function calculatePaymentDiscountModifier({
|
|
5
|
+
paymentModifier,
|
|
6
|
+
amountToPay,
|
|
7
|
+
}) {
|
|
8
|
+
let amount = 0;
|
|
9
|
+
|
|
10
|
+
if (actions.isFixed(paymentModifier)) {
|
|
11
|
+
amount = paymentModifier.compute.amount;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (actions.isPercentage(paymentModifier)) {
|
|
15
|
+
const feeAmount = math.div(paymentModifier.compute.amount, 100);
|
|
16
|
+
amount = math.mul(amountToPay, feeAmount);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return actions.createFeeModifier({
|
|
20
|
+
amount,
|
|
21
|
+
type: constants.Modifier.Compute.Types.FIXED,
|
|
22
|
+
modifierId: paymentModifier.modifierId,
|
|
23
|
+
_id: paymentModifier._id,
|
|
24
|
+
properties: paymentModifier.properties,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module.exports = ({ actions, utils }) => {
|
|
2
|
+
const { math } = utils;
|
|
3
|
+
|
|
4
|
+
return function calculatePaymentFeeModifier({
|
|
5
|
+
paymentModifier: paymentModifierParam,
|
|
6
|
+
amountToPay: amountToPayParam,
|
|
7
|
+
itemBalance: itemBalanceParam,
|
|
8
|
+
paymentMethod,
|
|
9
|
+
paymentType,
|
|
10
|
+
paymentId,
|
|
11
|
+
}) {
|
|
12
|
+
if (
|
|
13
|
+
!actions.hasPaymentMethodType({
|
|
14
|
+
paymentModifier: paymentModifierParam,
|
|
15
|
+
paymentMethod,
|
|
16
|
+
paymentType,
|
|
17
|
+
})
|
|
18
|
+
)
|
|
19
|
+
return undefined;
|
|
20
|
+
|
|
21
|
+
const paymentModifier = {
|
|
22
|
+
...paymentModifierParam,
|
|
23
|
+
properties: {
|
|
24
|
+
...(paymentModifierParam.properties || {}),
|
|
25
|
+
isCalculatedPaymentModifier: true,
|
|
26
|
+
paymentId,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const itemBalance =
|
|
31
|
+
typeof itemBalanceParam === 'number' ? itemBalanceParam : 0;
|
|
32
|
+
|
|
33
|
+
const calculatedPaymentMod = actions.calculate(paymentModifier, {
|
|
34
|
+
price: itemBalance,
|
|
35
|
+
quantity: 1,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const balanceIncludingPaymentModifier = math.add(
|
|
39
|
+
itemBalance,
|
|
40
|
+
calculatedPaymentMod._computed.amount
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
let amountToPay =
|
|
44
|
+
typeof amountToPayParam === 'number' ? amountToPayParam : 0;
|
|
45
|
+
|
|
46
|
+
amountToPay =
|
|
47
|
+
amountToPay && amountToPay < balanceIncludingPaymentModifier
|
|
48
|
+
? amountToPay
|
|
49
|
+
: balanceIncludingPaymentModifier;
|
|
50
|
+
|
|
51
|
+
if (actions.isDiscount(paymentModifier)) {
|
|
52
|
+
return actions.calculatePaymentDiscountModifier({
|
|
53
|
+
amountToPay,
|
|
54
|
+
paymentModifier,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (actions.isAdd(paymentModifier)) {
|
|
59
|
+
return actions.calculatePaymentFeeModifier({
|
|
60
|
+
amountToPay,
|
|
61
|
+
paymentModifier,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return undefined;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
@@ -2,7 +2,7 @@ module.exports = ({ constants, actions, localization }) => {
|
|
|
2
2
|
const { Modifier } = constants;
|
|
3
3
|
|
|
4
4
|
return function createDiscountModifier(params) {
|
|
5
|
-
const { amount, type, properties } = params;
|
|
5
|
+
const { amount, type, properties, ...rest } = params;
|
|
6
6
|
const { formatAmount } = localization;
|
|
7
7
|
|
|
8
8
|
const name =
|
|
@@ -21,6 +21,7 @@ module.exports = ({ constants, actions, localization }) => {
|
|
|
21
21
|
properties: {
|
|
22
22
|
...properties,
|
|
23
23
|
},
|
|
24
|
+
...rest,
|
|
24
25
|
});
|
|
25
26
|
};
|
|
26
27
|
};
|
|
@@ -2,7 +2,7 @@ module.exports = ({ constants, actions, localization }) => {
|
|
|
2
2
|
const { Modifier } = constants;
|
|
3
3
|
|
|
4
4
|
return function createFeeModifier(params) {
|
|
5
|
-
const { amount, type, properties } = params;
|
|
5
|
+
const { amount, type, properties, ...rest } = params;
|
|
6
6
|
const { formatAmount } = localization;
|
|
7
7
|
|
|
8
8
|
const name =
|
|
@@ -22,6 +22,7 @@ module.exports = ({ constants, actions, localization }) => {
|
|
|
22
22
|
ignoreQuantity: true,
|
|
23
23
|
...properties,
|
|
24
24
|
},
|
|
25
|
+
...rest,
|
|
25
26
|
});
|
|
26
27
|
};
|
|
27
28
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function hasPaymentMethodType({
|
|
3
|
+
paymentModifier,
|
|
4
|
+
paymentMethod,
|
|
5
|
+
paymentType,
|
|
6
|
+
}) {
|
|
7
|
+
return (
|
|
8
|
+
actions.isPaymentModifier(paymentModifier) &&
|
|
9
|
+
paymentModifier.conditions.rules.some(
|
|
10
|
+
rule =>
|
|
11
|
+
rule.value.includes(paymentMethod) || rule.value.includes(paymentType)
|
|
12
|
+
)
|
|
13
|
+
);
|
|
14
|
+
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -19,8 +19,6 @@ const duplicate = require('./duplicate');
|
|
|
19
19
|
const enableAutoPopup = require('./enableAutoPopup');
|
|
20
20
|
const filterByRequiredModifiers = require('./filterByRequiredModifiers');
|
|
21
21
|
const findById = require('./findById');
|
|
22
|
-
const findByPaymentMethod = require('./findByPaymentMethod');
|
|
23
|
-
const findByPaymentType = require('./findByPaymentType');
|
|
24
22
|
const getAvailablePromotions = require('./getAvailablePromotions');
|
|
25
23
|
const getAvailablePromotionsOrSubscriptions = require('./getAvailablePromotionsOrSubscriptions');
|
|
26
24
|
const getAvailableSubscriptions = require('./getAvailableSubscriptions');
|
|
@@ -82,6 +80,7 @@ const isDirect = require('./isDirect');
|
|
|
82
80
|
const hasNoTags = require('./hasNoTags');
|
|
83
81
|
const isRemoveModifier = require('./isRemoveModifier');
|
|
84
82
|
const isGroupOfModifiers = require('./isGroupOfModifiers');
|
|
83
|
+
const areConditionsMet = require('./areConditionsMet');
|
|
85
84
|
const isRequiredAndOverride = require('./isRequiredAndOverride');
|
|
86
85
|
const isManual = require('./isManual');
|
|
87
86
|
const isPriceOverride = require('./isPriceOverride');
|
|
@@ -102,6 +101,7 @@ const isDefault = require('./isDefault');
|
|
|
102
101
|
const isIncluded = require('./isIncluded');
|
|
103
102
|
const isCustomerTagsExtend = require('./isCustomerTagsExtend');
|
|
104
103
|
const isAmountOverride = require('./isAmountOverride');
|
|
104
|
+
const isValid = require('./isValid');
|
|
105
105
|
const isDiscount = require('./isDiscount');
|
|
106
106
|
const isHidden = require('./isHidden');
|
|
107
107
|
const isIgnoreQuantity = require('./isIgnoreQuantity');
|
|
@@ -117,22 +117,33 @@ const isCredit = require('./isCredit');
|
|
|
117
117
|
const purifyModifiers = require('./purifyModifiers');
|
|
118
118
|
const sort = require('./sort');
|
|
119
119
|
const isPaymentModifier = require('./isPaymentModifier');
|
|
120
|
-
const createPaymentModifier = require('./createPaymentModifier');
|
|
121
120
|
const isSubtract = require('./isSubtract');
|
|
122
121
|
const isFixed = require('./isFixed');
|
|
123
122
|
const isFixedAdd = require('./isFixedAdd');
|
|
124
123
|
const isFee = require('./isFee');
|
|
125
124
|
const isAdd = require('./isAdd');
|
|
126
125
|
const mutateModifier = require('./mutateModifier');
|
|
127
|
-
|
|
128
126
|
const isFixedDiscount = require('./isFixedDiscount');
|
|
129
127
|
const removeLocked = require('./removeLocked');
|
|
130
128
|
const hasItems = require('./hasItems');
|
|
131
|
-
const getLockedModifiers = require('./getLockedModifiers');
|
|
132
129
|
const getGroupedModifiers = require('./getGroupedModifiers');
|
|
133
130
|
const getNotesToModifierTags = require('./getNotesToModifierTags');
|
|
134
131
|
const isOptionsOverride = require('./isOptionsOverride');
|
|
135
132
|
const getGroupedModifierLabels = require('./getGroupedModifierLabels');
|
|
133
|
+
const validate = require('./validate');
|
|
134
|
+
const validateNumberCondition = require('./validateNumberCondition');
|
|
135
|
+
const validateRequiredModifiers = require('./validateRequiredModifiers');
|
|
136
|
+
const validateDateDaysDiff = require('./validateDateDaysDiff');
|
|
137
|
+
const validateInArr = require('./validateInArr');
|
|
138
|
+
const isPercentage = require('./isPercentage');
|
|
139
|
+
const getChildren = require('./getChildren');
|
|
140
|
+
const getComputedAmount = require('./getComputedAmount');
|
|
141
|
+
const hasPaymentMethodType = require('./hasPaymentMethodType');
|
|
142
|
+
const calculatePaymentModifier = require('./calculatePaymentModifier');
|
|
143
|
+
const calculatePaymentDiscountModifier = require('./calculatePaymentDiscountModifier');
|
|
144
|
+
const calculatePaymentFeeModifier = require('./calculatePaymentFeeModifier');
|
|
145
|
+
const isCalculatedPaymentModifier = require('./isCalculatedPaymentModifier');
|
|
146
|
+
const isChild = require('./isChild');
|
|
136
147
|
|
|
137
148
|
const modifierActions = (deps = {}) => {
|
|
138
149
|
const actions = {};
|
|
@@ -163,8 +174,6 @@ const modifierActions = (deps = {}) => {
|
|
|
163
174
|
enableAutoPopup: enableAutoPopup(innerDeps),
|
|
164
175
|
filterByRequiredModifiers: filterByRequiredModifiers(innerDeps),
|
|
165
176
|
findById: findById(innerDeps),
|
|
166
|
-
findByPaymentMethod: findByPaymentMethod(innerDeps),
|
|
167
|
-
findByPaymentType: findByPaymentType(innerDeps),
|
|
168
177
|
getAvailablePromotions: getAvailablePromotions(innerDeps),
|
|
169
178
|
getAvailablePromotionsOrSubscriptions:
|
|
170
179
|
getAvailablePromotionsOrSubscriptions(innerDeps),
|
|
@@ -247,6 +256,7 @@ const modifierActions = (deps = {}) => {
|
|
|
247
256
|
isDefault: isDefault(innerDeps),
|
|
248
257
|
isCustomerTagsExtend: isCustomerTagsExtend(innerDeps),
|
|
249
258
|
isAmountOverride: isAmountOverride(innerDeps),
|
|
259
|
+
isValid: isValid(innerDeps),
|
|
250
260
|
isDiscount: isDiscount(innerDeps),
|
|
251
261
|
isHidden: isHidden(innerDeps),
|
|
252
262
|
isIgnoreQuantity: isIgnoreQuantity(innerDeps),
|
|
@@ -262,13 +272,11 @@ const modifierActions = (deps = {}) => {
|
|
|
262
272
|
purifyModifiers: purifyModifiers(innerDeps),
|
|
263
273
|
sort: sort(innerDeps),
|
|
264
274
|
isPaymentModifier: isPaymentModifier(innerDeps),
|
|
265
|
-
createPaymentModifier: createPaymentModifier(innerDeps),
|
|
266
275
|
isSubtract: isSubtract(innerDeps),
|
|
267
276
|
isFixed: isFixed(innerDeps),
|
|
268
277
|
isFixedDiscount: isFixedDiscount(innerDeps),
|
|
269
278
|
removeLocked: removeLocked(innerDeps),
|
|
270
279
|
hasItems: hasItems(innerDeps),
|
|
271
|
-
getLockedModifiers: getLockedModifiers(innerDeps),
|
|
272
280
|
isFixedAdd: isFixedAdd(innerDeps),
|
|
273
281
|
isFee: isFee(innerDeps),
|
|
274
282
|
isAdd: isAdd(innerDeps),
|
|
@@ -277,6 +285,22 @@ const modifierActions = (deps = {}) => {
|
|
|
277
285
|
getNotesToModifierTags: getNotesToModifierTags(innerDeps),
|
|
278
286
|
isOptionsOverride: isOptionsOverride(innerDeps),
|
|
279
287
|
getGroupedModifierLabels: getGroupedModifierLabels(innerDeps),
|
|
288
|
+
validate: validate(innerDeps),
|
|
289
|
+
validateNumberCondition: validateNumberCondition(innerDeps),
|
|
290
|
+
validateRequiredModifiers: validateRequiredModifiers(innerDeps),
|
|
291
|
+
validateDateDaysDiff: validateDateDaysDiff(innerDeps),
|
|
292
|
+
validateInArr: validateInArr(innerDeps),
|
|
293
|
+
areConditionsMet: areConditionsMet(innerDeps),
|
|
294
|
+
isPercentage: isPercentage(innerDeps),
|
|
295
|
+
getChildren: getChildren(innerDeps),
|
|
296
|
+
getComputedAmount: getComputedAmount(innerDeps),
|
|
297
|
+
hasPaymentMethodType: hasPaymentMethodType(innerDeps),
|
|
298
|
+
calculatePaymentModifier: calculatePaymentModifier(innerDeps),
|
|
299
|
+
calculatePaymentDiscountModifier:
|
|
300
|
+
calculatePaymentDiscountModifier(innerDeps),
|
|
301
|
+
calculatePaymentFeeModifier: calculatePaymentFeeModifier(innerDeps),
|
|
302
|
+
isCalculatedPaymentModifier: isCalculatedPaymentModifier(innerDeps),
|
|
303
|
+
isChild: isChild(innerDeps),
|
|
280
304
|
});
|
|
281
305
|
|
|
282
306
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
module.exports = ({ constants }) => {
|
|
1
|
+
module.exports = ({ constants, actions }) => {
|
|
2
2
|
const { Modifier } = constants;
|
|
3
3
|
return function isDiscount(modifier) {
|
|
4
|
-
return !!(
|
|
4
|
+
return !!(
|
|
5
|
+
modifier &&
|
|
6
|
+
(modifier.type === Modifier.Types.DISCOUNT ||
|
|
7
|
+
actions.isSubtract(modifier))
|
|
8
|
+
);
|
|
5
9
|
};
|
|
6
10
|
};
|
package/lib/modifier/isFee.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
module.exports = ({ constants }) => {
|
|
1
|
+
module.exports = ({ constants, actions }) => {
|
|
2
2
|
const { Modifier } = constants;
|
|
3
3
|
return function isFee(modifier) {
|
|
4
|
-
return !!(
|
|
4
|
+
return !!(
|
|
5
|
+
modifier &&
|
|
6
|
+
(modifier.type === Modifier.Types.FEE || actions.isAdd(modifier))
|
|
7
|
+
);
|
|
5
8
|
};
|
|
6
9
|
};
|
|
@@ -3,6 +3,9 @@ module.exports = () =>
|
|
|
3
3
|
return !!(
|
|
4
4
|
modifier &&
|
|
5
5
|
modifier.conditions &&
|
|
6
|
-
(modifier.conditions.
|
|
6
|
+
Array.isArray(modifier.conditions.rules) &&
|
|
7
|
+
modifier.conditions.rules.some(
|
|
8
|
+
condition => condition.key === 'paymentMethods'
|
|
9
|
+
)
|
|
7
10
|
);
|
|
8
11
|
};
|
|
@@ -3,6 +3,9 @@ module.exports = () =>
|
|
|
3
3
|
return !!(
|
|
4
4
|
modifier &&
|
|
5
5
|
modifier.conditions &&
|
|
6
|
-
(modifier.conditions.
|
|
6
|
+
Array.isArray(modifier.conditions.rules) &&
|
|
7
|
+
modifier.conditions.rules.some(
|
|
8
|
+
condition => condition.key === 'paymentTypes'
|
|
9
|
+
)
|
|
7
10
|
);
|
|
8
11
|
};
|
package/lib/modifier/sort.js
CHANGED
|
@@ -6,6 +6,34 @@ module.exports = ({ actions }) => {
|
|
|
6
6
|
const aVal = actions.getProperty(a, key);
|
|
7
7
|
const bVal = actions.getProperty(b, key);
|
|
8
8
|
|
|
9
|
+
const aIsPaymentModifier = actions.isPaymentModifier(a);
|
|
10
|
+
const bIsPaymentModifier = actions.isPaymentModifier(b);
|
|
11
|
+
const aIsCalculatedPaymentModifier =
|
|
12
|
+
actions.isCalculatedPaymentModifier(a);
|
|
13
|
+
const bIsCalculatedPaymentModifier =
|
|
14
|
+
actions.isCalculatedPaymentModifier(b);
|
|
15
|
+
|
|
16
|
+
if (aIsCalculatedPaymentModifier && bIsPaymentModifier && aVal === null) {
|
|
17
|
+
return -1;
|
|
18
|
+
}
|
|
19
|
+
if (bIsCalculatedPaymentModifier && aIsPaymentModifier && bVal === null) {
|
|
20
|
+
return -1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (
|
|
24
|
+
(aIsPaymentModifier || aIsCalculatedPaymentModifier) &&
|
|
25
|
+
aVal === null
|
|
26
|
+
) {
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (
|
|
31
|
+
(bIsPaymentModifier || bIsCalculatedPaymentModifier) &&
|
|
32
|
+
bVal === null
|
|
33
|
+
) {
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
|
|
9
37
|
if (aVal == null && bVal === null) {
|
|
10
38
|
return 0;
|
|
11
39
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ actions }) => {
|
|
2
|
+
function validate(modifier, opts) {
|
|
3
|
+
if (!modifier) return modifier;
|
|
4
|
+
|
|
5
|
+
return {
|
|
6
|
+
...modifier,
|
|
7
|
+
conditions: {
|
|
8
|
+
...(modifier.conditions || {}),
|
|
9
|
+
valid: !!actions.areConditionsMet(modifier, opts),
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return validate;
|
|
14
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function validateDateDaysDiff(
|
|
3
|
+
startRequestDate,
|
|
4
|
+
endRequestDate,
|
|
5
|
+
conditionNumber,
|
|
6
|
+
operand
|
|
7
|
+
) {
|
|
8
|
+
if (!conditionNumber && !operand) return true;
|
|
9
|
+
if (!startRequestDate || !endRequestDate) return false;
|
|
10
|
+
const diff = Math.abs(
|
|
11
|
+
new Date(endRequestDate) - new Date(startRequestDate)
|
|
12
|
+
);
|
|
13
|
+
const diffDays = Math.ceil(diff / (1000 * 60 * 60 * 24));
|
|
14
|
+
switch (operand) {
|
|
15
|
+
case '$eq':
|
|
16
|
+
return diffDays === conditionNumber;
|
|
17
|
+
case '$ne':
|
|
18
|
+
return diffDays !== conditionNumber;
|
|
19
|
+
case '$gt':
|
|
20
|
+
return diffDays > conditionNumber;
|
|
21
|
+
case '$gte':
|
|
22
|
+
return diffDays >= conditionNumber;
|
|
23
|
+
case '$lt':
|
|
24
|
+
return diffDays < conditionNumber;
|
|
25
|
+
case '$lte':
|
|
26
|
+
return diffDays <= conditionNumber;
|
|
27
|
+
default:
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = ({ _ }) =>
|
|
2
|
+
function validateInArr(item, requiredArr, operand) {
|
|
3
|
+
if (_.isEmpty(requiredArr) && !operand) return true;
|
|
4
|
+
switch (operand) {
|
|
5
|
+
case '$in':
|
|
6
|
+
return requiredArr.some(each => item === each);
|
|
7
|
+
case '$nin':
|
|
8
|
+
return requiredArr.every(each => item !== each);
|
|
9
|
+
default:
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function validateNumberCondition(itemNumber, conditionNumber, operand) {
|
|
3
|
+
if (!conditionNumber && !operand) return true;
|
|
4
|
+
switch (operand) {
|
|
5
|
+
case '$eq':
|
|
6
|
+
return Number(conditionNumber) === itemNumber;
|
|
7
|
+
case '$ne':
|
|
8
|
+
return Number(conditionNumber) !== itemNumber;
|
|
9
|
+
case '$gt':
|
|
10
|
+
return Number(conditionNumber) < itemNumber;
|
|
11
|
+
case '$gte':
|
|
12
|
+
return Number(conditionNumber) <= itemNumber;
|
|
13
|
+
case '$lt':
|
|
14
|
+
return Number(conditionNumber) > itemNumber;
|
|
15
|
+
case '$lte':
|
|
16
|
+
return Number(conditionNumber) >= itemNumber;
|
|
17
|
+
default:
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
};
|