@darkpos/pricing 1.0.5 → 1.0.6

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 (113) hide show
  1. package/.eslintrc +8 -10
  2. package/__TEST__/item.test.js +137 -99
  3. package/__TEST__/order.test.js +50 -36
  4. package/index.js +1 -25
  5. package/lib/constants/index.js +5 -0
  6. package/lib/constants/status.js +39 -0
  7. package/lib/index.js +36 -0
  8. package/lib/item/addIndirectModifier.js +34 -17
  9. package/lib/item/calculate.js +41 -19
  10. package/lib/item/create.js +35 -0
  11. package/lib/item/filterByDirectModifiers.js +5 -6
  12. package/lib/item/findOriginalItem.js +8 -0
  13. package/lib/item/getBalanceToPay.js +12 -0
  14. package/lib/item/getDepartmentModifiers.js +5 -0
  15. package/lib/item/getDiscountModifiers.js +7 -0
  16. package/lib/item/getItemModifiers.js +16 -0
  17. package/lib/item/getItemModifiersDescription.js +22 -0
  18. package/lib/item/getItemPrice.js +57 -0
  19. package/lib/item/getItemsTotalPaid.js +9 -0
  20. package/lib/item/getItemsTotalPieces.js +7 -0
  21. package/lib/item/getNotIncludedModifiers.js +11 -0
  22. package/lib/item/getParentItem.js +5 -0
  23. package/lib/item/getPendingIndex.js +5 -0
  24. package/lib/item/getTotal.js +8 -0
  25. package/lib/item/getTotalPieces.js +7 -0
  26. package/lib/item/getTotals.js +25 -0
  27. package/lib/item/hasCreateSubscription.js +7 -0
  28. package/lib/item/hasModifier.js +15 -0
  29. package/lib/item/hasModifierWithValue.js +11 -0
  30. package/lib/item/hasModifiers.js +9 -0
  31. package/lib/item/hasSubscription.js +5 -0
  32. package/lib/item/index.js +80 -10
  33. package/lib/item/isParentIncluded.js +4 -0
  34. package/lib/item/isRelatedItem.js +4 -0
  35. package/lib/item/isSelected.js +13 -0
  36. package/lib/item/openRecommendationDialog.js +4 -0
  37. package/lib/item/removeModifier.js +84 -0
  38. package/lib/item/removeModifierById.js +8 -0
  39. package/lib/item/removeModifiers.js +14 -0
  40. package/lib/order/addCreditModifier.js +27 -0
  41. package/lib/order/addDiscountModifier.js +9 -0
  42. package/lib/order/addItem.js +292 -0
  43. package/lib/order/addItemModifier.js +214 -0
  44. package/lib/order/addModifier.js +9 -0
  45. package/lib/order/addModifierToAllItems.js +16 -0
  46. package/lib/order/addNote.js +25 -0
  47. package/lib/order/addTable.js +11 -0
  48. package/lib/order/calculate.js +51 -16
  49. package/lib/order/calculateDue.js +15 -0
  50. package/lib/order/calculateOrdersDue.js +26 -0
  51. package/lib/order/canSplit.js +4 -0
  52. package/lib/order/changeEndDate.js +15 -0
  53. package/lib/order/changeLocation.js +20 -0
  54. package/lib/order/changeStartDate.js +14 -0
  55. package/lib/order/combineSubOrders.js +14 -0
  56. package/lib/order/containsSerial.js +5 -0
  57. package/lib/order/create.js +67 -0
  58. package/lib/order/createParent.js +9 -0
  59. package/lib/order/duplicateItem.js +16 -0
  60. package/lib/order/findItemIndex.js +6 -0
  61. package/lib/order/getAppliedCredit.js +5 -0
  62. package/lib/order/getBalance.js +9 -0
  63. package/lib/order/getCustomer.js +4 -0
  64. package/lib/order/getCustomerStoreCredit.js +14 -0
  65. package/lib/order/getCustomerSubscriptions.js +8 -0
  66. package/lib/order/getCustomerSubscriptionsByItem.js +14 -0
  67. package/lib/order/getDepartmentModifiers.js +9 -0
  68. package/lib/order/getEndDate.js +6 -0
  69. package/lib/order/getItemByItemId.js +6 -0
  70. package/lib/order/getItemIndex.js +9 -0
  71. package/lib/order/getItemsToPay.js +17 -0
  72. package/lib/order/getMenuItemsByCustomer.js +19 -0
  73. package/lib/order/getNumberOfItems.js +12 -0
  74. package/lib/order/getOrdersPieces.js +10 -0
  75. package/lib/order/getPendingItemIndex.js +5 -0
  76. package/lib/order/getRelatedItems.js +11 -0
  77. package/lib/order/getSameItems.js +14 -0
  78. package/lib/order/getScheduleByCustomer.js +20 -0
  79. package/lib/order/getScreenCustomerNotes.js +12 -0
  80. package/lib/order/getSelectedItem.js +6 -0
  81. package/lib/order/getStartDate.js +4 -0
  82. package/lib/order/getTip.js +10 -0
  83. package/lib/order/getTotalPieces.js +17 -0
  84. package/lib/order/getTotals.js +28 -0
  85. package/lib/order/hasAggregate.js +20 -0
  86. package/lib/order/hasItem.js +7 -0
  87. package/lib/order/hasRemainingSubscription.js +67 -0
  88. package/lib/order/hold.js +12 -0
  89. package/lib/order/index.js +166 -5
  90. package/lib/order/isDetailed.js +4 -0
  91. package/lib/order/isHold.js +4 -0
  92. package/lib/order/isNew.js +4 -0
  93. package/lib/order/isOpen.js +4 -0
  94. package/lib/order/isParent.js +7 -0
  95. package/lib/order/merge.js +96 -0
  96. package/lib/order/open.js +11 -0
  97. package/lib/order/pickEndDate.js +70 -0
  98. package/lib/order/removeApplyModifier.js +24 -0
  99. package/lib/order/removeDiscountModifier.js +16 -0
  100. package/lib/order/removeItem.js +56 -0
  101. package/lib/order/removeItemByIndex.js +5 -0
  102. package/lib/order/removeItemModifier.js +69 -0
  103. package/lib/order/removeModifier.js +21 -0
  104. package/lib/order/removeModifierByAttribute.js +23 -0
  105. package/lib/order/removeModifiersWithPaymentMethods.js +29 -0
  106. package/lib/order/removeModifiersWithPaymentTypes.js +27 -0
  107. package/lib/order/setCustomer.js +50 -0
  108. package/lib/order/splitByDepartments.js +151 -0
  109. package/lib/order/toggleModifier.js +9 -0
  110. package/lib/order/updateItem.js +8 -0
  111. package/lib/order/updateItemQuantity.js +35 -0
  112. package/lib/order/void.js +11 -0
  113. package/package.json +16 -18
@@ -1,36 +1,53 @@
1
- module.exports = ({ utils, modifierService }) => {
1
+ module.exports = ({ utils, modifierActions }) => {
2
2
  const { math } = utils;
3
3
 
4
- return function addIndirectModifier(order, items, modifier) {
4
+ return function addIndirectModifier(orderTotal, items, modifier) {
5
5
  const itemsModifiers = {};
6
6
  // get distributed price in order level
7
- const { computed } = modifierService.calculate(modifier, {
8
- price: order.total,
7
+ const { _computed } = modifierActions.calculate(modifier, {
8
+ price: orderTotal,
9
9
  quantity: 1,
10
10
  });
11
11
 
12
- const orderModifierTotal = math.abs(computed.amount);
12
+ const orderModifierTotal = math.abs(_computed.amount);
13
13
  const totalDistributed = items.reduce((acc, item) => {
14
- const inheritedModifier = modifierService.createIndirectModifier(modifier, {
15
- orderTotal: order.total,
16
- itemTotal: item.total,
17
- itemQuantity: item.quantity,
18
- });
14
+ const inheritedModifier = modifierActions.createIndirectModifier(
15
+ modifier,
16
+ {
17
+ orderTotal,
18
+ itemTotal: item.total,
19
+ itemQuantity: item.quantity,
20
+ }
21
+ );
19
22
  itemsModifiers[item._id] = inheritedModifier;
20
- return math.add(acc, math.mul(inheritedModifier.amount, item.quantity));
23
+ return math.add(
24
+ acc,
25
+ math.mul(inheritedModifier.compute.amount, item.quantity)
26
+ );
21
27
  }, 0);
22
28
 
23
29
  // check validation
24
30
  if (math.abs(totalDistributed) !== math.abs(orderModifierTotal)) {
25
31
  const difference = math.sub(orderModifierTotal, totalDistributed);
26
32
  // console.log('difference => ', difference);
27
- const selectedItem = items.find(item => math.sub(item.total, difference) > 0);
33
+ const selectedItem = items.find(
34
+ item => math.sub(item.total, difference) > 0
35
+ );
28
36
 
29
- const inheritedModifier = itemsModifiers[selectedItem._id];
30
- itemsModifiers[selectedItem._id] = {
31
- ...inheritedModifier,
32
- amount: math.add(inheritedModifier.amount, math.div(difference, selectedItem.quantity)),
33
- };
37
+ if (selectedItem) {
38
+ const inheritedModifier = itemsModifiers[selectedItem._id];
39
+ itemsModifiers[selectedItem._id] = {
40
+ ...inheritedModifier,
41
+ compute: {
42
+ ...inheritedModifier.compute,
43
+ amount: math.add(
44
+ inheritedModifier.compute.amount,
45
+ math.div(difference, selectedItem.quantity)
46
+ ),
47
+ },
48
+ };
49
+ }
50
+ return itemsModifiers;
34
51
  }
35
52
 
36
53
  return itemsModifiers;
@@ -1,7 +1,9 @@
1
- module.exports = ({ utils, modifierService }) => {
1
+ /* eslint-disable no-restricted-syntax */
2
+ module.exports = ({ _, utils, modifierActions }) => {
2
3
  const { math } = utils;
3
4
  //
4
- const calculateOne = (item) => {
5
+ const calculateOne = inputItem => {
6
+ const item = _.cloneDeep(inputItem);
5
7
  if (!item) return item;
6
8
 
7
9
  const subTotals = {
@@ -18,18 +20,37 @@ module.exports = ({ utils, modifierService }) => {
18
20
  subTotals._simple = math.mul(price, quantity);
19
21
 
20
22
  const modifiers = [];
23
+ const { modifiers: itemModifiers = [] } = item;
24
+ const amountOverride = itemModifiers.find(each =>
25
+ modifierActions.isAmountOverride(each)
26
+ );
21
27
 
22
- if (Array.isArray(item.modifiers) && item.modifiers.length) {
28
+ const modifiersToCompute = itemModifiers.filter(
29
+ each =>
30
+ !modifierActions.isOverride(each) && each.compute && each.compute.type
31
+ );
32
+ if (amountOverride) modifiersToCompute.push(amountOverride);
33
+
34
+ const modifiersToNotCompute = itemModifiers
35
+ .filter(
36
+ each =>
37
+ !modifiersToCompute.find(
38
+ ceach => ceach.modifierId === each.modifierId
39
+ )
40
+ )
41
+ .map(each => modifierActions.calculate(each, { skip: true }));
42
+
43
+ if (modifiersToCompute.length) {
23
44
  // sort modifiers based on sort
24
- const sortedModifiers = modifierService.sort(item.modifiers);
45
+ const sortedModifiers = modifierActions.sort(modifiersToCompute);
25
46
  let computedPrice = price;
26
47
  let prvPrice = 0;
27
48
  let prvSort;
28
49
 
29
- for (const [idx, modifier] of sortedModifiers.entries()) {
30
- const included = modifierService.isIncluded(modifier);
31
- const direct = modifierService.isDirect(modifier);
32
- const sort = modifierService.getProperty(modifier, 'sort');
50
+ for (const modifier of sortedModifiers) {
51
+ const included = modifierActions.isIncluded(modifier);
52
+ const direct = modifierActions.isDirect(modifier);
53
+ const sort = modifierActions.getProperty(modifier, 'sort');
33
54
  // check if add amount to computedPrice;
34
55
  if (sort !== prvSort) {
35
56
  computedPrice = math.add(computedPrice, prvPrice);
@@ -37,15 +58,19 @@ module.exports = ({ utils, modifierService }) => {
37
58
  prvSort = null;
38
59
  }
39
60
 
40
- const _modifier = modifierService.calculate(modifier, {
61
+ const _modifier = modifierActions.calculate(modifier, {
41
62
  price: computedPrice,
42
63
  quantity,
64
+ skip: !!amountOverride,
43
65
  });
44
- // console.log('computedPrice => ', computedPrice);
45
66
 
46
67
  modifiers.push(_modifier);
47
- const { category, computed } = _modifier;
48
- const computedAmount = math.mul(computed.amount, quantity);
68
+ const { type, _computed } = _modifier;
69
+ // console.log('computedPrice => ', _computed);
70
+ let computedAmount = math.mul(_computed.amount, quantity);
71
+ // subscription modifiers have fixed amount and can't be multiplied by quantity
72
+ if (modifierActions.isSubscription(_modifier))
73
+ computedAmount = _computed.amount;
49
74
 
50
75
  if (included) {
51
76
  subTotals._included = math.add(subTotals._included, computedAmount);
@@ -53,10 +78,7 @@ module.exports = ({ utils, modifierService }) => {
53
78
  prvSort = sort;
54
79
  } else {
55
80
  subTotals._xincluded = math.add(subTotals._xincluded, computedAmount);
56
- subTotals[category] = math.add(
57
- subTotals[category] || 0,
58
- computedAmount
59
- );
81
+ subTotals[type] = math.add(subTotals[type] || 0, computedAmount);
60
82
  }
61
83
  if (direct)
62
84
  subTotals._direct = math.add(subTotals._direct, computedAmount);
@@ -70,16 +92,16 @@ module.exports = ({ utils, modifierService }) => {
70
92
 
71
93
  return {
72
94
  ...item,
73
- modifiers,
95
+ modifiers: [...modifiersToNotCompute, ...modifiers],
74
96
  subTotals,
75
97
  total,
76
98
  };
77
99
  };
78
100
 
79
101
  //
80
- const calculateMany = (items = []) => items.map((item) => calculateOne(item));
102
+ const calculateMany = (items = []) => items.map(item => calculateOne(item));
81
103
 
82
- return function calcultae(item) {
104
+ return function calculate(item) {
83
105
  if (Array.isArray(item)) return calculateMany(item);
84
106
  return calculateOne(item);
85
107
  };
@@ -0,0 +1,35 @@
1
+ module.exports = ({ utils }) => {
2
+ const { helpers } = utils;
3
+
4
+ const defaultItem = {
5
+ location: {},
6
+ status: {
7
+ picked: { value: false, date: '' },
8
+ paid: { value: false, date: '' },
9
+ tracker: [],
10
+ },
11
+ name: '',
12
+ description: '',
13
+ pieces: 0,
14
+ modifiersTotalAmount: 0,
15
+ total: 0,
16
+ totalPaid: 0,
17
+ price: 0,
18
+ quantity: 0,
19
+ path: [],
20
+ notes: [],
21
+ menuId: null,
22
+ serial: null,
23
+ sku: null,
24
+ modifiers: [],
25
+ };
26
+
27
+ return function create(params) {
28
+ return {
29
+ ...defaultItem,
30
+ ...params,
31
+ __typename: 'OrderItem',
32
+ _id: helpers.getObjectID(),
33
+ };
34
+ };
35
+ };
@@ -1,14 +1,13 @@
1
1
  /**
2
2
  * Remove order modifiers from items
3
3
  */
4
- module.exports = ({ modifierService }) => {
4
+ module.exports = ({ modifierActions }) =>
5
5
  //
6
- return function filterByDirectModifiers(items = []) {
7
- return items.map((item) => ({
6
+ function filterByDirectModifiers(items = []) {
7
+ return items.map(item => ({
8
8
  ...item,
9
- modifiers: (item.modifiers || []).filter((modifier) =>
10
- modifierService.isDirect(modifier)
9
+ modifiers: (item.modifiers || []).filter(modifier =>
10
+ modifierActions.isDirect(modifier)
11
11
  ),
12
12
  }));
13
13
  };
14
- };
@@ -0,0 +1,8 @@
1
+ module.exports = () =>
2
+ function findOriginalItem({ item, cache = {} }) {
3
+ const original =
4
+ Array.isArray(cache.items) &&
5
+ cache.items.find(each => each._id === item.itemId);
6
+
7
+ return original || item;
8
+ };
@@ -0,0 +1,12 @@
1
+ module.exports = ({ utils }) =>
2
+ function getBalanceToPay({ orderItems = [] }) {
3
+ const total = orderItems.reduce(
4
+ (t, item) => utils.math.add(t, item && item.total),
5
+ 0
6
+ );
7
+ const totalPaid = orderItems.reduce(
8
+ (t, item) => utils.math.add(t, item && item.totalPaid),
9
+ 0
10
+ );
11
+ return utils.math.sub(total, totalPaid);
12
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getDepartmentModifiers(item) {
3
+ if (!item || !Array.isArray(item.modifiers)) return [];
4
+ return modifierActions.getDepartmentModifiers(item.modifiers);
5
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getDiscountModifiers(item) {
3
+ if (!item || !Array.isArray(item.modifiers)) return [];
4
+ return item.modifiers.filter(
5
+ each => modifierActions.isDiscount(each) && modifierActions.isDirect(each)
6
+ );
7
+ };
@@ -0,0 +1,16 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getItemModifiers(item, orderModifiers) {
3
+ const existsInOrderModifier = modifier =>
4
+ orderModifiers &&
5
+ orderModifiers.find(each => each.modifierId === modifier.modifierId);
6
+
7
+ let modifiers = [];
8
+ if (!item || !Array.isArray(item.modifiers)) return modifiers;
9
+
10
+ modifiers.push(...item.modifiers);
11
+
12
+ if (Array.isArray(orderModifiers) && orderModifiers.length)
13
+ modifiers = modifiers.filter(each => !existsInOrderModifier(each));
14
+
15
+ return modifiers.filter(modifierActions.isDirect);
16
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function getItemModifiersDescription(item) {
3
+ if (!item || !Array.isArray(item.modifiers)) return [];
4
+ const description = item.modifiers
5
+ .filter(
6
+ each =>
7
+ !modifierActions.isHidden(each) &&
8
+ !modifierActions.isAmountOverride(each) &&
9
+ modifierActions.isDirect(each)
10
+ )
11
+ .map(modifier => {
12
+ const { name } = modifier;
13
+ let label = name;
14
+ if (modifierActions.isGroupOfValues(modifier))
15
+ label = modifierActions.getSelectedValues(modifier) || label;
16
+
17
+ return label;
18
+ })
19
+ .join(', ');
20
+
21
+ return description;
22
+ };
@@ -0,0 +1,57 @@
1
+ module.exports = ({ actions, modifierActions, utils }) => {
2
+ const { math } = utils;
3
+
4
+ const getCustomerTags = (customer = {}) =>
5
+ ((customer && customer.tags) || []).filter(Boolean);
6
+
7
+ return function getItemPrice({ item, cache, customer }) {
8
+ const modifiers = item.modifiers || [];
9
+ let { priceLevels } = item;
10
+
11
+ // get cache Item
12
+ if (cache && cache.items) {
13
+ const orgItem = actions.findOriginalItem({
14
+ item,
15
+ cache,
16
+ });
17
+ ({ priceLevels } = orgItem);
18
+ }
19
+
20
+ if (!priceLevels) return 0;
21
+
22
+ const extendedTags = modifierActions.getExtendedTags(modifiers);
23
+ const customerTags = getCustomerTags(customer).concat(extendedTags);
24
+
25
+ const matchedPriceLevels = priceLevels.filter(
26
+ priceLevel =>
27
+ priceLevel.tags &&
28
+ priceLevel.tags.every(tag => customerTags.includes(tag))
29
+ );
30
+ if (!matchedPriceLevels.length) return 0;
31
+ const maxPriceLevel = matchedPriceLevels.reduce(
32
+ (prevPriceLevel, priceLevel) => {
33
+ const curLength = priceLevel.tags.length;
34
+ const preLength = prevPriceLevel.tags.length;
35
+
36
+ if (curLength > preLength) return priceLevel;
37
+ if (preLength === curLength && priceLevel.value < prevPriceLevel.value)
38
+ return priceLevel;
39
+
40
+ return prevPriceLevel;
41
+ }
42
+ );
43
+
44
+ const { value } = maxPriceLevel;
45
+
46
+ const overridPriceModifier = modifiers.find(each =>
47
+ modifierActions.isPriceOverride(each)
48
+ );
49
+ if (overridPriceModifier && overridPriceModifier.compute) {
50
+ if (modifierActions.isMultiplier(overridPriceModifier))
51
+ return math.mul(value, overridPriceModifier.compute.amount);
52
+ return overridPriceModifier.compute.amount;
53
+ }
54
+
55
+ return value;
56
+ };
57
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = ({ utils }) =>
2
+ function getItemsTotalPaid({ orderItems = [] }) {
3
+ return (
4
+ orderItems.reduce(
5
+ (t, item) => utils.math.add(t, item && item.totalPaid),
6
+ 0
7
+ ) || 0
8
+ );
9
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ actions }) =>
2
+ function getItemsTotalPieces(items) {
3
+ return items.reduce(
4
+ (total, item) => total + actions.getItemTotalPieces(item),
5
+ 0
6
+ );
7
+ };
@@ -0,0 +1,11 @@
1
+ module.exports = () =>
2
+ function getNotIncludedModifiers({ item, modifiers }) {
3
+ if (!item || !item.modifiers || !modifiers) return [];
4
+ return modifiers.filter(
5
+ each =>
6
+ !item.modifiers.find(
7
+ modifier =>
8
+ each._id === modifier.modifierId || each._id === modifier._id
9
+ )
10
+ );
11
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function getParentItem(items, item) {
3
+ if (!Array.isArray(items) || !item) return null;
4
+ return items.find(each => each._id === item.properties.parentId);
5
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function getPendingIndex(items) {
3
+ if (!items || !items.length) return -1;
4
+ return items.findIndex(each => each.isPending);
5
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = ({ utils }) => {
2
+ const { math } = utils;
3
+ return function getTotal(item) {
4
+ if (!item || !item.subTotals) return 0;
5
+
6
+ return math.add(item.subTotals._simple, item.subTotals._direct);
7
+ };
8
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ utils }) => {
2
+ const { math } = utils;
3
+ return function getTotalPieces(item) {
4
+ if (!item) return 0;
5
+ return math.mul(item.quantity || 1, item.pieces || 1);
6
+ };
7
+ };
@@ -0,0 +1,25 @@
1
+ module.exports = ({ utils }) => {
2
+ const { math } = utils;
3
+ 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
+ );
16
+
17
+ return {
18
+ total: math.add(acc.total, item.total),
19
+ subTotals,
20
+ };
21
+ },
22
+ { total: 0, subTotals: {} }
23
+ );
24
+ };
25
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function hasCreateSubscription(items) {
3
+ return (
4
+ Array.isArray(items) &&
5
+ items.some(item => modifierActions.hasCreateSubscription(item.modifiers))
6
+ );
7
+ };
@@ -0,0 +1,15 @@
1
+ module.exports = () =>
2
+ function hasModifier({ item, modifier }) {
3
+ if (!item || !modifier || !item.modifiers) return false;
4
+
5
+ const itemModifier = item.modifiers.find(
6
+ each =>
7
+ (each.modifierId &&
8
+ (each.modifierId === modifier.modifierId ||
9
+ each.modifierId === modifier._id)) ||
10
+ (typeof each.modifier === 'object' &&
11
+ each.modifier._id === modifier.modifierId)
12
+ );
13
+
14
+ return !!itemModifier;
15
+ };
@@ -0,0 +1,11 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function hasModifierWithValue({ item, modifier, value }) {
3
+ if (!item || !modifier || !item.modifiers) return false;
4
+ const relatedModifier = item.modifiers.find(
5
+ itemModifier => modifier._id === itemModifier.modifierId
6
+ );
7
+ return modifierActions.isValueSelected({
8
+ modifier: relatedModifier,
9
+ value,
10
+ });
11
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = () =>
2
+ function hasModifiers({ item, modifiers }) {
3
+ if (!item || !modifiers || !item.modifiers) return false;
4
+
5
+ return item.modifiers.some(
6
+ itemModifier =>
7
+ !!modifiers.find(each => each._id === itemModifier.modifierId)
8
+ );
9
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ modifierActions }) =>
2
+ function hasSubscription(item) {
3
+ if (!item || !Array.isArray(item.modifiers)) return false;
4
+ return !!item.modifiers.find(each => modifierActions.isSubscription(each));
5
+ };
package/lib/item/index.js CHANGED
@@ -1,12 +1,82 @@
1
- const makeFilterByDirectModifiers = require('./filterByDirectModifiers');
2
- const makeAddIndirectModifier = require('./addIndirectModifier');
3
- const makeCalculate = require('./calculate');
4
-
5
- module.exports = (deps = {}) => {
6
- //
7
- return Object.freeze({
8
- calculate: makeCalculate(deps),
9
- addIndirectModifier: makeAddIndirectModifier(deps),
10
- filterByDirectModifiers: makeFilterByDirectModifiers(deps),
1
+ const getItemsTotalPieces = require('./getItemsTotalPieces');
2
+ const getTotalPieces = require('./getTotalPieces');
3
+ const removeModifier = require('./removeModifier');
4
+ const removeModifiers = require('./removeModifiers');
5
+ const findOriginalItem = require('./findOriginalItem');
6
+ const create = require('./create');
7
+ const hasModifier = require('./hasModifier');
8
+ const isSelected = require('./isSelected');
9
+ const hasModifiers = require('./hasModifiers');
10
+ const openRecommendationDialog = require('./openRecommendationDialog');
11
+ const addIndirectModifier = require('./addIndirectModifier');
12
+ const calculate = require('./calculate');
13
+ const filterByDirectModifiers = require('./filterByDirectModifiers');
14
+ const getItemPrice = require('./getItemPrice');
15
+ const getDepartmentModifiers = require('./getDepartmentModifiers');
16
+ const hasSubscription = require('./hasSubscription');
17
+ const removeModifierById = require('./removeModifierById');
18
+ const getDiscountModifiers = require('./getDiscountModifiers');
19
+ const getTotal = require('./getTotal');
20
+ const getPendingIndex = require('./getPendingIndex');
21
+ const getTotals = require('./getTotals');
22
+ const getNotIncludedModifiers = require('./getNotIncludedModifiers');
23
+ const hasModifierWithValue = require('./hasModifierWithValue');
24
+ const getBalanceToPay = require('./getBalanceToPay');
25
+ const getItemsTotalPaid = require('./getItemsTotalPaid');
26
+ const getItemModifiersDescription = require('./getItemModifiersDescription');
27
+ const isRelatedItem = require('./isRelatedItem');
28
+ const getParentItem = require('./getParentItem');
29
+ const isParentIncluded = require('./isParentIncluded');
30
+ const hasCreateSubscription = require('./hasCreateSubscription');
31
+ const getItemModifiers = require('./getItemModifiers');
32
+
33
+ const itemActions = (deps = {}) => {
34
+ const actions = {};
35
+
36
+ const innerDeps = {
37
+ ...deps,
38
+ actions,
39
+ };
40
+
41
+ const freezedActions = Object.freeze({
42
+ getItemsTotalPieces: getItemsTotalPieces(innerDeps),
43
+ getTotalPieces: getTotalPieces(innerDeps),
44
+ removeModifier: removeModifier(innerDeps),
45
+ removeModifiers: removeModifiers(innerDeps),
46
+ findOriginalItem: findOriginalItem(innerDeps),
47
+ create: create(innerDeps),
48
+ hasModifier: hasModifier(innerDeps),
49
+ isSelected: isSelected(innerDeps),
50
+ hasModifiers: hasModifiers(innerDeps),
51
+ openRecommendationDialog: openRecommendationDialog(innerDeps),
52
+ addIndirectModifier: addIndirectModifier(innerDeps),
53
+ calculate: calculate(innerDeps),
54
+ filterByDirectModifiers: filterByDirectModifiers(innerDeps),
55
+ getItemPrice: getItemPrice(innerDeps),
56
+ getDepartmentModifiers: getDepartmentModifiers(innerDeps),
57
+ hasSubscription: hasSubscription(innerDeps),
58
+ removeModifierById: removeModifierById(innerDeps),
59
+ getDiscountModifiers: getDiscountModifiers(innerDeps),
60
+ getTotal: getTotal(innerDeps),
61
+ getPendingIndex: getPendingIndex(innerDeps),
62
+ getTotals: getTotals(innerDeps),
63
+ getNotIncludedModifiers: getNotIncludedModifiers(innerDeps),
64
+ hasModifierWithValue: hasModifierWithValue(innerDeps),
65
+ getBalanceToPay: getBalanceToPay(innerDeps),
66
+ getItemsTotalPaid: getItemsTotalPaid(innerDeps),
67
+ getItemModifiersDescription: getItemModifiersDescription(innerDeps),
68
+ isRelatedItem: isRelatedItem(innerDeps),
69
+ getParentItem: getParentItem(innerDeps),
70
+ isParentIncluded: isParentIncluded(innerDeps),
71
+ hasCreateSubscription: hasCreateSubscription(innerDeps),
72
+ getItemModifiers: getItemModifiers(innerDeps),
11
73
  });
74
+
75
+ Object.keys(freezedActions).forEach(actionName => {
76
+ actions[actionName] = freezedActions[actionName];
77
+ });
78
+
79
+ return freezedActions;
12
80
  };
81
+
82
+ module.exports = itemActions;
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function isParentIncluded(item) {
3
+ return item && item.properties && item.properties.includeParent;
4
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function isRelatedItem(item) {
3
+ return !!(item && item.properties && item.properties.relatedItem);
4
+ };
@@ -0,0 +1,13 @@
1
+ module.exports = ({ modifierActions, actions }) =>
2
+ function isSelected({ item, modifier }) {
3
+ if (!item || !item.modifiers || !modifier) return false;
4
+ let hasModifier = actions.hasModifier({ item, modifier });
5
+
6
+ if (!hasModifier && modifierActions.isGroupOfModifiers(modifier))
7
+ hasModifier = actions.hasModifiers({
8
+ item,
9
+ modifiers: modifier.properties.group.modifiers,
10
+ });
11
+
12
+ return hasModifier;
13
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function openRecommendationDialog(item) {
3
+ return !!(item && item.openRecommendationDialog);
4
+ };