@darkpos/pricing 1.0.93 → 1.0.95

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 (34) hide show
  1. package/__TEST__/item.test.js +46 -48
  2. package/__TEST__/modifier/addItemModifier.test.js +181 -60
  3. package/__TEST__/modifier/overrideModifiers.test.js +196 -0
  4. package/__TEST__/order/order-payment-modifier.test.js +3 -11
  5. package/lib/item/calculate.js +66 -18
  6. package/lib/item/getItemPrice.js +1 -12
  7. package/lib/item/getPriceWithoutModifiers.js +7 -5
  8. package/lib/item/index.js +6 -0
  9. package/lib/item/isOverwrittenPrice.js +4 -0
  10. package/lib/item/isOverwrittenQuantity.js +4 -0
  11. package/lib/item/overrideNotes.js +24 -0
  12. package/lib/item/removeModifier.js +1 -22
  13. package/lib/item/removeModifiers.js +1 -2
  14. package/lib/modifier/areConditionsMet.js +1 -1
  15. package/lib/modifier/calculate.js +20 -2
  16. package/lib/modifier/createDescription.js +1 -1
  17. package/lib/modifier/duplicate.js +3 -0
  18. package/lib/modifier/getOverrideAmount.js +7 -0
  19. package/lib/modifier/getOverrideNote.js +5 -0
  20. package/lib/modifier/getServiceOverride.js +5 -0
  21. package/lib/modifier/index.js +18 -12
  22. package/lib/modifier/{isManual.js → isManualOverride.js} +1 -1
  23. package/lib/modifier/{isMultiplier.js → isMultiplierOverride.js} +1 -1
  24. package/lib/modifier/isNotesOverride.js +7 -0
  25. package/lib/modifier/isOverrideSubtotal.js +9 -0
  26. package/lib/modifier/{isService.js → isServiceOverride.js} +1 -1
  27. package/lib/modifier/isTotalOverride.js +7 -0
  28. package/lib/order/addItem.js +10 -12
  29. package/lib/order/addItemModifier.js +15 -62
  30. package/lib/order/removeItemModifier.js +2 -27
  31. package/package.json +4 -2
  32. package/lib/modifier/createAmountOverrideModifier.js +0 -18
  33. package/lib/modifier/getService.js +0 -5
  34. package/lib/modifier/mutateModifier.js +0 -23
@@ -28,8 +28,18 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
28
28
  _actual: 0,
29
29
  };
30
30
 
31
+ if (actions.isOverwrittenPrice(item)) {
32
+ item.price = item.properties.overwrittenPrice;
33
+ item.properties.overwrittenPrice = undefined;
34
+ }
35
+
36
+ if (actions.isOverwrittenQuantity(item)) {
37
+ item.quantity = item.properties.overwrittenQuantity;
38
+ item.properties.overwrittenQuantity = undefined;
39
+ }
40
+
31
41
  const price = parseFloat(actions.getPriceWithoutModifiers({ item }));
32
- const quantity = parseInt(item.quantity, 10);
42
+ let quantity = parseInt(item.quantity, 10);
33
43
  subTotals._simple = math.mul(price, quantity);
34
44
 
35
45
  const modifiers = [];
@@ -51,15 +61,11 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
51
61
  })
52
62
  );
53
63
 
54
- const amountOverride = validatedModifiers.find(each =>
55
- modifierActions.isAmountOverride(each)
56
- );
57
-
58
64
  const modifiersToCompute = validatedModifiers.filter(
59
65
  each =>
60
- !modifierActions.isOverride(each) &&
61
- each.compute &&
62
- each.compute.type &&
66
+ ((each.compute && each.compute.type) ||
67
+ (modifierActions.isOverride(each) &&
68
+ !modifierActions.isNotesOverride(each))) &&
63
69
  modifierActions.isValid(each)
64
70
  );
65
71
 
@@ -86,15 +92,14 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
86
92
  );
87
93
  });
88
94
 
89
- if (amountOverride) modifiersToCompute.push(amountOverride);
90
-
91
95
  const modifiersToNotCompute = validatedModifiers
92
96
  .filter(
93
97
  each =>
94
98
  modifierActions.isPaymentModifier(each) ||
95
99
  !modifiersToCompute.find(
96
100
  ceach => ceach.modifierId === each.modifierId
97
- )
101
+ ) ||
102
+ modifierActions.isNotesOverride(each)
98
103
  )
99
104
  .map(each =>
100
105
  modifierActions.calculate(each, {
@@ -108,6 +113,18 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
108
113
  let computedPrice = price;
109
114
  let total = math.mul(computedPrice, quantity);
110
115
 
116
+ validatedModifiers.forEach(mod => {
117
+ if (
118
+ modifierActions.isNotesOverride(mod) &&
119
+ modifierActions.isValid(mod)
120
+ ) {
121
+ item.notes = actions.overrideNotes({
122
+ item,
123
+ message: modifierActions.getOverrideNote(mod),
124
+ }).notes;
125
+ }
126
+ });
127
+
111
128
  if (modifiersToCompute.length || paymentModifiersToCompute.length) {
112
129
  // sort modifiers based on sort
113
130
  const sortedModifiers = modifierActions.sort([
@@ -151,6 +168,32 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
151
168
  });
152
169
  }
153
170
 
171
+ if (modifierActions.isPriceOverride(modifier)) {
172
+ let priceOverride = modifierActions.getOverrideAmount(modifier);
173
+
174
+ if (modifierActions.isMultiplierOverride(modifier)) {
175
+ priceOverride = math.mul(priceOverride, price);
176
+ }
177
+
178
+ subTotals._simple = math.mul(priceOverride, quantity);
179
+ item.properties = {
180
+ ...(item.properties ? item.properties : {}),
181
+ overwrittenPrice: item.price,
182
+ };
183
+ item.price = priceOverride;
184
+ }
185
+
186
+ if (modifierActions.isQuantityOverride(modifier)) {
187
+ const newQuantity = modifierActions.getOverrideAmount(modifier);
188
+ item.properties = {
189
+ ...(item.properties ? item.properties : {}),
190
+ overwrittenQuantity: item.quantity,
191
+ };
192
+ subTotals._simple = math.mul(price, newQuantity);
193
+ item.quantity = parseInt(newQuantity, 10);
194
+ quantity = parseInt(newQuantity, 10);
195
+ }
196
+
154
197
  _modifier = modifierActions.calculate(
155
198
  { ..._modifier },
156
199
  {
@@ -179,13 +222,18 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
179
222
  accumulatedAmount = math.add(accumulatedAmount, _computed.amount);
180
223
  prvSort = sort;
181
224
 
182
- ({ subTotals, total } = actions.getTotals({
183
- subTotals,
184
- amountToAdd: computedAmount,
185
- included,
186
- type,
187
- direct,
188
- }));
225
+ if (
226
+ !modifierActions.isOverride(modifier) ||
227
+ modifierActions.isOverrideSubtotal(modifier)
228
+ ) {
229
+ ({ subTotals, total } = actions.getTotals({
230
+ subTotals,
231
+ amountToAdd: computedAmount,
232
+ included,
233
+ type,
234
+ direct,
235
+ }));
236
+ }
189
237
  }
190
238
  }
191
239
 
@@ -1,6 +1,4 @@
1
- module.exports = ({ modifierActions, utils }) => {
2
- const { math } = utils;
3
-
1
+ module.exports = ({ modifierActions }) => {
4
2
  const getCustomerTags = (customer = {}) =>
5
3
  ((customer && customer.tags) || []).filter(Boolean);
6
4
 
@@ -38,15 +36,6 @@ module.exports = ({ modifierActions, utils }) => {
38
36
 
39
37
  const { value } = maxPriceLevel;
40
38
 
41
- const overridPriceModifier = modifiers.find(each =>
42
- modifierActions.isPriceOverride(each)
43
- );
44
- if (overridPriceModifier && overridPriceModifier.compute) {
45
- if (modifierActions.isMultiplier(overridPriceModifier))
46
- return math.mul(value, overridPriceModifier.compute.amount);
47
- return overridPriceModifier.compute.amount;
48
- }
49
-
50
39
  return value;
51
40
  };
52
41
  };
@@ -1,21 +1,23 @@
1
- module.exports = ({ modifierActions }) =>
1
+ module.exports = ({ actions, modifierActions }) =>
2
2
  /* eslint-disable no-restricted-syntax */
3
3
  function getPriceWithoutModifiers({ item }) {
4
+ const basePrice = actions.getBasePrice(item);
5
+
4
6
  if (
5
7
  !item ||
6
8
  !Array.isArray(item.modifiers) ||
7
- typeof item.price !== 'number'
9
+ typeof basePrice !== 'number'
8
10
  )
9
- return item.price;
11
+ return basePrice;
10
12
 
11
13
  const calculatedModifiers = item.modifiers.filter(modifier =>
12
14
  modifierActions.isExtractCalculatedValue({ modifier })
13
15
  );
14
16
 
15
- if (calculatedModifiers.length === 0) return item.price;
17
+ if (calculatedModifiers.length === 0) return basePrice;
16
18
 
17
19
  const sortedModifiers = modifierActions.sort([...calculatedModifiers]);
18
- let computedPrice = item.price;
20
+ let computedPrice = basePrice;
19
21
 
20
22
  for (const modifier of sortedModifiers) {
21
23
  computedPrice = modifierActions.getPriceWithoutModifier({
package/lib/item/index.js CHANGED
@@ -63,6 +63,9 @@ const isSomeTagsMatch = require('./isSomeTagsMatch');
63
63
  const getTotals = require('./getTotals');
64
64
  const patchItem = require('./patchItem');
65
65
  const getUpdatedStatus = require('./getUpdatedStatus');
66
+ const isOverwrittenPrice = require('./isOverwrittenPrice');
67
+ const isOverwrittenQuantity = require('./isOverwrittenQuantity');
68
+ const overrideNotes = require('./overrideNotes');
66
69
 
67
70
  const itemActions = (deps = {}) => {
68
71
  const actions = {};
@@ -139,6 +142,9 @@ const itemActions = (deps = {}) => {
139
142
  getTotals: getTotals(innerDeps),
140
143
  patchItem: patchItem(innerDeps),
141
144
  getUpdatedStatus: getUpdatedStatus(innerDeps),
145
+ isOverwrittenPrice: isOverwrittenPrice(innerDeps),
146
+ isOverwrittenQuantity: isOverwrittenQuantity(innerDeps),
147
+ overrideNotes: overrideNotes(innerDeps),
142
148
  });
143
149
 
144
150
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function isOverwrittenPrice(item) {
3
+ return item && item.properties && item.properties.overwrittenPrice;
4
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function isOverwrittenQuantity(item) {
3
+ return item && item.properties && item.properties.overwrittenQuantity;
4
+ };
@@ -0,0 +1,24 @@
1
+ module.exports = ({ settings, _, moment, utils }) => {
2
+ const timezone = _.get(settings, 'localization.timezone', 'America/New_York');
3
+ const { helpers } = utils;
4
+
5
+ return function overrideNotes({ item, message }) {
6
+ if (!item) return undefined;
7
+
8
+ return {
9
+ ...item,
10
+ notes: [
11
+ {
12
+ _id: helpers.getObjectID(),
13
+ attributes: [],
14
+ date: moment().tz(timezone),
15
+ user: null,
16
+ message,
17
+ type: '',
18
+ name: 'override',
19
+ url: '',
20
+ },
21
+ ],
22
+ };
23
+ };
24
+ };
@@ -3,13 +3,7 @@ module.exports = ({ modifierActions, _, actions }) => {
3
3
  !!modifierActions.findById(itemModifiers, modifier._id) &&
4
4
  (!modifier.required || !modifier._parentId);
5
5
 
6
- return function removeModifier({
7
- item,
8
- modifier,
9
- customer,
10
- originalItem,
11
- order,
12
- }) {
6
+ return function removeModifier({ item, modifier, order }) {
13
7
  const nextItem = _.cloneDeep(item);
14
8
  const itemModifiers = item.modifiers || [];
15
9
 
@@ -52,21 +46,6 @@ module.exports = ({ modifierActions, _, actions }) => {
52
46
  )
53
47
  );
54
48
 
55
- const hasOverride = nextModifiers.find(each =>
56
- modifierActions.isOverride(each)
57
- );
58
-
59
- if (hasOverride) {
60
- if (modifierActions.isQuantityOverride(modifier)) nextItem.quantity = 1;
61
-
62
- if (modifierActions.isPriceOverride(modifier))
63
- nextItem.price = actions.getItemPrice({
64
- item: originalItem,
65
- itemPriceLevels: originalItem ? originalItem.priceLevels : undefined,
66
- customer,
67
- });
68
- }
69
-
70
49
  return {
71
50
  ...nextItem,
72
51
  modifiers: nextModifiers,
@@ -1,11 +1,10 @@
1
1
  module.exports = ({ actions }) =>
2
- function removeModifiers({ item, modifiers, originalItem, customer, order }) {
2
+ function removeModifiers({ item, modifiers, customer, order }) {
3
3
  const newItem = modifiers.reduce(
4
4
  (nextItem, modifier) =>
5
5
  actions.removeModifier({
6
6
  item: nextItem,
7
7
  modifier,
8
- originalItem,
9
8
  customer,
10
9
  order,
11
10
  }),
@@ -58,7 +58,7 @@ module.exports = ({ actions, utils }) => {
58
58
  }
59
59
  }
60
60
  return actions.validateItemNumber(
61
- itemSetIndex,
61
+ totalItemsLength,
62
62
  conditionValue,
63
63
  condition.operand
64
64
  );
@@ -13,6 +13,15 @@ module.exports = ({ _, constants, utils, actions }) => {
13
13
  ) {
14
14
  const modifier = _modifier;
15
15
  const compute = getComputeModField(modifier);
16
+
17
+ if (actions.isOverride(_modifier)) {
18
+ if (actions.isAmountOverride(_modifier)) {
19
+ compute.type = 'fixed';
20
+ compute.action = 'add';
21
+ }
22
+ compute.amount = actions.getOverrideAmount(_modifier);
23
+ }
24
+
16
25
  const { type, amount: computeAmount = 0 } = compute;
17
26
  const _computed = {
18
27
  amount: 0,
@@ -55,7 +64,8 @@ module.exports = ({ _, constants, utils, actions }) => {
55
64
  if (
56
65
  (!actions.isOverride(_modifier) &&
57
66
  actions.isQuantityMultiplier(_modifier)) ||
58
- (actions.isAmountOverride(_modifier) && actions.isMultiplier(_modifier))
67
+ (actions.isAmountOverride(_modifier) &&
68
+ actions.isMultiplierOverride(_modifier))
59
69
  ) {
60
70
  _computed.amount = math.mul(_computed.amount, options.quantity);
61
71
  }
@@ -68,6 +78,10 @@ module.exports = ({ _, constants, utils, actions }) => {
68
78
  ) {
69
79
  _computed.amount = math.mul(options.maxDiscountAmount, -1);
70
80
  }
81
+
82
+ if (actions.isTotalOverride(_modifier)) {
83
+ _computed.amount = math.sub(compute.amount, options.maxDiscountAmount);
84
+ }
71
85
  }
72
86
 
73
87
  _computed.description = actions.createDescription({
@@ -79,6 +93,10 @@ module.exports = ({ _, constants, utils, actions }) => {
79
93
  price: options.basePrice || options.price,
80
94
  });
81
95
 
82
- return { ..._.cloneDeep(modifier), _computed };
96
+ return {
97
+ ..._.cloneDeep(modifier),
98
+ compute: compute.amount ? compute : null,
99
+ _computed,
100
+ };
83
101
  };
84
102
  };
@@ -10,7 +10,7 @@ module.exports = ({ actions, localization, _ }) =>
10
10
 
11
11
  const localBasePrice = localization.formatAmount(price || 0);
12
12
 
13
- const isMultiplier = actions.isMultiplier(modifier);
13
+ const isMultiplier = actions.isMultiplierOverride(modifier);
14
14
 
15
15
  description = `${name}${localAmount ? ` (${localAmount})` : ''}`;
16
16
 
@@ -7,6 +7,9 @@ module.exports = ({ utils }) => {
7
7
  ...modifier,
8
8
  modifierId: modifier.modifierId || modifier._id,
9
9
  _id: helpers.getObjectID(),
10
+ compute: {
11
+ ...(modifier.compute || {}),
12
+ },
10
13
  };
11
14
  };
12
15
  };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ actions }) =>
2
+ function getOverrideAmount(modifier) {
3
+ if (!actions.isOverride(modifier)) return 0;
4
+ const computeAmount = modifier.compute && modifier.compute.amount;
5
+ const { fixedValue } = modifier.properties.override;
6
+ return computeAmount || (typeof fixedValue === 'number' && fixedValue) || 0;
7
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ actions }) =>
2
+ function getOverrideNote(modifier) {
3
+ if (!actions.isOverride(modifier)) return '';
4
+ return modifier.properties.override.fixedValue;
5
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ actions }) =>
2
+ function getServiceOverride(modifier) {
3
+ if (!actions.isServiceOverride(modifier)) return null;
4
+ return modifier.properties.override.service;
5
+ };
@@ -3,7 +3,6 @@ const calculate = require('./calculate');
3
3
  const contains = require('./contains');
4
4
  const convertMenuModifiers = require('./convertMenuModifiers');
5
5
  const create = require('./create');
6
- const createAmountOverrideModifier = require('./createAmountOverrideModifier');
7
6
  const createCreditModifier = require('./createCreditModifier');
8
7
  const createDiscountModifier = require('./createDiscountModifier');
9
8
  const createFeeModifier = require('./createFeeModifier');
@@ -48,7 +47,7 @@ const getRecommendedModifiers = require('./getRecommendedModifiers');
48
47
  const getRequiredModifiers = require('./getRequiredModifiers');
49
48
  const getSubscriptionItem = require('./getSubscriptionItem');
50
49
  const getSubscriptionModifiers = require('./getSubscriptionModifiers');
51
- const getService = require('./getService');
50
+ const getServiceOverride = require('./getServiceOverride');
52
51
  const getSplittedModifiers = require('./getSplittedModifiers');
53
52
  const getSuggestion = require('./getSuggestion');
54
53
  const getUnhiddenModifiers = require('./getUnhiddenModifiers');
@@ -76,16 +75,16 @@ const isRemoveModifier = require('./isRemoveModifier');
76
75
  const isGroupOfModifiers = require('./isGroupOfModifiers');
77
76
  const areConditionsMet = require('./areConditionsMet');
78
77
  const isRequiredAndOverride = require('./isRequiredAndOverride');
79
- const isManual = require('./isManual');
78
+ const isManualOverride = require('./isManualOverride');
80
79
  const isPriceOverride = require('./isPriceOverride');
81
80
  const isQuantityOverride = require('./isQuantityOverride');
82
- const isService = require('./isService');
81
+ const isServiceOverride = require('./isServiceOverride');
83
82
  const isSingleValue = require('./isSingleValue');
84
83
  const isGroupOfItems = require('./isGroupOfItems');
85
84
  const isOverride = require('./isOverride');
86
85
  const isDepartment = require('./isDepartment');
87
86
  const isRequired = require('./isRequired');
88
- const isMultiplier = require('./isMultiplier');
87
+ const isMultiplierOverride = require('./isMultiplierOverride');
89
88
  const isAvailablePromotion = require('./isAvailablePromotion');
90
89
  const isAvailableSubscription = require('./isAvailableSubscription');
91
90
  const isPromotion = require('./isPromotion');
@@ -111,7 +110,6 @@ const isFixed = require('./isFixed');
111
110
  const isFixedAdd = require('./isFixedAdd');
112
111
  const isFee = require('./isFee');
113
112
  const isAdd = require('./isAdd');
114
- const mutateModifier = require('./mutateModifier');
115
113
  const isFixedDiscount = require('./isFixedDiscount');
116
114
  const removeLocked = require('./removeLocked');
117
115
  const hasItems = require('./hasItems');
@@ -164,6 +162,11 @@ const getMaxItemQuantity = require('./getMaxItemQuantity');
164
162
  const createDescription = require('./createDescription');
165
163
  const patchModifier = require('./patchModifier');
166
164
  const isPrepayModifier = require('./isPrepayModifier');
165
+ const isTotalOverride = require('./isTotalOverride');
166
+ const getOverrideAmount = require('./getOverrideAmount');
167
+ const getOverrideNote = require('./getOverrideNote');
168
+ const isNotesOverride = require('./isNotesOverride');
169
+ const isOverrideSubtotal = require('./isOverrideSubtotal');
167
170
 
168
171
  const modifierActions = (deps = {}) => {
169
172
  const actions = {};
@@ -178,7 +181,6 @@ const modifierActions = (deps = {}) => {
178
181
  contains: contains(innerDeps),
179
182
  convertMenuModifiers: convertMenuModifiers(innerDeps),
180
183
  create: create(innerDeps),
181
- createAmountOverrideModifier: createAmountOverrideModifier(innerDeps),
182
184
  createCreditModifier: createCreditModifier(innerDeps),
183
185
  createDiscountModifier: createDiscountModifier(innerDeps),
184
186
  createFeeModifier: createFeeModifier(innerDeps),
@@ -224,7 +226,7 @@ const modifierActions = (deps = {}) => {
224
226
  getRequiredModifiers: getRequiredModifiers(innerDeps),
225
227
  getSubscriptionItem: getSubscriptionItem(innerDeps),
226
228
  getSubscriptionModifiers: getSubscriptionModifiers(innerDeps),
227
- getService: getService(innerDeps),
229
+ getServiceOverride: getServiceOverride(innerDeps),
228
230
  getSplittedModifiers: getSplittedModifiers(innerDeps),
229
231
  getSuggestion: getSuggestion(innerDeps),
230
232
  getUnhiddenModifiers: getUnhiddenModifiers(innerDeps),
@@ -249,8 +251,8 @@ const modifierActions = (deps = {}) => {
249
251
  isRemoveModifier: isRemoveModifier(innerDeps),
250
252
  isGroupOfModifiers: isGroupOfModifiers(innerDeps),
251
253
  isRequiredAndOverride: isRequiredAndOverride(innerDeps),
252
- isManual: isManual(innerDeps),
253
- isService: isService(innerDeps),
254
+ isManualOverride: isManualOverride(innerDeps),
255
+ isServiceOverride: isServiceOverride(innerDeps),
254
256
  isQuantityOverride: isQuantityOverride(innerDeps),
255
257
  isPriceOverride: isPriceOverride(innerDeps),
256
258
  isSingleValue: isSingleValue(innerDeps),
@@ -258,7 +260,7 @@ const modifierActions = (deps = {}) => {
258
260
  isOverride: isOverride(innerDeps),
259
261
  isDepartment: isDepartment(innerDeps),
260
262
  isRequired: isRequired(innerDeps),
261
- isMultiplier: isMultiplier(innerDeps),
263
+ isMultiplierOverride: isMultiplierOverride(innerDeps),
262
264
  isAvailablePromotion: isAvailablePromotion(innerDeps),
263
265
  isAvailableSubscription: isAvailableSubscription(innerDeps),
264
266
  isPromotion: isPromotion(innerDeps),
@@ -287,7 +289,6 @@ const modifierActions = (deps = {}) => {
287
289
  isFixedAdd: isFixedAdd(innerDeps),
288
290
  isFee: isFee(innerDeps),
289
291
  isAdd: isAdd(innerDeps),
290
- mutateModifier: mutateModifier(innerDeps),
291
292
  removeGroupData: removeGroupData(innerDeps),
292
293
  isRelatedModifierById: isRelatedModifierById(innerDeps),
293
294
  getGroupedModifiers: getGroupedModifiers(innerDeps),
@@ -341,6 +342,11 @@ const modifierActions = (deps = {}) => {
341
342
  createDescription: createDescription(innerDeps),
342
343
  patchModifier: patchModifier(innerDeps),
343
344
  isPrepayModifier: isPrepayModifier(innerDeps),
345
+ isTotalOverride: isTotalOverride(innerDeps),
346
+ getOverrideAmount: getOverrideAmount(innerDeps),
347
+ getOverrideNote: getOverrideNote(innerDeps),
348
+ isNotesOverride: isNotesOverride(innerDeps),
349
+ isOverrideSubtotal: isOverrideSubtotal(innerDeps),
344
350
  });
345
351
 
346
352
  Object.keys(freezedActions).forEach(actionName => {
@@ -1,5 +1,5 @@
1
1
  module.exports = () =>
2
- function isManual(modifier) {
2
+ function isManualOverride(modifier) {
3
3
  return !!(
4
4
  modifier &&
5
5
  modifier.properties &&
@@ -1,5 +1,5 @@
1
1
  module.exports = () =>
2
- function isMultiplier(modifier) {
2
+ function isMultiplierOverride(modifier) {
3
3
  if (!modifier) return false;
4
4
  const _modifier = modifier.modifier || modifier;
5
5
  return !!(
@@ -0,0 +1,7 @@
1
+ module.exports = ({ actions }) =>
2
+ function isNotesOverride(modifier) {
3
+ return (
4
+ actions.isOverride(modifier) &&
5
+ modifier.properties.override.field === 'notes'
6
+ );
7
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = ({ actions }) =>
2
+ function isOverrideSubtotal(modifier) {
3
+ return (
4
+ actions.isOverride(modifier) &&
5
+ (actions.isAmountOverride(modifier) ||
6
+ actions.isOptionsOverride(modifier) ||
7
+ actions.isTotalOverride(modifier))
8
+ );
9
+ };
@@ -1,5 +1,5 @@
1
1
  module.exports = () =>
2
- function isService(modifier) {
2
+ function isServiceOverride(modifier) {
3
3
  return !!(
4
4
  modifier &&
5
5
  modifier.properties &&
@@ -0,0 +1,7 @@
1
+ module.exports = ({ actions }) =>
2
+ function isTotalOverride(modifier) {
3
+ return (
4
+ actions.isOverride(modifier) &&
5
+ modifier.properties.override.field === 'total'
6
+ );
7
+ };
@@ -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({