@darkpos/pricing 1.0.15 → 1.0.17
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__/mocks/order-credit.json +474 -0
- package/__TEST__/mocks/partially-paid/input-items.json +1 -0
- package/__TEST__/mocks/partially-paid/order-modifiers.json +53 -0
- package/__TEST__/mocks/partially-paid/order-partially-paid.json +890 -0
- package/__TEST__/mocks/scripts/calculate-partially-paid/index.js +27 -0
- package/__TEST__/mocks/scripts/calculate-unpaid/index.js +28 -0
- package/__TEST__/mocks/scripts/order-to-string.js +18 -0
- package/__TEST__/mocks/stores.js +435 -0
- package/__TEST__/mocks/unpaid/input-items.json +6 -0
- package/__TEST__/mocks/unpaid/order-modifiers.json +53 -0
- package/__TEST__/mocks/unpaid/order-not-paid.json +684 -0
- package/__TEST__/order/order.test.js +627 -0
- package/lib/item/addIndirectModifier.js +2 -3
- package/lib/item/calculate.js +1 -2
- package/lib/item/getBalance.js +9 -0
- package/lib/item/getItemModifiers.js +3 -14
- package/lib/item/getItems.js +5 -0
- package/lib/item/getTotal.js +1 -1
- package/lib/item/getTotalPrice.js +10 -0
- package/lib/item/getTotals.js +31 -18
- package/lib/item/index.js +12 -0
- package/lib/item/isFullyPaid.js +6 -0
- package/lib/item/markModifiersAsLocked.js +11 -0
- package/lib/item/removeModifier.js +10 -9
- package/lib/item/removePaymentModifiers.js +15 -0
- package/lib/modifier/create.js +2 -2
- package/lib/modifier/createAmountOverrideModifier.js +1 -3
- package/lib/modifier/createCreditModifier.js +2 -4
- package/lib/modifier/createDiscountModifier.js +1 -3
- package/lib/modifier/createIndirectModifier.js +14 -5
- package/lib/modifier/createPaymentModifier.js +12 -0
- package/lib/modifier/createSubscriptionModifier.js +1 -3
- package/lib/modifier/duplicate.js +1 -1
- package/lib/modifier/findById.js +4 -1
- package/lib/modifier/findByPaymentMethod.js +1 -1
- package/lib/modifier/findByPaymentType.js +1 -1
- package/lib/modifier/getItemModifiers.js +1 -3
- package/lib/modifier/getLockedModifiers.js +5 -0
- package/lib/modifier/getSplittedModifiers.js +4 -6
- package/lib/modifier/hasItems.js +8 -0
- package/lib/modifier/index.js +20 -4
- package/lib/modifier/isFixed.js +10 -0
- package/lib/modifier/isFixedDiscount.js +4 -0
- package/lib/modifier/isPaymentMethodModifier.js +8 -0
- package/lib/modifier/isPaymentModifier.js +7 -0
- package/lib/modifier/isPaymentTypeModifier.js +8 -0
- package/lib/modifier/isSubtract.js +10 -0
- package/lib/modifier/removeLocked.js +8 -0
- package/lib/order/addItem.js +104 -106
- package/lib/order/addItemModifier.js +0 -3
- package/lib/order/addModifier.js +14 -2
- package/lib/order/addModifiers.js +15 -0
- package/lib/order/autoSplit.js +34 -0
- package/lib/order/calculate.js +46 -68
- package/lib/order/getScheduleByCustomer.js +0 -1
- package/lib/order/index.js +10 -0
- package/lib/order/markModifiersAsLocked.js +14 -0
- package/lib/order/removeItem.js +0 -2
- package/lib/order/removeModifier.js +5 -1
- package/lib/order/removeModifiers.js +18 -0
- package/lib/order/splitByDepartments.js +10 -13
- package/lib/order/syncSubOrderItemsFromParent.js +24 -0
- package/package.json +3 -2
- package/__TEST__/order.test.js +0 -233
- package/lib/modifier/isPaymentMethods.js +0 -8
- package/lib/modifier/isPaymentTypes.js +0 -8
package/lib/item/getTotal.js
CHANGED
package/lib/item/getTotals.js
CHANGED
|
@@ -1,25 +1,38 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
|
|
1
3
|
module.exports = ({ utils }) => {
|
|
2
4
|
const { math } = utils;
|
|
3
5
|
return function getTotals(items) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
let subTotals = {};
|
|
7
|
+
let subTotal = 0;
|
|
8
|
+
|
|
9
|
+
for (const item of items) {
|
|
10
|
+
subTotal = math.add(subTotal, item.subTotals._actual);
|
|
11
|
+
const keys = Object.keys(item.subTotals).filter(
|
|
12
|
+
key => !key.includes('_')
|
|
13
|
+
);
|
|
14
|
+
for (const key of keys) {
|
|
15
|
+
subTotals[key] = math.add(subTotals[key] || 0, item.subTotals[key]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
{ total: 0, subTotals: {} }
|
|
19
|
+
const total = Object.keys(subTotals).reduce(
|
|
20
|
+
(acc, key) => math.add(acc, subTotals[key]),
|
|
21
|
+
subTotal
|
|
23
22
|
);
|
|
23
|
+
|
|
24
|
+
subTotals = Object.keys(subTotals).reduce(
|
|
25
|
+
(acc, key) => ({
|
|
26
|
+
...acc,
|
|
27
|
+
[key]: subTotals[key],
|
|
28
|
+
}),
|
|
29
|
+
{}
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
subTotals,
|
|
34
|
+
subTotal,
|
|
35
|
+
total,
|
|
36
|
+
};
|
|
24
37
|
};
|
|
25
38
|
};
|
package/lib/item/index.js
CHANGED
|
@@ -29,6 +29,12 @@ const getParentItem = require('./getParentItem');
|
|
|
29
29
|
const isParentIncluded = require('./isParentIncluded');
|
|
30
30
|
const hasCreateSubscription = require('./hasCreateSubscription');
|
|
31
31
|
const getItemModifiers = require('./getItemModifiers');
|
|
32
|
+
const markModifiersAsLocked = require('./markModifiersAsLocked');
|
|
33
|
+
const getBalance = require('./getBalance');
|
|
34
|
+
const isFullyPaid = require('./isFullyPaid');
|
|
35
|
+
const getTotalPrice = require('./getTotalPrice');
|
|
36
|
+
const removePaymentModifiers = require('./removePaymentModifiers');
|
|
37
|
+
const getItems = require('./getItems');
|
|
32
38
|
|
|
33
39
|
const itemActions = (deps = {}) => {
|
|
34
40
|
const actions = {};
|
|
@@ -70,6 +76,12 @@ const itemActions = (deps = {}) => {
|
|
|
70
76
|
isParentIncluded: isParentIncluded(innerDeps),
|
|
71
77
|
hasCreateSubscription: hasCreateSubscription(innerDeps),
|
|
72
78
|
getItemModifiers: getItemModifiers(innerDeps),
|
|
79
|
+
markModifiersAsLocked: markModifiersAsLocked(innerDeps),
|
|
80
|
+
getBalance: getBalance(innerDeps),
|
|
81
|
+
isFullyPaid: isFullyPaid(innerDeps),
|
|
82
|
+
getTotalPrice: getTotalPrice(innerDeps),
|
|
83
|
+
removePaymentModifiers: removePaymentModifiers(innerDeps),
|
|
84
|
+
getItems: getItems(innerDeps),
|
|
73
85
|
});
|
|
74
86
|
|
|
75
87
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function markModifiersAsLocked({ item, modifierIds }) {
|
|
3
|
+
if (!item || !Array.isArray(item.modifiers)) return {};
|
|
4
|
+
|
|
5
|
+
return {
|
|
6
|
+
...item,
|
|
7
|
+
modifiers: item.modifiers.map(mod =>
|
|
8
|
+
modifierIds.includes(mod._parentId) ? { ...mod, locked: true } : mod
|
|
9
|
+
),
|
|
10
|
+
};
|
|
11
|
+
};
|
|
@@ -3,8 +3,7 @@ module.exports = ({ modifierActions, _, actions }) => {
|
|
|
3
3
|
!!modifiers.find(each => modifierActions.isGroupOfItems(each));
|
|
4
4
|
|
|
5
5
|
const isValid = (itemModifiers, modifier) => {
|
|
6
|
-
if (!modifierActions.findById(itemModifiers, modifier.
|
|
7
|
-
return false;
|
|
6
|
+
if (!modifierActions.findById(itemModifiers, modifier._id)) return false;
|
|
8
7
|
|
|
9
8
|
if (
|
|
10
9
|
modifierActions.isRequired(modifier) &&
|
|
@@ -51,15 +50,14 @@ module.exports = ({ modifierActions, _, actions }) => {
|
|
|
51
50
|
const nextModifiers = item.modifiers.filter(
|
|
52
51
|
each =>
|
|
53
52
|
!modifiersToApply.find(
|
|
54
|
-
mod =>
|
|
55
|
-
each.modifierId === mod._id ||
|
|
56
|
-
each._id === mod._id ||
|
|
57
|
-
each.modifierId === mod.modifierId
|
|
53
|
+
mod => each._parentId === mod._id || each._id === mod._id
|
|
58
54
|
)
|
|
59
55
|
);
|
|
60
56
|
|
|
61
|
-
const hasOverride = modifiersToApply.find(
|
|
62
|
-
|
|
57
|
+
const hasOverride = modifiersToApply.find(
|
|
58
|
+
each =>
|
|
59
|
+
modifierActions.isOverride(each) ||
|
|
60
|
+
modifierActions.isComputedOverride(each)
|
|
63
61
|
);
|
|
64
62
|
|
|
65
63
|
if (hasOverride) {
|
|
@@ -68,7 +66,10 @@ module.exports = ({ modifierActions, _, actions }) => {
|
|
|
68
66
|
|
|
69
67
|
if (modifierActions.isQuantityOverride(modifier)) nextItem.quantity = 1;
|
|
70
68
|
|
|
71
|
-
if (
|
|
69
|
+
if (
|
|
70
|
+
modifierActions.isPriceOverride(modifier) ||
|
|
71
|
+
modifierActions.isComputedOverride(modifier)
|
|
72
|
+
)
|
|
72
73
|
nextItem.price = actions.getItemPrice({
|
|
73
74
|
item: originalItem,
|
|
74
75
|
cache,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = ({ actions, modifierActions }) =>
|
|
2
|
+
function removePaymentModifiers({ items }) {
|
|
3
|
+
const paymentModifiers = items.modifiers.filter(mod =>
|
|
4
|
+
modifierActions.isPaymentModifier(mod)
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
return paymentModifiers.map(paymentMod =>
|
|
8
|
+
items.map(item =>
|
|
9
|
+
actions.removeModifier({
|
|
10
|
+
item,
|
|
11
|
+
modifier: paymentMod,
|
|
12
|
+
})
|
|
13
|
+
)
|
|
14
|
+
);
|
|
15
|
+
};
|
package/lib/modifier/create.js
CHANGED
|
@@ -34,11 +34,11 @@ module.exports = ({ utils }) => {
|
|
|
34
34
|
|
|
35
35
|
return function create(params) {
|
|
36
36
|
const { _id, modifierId, ...modifier } = params;
|
|
37
|
-
const parentId = modifierId || _id;
|
|
38
37
|
return {
|
|
39
38
|
...defaults,
|
|
40
39
|
...modifier,
|
|
41
|
-
modifierId:
|
|
40
|
+
modifierId: modifierId || _id,
|
|
41
|
+
_parentId: _id,
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
44
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
module.exports = ({ constants, actions
|
|
1
|
+
module.exports = ({ constants, actions }) => {
|
|
2
2
|
const { Modifier } = constants;
|
|
3
|
-
const { helpers } = utils;
|
|
4
3
|
|
|
5
4
|
return function createAmountOverrideModifier(params) {
|
|
6
5
|
return actions.create({
|
|
@@ -14,7 +13,6 @@ module.exports = ({ constants, actions, utils }) => {
|
|
|
14
13
|
attributes: [Modifier.Attributes.OVERRIDE],
|
|
15
14
|
name: `Modifier Amount ${Modifier.Compute.Actions.OVERRIDE}`,
|
|
16
15
|
included: true,
|
|
17
|
-
_id: helpers.getObjectID(),
|
|
18
16
|
});
|
|
19
17
|
};
|
|
20
18
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
module.exports = ({ _, actions
|
|
2
|
-
|
|
3
|
-
//
|
|
1
|
+
module.exports = ({ _, actions }) => {
|
|
2
|
+
|
|
4
3
|
return function createCreditModifier(modifier = {}) {
|
|
5
4
|
const { customerStoredCredit, ...rest } = _.cloneDeep(modifier);
|
|
6
5
|
if (!customerStoredCredit) return null;
|
|
@@ -11,7 +10,6 @@ module.exports = ({ _, actions, utils }) => {
|
|
|
11
10
|
// create one
|
|
12
11
|
else {
|
|
13
12
|
creditModifier = actions.create({
|
|
14
|
-
_id: helpers.getObjectID(),
|
|
15
13
|
type: 'credit',
|
|
16
14
|
name: 'Customer stored credit',
|
|
17
15
|
direct: true,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
module.exports = ({ constants, actions, localization
|
|
2
|
-
const { helpers } = utils;
|
|
1
|
+
module.exports = ({ constants, actions, localization }) => {
|
|
3
2
|
const { Modifier } = constants;
|
|
4
3
|
|
|
5
4
|
return function createDiscountModifier(params) {
|
|
@@ -19,7 +18,6 @@ module.exports = ({ constants, actions, localization, utils }) => {
|
|
|
19
18
|
},
|
|
20
19
|
type: Modifier.Types.DISCOUNT,
|
|
21
20
|
name: `${name} ${Modifier.Types.DISCOUNT}`,
|
|
22
|
-
_id: helpers.getObjectID(),
|
|
23
21
|
});
|
|
24
22
|
};
|
|
25
23
|
};
|
|
@@ -7,14 +7,24 @@ module.exports = ({ _, utils, constants, actions }) => {
|
|
|
7
7
|
|
|
8
8
|
return function createIndirectModifier(
|
|
9
9
|
modifier,
|
|
10
|
-
options = { orderTotal: 0,
|
|
10
|
+
options = { orderTotal: 0, itemQuantity: 1, itemTotal: 0 }
|
|
11
11
|
) {
|
|
12
|
+
const maxAmount = actions.getProperty(modifier, 'maxAmount');
|
|
13
|
+
|
|
12
14
|
const { compute = {} } = modifier;
|
|
13
15
|
const { type, amount = 0 } = compute;
|
|
14
16
|
let modifierAmount = amount;
|
|
15
17
|
|
|
16
|
-
if (type === Modifier.Compute.Types.PERCENTAGE)
|
|
17
|
-
|
|
18
|
+
if (type === Modifier.Compute.Types.PERCENTAGE) {
|
|
19
|
+
const modifierAmountByPercentage = math.div(
|
|
20
|
+
math.mul(options.orderTotal, amount),
|
|
21
|
+
100
|
|
22
|
+
);
|
|
23
|
+
modifierAmount =
|
|
24
|
+
maxAmount !== null && modifierAmountByPercentage > maxAmount
|
|
25
|
+
? maxAmount
|
|
26
|
+
: modifierAmountByPercentage;
|
|
27
|
+
}
|
|
18
28
|
|
|
19
29
|
let amountToApply = 0;
|
|
20
30
|
|
|
@@ -34,8 +44,7 @@ module.exports = ({ _, utils, constants, actions }) => {
|
|
|
34
44
|
action: compute.action || Modifier.Compute.Actions.SUBTRACT,
|
|
35
45
|
},
|
|
36
46
|
});
|
|
37
|
-
if (
|
|
38
|
-
delete modifierToAdd.properties.maxAmount;
|
|
47
|
+
if (maxAmount !== null) delete modifierToAdd.properties.maxAmount;
|
|
39
48
|
|
|
40
49
|
return modifierToAdd;
|
|
41
50
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
module.exports = ({ constants, actions
|
|
1
|
+
module.exports = ({ constants, actions }) => {
|
|
2
2
|
const { Modifier } = constants;
|
|
3
|
-
const { helpers } = utils;
|
|
4
3
|
|
|
5
4
|
return function createSubscriptionModifier(params = {}) {
|
|
6
5
|
return actions.create({
|
|
@@ -12,7 +11,6 @@ module.exports = ({ constants, actions, utils }) => {
|
|
|
12
11
|
attributes: [Modifier.Attributes.SUBSCRIPTION],
|
|
13
12
|
name: Modifier.Attributes.SUBSCRIPTION,
|
|
14
13
|
type: Modifier.Types.DISCOUNT,
|
|
15
|
-
_id: helpers.getObjectID(),
|
|
16
14
|
...params,
|
|
17
15
|
});
|
|
18
16
|
};
|
package/lib/modifier/findById.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
module.exports = ({ actions
|
|
2
|
-
const { helpers } = utils;
|
|
1
|
+
module.exports = ({ actions }) => {
|
|
3
2
|
return function getItemModifiers({ modifiers, customer, cache }) {
|
|
4
3
|
const matchedModifiers = actions.getMatchTagsModifiers({
|
|
5
4
|
modifiers,
|
|
@@ -33,7 +32,6 @@ module.exports = ({ actions, utils }) => {
|
|
|
33
32
|
return itemModifiers.map(each => ({
|
|
34
33
|
...each,
|
|
35
34
|
modifierId: each.modifierId || each._id,
|
|
36
|
-
_id: helpers.getObjectID(),
|
|
37
35
|
}));
|
|
38
36
|
};
|
|
39
37
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module.exports = ({ utils }) => {
|
|
2
|
-
const { math
|
|
2
|
+
const { math } = utils;
|
|
3
3
|
|
|
4
4
|
const divideModifierAmount = ({
|
|
5
5
|
totalOriginOrder,
|
|
@@ -8,9 +8,9 @@ module.exports = ({ utils }) => {
|
|
|
8
8
|
}) =>
|
|
9
9
|
totalOriginOrder
|
|
10
10
|
? math.div(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
math.mul(modifierAmount, totalSplitedOrder || 0),
|
|
12
|
+
totalOriginOrder
|
|
13
|
+
)
|
|
14
14
|
: 0;
|
|
15
15
|
|
|
16
16
|
const splitCreditModifier = ({
|
|
@@ -27,7 +27,6 @@ module.exports = ({ utils }) => {
|
|
|
27
27
|
...modifier,
|
|
28
28
|
compute: {
|
|
29
29
|
...modifier.compute,
|
|
30
|
-
_id: helpers.getObjectID(),
|
|
31
30
|
},
|
|
32
31
|
properties: {
|
|
33
32
|
...modifier.properties,
|
|
@@ -50,7 +49,6 @@ module.exports = ({ utils }) => {
|
|
|
50
49
|
...modifier,
|
|
51
50
|
compute: {
|
|
52
51
|
...modifier.compute,
|
|
53
|
-
_id: helpers.getObjectID(),
|
|
54
52
|
amount,
|
|
55
53
|
},
|
|
56
54
|
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -105,8 +105,8 @@ const isDiscount = require('./isDiscount');
|
|
|
105
105
|
const isHidden = require('./isHidden');
|
|
106
106
|
const isIgnoreQuantity = require('./isIgnoreQuantity');
|
|
107
107
|
const isGratuity = require('./isGratuity');
|
|
108
|
-
const
|
|
109
|
-
const
|
|
108
|
+
const isPaymentMethodModifier = require('./isPaymentMethodModifier');
|
|
109
|
+
const isPaymentTypeModifier = require('./isPaymentTypeModifier');
|
|
110
110
|
const isPreferences = require('./isPreferences');
|
|
111
111
|
const isGroupOfValues = require('./isGroupOfValues');
|
|
112
112
|
const isCompact = require('./isCompact');
|
|
@@ -115,6 +115,14 @@ const isEditable = require('./isEditable');
|
|
|
115
115
|
const isCredit = require('./isCredit');
|
|
116
116
|
const purifyModifiers = require('./purifyModifiers');
|
|
117
117
|
const sort = require('./sort');
|
|
118
|
+
const isPaymentModifier = require('./isPaymentModifier');
|
|
119
|
+
const createPaymentModifier = require('./createPaymentModifier');
|
|
120
|
+
const isSubtract = require('./isSubtract');
|
|
121
|
+
const isFixed = require('./isFixed');
|
|
122
|
+
const isFixedDiscount = require('./isFixedDiscount');
|
|
123
|
+
const removeLocked = require('./removeLocked');
|
|
124
|
+
const hasItems = require('./hasItems');
|
|
125
|
+
const getLockedModifiers = require('./getLockedModifiers');
|
|
118
126
|
|
|
119
127
|
const modifierActions = (deps = {}) => {
|
|
120
128
|
const actions = {};
|
|
@@ -232,8 +240,8 @@ const modifierActions = (deps = {}) => {
|
|
|
232
240
|
isHidden: isHidden(innerDeps),
|
|
233
241
|
isIgnoreQuantity: isIgnoreQuantity(innerDeps),
|
|
234
242
|
isGratuity: isGratuity(innerDeps),
|
|
235
|
-
|
|
236
|
-
|
|
243
|
+
isPaymentMethodModifier: isPaymentMethodModifier(innerDeps),
|
|
244
|
+
isPaymentTypeModifier: isPaymentTypeModifier(innerDeps),
|
|
237
245
|
isPreferences: isPreferences(innerDeps),
|
|
238
246
|
isGroupOfValues: isGroupOfValues(innerDeps),
|
|
239
247
|
isCompact: isCompact(innerDeps),
|
|
@@ -242,6 +250,14 @@ const modifierActions = (deps = {}) => {
|
|
|
242
250
|
isIncluded: isIncluded(innerDeps),
|
|
243
251
|
purifyModifiers: purifyModifiers(innerDeps),
|
|
244
252
|
sort: sort(innerDeps),
|
|
253
|
+
isPaymentModifier: isPaymentModifier(innerDeps),
|
|
254
|
+
createPaymentModifier: createPaymentModifier(innerDeps),
|
|
255
|
+
isSubtract: isSubtract(innerDeps),
|
|
256
|
+
isFixed: isFixed(innerDeps),
|
|
257
|
+
isFixedDiscount: isFixedDiscount(innerDeps),
|
|
258
|
+
removeLocked: removeLocked(innerDeps),
|
|
259
|
+
hasItems: hasItems(innerDeps),
|
|
260
|
+
getLockedModifiers: getLockedModifiers(innerDeps),
|
|
245
261
|
});
|
|
246
262
|
|
|
247
263
|
Object.keys(freezedActions).forEach(actionName => {
|