@darkpos/pricing 1.0.114 → 1.0.116
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.test.js +1969 -1903
- package/__TEST__/modifier/hasModifier.test.js +15 -1
- package/lib/item/calculate.js +6 -5
- package/lib/item/index.js +2 -2
- package/lib/item/validateModifiers.js +9 -9
- package/lib/item/validateModifiersByQuantity.js +32 -0
- package/lib/modifier/index.js +2 -0
- package/lib/modifier/markModifierAsNotValid.js +10 -0
- package/lib/order/resetItem.js +0 -1
- package/package.json +2 -2
- package/lib/item/removeModifiersByQuantity.js +0 -36
|
@@ -1728,7 +1728,21 @@ describe('hasModifier Function', () => {
|
|
|
1728
1728
|
expect(updatedOrder2.items[1]).toMatchObject({
|
|
1729
1729
|
_id: 1,
|
|
1730
1730
|
itemId: 'ab',
|
|
1731
|
-
modifiers: [
|
|
1731
|
+
modifiers: [
|
|
1732
|
+
{
|
|
1733
|
+
_id: 'groupMod10',
|
|
1734
|
+
attributes: ['group'],
|
|
1735
|
+
properties: {
|
|
1736
|
+
group: {
|
|
1737
|
+
items: [{ _id: 'abc', name: 'related item abc', itemId: 'abc' }],
|
|
1738
|
+
modifiers: [{ _id: '123', name: 'related mod' }],
|
|
1739
|
+
},
|
|
1740
|
+
},
|
|
1741
|
+
conditions: { valid: true },
|
|
1742
|
+
compute: null,
|
|
1743
|
+
_computed: { amount: 0, description: 'undefined' },
|
|
1744
|
+
},
|
|
1745
|
+
],
|
|
1732
1746
|
price: 0,
|
|
1733
1747
|
total: 0,
|
|
1734
1748
|
subTotals: {
|
package/lib/item/calculate.js
CHANGED
|
@@ -4,7 +4,10 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
|
|
|
4
4
|
//
|
|
5
5
|
|
|
6
6
|
const calculateOne = (inputItem, opts = {}) => {
|
|
7
|
-
const item = _.cloneDeep(
|
|
7
|
+
const item = _.cloneDeep({
|
|
8
|
+
...inputItem,
|
|
9
|
+
quantity: math.max(0, Number(inputItem.quantity) || 0),
|
|
10
|
+
});
|
|
8
11
|
const amountToPay =
|
|
9
12
|
typeof opts.amountToPay === 'number' ? opts.amountToPay : 0;
|
|
10
13
|
const paymentMethod = opts.paymentMethod || null;
|
|
@@ -41,11 +44,9 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
const modifiers = [];
|
|
44
|
-
let { modifiers: itemModifiersPrev = [] } =
|
|
45
|
-
actions.removeModifiersByQuantity(item);
|
|
46
47
|
|
|
47
|
-
itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
|
|
48
|
-
modifiers:
|
|
48
|
+
const itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
|
|
49
|
+
modifiers: item.modifiers,
|
|
49
50
|
customer,
|
|
50
51
|
});
|
|
51
52
|
|
package/lib/item/index.js
CHANGED
|
@@ -43,7 +43,7 @@ const getTotalsDifference = require('./getTotalsDifference');
|
|
|
43
43
|
const getTotalNeareastDifference = require('./getTotalNeareastDifference');
|
|
44
44
|
const getNoteTags = require('./getNoteTags');
|
|
45
45
|
const getBasePrice = require('./getBasePrice');
|
|
46
|
-
const
|
|
46
|
+
const validateModifiersByQuantity = require('./validateModifiersByQuantity');
|
|
47
47
|
const getModifiersBySingleValueId = require('./getModifiersBySingleValueId');
|
|
48
48
|
const getLastLocation = require('./getLastLocation');
|
|
49
49
|
const hasAddModifiers = require('./hasAddModifiers');
|
|
@@ -126,7 +126,7 @@ const itemActions = (deps = {}) => {
|
|
|
126
126
|
getTotalNeareastDifference: getTotalNeareastDifference(innerDeps),
|
|
127
127
|
getNoteTags: getNoteTags(innerDeps),
|
|
128
128
|
getBasePrice: getBasePrice(innerDeps),
|
|
129
|
-
|
|
129
|
+
validateModifiersByQuantity: validateModifiersByQuantity(innerDeps),
|
|
130
130
|
getModifiersBySingleValueId: getModifiersBySingleValueId(innerDeps),
|
|
131
131
|
getLastLocation: getLastLocation(innerDeps),
|
|
132
132
|
hasAddModifiers: hasAddModifiers(innerDeps),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports = ({ modifierActions }) =>
|
|
1
|
+
module.exports = ({ modifierActions, actions }) =>
|
|
2
2
|
function validateModifiers({
|
|
3
3
|
item,
|
|
4
4
|
itemModifiers,
|
|
@@ -11,7 +11,7 @@ module.exports = ({ modifierActions }) =>
|
|
|
11
11
|
customer,
|
|
12
12
|
}) {
|
|
13
13
|
const validatedModifiers = [];
|
|
14
|
-
|
|
14
|
+
let firstValidatedModifiers = itemModifiers.map(each =>
|
|
15
15
|
modifierActions.validate(each, {
|
|
16
16
|
item,
|
|
17
17
|
startRequestDate,
|
|
@@ -24,6 +24,11 @@ module.exports = ({ modifierActions }) =>
|
|
|
24
24
|
})
|
|
25
25
|
);
|
|
26
26
|
|
|
27
|
+
firstValidatedModifiers = actions.validateModifiersByQuantity({
|
|
28
|
+
modifiers: firstValidatedModifiers,
|
|
29
|
+
quantity: item.quantity,
|
|
30
|
+
});
|
|
31
|
+
|
|
27
32
|
const isIdMatch = (mod, modifierId) => {
|
|
28
33
|
if (typeof mod === 'string') return mod === modifierId;
|
|
29
34
|
return mod._id === modifierId;
|
|
@@ -58,13 +63,8 @@ module.exports = ({ modifierActions }) =>
|
|
|
58
63
|
nextValidModifier.conditions.valid;
|
|
59
64
|
|
|
60
65
|
if (shouldInvalidateAddModifier || shouldInvalidateDelModifier) {
|
|
61
|
-
nextValidModifier =
|
|
62
|
-
|
|
63
|
-
conditions: {
|
|
64
|
-
...validModifier.conditions,
|
|
65
|
-
valid: false,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
66
|
+
nextValidModifier =
|
|
67
|
+
modifierActions.markModifierAsNotValid(nextValidModifier);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
if (
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module.exports = ({ modifierActions, utils }) =>
|
|
2
|
+
function validateModifiersByQuantity({ modifiers, quantity }) {
|
|
3
|
+
if (!modifiers || !Array.isArray(modifiers)) {
|
|
4
|
+
return [];
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const modifierCounts = {};
|
|
8
|
+
|
|
9
|
+
return modifiers.map(modifier => {
|
|
10
|
+
if (
|
|
11
|
+
modifierActions.isPaymentModifier(modifier) ||
|
|
12
|
+
modifierActions.isCalculatedPaymentModifier(modifier) ||
|
|
13
|
+
modifierActions.isGroupOfModifiers(modifier) ||
|
|
14
|
+
!modifier.modifierId ||
|
|
15
|
+
!modifierActions.isDirect(modifier) ||
|
|
16
|
+
modifierActions.isUnlimitedItemUse(modifier)
|
|
17
|
+
)
|
|
18
|
+
return modifier;
|
|
19
|
+
|
|
20
|
+
const count = modifierCounts[modifier.modifierId] || 0;
|
|
21
|
+
|
|
22
|
+
const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
|
|
23
|
+
const maxQuantity = utils.math.mul(quantity || 0, maxApplies) || quantity;
|
|
24
|
+
|
|
25
|
+
if (count < maxQuantity) {
|
|
26
|
+
modifierCounts[modifier.modifierId] = count + 1;
|
|
27
|
+
return modifier;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return modifierActions.markModifierAsNotValid(modifier);
|
|
31
|
+
});
|
|
32
|
+
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -177,6 +177,7 @@ const isAutoSplit = require('./isAutoSplit');
|
|
|
177
177
|
const isKeepRelatedItems = require('./isKeepRelatedItems');
|
|
178
178
|
const isSplitDepartment = require('./isSplitDepartment');
|
|
179
179
|
const isModifierValid = require('./isModifierValid');
|
|
180
|
+
const markModifierAsNotValid = require('./markModifierAsNotValid');
|
|
180
181
|
|
|
181
182
|
const modifierActions = (deps = {}) => {
|
|
182
183
|
const actions = {};
|
|
@@ -367,6 +368,7 @@ const modifierActions = (deps = {}) => {
|
|
|
367
368
|
isKeepRelatedItems: isKeepRelatedItems(innerDeps),
|
|
368
369
|
isSplitDepartment: isSplitDepartment(innerDeps),
|
|
369
370
|
isModifierValid: isModifierValid(innerDeps),
|
|
371
|
+
markModifierAsNotValid: markModifierAsNotValid(innerDeps),
|
|
370
372
|
});
|
|
371
373
|
|
|
372
374
|
Object.keys(freezedActions).forEach(actionName => {
|
package/lib/order/resetItem.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.116",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"supertest": "^6.2.3",
|
|
56
56
|
"supervisor": "^0.12.0"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "f61e54dc3685291e31f65a542255e54d6c0923fe"
|
|
59
59
|
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
module.exports = ({ modifierActions, utils }) =>
|
|
2
|
-
function removeModifiersByQuantity(item) {
|
|
3
|
-
if (!item || !Array.isArray(item.modifiers)) {
|
|
4
|
-
return item;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
const modifierCounts = {};
|
|
8
|
-
|
|
9
|
-
return {
|
|
10
|
-
...item,
|
|
11
|
-
modifiers: item.modifiers.filter(modifier => {
|
|
12
|
-
if (
|
|
13
|
-
modifierActions.isPaymentModifier(modifier) ||
|
|
14
|
-
modifierActions.isCalculatedPaymentModifier(modifier) ||
|
|
15
|
-
modifierActions.isGroupOfModifiers(modifier) ||
|
|
16
|
-
!modifier.modifierId ||
|
|
17
|
-
!modifierActions.isDirect(modifier) ||
|
|
18
|
-
modifierActions.isUnlimitedItemUse(modifier)
|
|
19
|
-
)
|
|
20
|
-
return true;
|
|
21
|
-
|
|
22
|
-
const count = modifierCounts[modifier.modifierId] || 0;
|
|
23
|
-
|
|
24
|
-
const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
|
|
25
|
-
const maxQuantity =
|
|
26
|
-
utils.math.mul(item.quantity || 0, maxApplies) || item.quantity;
|
|
27
|
-
|
|
28
|
-
if (count < maxQuantity) {
|
|
29
|
-
modifierCounts[modifier.modifierId] = count + 1;
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return false;
|
|
34
|
-
}),
|
|
35
|
-
};
|
|
36
|
-
};
|