@darkpos/pricing 1.0.71 → 1.0.73
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 +8 -9
- package/__TEST__/manualTest.test.js +91 -0
- package/__TEST__/modifier/getInvalidRequiredModifiers.test.js +9 -3605
- package/__TEST__/modifier/hasModifier.test.js +68 -11
- package/lib/item/getInvalidRequiredModifiers.js +1 -1
- package/lib/item/hasModifier.js +27 -27
- package/lib/item/removeModifier.js +0 -1
- package/lib/modifier/index.js +2 -0
- package/lib/modifier/isGroupOfModifiers.js +2 -1
- package/lib/modifier/removeGroupRelations.js +22 -0
- package/lib/order/addItem.js +7 -3
- package/lib/order/addItemModifier.js +1 -1
- package/lib/order/index.js +2 -0
- package/lib/order/removeItem.js +0 -1
- package/lib/order/resetItem.js +25 -0
- package/package.json +3 -2
|
@@ -1651,22 +1651,19 @@ describe('hasModifier Function', () => {
|
|
|
1651
1651
|
},
|
|
1652
1652
|
};
|
|
1653
1653
|
|
|
1654
|
-
const item = {
|
|
1654
|
+
const item = {
|
|
1655
|
+
_id: 1,
|
|
1656
|
+
itemId: 'ab',
|
|
1657
|
+
modifiers: [groupMod],
|
|
1658
|
+
price: 500,
|
|
1659
|
+
total: 10000,
|
|
1660
|
+
};
|
|
1655
1661
|
|
|
1656
1662
|
const order = {
|
|
1657
1663
|
items: [item],
|
|
1658
1664
|
modifiers: [],
|
|
1659
1665
|
};
|
|
1660
1666
|
|
|
1661
|
-
// const modifier = groupMod;
|
|
1662
|
-
// const relatedItems = [];
|
|
1663
|
-
|
|
1664
|
-
// const result = pricingService.item.hasModifier({
|
|
1665
|
-
// item,
|
|
1666
|
-
// modifier,
|
|
1667
|
-
// relatedItems,
|
|
1668
|
-
// });
|
|
1669
|
-
|
|
1670
1667
|
const { updatedOrder } = pricingService.order.addItem({
|
|
1671
1668
|
order,
|
|
1672
1669
|
item: {
|
|
@@ -1676,12 +1673,30 @@ describe('hasModifier Function', () => {
|
|
|
1676
1673
|
parentItemId: item.itemId,
|
|
1677
1674
|
parentId: item._id,
|
|
1678
1675
|
includeParent: true,
|
|
1679
|
-
|
|
1676
|
+
groupPath: ',groupMod10',
|
|
1680
1677
|
},
|
|
1681
1678
|
},
|
|
1682
1679
|
});
|
|
1683
1680
|
|
|
1684
1681
|
expect(updatedOrder.items.length).toBe(2);
|
|
1682
|
+
expect(updatedOrder.items[1]).toMatchObject({
|
|
1683
|
+
_id: 1,
|
|
1684
|
+
itemId: 'ab',
|
|
1685
|
+
modifiers: [
|
|
1686
|
+
{
|
|
1687
|
+
_id: 'groupMod10',
|
|
1688
|
+
attributes: ['group'],
|
|
1689
|
+
properties: {
|
|
1690
|
+
group: {
|
|
1691
|
+
items: [{ _id: 'abc', name: 'related item abc', itemId: 'abc' }],
|
|
1692
|
+
modifiers: [{ _id: '123', name: 'related mod' }],
|
|
1693
|
+
},
|
|
1694
|
+
},
|
|
1695
|
+
},
|
|
1696
|
+
],
|
|
1697
|
+
price: 500,
|
|
1698
|
+
total: 10000,
|
|
1699
|
+
});
|
|
1685
1700
|
|
|
1686
1701
|
const result = pricingService.item.hasModifier({
|
|
1687
1702
|
item: updatedOrder.items[1],
|
|
@@ -1693,5 +1708,47 @@ describe('hasModifier Function', () => {
|
|
|
1693
1708
|
});
|
|
1694
1709
|
|
|
1695
1710
|
expect(result).toBe(true);
|
|
1711
|
+
|
|
1712
|
+
const { updatedOrder: updatedOrder2 } = pricingService.order.addItem({
|
|
1713
|
+
order,
|
|
1714
|
+
item: {
|
|
1715
|
+
...relatedModItem,
|
|
1716
|
+
properties: {
|
|
1717
|
+
relatedItem: true,
|
|
1718
|
+
parentItemId: item.itemId,
|
|
1719
|
+
parentId: item._id,
|
|
1720
|
+
includeParent: false,
|
|
1721
|
+
groupPath: ',groupMod10',
|
|
1722
|
+
},
|
|
1723
|
+
},
|
|
1724
|
+
});
|
|
1725
|
+
|
|
1726
|
+
expect(updatedOrder2.items.length).toBe(2);
|
|
1727
|
+
|
|
1728
|
+
expect(updatedOrder2.items[1]).toMatchObject({
|
|
1729
|
+
_id: 1,
|
|
1730
|
+
itemId: 'ab',
|
|
1731
|
+
modifiers: [],
|
|
1732
|
+
price: 0,
|
|
1733
|
+
total: 0,
|
|
1734
|
+
subTotals: {
|
|
1735
|
+
_included: 0,
|
|
1736
|
+
_xincluded: 0,
|
|
1737
|
+
_direct: 0,
|
|
1738
|
+
_xdirect: 0,
|
|
1739
|
+
_actual: 0,
|
|
1740
|
+
},
|
|
1741
|
+
});
|
|
1742
|
+
|
|
1743
|
+
const result2 = pricingService.item.hasModifier({
|
|
1744
|
+
item: updatedOrder2.items[1],
|
|
1745
|
+
modifier: groupMod,
|
|
1746
|
+
relatedItems: pricingService.order.getRelatedItems({
|
|
1747
|
+
order: updatedOrder2,
|
|
1748
|
+
item: updatedOrder2.items[1],
|
|
1749
|
+
}),
|
|
1750
|
+
});
|
|
1751
|
+
|
|
1752
|
+
expect(result2).toBe(true);
|
|
1696
1753
|
});
|
|
1697
1754
|
});
|
|
@@ -6,7 +6,7 @@ module.exports = ({ modifierActions, actions }) =>
|
|
|
6
6
|
item.modifiers.forEach(modifier => {
|
|
7
7
|
if (
|
|
8
8
|
modifierActions.isRequired(modifier) &&
|
|
9
|
-
modifierActions.
|
|
9
|
+
modifierActions.isGroup(modifier) &&
|
|
10
10
|
!actions.hasModifier({ item, modifier, relatedItems })
|
|
11
11
|
) {
|
|
12
12
|
invalidModifiers.push(modifier);
|
package/lib/item/hasModifier.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
module.exports = ({ modifierActions }) =>
|
|
2
|
-
function hasModifier({ item, modifier, relatedItems
|
|
2
|
+
function hasModifier({ item, modifier, relatedItems }) {
|
|
3
3
|
if (!item || !modifier || !item.modifiers) return false;
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const isGroupPath = groupPath =>
|
|
6
|
+
groupPath &&
|
|
7
|
+
(groupPath.includes(modifier.modifierId) ||
|
|
8
|
+
groupPath.includes(modifier._id));
|
|
6
9
|
|
|
7
|
-
if (modifierActions.
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
if (modifierActions.isGroup(modifier)) {
|
|
11
|
+
const matchByRelatedModifier = item.modifiers.some(itemMod => {
|
|
12
|
+
if (
|
|
13
|
+
modifierActions.isGroup(itemMod) ||
|
|
14
|
+
!itemMod.properties ||
|
|
15
|
+
!itemMod.properties.groupPath
|
|
16
|
+
)
|
|
17
|
+
return false;
|
|
18
|
+
return isGroupPath(itemMod.properties.groupPath);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const matchByRelatedItems =
|
|
22
|
+
!!relatedItems &&
|
|
23
|
+
modifierActions.isGroup(modifier) &&
|
|
24
|
+
relatedItems.some(relatedItem =>
|
|
25
|
+
isGroupPath(
|
|
26
|
+
relatedItem.properties && relatedItem.properties.groupPath
|
|
27
|
+
)
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
return matchByRelatedModifier || matchByRelatedItems;
|
|
20
31
|
}
|
|
21
32
|
|
|
22
|
-
|
|
33
|
+
return item.modifiers.some(
|
|
23
34
|
each => !modifierActions.isGroup(each) && each.modifierId === modifier._id
|
|
24
35
|
);
|
|
25
|
-
|
|
26
|
-
const matchByRelatedItems =
|
|
27
|
-
!!relatedItems &&
|
|
28
|
-
modifierActions.isGroupOfItems(originalMod) &&
|
|
29
|
-
relatedItems.some(relatedItem =>
|
|
30
|
-
originalMod.properties.group.items.some(
|
|
31
|
-
modItem => modItem._id === relatedItem.properties.relatedItemId
|
|
32
|
-
)
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
return matchByModifier || matchByRelatedItems;
|
|
36
36
|
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -142,6 +142,7 @@ const isCompute = require('./isCompute');
|
|
|
142
142
|
const isFixedOverride = require('./isFixedOverride');
|
|
143
143
|
const isLocked = require('./isLocked');
|
|
144
144
|
const hasAddModifier = require('./hasAddModifier');
|
|
145
|
+
const removeGroupRelations = require('./removeGroupRelations');
|
|
145
146
|
|
|
146
147
|
const modifierActions = (deps = {}) => {
|
|
147
148
|
const actions = {};
|
|
@@ -297,6 +298,7 @@ const modifierActions = (deps = {}) => {
|
|
|
297
298
|
isFixedOverride: isFixedOverride(innerDeps),
|
|
298
299
|
isLocked: isLocked(innerDeps),
|
|
299
300
|
hasAddModifier: hasAddModifier(innerDeps),
|
|
301
|
+
removeGroupRelations: removeGroupRelations(innerDeps),
|
|
300
302
|
});
|
|
301
303
|
|
|
302
304
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -6,7 +6,8 @@ module.exports = ({ actions, constants }) => {
|
|
|
6
6
|
actions.hasAttribute(modifier, Modifier.Attributes.GROUP) &&
|
|
7
7
|
properties &&
|
|
8
8
|
properties.group &&
|
|
9
|
-
(properties.group.modifiers || []).length
|
|
9
|
+
((properties.group.modifiers || []).length ||
|
|
10
|
+
!!properties.group.manualModifiers)
|
|
10
11
|
);
|
|
11
12
|
};
|
|
12
13
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function removeGroupRelations(modifier) {
|
|
3
|
+
if (
|
|
4
|
+
!actions.isGroup(modifier) ||
|
|
5
|
+
!modifier.properties ||
|
|
6
|
+
!modifier.properties.group
|
|
7
|
+
)
|
|
8
|
+
return modifier;
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
...modifier,
|
|
12
|
+
properties: {
|
|
13
|
+
...modifier.properties,
|
|
14
|
+
group: {
|
|
15
|
+
...modifier.properties.group,
|
|
16
|
+
modifiers: [],
|
|
17
|
+
items: [],
|
|
18
|
+
manualModifiers: '',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
};
|
package/lib/order/addItem.js
CHANGED
|
@@ -168,8 +168,8 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
168
168
|
if (!_.isEmpty(inheritedModifiers))
|
|
169
169
|
modifiersToAdd.push(...inheritedModifiers);
|
|
170
170
|
// Remove parent if it is only a repair Item
|
|
171
|
-
if (!itemActions.isParentIncluded(orderItem)) {
|
|
172
|
-
order = actions.
|
|
171
|
+
if (!itemActions.isParentIncluded(orderItem) && !!parent) {
|
|
172
|
+
order = actions.resetItem({ order, item: parent });
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -249,7 +249,11 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
|
|
|
249
249
|
nextOrder.items.splice(idxToRemove, 1);
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
if (
|
|
252
|
+
if (
|
|
253
|
+
itemActions.isRelatedItem(item) &&
|
|
254
|
+
itemActions.hasAddModifiers(item) &&
|
|
255
|
+
itemActions.isParentIncluded(item)
|
|
256
|
+
) {
|
|
253
257
|
const parentItem = itemActions.getParentItem(nextOrder.items, item);
|
|
254
258
|
const parentIndex = actions.getItemIndex({
|
|
255
259
|
order: nextOrder,
|
|
@@ -92,7 +92,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
|
|
|
92
92
|
originalItem,
|
|
93
93
|
onConditionsNotMet,
|
|
94
94
|
}) => {
|
|
95
|
-
const modifier = _modifier; // to avoid no param reassign lint rule
|
|
95
|
+
const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
|
|
96
96
|
let item = { ...itemProp };
|
|
97
97
|
const compute = getComputeModField(modifier);
|
|
98
98
|
const conditionsBag = areConditionsMet(item, modifier.conditions);
|
package/lib/order/index.js
CHANGED
|
@@ -88,6 +88,7 @@ const applyPayment = require('./applyPayment');
|
|
|
88
88
|
const getBalance = require('./getBalance');
|
|
89
89
|
const getLastLocation = require('./getLastLocation');
|
|
90
90
|
const getModifierRelations = require('./getModifierRelations');
|
|
91
|
+
const resetItem = require('./resetItem');
|
|
91
92
|
|
|
92
93
|
const orderActions = (deps = {}) => {
|
|
93
94
|
const actions = {};
|
|
@@ -187,6 +188,7 @@ const orderActions = (deps = {}) => {
|
|
|
187
188
|
getOrdersBalance: getOrdersBalance(innerDeps),
|
|
188
189
|
getLastLocation: getLastLocation(innerDeps),
|
|
189
190
|
getModifierRelations: getModifierRelations(innerDeps),
|
|
191
|
+
resetItem: resetItem(innerDeps),
|
|
190
192
|
});
|
|
191
193
|
|
|
192
194
|
Object.keys(freezedActions).forEach(actionName => {
|
package/lib/order/removeItem.js
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module.exports = ({ itemActions }) =>
|
|
2
|
+
function resetItem({ item, order }) {
|
|
3
|
+
if (!item) return undefined;
|
|
4
|
+
|
|
5
|
+
const itemReset = itemActions.calculate(
|
|
6
|
+
{
|
|
7
|
+
...item,
|
|
8
|
+
price: 0,
|
|
9
|
+
modifiers: [],
|
|
10
|
+
},
|
|
11
|
+
{}
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const nextItems = order.items;
|
|
15
|
+
const parentIndex = order.items.findIndex(
|
|
16
|
+
eachItem => eachItem._id === itemReset._id
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
nextItems.splice(parentIndex, 1, itemReset);
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
...order,
|
|
23
|
+
items: nextItems,
|
|
24
|
+
};
|
|
25
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.73",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"test:validateConditions": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/validateConditionsCalculate.test.js",
|
|
18
18
|
"test:hasModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/hasModifier.test.js",
|
|
19
19
|
"test:item": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/item.test.js",
|
|
20
|
+
"test:manualTest": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/manualTest.test.js",
|
|
20
21
|
"test:split": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/split.test.js",
|
|
21
22
|
"test:getModifierTags": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/item/getModifierTags.test.js",
|
|
22
23
|
"test:createIndirectModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/createIndirectModifier.test.js",
|
|
@@ -49,5 +50,5 @@
|
|
|
49
50
|
"supertest": "^6.2.3",
|
|
50
51
|
"supervisor": "^0.12.0"
|
|
51
52
|
},
|
|
52
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "276e28f676960107d60027bc70e22f698e6e124e"
|
|
53
54
|
}
|