@darkpos/pricing 1.0.93 → 1.0.96

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.
Files changed (39) hide show
  1. package/__TEST__/item.test.js +47 -60
  2. package/__TEST__/manualTest.test.js +1 -3
  3. package/__TEST__/modifier/addItemModifier.test.js +181 -60
  4. package/__TEST__/modifier/getInvalidRequiredModifiers.test.js +0 -1
  5. package/__TEST__/modifier/overrideModifiers.test.js +196 -0
  6. package/__TEST__/modifier.test.js +1 -4
  7. package/__TEST__/order/order-payment-modifier.test.js +3 -11
  8. package/__TEST__/order/order.test.js +0 -15
  9. package/lib/item/calculate.js +66 -18
  10. package/lib/item/getBasePrice.js +1 -3
  11. package/lib/item/getItemPrice.js +1 -12
  12. package/lib/item/getPriceWithoutModifiers.js +7 -5
  13. package/lib/item/index.js +6 -0
  14. package/lib/item/isOverwrittenPrice.js +4 -0
  15. package/lib/item/isOverwrittenQuantity.js +4 -0
  16. package/lib/item/overrideNotes.js +24 -0
  17. package/lib/item/removeModifier.js +1 -22
  18. package/lib/item/removeModifiers.js +1 -2
  19. package/lib/modifier/areConditionsMet.js +1 -1
  20. package/lib/modifier/calculate.js +20 -2
  21. package/lib/modifier/createDescription.js +6 -3
  22. package/lib/modifier/duplicate.js +3 -0
  23. package/lib/modifier/getOverrideAmount.js +7 -0
  24. package/lib/modifier/getOverrideNote.js +5 -0
  25. package/lib/modifier/getServiceOverride.js +5 -0
  26. package/lib/modifier/index.js +18 -12
  27. package/lib/modifier/{isManual.js → isManualOverride.js} +1 -1
  28. package/lib/modifier/{isMultiplier.js → isMultiplierOverride.js} +1 -1
  29. package/lib/modifier/isNotesOverride.js +7 -0
  30. package/lib/modifier/isOverrideSubtotal.js +9 -0
  31. package/lib/modifier/{isService.js → isServiceOverride.js} +1 -1
  32. package/lib/modifier/isTotalOverride.js +7 -0
  33. package/lib/order/addItem.js +10 -12
  34. package/lib/order/addItemModifier.js +9 -64
  35. package/lib/order/removeItemModifier.js +2 -33
  36. package/package.json +4 -2
  37. package/lib/modifier/createAmountOverrideModifier.js +0 -18
  38. package/lib/modifier/getService.js +0 -5
  39. package/lib/modifier/mutateModifier.js +0 -23
@@ -218,18 +218,16 @@ module.exports = ({ actions, itemActions, modifierActions, settings, _ }) => {
218
218
  );
219
219
 
220
220
  if (modifiersToAdd.length) {
221
- nextOrder = modifiersToAdd
222
- .filter(modToAdd => !modifierActions.isOverride(modToAdd))
223
- .reduce(
224
- (acc, modifier) =>
225
- actions.addItemModifier({
226
- itemIndex: nextItemIndex,
227
- order: acc,
228
- modifier,
229
- originalItem: item,
230
- }),
231
- nextOrder
232
- );
221
+ nextOrder = modifiersToAdd.reduce(
222
+ (acc, modifier) =>
223
+ actions.addItemModifier({
224
+ itemIndex: nextItemIndex,
225
+ order: acc,
226
+ modifier,
227
+ originalItem: item,
228
+ }),
229
+ nextOrder
230
+ );
233
231
  }
234
232
 
235
233
  const { reArrangedOrder, newIndex } = reArrangeNewItem({
@@ -1,14 +1,5 @@
1
1
  module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
2
2
  const { math } = utils;
3
- const { getComputeModField } = require('../modifier/utils');
4
-
5
- const getPrice = ({ item, modifier }) => {
6
- const compute = getComputeModField(modifier);
7
- const amount = (modifier && compute && compute.amount) || 0;
8
- const { price = 0 } = item;
9
- if (modifierActions.isMultiplier(modifier)) return math.mul(price, amount);
10
- return amount;
11
- };
12
3
 
13
4
  const filterByRemoveModifiers = (modifiers, modifier) => {
14
5
  const { delModifiers = [] } = modifier;
@@ -89,8 +80,6 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
89
80
  order,
90
81
  modifier: _modifier,
91
82
  item: itemProp,
92
- customer,
93
- originalItem,
94
83
  onConditionsNotMet,
95
84
  onError,
96
85
  }) => {
@@ -107,64 +96,25 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
107
96
  }
108
97
 
109
98
  const modifier = modifierActions.removeGroupRelations(_modifier); // to avoid no param reassign lint rule
110
- let item = { ...itemProp };
111
- const compute = getComputeModField(modifier);
99
+ const item = { ...itemProp };
112
100
  const conditionsBag = areConditionsMet(item, modifier.conditions);
113
- const isAmountOverride = modifierActions.isAmountOverride(modifier);
114
- const isPriceOverride = modifierActions.isPriceOverride(modifier);
115
- // is the modifier suggestion required
101
+
116
102
  if (conditionsBag.length > 0 && !modifierActions.isRequired(modifier)) {
117
103
  if (onConditionsNotMet) onConditionsNotMet(conditionsBag);
118
104
  return item;
119
105
  }
120
- const modifierToAdd = modifierActions.mutateModifier(modifier);
121
- const modifierIndex = item.modifiers.findIndex(
122
- ieach => ieach.modifierId === modifier._id
123
- );
106
+ const modifierToAdd = modifierActions.duplicate(modifier);
124
107
 
125
- if (modifierActions.isOverride(modifier) && !isAmountOverride) {
126
- if (modifierIndex > -1) item.modifiers[modifierIndex] = modifierToAdd;
127
- else item.modifiers.push(modifierToAdd);
128
- } else {
129
- item.modifiers.push(modifierToAdd);
130
- }
108
+ item.modifiers.push(modifierToAdd);
131
109
 
132
110
  if (modifierActions.isRemoveModifier(modifier)) {
133
111
  item.modifiers = filterByRemoveModifiers(item.modifiers, modifier);
134
112
  }
135
113
 
136
- if (modifierActions.isAmountOverride(modifier)) {
137
- item = {
138
- ...item,
139
- price: compute.amount,
140
- };
141
- }
114
+ item.properties = {
115
+ ...(item.properties || {}),
116
+ };
142
117
 
143
- if (modifierActions.isQuantityOverride(modifier)) {
144
- if (modifier.compute && typeof modifier.compute.amount === 'number') {
145
- item.quantity = modifier.compute.amount || 1;
146
- } else if (typeof modifier.properties.override.fixedValue === 'number') {
147
- item.quantity = modifier.properties.override.fixedValue;
148
- }
149
- }
150
-
151
- if (isPriceOverride) {
152
- item.properties = {
153
- ...(item.properties || {}),
154
- basePrice: item.price,
155
- };
156
- item.price = getPrice({ modifier: modifierToAdd, item });
157
- } else {
158
- item.properties = {
159
- ...(item.properties || {}),
160
- basePrice: item.price,
161
- };
162
- item.price = itemActions.getItemPrice({
163
- item,
164
- itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
165
- customer,
166
- });
167
- }
168
118
  return item;
169
119
  };
170
120
 
@@ -204,7 +154,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
204
154
  ) {
205
155
  return order;
206
156
  }
207
- // Remove if it has it already only if it is not group of value or override modifier
157
+ // Remove if it has it already only if it is not group of value
208
158
 
209
159
  const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
210
160
  const isUnlimitedItemUse = modifierActions.isUnlimitedItemUse(modifier);
@@ -212,12 +162,7 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
212
162
  const maxQuantity =
213
163
  math.mul(item.quantity || 0, maxApplies) || item.quantity;
214
164
 
215
- if (
216
- !isUnlimitedItemUse &&
217
- contains &&
218
- usingCount >= maxQuantity &&
219
- !modifierActions.isOverride(modifier)
220
- ) {
165
+ if (!isUnlimitedItemUse && contains && usingCount >= maxQuantity) {
221
166
  if (maxApplies && onError) {
222
167
  onError('modifier.has.reached.the.maximum.amount.of.applies');
223
168
  return order;
@@ -1,15 +1,5 @@
1
- module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
2
- const { math } = utils;
3
-
4
- const getPrice = ({ item, modifier }) => {
5
- const amount =
6
- (modifier && modifier.compute && modifier.compute.amount) || 0;
7
- const { price = 0 } = item;
8
- if (modifierActions.isMultiplier(modifier)) return math.mul(price, amount);
9
- return amount;
10
- };
11
-
12
- const removeModifier = ({ item, modifier, originalItem }) => {
1
+ module.exports = ({ actions, modifierActions, _ }) => {
2
+ const removeModifier = ({ item, modifier }) => {
13
3
  const nextItem = { ...item, modifiers: [] };
14
4
 
15
5
  nextItem.modifiers = item.modifiers.filter(each => {
@@ -19,17 +9,6 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
19
9
  return each._id !== modifier._id;
20
10
  });
21
11
 
22
- if (modifierActions.isAmountOverride(modifier))
23
- return {
24
- ...originalItem,
25
- ...nextItem,
26
- };
27
-
28
- if (modifierActions.isPriceOverride(modifier))
29
- nextItem.price = getPrice({ modifier, item: nextItem });
30
-
31
- if (modifierActions.isQuantityOverride(modifier)) nextItem.quantity = 1;
32
-
33
12
  return nextItem;
34
13
  };
35
14
 
@@ -50,16 +29,11 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
50
29
  return order;
51
30
 
52
31
  let item = actions.getSelectedItem({ order, itemIndex });
53
- const customer = actions.getCustomer(order);
54
32
 
55
33
  const contains = modifierActions.contains(item.modifiers, modifier);
56
34
 
57
35
  if (!contains) return order;
58
36
 
59
- if (modifierActions.isRequiredAndOverride(modifier)) {
60
- return order;
61
- }
62
-
63
37
  // Remove
64
38
  item = removeModifier({
65
39
  item,
@@ -67,11 +41,6 @@ module.exports = ({ actions, modifierActions, itemActions, utils, _ }) => {
67
41
  originalItem,
68
42
  });
69
43
 
70
- item.price = itemActions.getItemPrice({
71
- item,
72
- itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
73
- customer,
74
- });
75
44
  order.items[itemIndex] = item;
76
45
 
77
46
  return order;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.93",
3
+ "version": "1.0.96",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -28,6 +28,8 @@
28
28
  "test:paymentModifiers": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/order-payment-modifier.test.js",
29
29
  "test:addItem": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/addItem.test.js",
30
30
  "test:getParentTotals": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/order/getParentTotals.test.js",
31
+ "test:overrideModifiers": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/overrideModifiers.test.js",
32
+ "test:addItemModifier": "jest --runInBand --detectOpenHandles --logHeapUsage --forceExit ./__TEST__/modifier/addItemModifier.test.js",
31
33
  "lint": "eslint --quiet lib/"
32
34
  },
33
35
  "publishConfig": {
@@ -52,5 +54,5 @@
52
54
  "supertest": "^6.2.3",
53
55
  "supervisor": "^0.12.0"
54
56
  },
55
- "gitHead": "fb466ad4fdad14d593a1ee3dc2814f683b10ec24"
57
+ "gitHead": "aed710f165a1442c14bba31c5936682faa6b9364"
56
58
  }
@@ -1,18 +0,0 @@
1
- module.exports = ({ constants, actions }) => {
2
- const { Modifier } = constants;
3
-
4
- return function createAmountOverrideModifier(params) {
5
- return actions.create({
6
- compute: {
7
- amount: params.amount,
8
- action: Modifier.Compute.Actions.OVERRIDE,
9
- },
10
- properties: {
11
- override: { field: 'amount' },
12
- },
13
- attributes: [Modifier.Attributes.OVERRIDE],
14
- name: `Modifier Amount ${Modifier.Compute.Actions.OVERRIDE}`,
15
- included: true,
16
- });
17
- };
18
- };
@@ -1,5 +0,0 @@
1
- module.exports = ({ actions }) =>
2
- function getService(modifier) {
3
- if (!actions.isService(modifier)) return null;
4
- return modifier.properties.override.service;
5
- };
@@ -1,23 +0,0 @@
1
- module.exports = ({ _, actions }) =>
2
- function mutateModifier(mod) {
3
- const modifier = actions.duplicate(mod);
4
- const fixedValue = _.get(modifier, 'properties.override.fixedValue', '');
5
- const isAmountOverride = actions.isAmountOverride(mod);
6
- const isPriceOverride = actions.isPriceOverride(mod);
7
-
8
- if (isPriceOverride && fixedValue) {
9
- modifier.compute = {
10
- amount: fixedValue,
11
- };
12
- }
13
-
14
- if (isAmountOverride && fixedValue) {
15
- modifier.compute = {
16
- type: 'fixed',
17
- amount: fixedValue,
18
- action: 'add',
19
- };
20
- }
21
-
22
- return modifier;
23
- };