@darkpos/pricing 1.0.72 → 1.0.75
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 +37 -12
- package/__TEST__/modifier.test.js +193 -0
- package/lib/index.js +3 -0
- package/lib/item/getInvalidRequiredModifiers.js +1 -1
- package/lib/item/hasModifier.js +34 -27
- package/lib/item/removeModifier.js +0 -1
- package/lib/modifier/getManualModifiers.js +64 -0
- package/lib/modifier/index.js +8 -0
- package/lib/modifier/removeGroupRelations.js +22 -0
- package/lib/modifier/shouldSpreadModifier.js +10 -0
- package/lib/modifier/spreadSingleGroupModifiers.js +30 -0
- package/lib/order/addItemModifier.js +1 -1
- package/lib/order/removeItem.js +0 -1
- package/package.json +4 -2
|
@@ -1664,15 +1664,6 @@ describe('hasModifier Function', () => {
|
|
|
1664
1664
|
modifiers: [],
|
|
1665
1665
|
};
|
|
1666
1666
|
|
|
1667
|
-
// const modifier = groupMod;
|
|
1668
|
-
// const relatedItems = [];
|
|
1669
|
-
|
|
1670
|
-
// const result = pricingService.item.hasModifier({
|
|
1671
|
-
// item,
|
|
1672
|
-
// modifier,
|
|
1673
|
-
// relatedItems,
|
|
1674
|
-
// });
|
|
1675
|
-
|
|
1676
1667
|
const { updatedOrder } = pricingService.order.addItem({
|
|
1677
1668
|
order,
|
|
1678
1669
|
item: {
|
|
@@ -1682,13 +1673,12 @@ describe('hasModifier Function', () => {
|
|
|
1682
1673
|
parentItemId: item.itemId,
|
|
1683
1674
|
parentId: item._id,
|
|
1684
1675
|
includeParent: true,
|
|
1685
|
-
|
|
1676
|
+
groupPath: ',groupMod10',
|
|
1686
1677
|
},
|
|
1687
1678
|
},
|
|
1688
1679
|
});
|
|
1689
1680
|
|
|
1690
1681
|
expect(updatedOrder.items.length).toBe(2);
|
|
1691
|
-
|
|
1692
1682
|
expect(updatedOrder.items[1]).toMatchObject({
|
|
1693
1683
|
_id: 1,
|
|
1694
1684
|
itemId: 'ab',
|
|
@@ -1728,7 +1718,7 @@ describe('hasModifier Function', () => {
|
|
|
1728
1718
|
parentItemId: item.itemId,
|
|
1729
1719
|
parentId: item._id,
|
|
1730
1720
|
includeParent: false,
|
|
1731
|
-
|
|
1721
|
+
groupPath: ',groupMod10',
|
|
1732
1722
|
},
|
|
1733
1723
|
},
|
|
1734
1724
|
});
|
|
@@ -1761,4 +1751,39 @@ describe('hasModifier Function', () => {
|
|
|
1761
1751
|
|
|
1762
1752
|
expect(result2).toBe(true);
|
|
1763
1753
|
});
|
|
1754
|
+
|
|
1755
|
+
test('hasModifier, matching by spreadFrom', () => {
|
|
1756
|
+
const groupMod = {
|
|
1757
|
+
_id: 'groupMod10',
|
|
1758
|
+
attributes: ['group'],
|
|
1759
|
+
properties: {
|
|
1760
|
+
group: {},
|
|
1761
|
+
},
|
|
1762
|
+
modifierId: 'abcd123',
|
|
1763
|
+
};
|
|
1764
|
+
|
|
1765
|
+
const spreadedManualModifier = {
|
|
1766
|
+
_id: 'abc',
|
|
1767
|
+
name: 'related item abc',
|
|
1768
|
+
itemId: 'abc',
|
|
1769
|
+
properties: {
|
|
1770
|
+
spreadFrom: groupMod.modifierId,
|
|
1771
|
+
},
|
|
1772
|
+
};
|
|
1773
|
+
|
|
1774
|
+
const item = {
|
|
1775
|
+
_id: 1,
|
|
1776
|
+
itemId: 'ab',
|
|
1777
|
+
modifiers: [groupMod, spreadedManualModifier],
|
|
1778
|
+
price: 500,
|
|
1779
|
+
total: 10000,
|
|
1780
|
+
};
|
|
1781
|
+
|
|
1782
|
+
const result = pricingService.item.hasModifier({
|
|
1783
|
+
item,
|
|
1784
|
+
modifier: groupMod,
|
|
1785
|
+
});
|
|
1786
|
+
|
|
1787
|
+
expect(result).toBe(true);
|
|
1788
|
+
});
|
|
1764
1789
|
});
|
|
@@ -680,4 +680,197 @@ describe('Modifier actions', () => {
|
|
|
680
680
|
})
|
|
681
681
|
);
|
|
682
682
|
});
|
|
683
|
+
|
|
684
|
+
describe('getManualModifiers', () => {
|
|
685
|
+
it('should generate manual modifiers correctly for dry cleaning tags', () => {
|
|
686
|
+
const modifier = {
|
|
687
|
+
_id: 'abc123',
|
|
688
|
+
name: 'Base Modifier',
|
|
689
|
+
group: 'colorGroup1',
|
|
690
|
+
properties: {
|
|
691
|
+
group: {
|
|
692
|
+
manualModifiers: 'Red Tag, White Shirt, White Shirt , Blue Label',
|
|
693
|
+
},
|
|
694
|
+
},
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
const relatedModifiers = [{ name: 'White Shirt' }];
|
|
698
|
+
|
|
699
|
+
const result = pricingService.modifier.getManualModifiers({
|
|
700
|
+
modifier,
|
|
701
|
+
relatedModifiers,
|
|
702
|
+
});
|
|
703
|
+
|
|
704
|
+
expect(result).toHaveLength(2);
|
|
705
|
+
expect(result).toEqual(
|
|
706
|
+
expect.arrayContaining([
|
|
707
|
+
expect.objectContaining({
|
|
708
|
+
name: 'Red Tag',
|
|
709
|
+
direct: true,
|
|
710
|
+
group: 'colorGroup1',
|
|
711
|
+
properties: {
|
|
712
|
+
isManual: true,
|
|
713
|
+
},
|
|
714
|
+
_id: 'ead6eb247a93bca8f802f9b2',
|
|
715
|
+
}),
|
|
716
|
+
expect.objectContaining({
|
|
717
|
+
name: 'Blue Label',
|
|
718
|
+
direct: true,
|
|
719
|
+
group: 'colorGroup1',
|
|
720
|
+
properties: {
|
|
721
|
+
isManual: true,
|
|
722
|
+
},
|
|
723
|
+
_id: '4e23edf8fa734884f4618003',
|
|
724
|
+
}),
|
|
725
|
+
])
|
|
726
|
+
);
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
it('should return an empty array if no manual modifiers are present', () => {
|
|
730
|
+
const modifier = {
|
|
731
|
+
_id: 'xyz789',
|
|
732
|
+
properties: {
|
|
733
|
+
group: {
|
|
734
|
+
manualModifiers: '',
|
|
735
|
+
},
|
|
736
|
+
},
|
|
737
|
+
};
|
|
738
|
+
|
|
739
|
+
const result = pricingService.modifier.getManualModifiers({
|
|
740
|
+
modifier,
|
|
741
|
+
relatedModifiers: [],
|
|
742
|
+
});
|
|
743
|
+
expect(result).toEqual([]);
|
|
744
|
+
});
|
|
745
|
+
|
|
746
|
+
it('should return an empty array if required fields are missing', () => {
|
|
747
|
+
expect(
|
|
748
|
+
pricingService.modifier.getManualModifiers({ modifier: null })
|
|
749
|
+
).toEqual([]);
|
|
750
|
+
expect(
|
|
751
|
+
pricingService.modifier.getManualModifiers({ modifier: {} })
|
|
752
|
+
).toEqual([]);
|
|
753
|
+
});
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
describe('spreadSingleGroupModifiers', () => {
|
|
757
|
+
it('should spread the modifiers from a group, including its manual modifiers', () => {
|
|
758
|
+
const modifier = {
|
|
759
|
+
_id: 'abc123',
|
|
760
|
+
name: 'Base Modifier',
|
|
761
|
+
group: 'colorGroup1',
|
|
762
|
+
attributes: ['group'],
|
|
763
|
+
properties: {
|
|
764
|
+
group: {
|
|
765
|
+
manualModifiers: 'Red Tag, White Shirt, White Shirt , Blue Label',
|
|
766
|
+
},
|
|
767
|
+
},
|
|
768
|
+
};
|
|
769
|
+
|
|
770
|
+
const result = pricingService.modifier.spreadSingleGroupModifiers([
|
|
771
|
+
modifier,
|
|
772
|
+
]);
|
|
773
|
+
|
|
774
|
+
expect(result).toStrictEqual([
|
|
775
|
+
{
|
|
776
|
+
name: 'Red Tag',
|
|
777
|
+
_id: 'ead6eb247a93bca8f802f9b2',
|
|
778
|
+
direct: true,
|
|
779
|
+
group: 'colorGroup1',
|
|
780
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
name: 'White Shirt',
|
|
784
|
+
_id: '4e23edf8fa734884f4618003',
|
|
785
|
+
direct: true,
|
|
786
|
+
group: 'colorGroup1',
|
|
787
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
788
|
+
},
|
|
789
|
+
{
|
|
790
|
+
name: 'Blue Label',
|
|
791
|
+
_id: '94b02ee7ba009b09a913a786',
|
|
792
|
+
direct: true,
|
|
793
|
+
group: 'colorGroup1',
|
|
794
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
795
|
+
},
|
|
796
|
+
]);
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
it('should not spread the modifiers from a group, as there are other modifiers with the same group', () => {
|
|
800
|
+
const modifier = {
|
|
801
|
+
_id: 'abc123',
|
|
802
|
+
name: 'Base Modifier',
|
|
803
|
+
group: 'colorGroup1',
|
|
804
|
+
attributes: ['group'],
|
|
805
|
+
properties: {
|
|
806
|
+
group: {
|
|
807
|
+
manualModifiers: 'Red Tag, White Shirt, White Shirt , Blue Label',
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
};
|
|
811
|
+
|
|
812
|
+
const otherModifier = {
|
|
813
|
+
_id: 'bcd123',
|
|
814
|
+
name: 'other Modifier',
|
|
815
|
+
group: 'colorGroup1',
|
|
816
|
+
};
|
|
817
|
+
|
|
818
|
+
const result = pricingService.modifier.spreadSingleGroupModifiers([
|
|
819
|
+
modifier,
|
|
820
|
+
otherModifier,
|
|
821
|
+
]);
|
|
822
|
+
|
|
823
|
+
expect(result).toStrictEqual([modifier, otherModifier]);
|
|
824
|
+
});
|
|
825
|
+
|
|
826
|
+
it('should spread the modifiers from a group, as there are no other modifiers with the same group', () => {
|
|
827
|
+
const modifier = {
|
|
828
|
+
_id: 'abc123',
|
|
829
|
+
name: 'Base Modifier',
|
|
830
|
+
group: 'colorGroup1',
|
|
831
|
+
attributes: ['group'],
|
|
832
|
+
properties: {
|
|
833
|
+
group: {
|
|
834
|
+
manualModifiers: 'Red Tag, White Shirt, White Shirt , Blue Label',
|
|
835
|
+
},
|
|
836
|
+
},
|
|
837
|
+
};
|
|
838
|
+
|
|
839
|
+
const otherModifier = {
|
|
840
|
+
_id: 'bcd123',
|
|
841
|
+
name: 'other Modifier',
|
|
842
|
+
group: 'Repair',
|
|
843
|
+
};
|
|
844
|
+
|
|
845
|
+
const result = pricingService.modifier.spreadSingleGroupModifiers([
|
|
846
|
+
modifier,
|
|
847
|
+
otherModifier,
|
|
848
|
+
]);
|
|
849
|
+
|
|
850
|
+
expect(result).toStrictEqual([
|
|
851
|
+
{
|
|
852
|
+
name: 'Red Tag',
|
|
853
|
+
_id: 'ead6eb247a93bca8f802f9b2',
|
|
854
|
+
direct: true,
|
|
855
|
+
group: 'colorGroup1',
|
|
856
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
name: 'White Shirt',
|
|
860
|
+
_id: '4e23edf8fa734884f4618003',
|
|
861
|
+
direct: true,
|
|
862
|
+
group: 'colorGroup1',
|
|
863
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
name: 'Blue Label',
|
|
867
|
+
_id: '94b02ee7ba009b09a913a786',
|
|
868
|
+
direct: true,
|
|
869
|
+
group: 'colorGroup1',
|
|
870
|
+
properties: { isManual: true, spreadFrom: 'abc123' },
|
|
871
|
+
},
|
|
872
|
+
{ _id: 'bcd123', name: 'other Modifier', group: 'Repair' },
|
|
873
|
+
]);
|
|
874
|
+
});
|
|
875
|
+
});
|
|
683
876
|
});
|
package/lib/index.js
CHANGED
|
@@ -2,6 +2,8 @@ const utils = require('@darkpos/utils');
|
|
|
2
2
|
const _ = require('lodash');
|
|
3
3
|
const moment = require('moment-timezone');
|
|
4
4
|
/** services */
|
|
5
|
+
const sha256 = require('crypto-js/sha256');
|
|
6
|
+
|
|
5
7
|
const makeStoreActions = require('./store');
|
|
6
8
|
const makeItemActions = require('./item');
|
|
7
9
|
const makeOrderActions = require('./order');
|
|
@@ -18,6 +20,7 @@ module.exports = session => {
|
|
|
18
20
|
utils,
|
|
19
21
|
localization,
|
|
20
22
|
_,
|
|
23
|
+
sha256,
|
|
21
24
|
moment,
|
|
22
25
|
constants,
|
|
23
26
|
};
|
|
@@ -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,43 @@
|
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
const isSpreadFrom = spreadFromId =>
|
|
11
|
+
spreadFromId &&
|
|
12
|
+
(spreadFromId === modifier.modifierId || spreadFromId === modifier._id);
|
|
13
|
+
|
|
14
|
+
if (modifierActions.isGroup(modifier)) {
|
|
15
|
+
const matchByRelatedModifier = item.modifiers.some(itemMod => {
|
|
16
|
+
if (
|
|
17
|
+
modifierActions.isGroup(itemMod) ||
|
|
18
|
+
!itemMod.properties ||
|
|
19
|
+
(!itemMod.properties.groupPath && !itemMod.properties.spreadFrom)
|
|
20
|
+
)
|
|
21
|
+
return false;
|
|
22
|
+
return (
|
|
23
|
+
isGroupPath(itemMod.properties.groupPath) ||
|
|
24
|
+
isSpreadFrom(itemMod.properties.spreadFrom)
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const matchByRelatedItems =
|
|
29
|
+
!!relatedItems &&
|
|
30
|
+
modifierActions.isGroup(modifier) &&
|
|
31
|
+
relatedItems.some(relatedItem =>
|
|
32
|
+
isGroupPath(
|
|
33
|
+
relatedItem.properties && relatedItem.properties.groupPath
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return matchByRelatedModifier || matchByRelatedItems;
|
|
20
38
|
}
|
|
21
39
|
|
|
22
|
-
|
|
40
|
+
return item.modifiers.some(
|
|
23
41
|
each => !modifierActions.isGroup(each) && each.modifierId === modifier._id
|
|
24
42
|
);
|
|
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
43
|
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module.exports = ({ sha256 }) => {
|
|
2
|
+
const csvToArray = input =>
|
|
3
|
+
input
|
|
4
|
+
.split(',')
|
|
5
|
+
.map(item => item.trim())
|
|
6
|
+
.filter(item => item !== '');
|
|
7
|
+
|
|
8
|
+
const cleanCSV = input => {
|
|
9
|
+
if (!input) return '';
|
|
10
|
+
return Array.from(
|
|
11
|
+
new Set(
|
|
12
|
+
input
|
|
13
|
+
.split(',')
|
|
14
|
+
.map(item => item.trim())
|
|
15
|
+
.filter(item => item !== '')
|
|
16
|
+
)
|
|
17
|
+
).join(',');
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return function getManualModifiers({ modifier, relatedModifiers }) {
|
|
21
|
+
if (
|
|
22
|
+
!modifier ||
|
|
23
|
+
!modifier.properties ||
|
|
24
|
+
!modifier.properties.group ||
|
|
25
|
+
!modifier.properties.group.manualModifiers
|
|
26
|
+
)
|
|
27
|
+
return [];
|
|
28
|
+
|
|
29
|
+
const otherModifiers = Array.isArray(relatedModifiers)
|
|
30
|
+
? relatedModifiers
|
|
31
|
+
: [];
|
|
32
|
+
|
|
33
|
+
const manualModifiersCsv = modifier.properties.group.manualModifiers;
|
|
34
|
+
const modifiers = [];
|
|
35
|
+
|
|
36
|
+
if (manualModifiersCsv) {
|
|
37
|
+
const manualModifiersNames = csvToArray(
|
|
38
|
+
cleanCSV(manualModifiersCsv)
|
|
39
|
+
).filter(modName => otherModifiers.every(mod => mod.name !== modName));
|
|
40
|
+
|
|
41
|
+
modifiers.push(
|
|
42
|
+
...manualModifiersNames.map((each, index) => {
|
|
43
|
+
const hash = sha256(`${index}-${modifier._id}`).toString();
|
|
44
|
+
|
|
45
|
+
const _id = hash.substring(0, 24);
|
|
46
|
+
|
|
47
|
+
const manualModifier = {
|
|
48
|
+
name: each,
|
|
49
|
+
_id,
|
|
50
|
+
direct: true,
|
|
51
|
+
group: modifier.group,
|
|
52
|
+
properties: {
|
|
53
|
+
isManual: true,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return manualModifier;
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return modifiers;
|
|
63
|
+
};
|
|
64
|
+
};
|
package/lib/modifier/index.js
CHANGED
|
@@ -142,6 +142,10 @@ 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');
|
|
146
|
+
const getManualModifiers = require('./getManualModifiers');
|
|
147
|
+
const shouldSpreadModifier = require('./shouldSpreadModifier');
|
|
148
|
+
const spreadSingleGroupModifiers = require('./spreadSingleGroupModifiers');
|
|
145
149
|
|
|
146
150
|
const modifierActions = (deps = {}) => {
|
|
147
151
|
const actions = {};
|
|
@@ -297,6 +301,10 @@ const modifierActions = (deps = {}) => {
|
|
|
297
301
|
isFixedOverride: isFixedOverride(innerDeps),
|
|
298
302
|
isLocked: isLocked(innerDeps),
|
|
299
303
|
hasAddModifier: hasAddModifier(innerDeps),
|
|
304
|
+
removeGroupRelations: removeGroupRelations(innerDeps),
|
|
305
|
+
getManualModifiers: getManualModifiers(innerDeps),
|
|
306
|
+
shouldSpreadModifier: shouldSpreadModifier(innerDeps),
|
|
307
|
+
spreadSingleGroupModifiers: spreadSingleGroupModifiers(innerDeps),
|
|
300
308
|
});
|
|
301
309
|
|
|
302
310
|
Object.keys(freezedActions).forEach(actionName => {
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function shouldSpreadModifier(modifier, all) {
|
|
3
|
+
return (
|
|
4
|
+
actions.isGroupOfModifiers(modifier) &&
|
|
5
|
+
!actions.enableAutoPopup(modifier) &&
|
|
6
|
+
!actions.isGroupOfItems(modifier) &&
|
|
7
|
+
modifier.group &&
|
|
8
|
+
!all.some(m => m._id !== modifier._id && m.group === modifier.group)
|
|
9
|
+
);
|
|
10
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function spreadSingleGroupModifiers(modifiersParam) {
|
|
3
|
+
const result = [];
|
|
4
|
+
|
|
5
|
+
if (!Array.isArray(modifiersParam)) return [];
|
|
6
|
+
|
|
7
|
+
modifiersParam.forEach(modifier => {
|
|
8
|
+
if (actions.shouldSpreadModifier(modifier, modifiersParam)) {
|
|
9
|
+
const relatedModifiers = actions.getGroupRelatedModifiers({
|
|
10
|
+
modifier,
|
|
11
|
+
});
|
|
12
|
+
const manual = actions.getManualModifiers({
|
|
13
|
+
modifier,
|
|
14
|
+
relatedModifiers,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const nextModifiers = [...relatedModifiers, ...manual].map(mod => ({
|
|
18
|
+
...mod,
|
|
19
|
+
properties: {
|
|
20
|
+
...(mod.properties || {}),
|
|
21
|
+
spreadFrom: modifier._id,
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
result.push(...nextModifiers);
|
|
25
|
+
} else {
|
|
26
|
+
result.push(modifier);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
@@ -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/removeItem.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.75",
|
|
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",
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
36
|
"@darkpos/utils": "^1.0.11",
|
|
37
|
+
"crypto-js": "^4.2.0",
|
|
36
38
|
"lodash": "^4.17.21",
|
|
37
39
|
"moment-timezone": "^0.5.34"
|
|
38
40
|
},
|
|
@@ -49,5 +51,5 @@
|
|
|
49
51
|
"supertest": "^6.2.3",
|
|
50
52
|
"supervisor": "^0.12.0"
|
|
51
53
|
},
|
|
52
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "b0331c1d450926e0feb4f79146c6dd4f81e5af61"
|
|
53
55
|
}
|