@darkpos/pricing 1.0.44 → 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 -85
- package/__TEST__/mocks/scripts/calculate-partially-paid/index.js +2 -2
- package/__TEST__/mocks/scripts/calculate-unpaid/index.js +2 -2
- package/__TEST__/order/manualSplit.test.js +104 -0
- package/__TEST__/order/order-payment-modifier.test.js +1117 -0
- package/__TEST__/order/order.test.js +50 -104
- package/__TEST__/order/pickEndDate.test.js +7 -153
- package/__TEST__/order/validateConditionsCalculate.test.js +42 -43
- package/lib/item/calculate.js +67 -9
- package/lib/item/getAmounts.js +14 -0
- package/lib/item/getBalance.js +0 -1
- 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 +3 -13
- 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 +19 -4
- 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/sort.js +28 -0
- package/lib/order/applyPayment.js +61 -0
- package/lib/order/calculate.js +34 -16
- package/lib/order/getBalance.js +0 -1
- package/lib/order/getOrdersBalance.js +8 -0
- package/lib/order/index.js +9 -8
- package/lib/order/manualSplit.js +34 -0
- package/lib/order/manualSplitByQuantity.js +50 -0
- package/lib/store/pickEndDate.js +2 -2
- 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 -13
- package/lib/modifier/createPaymentModifier.js +0 -12
- package/lib/modifier/getLockedModifiers.js +0 -5
- package/lib/order/markModifiersAsLocked.js +0 -14
- package/lib/order/removeModifiersWithPaymentMethods.js +0 -28
- package/lib/order/removeModifiersWithPaymentTypes.js +0 -26
|
@@ -1,31 +1,52 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
const usePricing = require('../../lib/index');
|
|
2
|
+
|
|
3
|
+
const pricingService = usePricing();
|
|
4
|
+
|
|
5
|
+
const { getItemModifiersDescription } = pricingService.item;
|
|
6
|
+
const mockModifier = {
|
|
7
|
+
_id: '67106323db3c71afb52b07b7',
|
|
8
|
+
attributes: ['override'],
|
|
9
|
+
modifierId: '66e0a6c2f0f1df1a20a00bbf',
|
|
10
|
+
_parentId: null,
|
|
11
|
+
locked: false,
|
|
12
|
+
name: 'ItemsPriceManual',
|
|
13
|
+
sku: '',
|
|
14
|
+
description: '',
|
|
15
|
+
group: '',
|
|
16
|
+
type: '',
|
|
17
|
+
tags: ['default'],
|
|
18
|
+
order: 0,
|
|
19
|
+
included: false,
|
|
20
|
+
direct: true,
|
|
21
|
+
hidden: false,
|
|
22
|
+
print: true,
|
|
23
|
+
required: false,
|
|
24
|
+
recommended: false,
|
|
25
|
+
default: false,
|
|
26
|
+
code: '',
|
|
27
|
+
properties: {
|
|
28
|
+
override: {
|
|
29
|
+
field: 'price',
|
|
30
|
+
type: 'manual',
|
|
20
31
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
group: {
|
|
33
|
+
modifiers: [],
|
|
34
|
+
items: [],
|
|
35
|
+
},
|
|
36
|
+
sort: null,
|
|
37
|
+
},
|
|
38
|
+
_computed: {
|
|
39
|
+
amount: 0,
|
|
40
|
+
description: 'ItemsPriceManual ($0.00)',
|
|
41
|
+
},
|
|
42
|
+
addModifiers: [],
|
|
43
|
+
delModifiers: [],
|
|
44
|
+
conditions: null,
|
|
45
|
+
compute: null,
|
|
46
|
+
_createdAt: '2024-10-17T01:12:34.370Z',
|
|
47
|
+
_updatedAt: '2024-10-17T01:12:34.370Z',
|
|
48
|
+
};
|
|
49
|
+
describe('getItemModifiersDescription Function', () => {
|
|
29
50
|
beforeEach(() => {
|
|
30
51
|
jest.clearAllMocks();
|
|
31
52
|
});
|
|
@@ -39,51 +60,32 @@ describe('getItemModifiersDescription Function', () => {
|
|
|
39
60
|
const item = {
|
|
40
61
|
modifiers: [
|
|
41
62
|
{
|
|
63
|
+
...mockModifier,
|
|
42
64
|
_id: 'mod1',
|
|
43
65
|
name: 'Modifier 1',
|
|
44
66
|
_computed: { description: 'Desc 1' },
|
|
45
67
|
},
|
|
46
|
-
{ _id: 'mod2', name: 'Modifier 2' },
|
|
68
|
+
{ ...mockModifier, hidden: true, _id: 'mod2', name: 'Modifier 2' },
|
|
47
69
|
],
|
|
48
70
|
};
|
|
49
71
|
|
|
50
|
-
modifierActions.isHidden
|
|
51
|
-
.mockReturnValueOnce(false)
|
|
52
|
-
.mockReturnValueOnce(false);
|
|
53
|
-
modifierActions.isAmountOverride
|
|
54
|
-
.mockReturnValueOnce(false)
|
|
55
|
-
.mockReturnValueOnce(false);
|
|
56
|
-
modifierActions.isDepartment
|
|
57
|
-
.mockReturnValueOnce(false)
|
|
58
|
-
.mockReturnValueOnce(false);
|
|
59
|
-
modifierActions.isDirect
|
|
60
|
-
.mockReturnValueOnce(true)
|
|
61
|
-
.mockReturnValueOnce(true);
|
|
62
|
-
modifierActions.isGroupOfValues
|
|
63
|
-
.mockReturnValueOnce(false)
|
|
64
|
-
.mockReturnValueOnce(false);
|
|
65
|
-
modifierActions.isValid
|
|
66
|
-
.mockReturnValueOnce(false)
|
|
67
|
-
.mockReturnValueOnce(false);
|
|
68
|
-
modifierActions.getNotesToModifierTags.mockReturnValueOnce([
|
|
69
|
-
{ label: 'Desc 1', value: 'mod1' },
|
|
70
|
-
]);
|
|
71
|
-
|
|
72
72
|
const result = getItemModifiersDescription(item);
|
|
73
73
|
|
|
74
|
-
expect(result).toEqual([
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
expect(result).toEqual([
|
|
75
|
+
{
|
|
76
|
+
label: 'Desc 1',
|
|
77
|
+
value: 'mod1',
|
|
78
|
+
data: item.modifiers[0],
|
|
79
|
+
quantity: 1,
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
81
82
|
});
|
|
82
83
|
|
|
83
84
|
test('should handle selected override options in the modifier', () => {
|
|
84
85
|
const item = {
|
|
85
86
|
modifiers: [
|
|
86
87
|
{
|
|
88
|
+
...mockModifier,
|
|
87
89
|
_id: 'mod1',
|
|
88
90
|
name: 'Modifier 1',
|
|
89
91
|
compute: { amount: 100 },
|
|
@@ -92,19 +94,6 @@ describe('getItemModifiersDescription Function', () => {
|
|
|
92
94
|
],
|
|
93
95
|
};
|
|
94
96
|
|
|
95
|
-
modifierActions.isHidden.mockReturnValueOnce(false);
|
|
96
|
-
modifierActions.isValid.mockReturnValueOnce(false);
|
|
97
|
-
modifierActions.isAmountOverride.mockReturnValueOnce(false);
|
|
98
|
-
modifierActions.isDepartment.mockReturnValueOnce(false);
|
|
99
|
-
modifierActions.isDirect.mockReturnValueOnce(true);
|
|
100
|
-
modifierActions.getNotesToModifierTags.mockReturnValueOnce([
|
|
101
|
-
{
|
|
102
|
-
label: 'Modifier 1 100 kg',
|
|
103
|
-
value: 'mod1',
|
|
104
|
-
data: item.modifiers[0],
|
|
105
|
-
quantity: 0,
|
|
106
|
-
},
|
|
107
|
-
]);
|
|
108
97
|
const result = getItemModifiersDescription(item);
|
|
109
98
|
|
|
110
99
|
expect(result).toEqual([
|
|
@@ -118,9 +107,16 @@ describe('getItemModifiersDescription Function', () => {
|
|
|
118
107
|
});
|
|
119
108
|
|
|
120
109
|
test('should group modifiers when groupModifiers setting is true', () => {
|
|
110
|
+
const pricingService2 = usePricing({
|
|
111
|
+
store: { _settings: { order: { groupModifiers: true } } },
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const { getItemModifiersDescription: getItemModifiersDescription2 } =
|
|
115
|
+
pricingService2.item;
|
|
121
116
|
const item = {
|
|
122
117
|
modifiers: [
|
|
123
118
|
{
|
|
119
|
+
...mockModifier,
|
|
124
120
|
_id: 'mod1',
|
|
125
121
|
name: 'Modifier 1',
|
|
126
122
|
_computed: { description: 'Desc 1' },
|
|
@@ -128,21 +124,15 @@ describe('getItemModifiersDescription Function', () => {
|
|
|
128
124
|
],
|
|
129
125
|
};
|
|
130
126
|
|
|
131
|
-
|
|
132
|
-
modifierActions.isHidden.mockReturnValueOnce(false);
|
|
133
|
-
modifierActions.isValid.mockReturnValueOnce(false);
|
|
134
|
-
modifierActions.isAmountOverride.mockReturnValueOnce(false);
|
|
135
|
-
modifierActions.isDepartment.mockReturnValueOnce(false);
|
|
136
|
-
modifierActions.isDirect.mockReturnValueOnce(true);
|
|
137
|
-
modifierActions.getGroupedModifiers.mockReturnValueOnce([
|
|
138
|
-
{ label: 'Grouped Modifier', value: 'mod1' },
|
|
139
|
-
]);
|
|
140
|
-
modifierActions.getNotesToModifierTags.mockReturnValueOnce([
|
|
141
|
-
{ label: 'Grouped Modifier', value: 'mod1' },
|
|
142
|
-
]);
|
|
127
|
+
const result = getItemModifiersDescription2(item);
|
|
143
128
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
129
|
+
expect(result).toEqual([
|
|
130
|
+
{
|
|
131
|
+
label: '1 Desc 1',
|
|
132
|
+
value: 'mod1',
|
|
133
|
+
quantity: 1,
|
|
134
|
+
data: item.modifiers[0],
|
|
135
|
+
},
|
|
136
|
+
]);
|
|
147
137
|
});
|
|
148
138
|
});
|
|
@@ -9,8 +9,8 @@ const inputItems = require('../../partially-paid/input-items.json');
|
|
|
9
9
|
const pricingService = usePricing();
|
|
10
10
|
|
|
11
11
|
const paymentModifiers = orderModifiers.map(orderMod =>
|
|
12
|
-
pricingService.modifier.
|
|
13
|
-
|
|
12
|
+
pricingService.modifier.duplicate({
|
|
13
|
+
orderMod,
|
|
14
14
|
items: inputItems,
|
|
15
15
|
})
|
|
16
16
|
);
|
|
@@ -9,8 +9,8 @@ const inputItems = require('../../unpaid/input-items.json');
|
|
|
9
9
|
const pricingService = usePricing();
|
|
10
10
|
|
|
11
11
|
const paymentModifiers = orderModifiers.map(orderMod =>
|
|
12
|
-
pricingService.modifier.
|
|
13
|
-
|
|
12
|
+
pricingService.modifier.duplicate({
|
|
13
|
+
...orderMod,
|
|
14
14
|
items: inputItems,
|
|
15
15
|
})
|
|
16
16
|
);
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const usePricing = require('../../index');
|
|
2
|
+
const mockStores = require('../mocks/stores');
|
|
3
|
+
|
|
4
|
+
const session = {
|
|
5
|
+
store: mockStores[0],
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const pricingService = usePricing(session);
|
|
9
|
+
|
|
10
|
+
describe('manualSplit', () => {
|
|
11
|
+
test('should split item by quantity between suborders', () => {
|
|
12
|
+
const currentOrder = { items: [{ _id: 'item1', quantity: 2 }] };
|
|
13
|
+
const subOrders = [
|
|
14
|
+
{ items: [{ _id: 'item1', quantity: 2 }] },
|
|
15
|
+
{ items: [] },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const result = pricingService.order.manualSplit(
|
|
19
|
+
{ orderIndex: 0, itemIndex: 0 },
|
|
20
|
+
1,
|
|
21
|
+
currentOrder,
|
|
22
|
+
subOrders,
|
|
23
|
+
'item1',
|
|
24
|
+
true
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
expect(result[0].items[0].quantity).toBe(1); // Decreases quantity in original order
|
|
28
|
+
expect(result[1].items[0].quantity).toBe(1); // Adds quantity to destination
|
|
29
|
+
});
|
|
30
|
+
test('should remove item if quantity becomes zero', () => {
|
|
31
|
+
const currentOrder = { items: [{ _id: 'item1', quantity: 1 }] };
|
|
32
|
+
const subOrders = [
|
|
33
|
+
{ items: [{ _id: 'item1', quantity: 1 }] },
|
|
34
|
+
{ items: [] },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const result = pricingService.order.manualSplit(
|
|
38
|
+
{ orderIndex: 0, itemIndex: 0 },
|
|
39
|
+
1,
|
|
40
|
+
currentOrder,
|
|
41
|
+
subOrders,
|
|
42
|
+
'item1',
|
|
43
|
+
true
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
expect(result[0].items.length).toBe(0); // Removes item from original order
|
|
47
|
+
expect(result[1].items[0].quantity).toBe(1); // Adds to destination
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('should call manualSplitByQuantity if splitQuantity is true', () => {
|
|
51
|
+
const currentOrder = { items: [{ _id: 'item1', quantity: 2 }] };
|
|
52
|
+
const subOrders = [
|
|
53
|
+
{ items: [{ _id: 'item1', quantity: 2 }] },
|
|
54
|
+
{ items: [] },
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const result = pricingService.order.manualSplit(
|
|
58
|
+
{ orderIndex: 0, itemIndex: 0 },
|
|
59
|
+
1,
|
|
60
|
+
currentOrder,
|
|
61
|
+
subOrders,
|
|
62
|
+
'item1',
|
|
63
|
+
true
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
expect(result[0].items[0].quantity).toBe(1); // Split by quantity
|
|
67
|
+
expect(result[1].items[0].quantity).toBe(1);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('should move item to destination subOrder if splitQuantity is false', () => {
|
|
71
|
+
const currentOrder = { items: [{ _id: 'item1', quantity: 2 }] };
|
|
72
|
+
const subOrders = [
|
|
73
|
+
{ items: [{ _id: 'item1', quantity: 2 }] },
|
|
74
|
+
{ items: [] },
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const result = pricingService.order.manualSplit(
|
|
78
|
+
{ orderIndex: 0, itemIndex: 0 },
|
|
79
|
+
1,
|
|
80
|
+
currentOrder,
|
|
81
|
+
subOrders,
|
|
82
|
+
'item1',
|
|
83
|
+
false
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
expect(result[0].items.length).toBe(0); // Removes item from original suborder
|
|
87
|
+
expect(result[1].items[0]._id).toBe('item1'); // Moves item to destination
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('should return subOrders unchanged if indices are invalid', () => {
|
|
91
|
+
const subOrders = [{ items: [] }, { items: [] }];
|
|
92
|
+
|
|
93
|
+
const result = pricingService.order.manualSplit(
|
|
94
|
+
{ orderIndex: null, itemIndex: null },
|
|
95
|
+
1,
|
|
96
|
+
{},
|
|
97
|
+
subOrders,
|
|
98
|
+
'item1',
|
|
99
|
+
false
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
expect(result).toEqual(subOrders); // No change
|
|
103
|
+
});
|
|
104
|
+
});
|