@darkpos/pricing 1.0.15 → 1.0.17

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 (66) hide show
  1. package/__TEST__/mocks/order-credit.json +474 -0
  2. package/__TEST__/mocks/partially-paid/input-items.json +1 -0
  3. package/__TEST__/mocks/partially-paid/order-modifiers.json +53 -0
  4. package/__TEST__/mocks/partially-paid/order-partially-paid.json +890 -0
  5. package/__TEST__/mocks/scripts/calculate-partially-paid/index.js +27 -0
  6. package/__TEST__/mocks/scripts/calculate-unpaid/index.js +28 -0
  7. package/__TEST__/mocks/scripts/order-to-string.js +18 -0
  8. package/__TEST__/mocks/stores.js +435 -0
  9. package/__TEST__/mocks/unpaid/input-items.json +6 -0
  10. package/__TEST__/mocks/unpaid/order-modifiers.json +53 -0
  11. package/__TEST__/mocks/unpaid/order-not-paid.json +684 -0
  12. package/__TEST__/order/order.test.js +627 -0
  13. package/lib/item/addIndirectModifier.js +2 -3
  14. package/lib/item/calculate.js +1 -2
  15. package/lib/item/getBalance.js +9 -0
  16. package/lib/item/getItemModifiers.js +3 -14
  17. package/lib/item/getItems.js +5 -0
  18. package/lib/item/getTotal.js +1 -1
  19. package/lib/item/getTotalPrice.js +10 -0
  20. package/lib/item/getTotals.js +31 -18
  21. package/lib/item/index.js +12 -0
  22. package/lib/item/isFullyPaid.js +6 -0
  23. package/lib/item/markModifiersAsLocked.js +11 -0
  24. package/lib/item/removeModifier.js +10 -9
  25. package/lib/item/removePaymentModifiers.js +15 -0
  26. package/lib/modifier/create.js +2 -2
  27. package/lib/modifier/createAmountOverrideModifier.js +1 -3
  28. package/lib/modifier/createCreditModifier.js +2 -4
  29. package/lib/modifier/createDiscountModifier.js +1 -3
  30. package/lib/modifier/createIndirectModifier.js +14 -5
  31. package/lib/modifier/createPaymentModifier.js +12 -0
  32. package/lib/modifier/createSubscriptionModifier.js +1 -3
  33. package/lib/modifier/duplicate.js +1 -1
  34. package/lib/modifier/findById.js +4 -1
  35. package/lib/modifier/findByPaymentMethod.js +1 -1
  36. package/lib/modifier/findByPaymentType.js +1 -1
  37. package/lib/modifier/getItemModifiers.js +1 -3
  38. package/lib/modifier/getLockedModifiers.js +5 -0
  39. package/lib/modifier/getSplittedModifiers.js +4 -6
  40. package/lib/modifier/hasItems.js +8 -0
  41. package/lib/modifier/index.js +20 -4
  42. package/lib/modifier/isFixed.js +10 -0
  43. package/lib/modifier/isFixedDiscount.js +4 -0
  44. package/lib/modifier/isPaymentMethodModifier.js +8 -0
  45. package/lib/modifier/isPaymentModifier.js +7 -0
  46. package/lib/modifier/isPaymentTypeModifier.js +8 -0
  47. package/lib/modifier/isSubtract.js +10 -0
  48. package/lib/modifier/removeLocked.js +8 -0
  49. package/lib/order/addItem.js +104 -106
  50. package/lib/order/addItemModifier.js +0 -3
  51. package/lib/order/addModifier.js +14 -2
  52. package/lib/order/addModifiers.js +15 -0
  53. package/lib/order/autoSplit.js +34 -0
  54. package/lib/order/calculate.js +46 -68
  55. package/lib/order/getScheduleByCustomer.js +0 -1
  56. package/lib/order/index.js +10 -0
  57. package/lib/order/markModifiersAsLocked.js +14 -0
  58. package/lib/order/removeItem.js +0 -2
  59. package/lib/order/removeModifier.js +5 -1
  60. package/lib/order/removeModifiers.js +18 -0
  61. package/lib/order/splitByDepartments.js +10 -13
  62. package/lib/order/syncSubOrderItemsFromParent.js +24 -0
  63. package/package.json +3 -2
  64. package/__TEST__/order.test.js +0 -233
  65. package/lib/modifier/isPaymentMethods.js +0 -8
  66. package/lib/modifier/isPaymentTypes.js +0 -8
@@ -3,6 +3,6 @@ module.exports = ({ utils }) => {
3
3
  return function getTotal(item) {
4
4
  if (!item || !item.subTotals) return 0;
5
5
 
6
- return math.add(item.subTotals._simple, item.subTotals._direct);
6
+ return math.add(item.subTotals._simple, item.subTotals._xincluded);
7
7
  };
8
8
  };
@@ -0,0 +1,10 @@
1
+ module.exports = ({ utils }) =>
2
+ function getTotalPrice({ items = [] }) {
3
+ if (!Array.isArray(items)) return 0;
4
+
5
+ return items.reduce(
6
+ (totalPrice, item) => utils.math.add(totalPrice, item.price),
7
+ 0
8
+ );
9
+
10
+ };
@@ -1,25 +1,38 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+
1
3
  module.exports = ({ utils }) => {
2
4
  const { math } = utils;
3
5
  return function getTotals(items) {
4
- if (!Array.isArray(items)) return { total: 0, subTotals: {} };
5
- return items.reduce(
6
- (acc, item) => {
7
- const subTotals = {};
8
- const { subTotals: itemSubTotals = {} } = item;
9
- const keys = Object.keys(itemSubTotals);
10
- // eslint-disable-next-line no-restricted-syntax
11
- for (const key of keys)
12
- subTotals[key] = math.add(
13
- acc.subTotals[key] || 0,
14
- itemSubTotals[key]
15
- );
6
+ let subTotals = {};
7
+ let subTotal = 0;
8
+
9
+ for (const item of items) {
10
+ subTotal = math.add(subTotal, item.subTotals._actual);
11
+ const keys = Object.keys(item.subTotals).filter(
12
+ key => !key.includes('_')
13
+ );
14
+ for (const key of keys) {
15
+ subTotals[key] = math.add(subTotals[key] || 0, item.subTotals[key]);
16
+ }
17
+ }
16
18
 
17
- return {
18
- total: math.add(acc.total, item.total),
19
- subTotals,
20
- };
21
- },
22
- { total: 0, subTotals: {} }
19
+ const total = Object.keys(subTotals).reduce(
20
+ (acc, key) => math.add(acc, subTotals[key]),
21
+ subTotal
23
22
  );
23
+
24
+ subTotals = Object.keys(subTotals).reduce(
25
+ (acc, key) => ({
26
+ ...acc,
27
+ [key]: subTotals[key],
28
+ }),
29
+ {}
30
+ );
31
+
32
+ return {
33
+ subTotals,
34
+ subTotal,
35
+ total,
36
+ };
24
37
  };
25
38
  };
package/lib/item/index.js CHANGED
@@ -29,6 +29,12 @@ const getParentItem = require('./getParentItem');
29
29
  const isParentIncluded = require('./isParentIncluded');
30
30
  const hasCreateSubscription = require('./hasCreateSubscription');
31
31
  const getItemModifiers = require('./getItemModifiers');
32
+ const markModifiersAsLocked = require('./markModifiersAsLocked');
33
+ const getBalance = require('./getBalance');
34
+ const isFullyPaid = require('./isFullyPaid');
35
+ const getTotalPrice = require('./getTotalPrice');
36
+ const removePaymentModifiers = require('./removePaymentModifiers');
37
+ const getItems = require('./getItems');
32
38
 
33
39
  const itemActions = (deps = {}) => {
34
40
  const actions = {};
@@ -70,6 +76,12 @@ const itemActions = (deps = {}) => {
70
76
  isParentIncluded: isParentIncluded(innerDeps),
71
77
  hasCreateSubscription: hasCreateSubscription(innerDeps),
72
78
  getItemModifiers: getItemModifiers(innerDeps),
79
+ markModifiersAsLocked: markModifiersAsLocked(innerDeps),
80
+ getBalance: getBalance(innerDeps),
81
+ isFullyPaid: isFullyPaid(innerDeps),
82
+ getTotalPrice: getTotalPrice(innerDeps),
83
+ removePaymentModifiers: removePaymentModifiers(innerDeps),
84
+ getItems: getItems(innerDeps),
73
85
  });
74
86
 
75
87
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,6 @@
1
+ module.exports = () =>
2
+ function isFullyPaid({ item }) {
3
+ if (!item) return false;
4
+
5
+ return item.status.paid.value;
6
+ };
@@ -0,0 +1,11 @@
1
+ module.exports = () =>
2
+ function markModifiersAsLocked({ item, modifierIds }) {
3
+ if (!item || !Array.isArray(item.modifiers)) return {};
4
+
5
+ return {
6
+ ...item,
7
+ modifiers: item.modifiers.map(mod =>
8
+ modifierIds.includes(mod._parentId) ? { ...mod, locked: true } : mod
9
+ ),
10
+ };
11
+ };
@@ -3,8 +3,7 @@ module.exports = ({ modifierActions, _, actions }) => {
3
3
  !!modifiers.find(each => modifierActions.isGroupOfItems(each));
4
4
 
5
5
  const isValid = (itemModifiers, modifier) => {
6
- if (!modifierActions.findById(itemModifiers, modifier.modifierId))
7
- return false;
6
+ if (!modifierActions.findById(itemModifiers, modifier._id)) return false;
8
7
 
9
8
  if (
10
9
  modifierActions.isRequired(modifier) &&
@@ -51,15 +50,14 @@ module.exports = ({ modifierActions, _, actions }) => {
51
50
  const nextModifiers = item.modifiers.filter(
52
51
  each =>
53
52
  !modifiersToApply.find(
54
- mod =>
55
- each.modifierId === mod._id ||
56
- each._id === mod._id ||
57
- each.modifierId === mod.modifierId
53
+ mod => each._parentId === mod._id || each._id === mod._id
58
54
  )
59
55
  );
60
56
 
61
- const hasOverride = modifiersToApply.find(each =>
62
- modifierActions.isOverride(each) || modifierActions.isComputedOverride(each)
57
+ const hasOverride = modifiersToApply.find(
58
+ each =>
59
+ modifierActions.isOverride(each) ||
60
+ modifierActions.isComputedOverride(each)
63
61
  );
64
62
 
65
63
  if (hasOverride) {
@@ -68,7 +66,10 @@ module.exports = ({ modifierActions, _, actions }) => {
68
66
 
69
67
  if (modifierActions.isQuantityOverride(modifier)) nextItem.quantity = 1;
70
68
 
71
- if (modifierActions.isPriceOverride(modifier) || modifierActions.isComputedOverride(modifier))
69
+ if (
70
+ modifierActions.isPriceOverride(modifier) ||
71
+ modifierActions.isComputedOverride(modifier)
72
+ )
72
73
  nextItem.price = actions.getItemPrice({
73
74
  item: originalItem,
74
75
  cache,
@@ -0,0 +1,15 @@
1
+ module.exports = ({ actions, modifierActions }) =>
2
+ function removePaymentModifiers({ items }) {
3
+ const paymentModifiers = items.modifiers.filter(mod =>
4
+ modifierActions.isPaymentModifier(mod)
5
+ );
6
+
7
+ return paymentModifiers.map(paymentMod =>
8
+ items.map(item =>
9
+ actions.removeModifier({
10
+ item,
11
+ modifier: paymentMod,
12
+ })
13
+ )
14
+ );
15
+ };
@@ -34,11 +34,11 @@ module.exports = ({ utils }) => {
34
34
 
35
35
  return function create(params) {
36
36
  const { _id, modifierId, ...modifier } = params;
37
- const parentId = modifierId || _id;
38
37
  return {
39
38
  ...defaults,
40
39
  ...modifier,
41
- modifierId: parentId,
40
+ modifierId: modifierId || _id,
41
+ _parentId: _id,
42
42
  };
43
43
  };
44
44
  };
@@ -1,6 +1,5 @@
1
- module.exports = ({ constants, actions, utils }) => {
1
+ module.exports = ({ constants, actions }) => {
2
2
  const { Modifier } = constants;
3
- const { helpers } = utils;
4
3
 
5
4
  return function createAmountOverrideModifier(params) {
6
5
  return actions.create({
@@ -14,7 +13,6 @@ module.exports = ({ constants, actions, utils }) => {
14
13
  attributes: [Modifier.Attributes.OVERRIDE],
15
14
  name: `Modifier Amount ${Modifier.Compute.Actions.OVERRIDE}`,
16
15
  included: true,
17
- _id: helpers.getObjectID(),
18
16
  });
19
17
  };
20
18
  };
@@ -1,6 +1,5 @@
1
- module.exports = ({ _, actions, utils }) => {
2
- const { helpers } = utils;
3
- //
1
+ module.exports = ({ _, actions }) => {
2
+
4
3
  return function createCreditModifier(modifier = {}) {
5
4
  const { customerStoredCredit, ...rest } = _.cloneDeep(modifier);
6
5
  if (!customerStoredCredit) return null;
@@ -11,7 +10,6 @@ module.exports = ({ _, actions, utils }) => {
11
10
  // create one
12
11
  else {
13
12
  creditModifier = actions.create({
14
- _id: helpers.getObjectID(),
15
13
  type: 'credit',
16
14
  name: 'Customer stored credit',
17
15
  direct: true,
@@ -1,5 +1,4 @@
1
- module.exports = ({ constants, actions, localization, utils }) => {
2
- const { helpers } = utils;
1
+ module.exports = ({ constants, actions, localization }) => {
3
2
  const { Modifier } = constants;
4
3
 
5
4
  return function createDiscountModifier(params) {
@@ -19,7 +18,6 @@ module.exports = ({ constants, actions, localization, utils }) => {
19
18
  },
20
19
  type: Modifier.Types.DISCOUNT,
21
20
  name: `${name} ${Modifier.Types.DISCOUNT}`,
22
- _id: helpers.getObjectID(),
23
21
  });
24
22
  };
25
23
  };
@@ -7,14 +7,24 @@ module.exports = ({ _, utils, constants, actions }) => {
7
7
 
8
8
  return function createIndirectModifier(
9
9
  modifier,
10
- options = { orderTotal: 0, itemTotal: 0, itemQuantity: 1 }
10
+ options = { orderTotal: 0, itemQuantity: 1, itemTotal: 0 }
11
11
  ) {
12
+ const maxAmount = actions.getProperty(modifier, 'maxAmount');
13
+
12
14
  const { compute = {} } = modifier;
13
15
  const { type, amount = 0 } = compute;
14
16
  let modifierAmount = amount;
15
17
 
16
- if (type === Modifier.Compute.Types.PERCENTAGE)
17
- modifierAmount = math.div(math.mul(options.orderTotal, amount), 100);
18
+ if (type === Modifier.Compute.Types.PERCENTAGE) {
19
+ const modifierAmountByPercentage = math.div(
20
+ math.mul(options.orderTotal, amount),
21
+ 100
22
+ );
23
+ modifierAmount =
24
+ maxAmount !== null && modifierAmountByPercentage > maxAmount
25
+ ? maxAmount
26
+ : modifierAmountByPercentage;
27
+ }
18
28
 
19
29
  let amountToApply = 0;
20
30
 
@@ -34,8 +44,7 @@ module.exports = ({ _, utils, constants, actions }) => {
34
44
  action: compute.action || Modifier.Compute.Actions.SUBTRACT,
35
45
  },
36
46
  });
37
- if (actions.getProperty(modifierToAdd, 'maxAmount') !== null)
38
- delete modifierToAdd.properties.maxAmount;
47
+ if (maxAmount !== null) delete modifierToAdd.properties.maxAmount;
39
48
 
40
49
  return modifierToAdd;
41
50
  };
@@ -0,0 +1,12 @@
1
+ module.exports = ({ actions }) =>
2
+ function createPaymentModifier({
3
+ modifier = {},
4
+ items = [],
5
+ locked = false,
6
+ }) {
7
+ return {
8
+ ...actions.duplicate(modifier),
9
+ items,
10
+ locked,
11
+ };
12
+ };
@@ -1,6 +1,5 @@
1
- module.exports = ({ constants, actions, utils }) => {
1
+ module.exports = ({ constants, actions }) => {
2
2
  const { Modifier } = constants;
3
- const { helpers } = utils;
4
3
 
5
4
  return function createSubscriptionModifier(params = {}) {
6
5
  return actions.create({
@@ -12,7 +11,6 @@ module.exports = ({ constants, actions, utils }) => {
12
11
  attributes: [Modifier.Attributes.SUBSCRIPTION],
13
12
  name: Modifier.Attributes.SUBSCRIPTION,
14
13
  type: Modifier.Types.DISCOUNT,
15
- _id: helpers.getObjectID(),
16
14
  ...params,
17
15
  });
18
16
  };
@@ -5,7 +5,7 @@ module.exports = ({ utils }) => {
5
5
 
6
6
  return {
7
7
  ...modifier,
8
- modifierId: modifier.modifierId || modifier._id,
8
+ modifierId: modifier._id,
9
9
  _id: helpers.getObjectID(),
10
10
  };
11
11
  };
@@ -3,5 +3,8 @@ module.exports = () =>
3
3
  if (!Array.isArray(modifiers)) return null;
4
4
  return modifiers
5
5
  .filter(Boolean)
6
- .find(each => each._id === id || each.modifierId === id);
6
+ .find(
7
+ each =>
8
+ each._id === id || each.modifierId === id || each._parentId === id
9
+ );
7
10
  };
@@ -4,7 +4,7 @@ module.exports = ({ actions }) =>
4
4
 
5
5
  return modifiers.find(
6
6
  each =>
7
- actions.isPaymentMethods(each) &&
7
+ actions.isPaymentMethodModifier(each) &&
8
8
  each.conditions.paymentMethods.includes(paymentMethod)
9
9
  );
10
10
  };
@@ -4,7 +4,7 @@ module.exports = ({ actions }) =>
4
4
 
5
5
  return modifiers.find(
6
6
  each =>
7
- actions.isPaymentTypes(each) &&
7
+ actions.isPaymentTypeModifier(each) &&
8
8
  each.conditions.paymentTypes.includes(paymentType)
9
9
  );
10
10
  };
@@ -1,5 +1,4 @@
1
- module.exports = ({ actions, utils }) => {
2
- const { helpers } = utils;
1
+ module.exports = ({ actions }) => {
3
2
  return function getItemModifiers({ modifiers, customer, cache }) {
4
3
  const matchedModifiers = actions.getMatchTagsModifiers({
5
4
  modifiers,
@@ -33,7 +32,6 @@ module.exports = ({ actions, utils }) => {
33
32
  return itemModifiers.map(each => ({
34
33
  ...each,
35
34
  modifierId: each.modifierId || each._id,
36
- _id: helpers.getObjectID(),
37
35
  }));
38
36
  };
39
37
  };
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function getLockedModifiers(modifiers = []) {
3
+ if (!Array.isArray(modifiers)) return [];
4
+ return modifiers.filter(modifier => modifier.locked);
5
+ };
@@ -1,5 +1,5 @@
1
1
  module.exports = ({ utils }) => {
2
- const { math, helpers } = utils;
2
+ const { math } = utils;
3
3
 
4
4
  const divideModifierAmount = ({
5
5
  totalOriginOrder,
@@ -8,9 +8,9 @@ module.exports = ({ utils }) => {
8
8
  }) =>
9
9
  totalOriginOrder
10
10
  ? math.div(
11
- math.mul(modifierAmount, totalSplitedOrder || 0),
12
- totalOriginOrder
13
- )
11
+ math.mul(modifierAmount, totalSplitedOrder || 0),
12
+ totalOriginOrder
13
+ )
14
14
  : 0;
15
15
 
16
16
  const splitCreditModifier = ({
@@ -27,7 +27,6 @@ module.exports = ({ utils }) => {
27
27
  ...modifier,
28
28
  compute: {
29
29
  ...modifier.compute,
30
- _id: helpers.getObjectID(),
31
30
  },
32
31
  properties: {
33
32
  ...modifier.properties,
@@ -50,7 +49,6 @@ module.exports = ({ utils }) => {
50
49
  ...modifier,
51
50
  compute: {
52
51
  ...modifier.compute,
53
- _id: helpers.getObjectID(),
54
52
  amount,
55
53
  },
56
54
  };
@@ -0,0 +1,8 @@
1
+ module.exports = () =>
2
+ /*
3
+ * will return true if the modifier is in entity and false if it is not
4
+ * */
5
+ function hasItems({ modifier }) {
6
+ if (!modifier) return false;
7
+ return modifier.items && modifier.items.length > 0;
8
+ };
@@ -105,8 +105,8 @@ const isDiscount = require('./isDiscount');
105
105
  const isHidden = require('./isHidden');
106
106
  const isIgnoreQuantity = require('./isIgnoreQuantity');
107
107
  const isGratuity = require('./isGratuity');
108
- const isPaymentMethods = require('./isPaymentMethods');
109
- const isPaymentTypes = require('./isPaymentTypes');
108
+ const isPaymentMethodModifier = require('./isPaymentMethodModifier');
109
+ const isPaymentTypeModifier = require('./isPaymentTypeModifier');
110
110
  const isPreferences = require('./isPreferences');
111
111
  const isGroupOfValues = require('./isGroupOfValues');
112
112
  const isCompact = require('./isCompact');
@@ -115,6 +115,14 @@ const isEditable = require('./isEditable');
115
115
  const isCredit = require('./isCredit');
116
116
  const purifyModifiers = require('./purifyModifiers');
117
117
  const sort = require('./sort');
118
+ const isPaymentModifier = require('./isPaymentModifier');
119
+ const createPaymentModifier = require('./createPaymentModifier');
120
+ const isSubtract = require('./isSubtract');
121
+ const isFixed = require('./isFixed');
122
+ const isFixedDiscount = require('./isFixedDiscount');
123
+ const removeLocked = require('./removeLocked');
124
+ const hasItems = require('./hasItems');
125
+ const getLockedModifiers = require('./getLockedModifiers');
118
126
 
119
127
  const modifierActions = (deps = {}) => {
120
128
  const actions = {};
@@ -232,8 +240,8 @@ const modifierActions = (deps = {}) => {
232
240
  isHidden: isHidden(innerDeps),
233
241
  isIgnoreQuantity: isIgnoreQuantity(innerDeps),
234
242
  isGratuity: isGratuity(innerDeps),
235
- isPaymentMethods: isPaymentMethods(innerDeps),
236
- isPaymentTypes: isPaymentTypes(innerDeps),
243
+ isPaymentMethodModifier: isPaymentMethodModifier(innerDeps),
244
+ isPaymentTypeModifier: isPaymentTypeModifier(innerDeps),
237
245
  isPreferences: isPreferences(innerDeps),
238
246
  isGroupOfValues: isGroupOfValues(innerDeps),
239
247
  isCompact: isCompact(innerDeps),
@@ -242,6 +250,14 @@ const modifierActions = (deps = {}) => {
242
250
  isIncluded: isIncluded(innerDeps),
243
251
  purifyModifiers: purifyModifiers(innerDeps),
244
252
  sort: sort(innerDeps),
253
+ isPaymentModifier: isPaymentModifier(innerDeps),
254
+ createPaymentModifier: createPaymentModifier(innerDeps),
255
+ isSubtract: isSubtract(innerDeps),
256
+ isFixed: isFixed(innerDeps),
257
+ isFixedDiscount: isFixedDiscount(innerDeps),
258
+ removeLocked: removeLocked(innerDeps),
259
+ hasItems: hasItems(innerDeps),
260
+ getLockedModifiers: getLockedModifiers(innerDeps),
245
261
  });
246
262
 
247
263
  Object.keys(freezedActions).forEach(actionName => {
@@ -0,0 +1,10 @@
1
+ module.exports = ({ constants }) => {
2
+ const { Modifier } = constants;
3
+ return function isFixed(modifier) {
4
+ return !!(
5
+ modifier &&
6
+ modifier.compute &&
7
+ modifier.compute.type === Modifier.Compute.Types.FIXED
8
+ );
9
+ };
10
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = ({ actions }) =>
2
+ function isFixedDiscount(modifier) {
3
+ return actions.isDiscount(modifier) && actions.isFixed(modifier);
4
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = () =>
2
+ function isPaymentMethodModifier(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.conditions &&
6
+ (modifier.conditions.paymentMethods || []).length > 0
7
+ );
8
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ actions }) =>
2
+ function isPaymentModifier(modifier) {
3
+ return (
4
+ actions.isPaymentTypeModifier(modifier) ||
5
+ actions.isPaymentMethodModifier(modifier)
6
+ );
7
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = () =>
2
+ function isPaymentTypeModifier(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.conditions &&
6
+ (modifier.conditions.paymentTypes || []).length > 0
7
+ );
8
+ };
@@ -0,0 +1,10 @@
1
+ module.exports = ({ constants }) => {
2
+ const { Modifier } = constants;
3
+ return function isSubtract(modifier) {
4
+ return !!(
5
+ modifier &&
6
+ modifier.compute &&
7
+ modifier.compute.action === Modifier.Compute.Actions.SUBTRACT
8
+ );
9
+ };
10
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = ({ _, actions }) =>
2
+ function removeLocked(modifiers) {
3
+ if (!Array.isArray(modifiers)) return [];
4
+
5
+ return actions
6
+ .sort(_.uniqBy(modifiers, '_id'))
7
+ .filter(orderMod => !orderMod.locked);
8
+ };