@darkpos/pricing 1.0.6 → 1.0.7

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 (143) hide show
  1. package/__TEST__/modifier/calculate.test.js +73 -0
  2. package/__TEST__/modifier/getAvailablePromotionsOrSubscriptions.test.js +81 -0
  3. package/__TEST__/modifier/getMatchTagsModifiers.test.js +109 -0
  4. package/__TEST__/modifier/getModifierIndex.test.js +40 -0
  5. package/__TEST__/modifier/getRecommendedModifiers.test.js +17 -0
  6. package/__TEST__/modifier/hasAllTags.test.js +25 -0
  7. package/__TEST__/modifier/hasAttribute.test.js +47 -0
  8. package/__TEST__/modifier/hasMatchTags.test.js +56 -0
  9. package/__TEST__/modifier/hasNoTags.test.js +21 -0
  10. package/__TEST__/modifier/mocks/toggleModifier_no1.json +13440 -0
  11. package/__TEST__/modifier/mocks/toggleModifier_no2.json +13438 -0
  12. package/__TEST__/modifier/mocks/toggleModifier_no3.json +13598 -0
  13. package/__TEST__/modifier/sort.test.js +41 -0
  14. package/__TEST__/order.test.js +0 -1
  15. package/lib/constants/Modifier/Attributes.js +9 -0
  16. package/lib/constants/Modifier/Compute.js +15 -0
  17. package/lib/constants/Modifier/Types.js +7 -0
  18. package/lib/constants/Modifier/index.js +9 -0
  19. package/lib/constants/{status.js → Status.js} +0 -0
  20. package/lib/constants/index.js +4 -2
  21. package/lib/index.js +4 -2
  22. package/lib/item/getItemsTotalPieces.js +1 -1
  23. package/lib/modifier/addFile.js +19 -0
  24. package/lib/modifier/addImage.js +18 -0
  25. package/lib/modifier/calculate.js +43 -0
  26. package/lib/modifier/contains.js +5 -0
  27. package/lib/modifier/convertMenuModifiers.js +5 -0
  28. package/lib/modifier/create.js +44 -0
  29. package/lib/modifier/createAmountOverrideModifier.js +20 -0
  30. package/lib/modifier/createCreditModifier.js +32 -0
  31. package/lib/modifier/createDiscountModifier.js +25 -0
  32. package/lib/modifier/createGroupValuesModifier.js +29 -0
  33. package/lib/modifier/createIndirectModifier.js +42 -0
  34. package/lib/modifier/createSubscriptionModifier.js +19 -0
  35. package/lib/modifier/displayAsCard.js +9 -0
  36. package/lib/modifier/displayAsChips.js +9 -0
  37. package/lib/modifier/displayAsList.js +9 -0
  38. package/lib/modifier/duplicate.js +12 -0
  39. package/lib/modifier/enableAutoPopup.js +9 -0
  40. package/lib/modifier/filterByRequiredModifiers.js +4 -0
  41. package/lib/modifier/findById.js +7 -0
  42. package/lib/modifier/findByPaymentMethod.js +10 -0
  43. package/lib/modifier/findByPaymentType.js +10 -0
  44. package/lib/modifier/getAvailablePromotions.js +5 -0
  45. package/lib/modifier/getAvailablePromotionsOrSubscriptions.js +15 -0
  46. package/lib/modifier/getAvailableSubscriptions.js +5 -0
  47. package/lib/modifier/getByAttribute.js +6 -0
  48. package/lib/modifier/getCreditModifier.js +6 -0
  49. package/lib/modifier/getDefaultModifiers.js +4 -0
  50. package/lib/modifier/getDepartmentMaxItems.js +10 -0
  51. package/lib/modifier/getDepartmentModifiers.js +11 -0
  52. package/lib/modifier/getDescription.js +6 -0
  53. package/lib/modifier/getDescriptions.js +9 -0
  54. package/lib/modifier/getDirectModifiers.js +5 -0
  55. package/lib/modifier/getDiscountModifiers.js +7 -0
  56. package/lib/modifier/getEntityModifiers.js +11 -0
  57. package/lib/modifier/getEntityPromotions.js +11 -0
  58. package/lib/modifier/getExtendedTags.js +14 -0
  59. package/lib/modifier/getFiles.js +5 -0
  60. package/lib/modifier/getGroupModifiers.js +9 -0
  61. package/lib/modifier/getGroupOfItemsModifiers.js +4 -0
  62. package/lib/modifier/getGroupRelatedModifiers.js +26 -0
  63. package/lib/modifier/getImages.js +5 -0
  64. package/lib/modifier/getInheritedModifiers.js +30 -0
  65. package/lib/modifier/getItemModifiers.js +39 -0
  66. package/lib/modifier/getLaundryModifiers.js +9 -0
  67. package/lib/modifier/getMatchTagsModifiers.js +9 -0
  68. package/lib/modifier/getModifierIndex.js +14 -0
  69. package/lib/modifier/getPreferences.js +24 -0
  70. package/lib/modifier/getPromotionModifiers.js +5 -0
  71. package/lib/modifier/getPromptMessage.js +6 -0
  72. package/lib/modifier/getProperty.js +11 -0
  73. package/lib/modifier/getRecommendedModifiers.js +7 -0
  74. package/lib/modifier/getRelatedModifiers.js +10 -0
  75. package/lib/modifier/getRequiredModifiers.js +4 -0
  76. package/lib/modifier/getSelectedValues.js +7 -0
  77. package/lib/modifier/getService.js +5 -0
  78. package/lib/modifier/getSplittedModifiers.js +30 -0
  79. package/lib/modifier/getStarchModifier.js +9 -0
  80. package/lib/modifier/getSubscriptionItem.js +12 -0
  81. package/lib/modifier/getSubscriptionModifiers.js +5 -0
  82. package/lib/modifier/getSuggestion.js +9 -0
  83. package/lib/modifier/getUnhiddenModifiers.js +9 -0
  84. package/lib/modifier/getUsingCount.js +11 -0
  85. package/lib/modifier/hasAddModifiers.js +5 -0
  86. package/lib/modifier/hasAllTag.js +12 -0
  87. package/lib/modifier/hasAttribute.js +8 -0
  88. package/lib/modifier/hasAttributes.js +19 -0
  89. package/lib/modifier/hasCreateSubscription.js +10 -0
  90. package/lib/modifier/hasDisplayPrompt.js +9 -0
  91. package/lib/modifier/hasMatchTags.js +27 -0
  92. package/lib/modifier/hasModifier.js +12 -0
  93. package/lib/modifier/hasNoTags.js +9 -0
  94. package/lib/modifier/hasRelatedItems.js +8 -0
  95. package/lib/modifier/includePiecesInQuantity.js +10 -0
  96. package/lib/modifier/includesInGroup.js +9 -0
  97. package/lib/modifier/index.js +242 -0
  98. package/lib/modifier/isAmountOverride.js +7 -0
  99. package/lib/modifier/isAvailablePromotion.js +23 -0
  100. package/lib/modifier/isAvailableSubscription.js +28 -0
  101. package/lib/modifier/isCompact.js +12 -0
  102. package/lib/modifier/isCredit.js +6 -0
  103. package/lib/modifier/isCustomerTagsExtend.js +9 -0
  104. package/lib/modifier/isDefault.js +4 -0
  105. package/lib/modifier/isDepartment.js +6 -0
  106. package/lib/modifier/isDirect.js +6 -0
  107. package/lib/modifier/isDiscount.js +6 -0
  108. package/lib/modifier/isEditable.js +10 -0
  109. package/lib/modifier/isGratuity.js +6 -0
  110. package/lib/modifier/isGroupOfItems.js +12 -0
  111. package/lib/modifier/isGroupOfModifiers.js +12 -0
  112. package/lib/modifier/isGroupOfValues.js +13 -0
  113. package/lib/modifier/isHidden.js +4 -0
  114. package/lib/modifier/isIncluded.js +4 -0
  115. package/lib/modifier/isManual.js +9 -0
  116. package/lib/modifier/isMultiplier.js +11 -0
  117. package/lib/modifier/isOverride.js +6 -0
  118. package/lib/modifier/isPaymentMethods.js +8 -0
  119. package/lib/modifier/isPaymentTypes.js +8 -0
  120. package/lib/modifier/isPreferences.js +8 -0
  121. package/lib/modifier/isPriceOverride.js +7 -0
  122. package/lib/modifier/isPromotion.js +6 -0
  123. package/lib/modifier/isQuantityOverride.js +7 -0
  124. package/lib/modifier/isRemoveModifier.js +4 -0
  125. package/lib/modifier/isRequired.js +4 -0
  126. package/lib/modifier/isRequiredAndOverride.js +4 -0
  127. package/lib/modifier/isService.js +9 -0
  128. package/lib/modifier/isSingleValue.js +9 -0
  129. package/lib/modifier/isSubscription.js +6 -0
  130. package/lib/modifier/isTrackUsageSubscription.js +5 -0
  131. package/lib/modifier/isValueSelected.js +7 -0
  132. package/lib/modifier/purifyModifiers.js +15 -0
  133. package/lib/modifier/sort.js +35 -0
  134. package/lib/order/create.js +3 -3
  135. package/lib/order/getEndDate.js +2 -4
  136. package/lib/order/getNumberOfItems.js +2 -4
  137. package/lib/order/getSameItems.js +6 -1
  138. package/lib/order/hold.js +1 -1
  139. package/lib/order/index.js +0 -3
  140. package/lib/order/open.js +1 -1
  141. package/lib/order/removeItem.js +2 -3
  142. package/lib/order/void.js +1 -1
  143. package/package.json +3 -4
@@ -0,0 +1,41 @@
1
+ const usePricing = require('../../index');
2
+
3
+ const pricingService = usePricing();
4
+
5
+ describe('Sort Function', () => {
6
+ test('usecase #1', () => {
7
+ const modifiers = [
8
+ {
9
+ _id: 1,
10
+ type: 'fixed',
11
+ action: 'add',
12
+ amount: 10,
13
+ name: 'someModifier',
14
+ properties: {},
15
+ },
16
+ {
17
+ _id: 2,
18
+ type: 'fixed',
19
+ action: 'add',
20
+ amount: 10,
21
+ name: 'someModifier',
22
+ properties: {
23
+ sort: 2,
24
+ },
25
+ },
26
+ {
27
+ _id: 3,
28
+ type: 'fixed',
29
+ action: 'add',
30
+ amount: 10,
31
+ name: 'someModifier',
32
+ properties: {
33
+ sort: 1,
34
+ },
35
+ },
36
+ ];
37
+ const sortedModifiers = pricingService.modifier.sort(modifiers);
38
+ const ids = sortedModifiers.map((mob) => mob._id);
39
+ expect(ids).toMatchObject([1, 3, 2]);
40
+ });
41
+ });
@@ -229,6 +229,5 @@ describe('Order actions', () => {
229
229
  discount: -1,
230
230
  tax: 2,
231
231
  });
232
- console.log('order =>', JSON.stringify(newOrder, 0, 2));
233
232
  });
234
233
  });
@@ -0,0 +1,9 @@
1
+ //
2
+ module.exports = {
3
+ SUBSCRIPTION: 'subscription',
4
+ PROMOTION: 'promotion',
5
+ GROUP: 'group',
6
+ LIST: 'list',
7
+ DEPARTMENT: 'department',
8
+ OVERRIDE: 'override',
9
+ };
@@ -0,0 +1,15 @@
1
+ const Types = {
2
+ FIXED: 'fixed',
3
+ PERCENTAGE: 'percentage',
4
+ };
5
+
6
+ const Actions = {
7
+ ADD: 'add',
8
+ SUBTRACT: 'subtract',
9
+ OVERRIDE: 'override',
10
+ };
11
+
12
+ module.exports = {
13
+ Types,
14
+ Actions,
15
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ module.exports = {
3
+ DISCOUNT: 'discount',
4
+ TAX: 'tax',
5
+ GRATUITY: 'gratuity',
6
+ CREDIT: 'credit',
7
+ };
@@ -0,0 +1,9 @@
1
+ const Compute = require('./Compute');
2
+ const Types = require('./Types');
3
+ const Attributes = require('./Attributes');
4
+
5
+ module.exports = {
6
+ Attributes,
7
+ Types,
8
+ Compute,
9
+ };
File without changes
@@ -1,5 +1,7 @@
1
- const status = require('./status');
1
+ const Status = require('./Status');
2
+ const Modifier = require('./Modifier');
2
3
 
3
4
  module.exports = {
4
- status,
5
+ Status,
6
+ Modifier,
5
7
  };
package/lib/index.js CHANGED
@@ -1,10 +1,11 @@
1
- const makeModifierService = require('@darkpos/modifier');
2
1
  const utils = require('@darkpos/utils');
3
2
  const _ = require('lodash');
4
3
  const moment = require('moment-timezone');
5
4
  /** services */
6
5
  const makeItemActions = require('./item');
7
6
  const makeOrderActions = require('./order');
7
+ const makeModifierActions = require('./modifier');
8
+ const constants = require('./constants');
8
9
 
9
10
  module.exports = session => {
10
11
  const { useLocalization } = utils;
@@ -17,10 +18,11 @@ module.exports = session => {
17
18
  localization,
18
19
  _,
19
20
  moment,
21
+ constants,
20
22
  };
21
23
 
22
24
  //
23
- const modifierActions = makeModifierService(session);
25
+ const modifierActions = makeModifierActions(deps);
24
26
  const itemActions = makeItemActions({ ...deps, modifierActions });
25
27
  const orderActions = makeOrderActions({
26
28
  ...deps,
@@ -1,7 +1,7 @@
1
1
  module.exports = ({ actions }) =>
2
2
  function getItemsTotalPieces(items) {
3
3
  return items.reduce(
4
- (total, item) => total + actions.getItemTotalPieces(item),
4
+ (total, item) => total + actions.getTotalPieces(item),
5
5
  0
6
6
  );
7
7
  };
@@ -0,0 +1,19 @@
1
+ module.exports = ({ actions }) =>
2
+ function addFile({ modifier, file, add = true }) {
3
+ if (!modifier || !file || !actions.isGroupOfValues(modifier)) return null;
4
+ let files = [...(modifier.properties.group.files || [])];
5
+
6
+ if (add) files.push(file);
7
+ else files = files.filter(each => each._id !== file._id);
8
+
9
+ return {
10
+ ...modifier,
11
+ properties: {
12
+ ...modifier.properties,
13
+ group: {
14
+ ...modifier.properties.group,
15
+ files,
16
+ },
17
+ },
18
+ };
19
+ };
@@ -0,0 +1,18 @@
1
+ module.exports = ({ actions }) =>
2
+ function addImage({ modifier, image, add = true }) {
3
+ if (!modifier || !image || !actions.isGroupOfValues(modifier)) return null;
4
+ let images = [...(modifier.properties.group.images || [])];
5
+ if (add) images.push(image);
6
+ else images = images.filter(each => each !== image);
7
+
8
+ return {
9
+ ...modifier,
10
+ properties: {
11
+ ...modifier.properties,
12
+ group: {
13
+ ...modifier.properties.group,
14
+ images,
15
+ },
16
+ },
17
+ };
18
+ };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Get calculated modifier
3
+ */
4
+ module.exports = ({ _, constants, utils, localization, actions }) => {
5
+ const { math } = utils;
6
+ const { Modifier } = constants;
7
+
8
+ return function calculate(
9
+ modifier = {},
10
+ options = { price: 0, skip: false }
11
+ ) {
12
+ const { name, compute } = modifier;
13
+ const { type, action, amount = 0 } = compute || {};
14
+ const _computed = {
15
+ amount: 0,
16
+ description: '',
17
+ };
18
+ const maxAmount = actions.getProperty(modifier, 'maxAmount');
19
+ if (!options.skip) {
20
+ const multiplier = action === Modifier.Compute.Actions.SUBTRACT ? -1 : 1;
21
+
22
+ if (type === Modifier.Compute.Types.FIXED)
23
+ _computed.amount = math.mul(multiplier, amount);
24
+
25
+ if (type === Modifier.Compute.Types.PERCENTAGE)
26
+ _computed.amount = math.div(
27
+ math.mul(multiplier, options.price, amount),
28
+ 100
29
+ );
30
+
31
+ if (!type || action === Modifier.Compute.Actions.OVERRIDE)
32
+ _computed.amount = amount;
33
+
34
+ if (maxAmount && math.gt(math.abs(_computed.amount), maxAmount))
35
+ _computed.amount = maxAmount;
36
+ }
37
+
38
+ const localAmount = localization.formatAmount(_computed.amount);
39
+ _computed.description = `${name} (${localAmount})`;
40
+
41
+ return { ..._.cloneDeep(modifier), _computed };
42
+ };
43
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function contains(modifiers = [], modifier = null) {
3
+ if (!modifiers || !modifier) return false;
4
+ return !!modifiers.find(each => each.modifierId === modifier._id);
5
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = () =>
2
+ function convertMenuModifiers(menuModifiers) {
3
+ if (!Array.isArray(menuModifiers)) return [];
4
+ return menuModifiers.map(each => each.modifier || each);
5
+ };
@@ -0,0 +1,44 @@
1
+ module.exports = ({ utils }) => {
2
+ const { helpers } = utils;
3
+
4
+ const defaults = {
5
+ name: '',
6
+ sku: '',
7
+ description: '',
8
+ group: '',
9
+ type: '',
10
+ attributes: [],
11
+ color: '',
12
+ backgroundColor: '',
13
+ icon: '',
14
+ url: '',
15
+ code: '',
16
+ tags: [],
17
+ order: 0,
18
+ included: false,
19
+ direct: true,
20
+ hidden: false,
21
+ required: false,
22
+ print: true,
23
+ delModifiers: [],
24
+ addModifiers: [],
25
+ conditions: null,
26
+ compute: null,
27
+ properties: {},
28
+ get _id() {
29
+ return helpers.getObjectID();
30
+ },
31
+ modifierId: null,
32
+ __typename: 'Modifier',
33
+ };
34
+
35
+ return function create(params) {
36
+ const { _id, modifierId, ...modifier } = params;
37
+ const parentId = modifierId || _id;
38
+ return {
39
+ ...defaults,
40
+ ...modifier,
41
+ modifierId: parentId,
42
+ };
43
+ };
44
+ };
@@ -0,0 +1,20 @@
1
+ module.exports = ({ constants, actions, utils }) => {
2
+ const { Modifier } = constants;
3
+ const { helpers } = utils;
4
+
5
+ return function createAmountOverrideModifier(params) {
6
+ return actions.create({
7
+ compute: {
8
+ amount: params.amount,
9
+ action: Modifier.Compute.Actions.OVERRIDE,
10
+ },
11
+ properties: {
12
+ override: { field: 'amount' },
13
+ },
14
+ attributes: [Modifier.Attributes.OVERRIDE],
15
+ name: `Modifier Amount ${Modifier.Compute.Actions.OVERRIDE}`,
16
+ included: true,
17
+ _id: helpers.getObjectID(),
18
+ });
19
+ };
20
+ };
@@ -0,0 +1,32 @@
1
+ module.exports = ({ _, actions, utils }) => {
2
+ const { helpers } = utils;
3
+ //
4
+ return function createCreditModifier(modifier = {}) {
5
+ const { customerStoredCredit, ...rest } = _.cloneDeep(modifier);
6
+ if (!customerStoredCredit) return null;
7
+ let creditModifier;
8
+ if (!_.isEmpty(rest)) {
9
+ creditModifier = rest;
10
+ }
11
+ // create one
12
+ else {
13
+ creditModifier = actions.create({
14
+ _id: helpers.getObjectID(),
15
+ type: 'credit',
16
+ name: 'Customer stored credit',
17
+ direct: true,
18
+ });
19
+ }
20
+
21
+ creditModifier.compute = {
22
+ amount: 100,
23
+ type: 'percentage',
24
+ action: 'subtract',
25
+ };
26
+ creditModifier.properties = {
27
+ maxAmount: customerStoredCredit,
28
+ sort: 999,
29
+ };
30
+ return creditModifier;
31
+ };
32
+ };
@@ -0,0 +1,25 @@
1
+ module.exports = ({ constants, actions, localization, utils }) => {
2
+ const { helpers } = utils;
3
+ const { Modifier } = constants;
4
+
5
+ return function createDiscountModifier(params) {
6
+ const { amount, type } = params;
7
+ const { formatAmount } = localization;
8
+
9
+ const name =
10
+ type === Modifier.Compute.Types.PERCENTAGE
11
+ ? `${amount}%`
12
+ : `${formatAmount(amount)}`;
13
+
14
+ return actions.create({
15
+ compute: {
16
+ action: Modifier.Compute.Actions.SUBTRACT,
17
+ amount,
18
+ type,
19
+ },
20
+ type: Modifier.Types.DISCOUNT,
21
+ name: `${name} ${Modifier.Types.DISCOUNT}`,
22
+ _id: helpers.getObjectID(),
23
+ });
24
+ };
25
+ };
@@ -0,0 +1,29 @@
1
+ module.exports = ({ actions }) =>
2
+ function createGroupValuesModifier({ modifier, value, add = false }) {
3
+ if (!modifier || !value || !actions.isGroupOfValues(modifier)) return null;
4
+
5
+ const multiSelect = !actions.isSingleValue(modifier);
6
+ let selectedValues = [];
7
+ const modifierValues = [...modifier.properties.group.values, value];
8
+
9
+ if (!add) {
10
+ selectedValues = [...(modifier.properties.group.selectedValues || [])];
11
+ const remove = selectedValues.includes(value);
12
+ if (remove)
13
+ selectedValues = selectedValues.filter(each => each !== value);
14
+ else if (multiSelect) selectedValues.push(value);
15
+ else selectedValues = [value];
16
+ }
17
+
18
+ return {
19
+ ...modifier,
20
+ properties: {
21
+ ...modifier.properties,
22
+ group: {
23
+ ...modifier.properties.group,
24
+ selectedValues,
25
+ values: add ? [...new Set(modifierValues)] : [],
26
+ },
27
+ },
28
+ };
29
+ };
@@ -0,0 +1,42 @@
1
+ /*
2
+ * create a distrubuted Modifier based on Order and Item
3
+ */
4
+ module.exports = ({ _, utils, constants, actions }) => {
5
+ const { math } = utils;
6
+ const { Modifier } = constants;
7
+
8
+ return function createIndirectModifier(
9
+ modifier,
10
+ options = { orderTotal: 0, itemTotal: 0, itemQuantity: 1 }
11
+ ) {
12
+ const { compute = {} } = modifier;
13
+ const { type, amount = 0 } = compute;
14
+ let modifierAmount = amount;
15
+
16
+ if (type === Modifier.Compute.Types.PERCENTAGE)
17
+ modifierAmount = math.div(math.mul(options.orderTotal, amount), 100);
18
+
19
+ let amountToApply = 0;
20
+
21
+ if (!math.isZero(options.orderTotal))
22
+ amountToApply = math.div(
23
+ math.mul(modifierAmount, options.itemTotal),
24
+ options.orderTotal,
25
+ options.itemQuantity
26
+ );
27
+
28
+ const modifierToAdd = actions.create({
29
+ ..._.cloneDeep(modifier),
30
+ direct: false,
31
+ compute: {
32
+ type: Modifier.Compute.Types.FIXED,
33
+ amount: amountToApply,
34
+ action: compute.action || Modifier.Compute.Actions.SUBTRACT,
35
+ },
36
+ });
37
+ if (actions.getProperty(modifierToAdd, 'maxAmount') !== null)
38
+ delete modifierToAdd.properties.maxAmount;
39
+
40
+ return modifierToAdd;
41
+ };
42
+ };
@@ -0,0 +1,19 @@
1
+ module.exports = ({ constants, actions, utils }) => {
2
+ const { Modifier } = constants;
3
+ const { helpers } = utils;
4
+
5
+ return function createSubscriptionModifier(params = {}) {
6
+ return actions.create({
7
+ compute: {
8
+ action: Modifier.Compute.Actions.SUBTRACT,
9
+ type: Modifier.Compute.Types.FIXED,
10
+ amount: params.amount,
11
+ },
12
+ attributes: [Modifier.Attributes.SUBSCRIPTION],
13
+ name: Modifier.Attributes.SUBSCRIPTION,
14
+ type: Modifier.Types.DISCOUNT,
15
+ _id: helpers.getObjectID(),
16
+ ...params,
17
+ });
18
+ };
19
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = () =>
2
+ function displayAsCard(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.properties &&
6
+ modifier.properties.group &&
7
+ modifier.properties.group.displayType === 'card'
8
+ );
9
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = () =>
2
+ function displayAsChips(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.properties &&
6
+ modifier.properties.group &&
7
+ modifier.properties.group.displayType === 'chips'
8
+ );
9
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = () =>
2
+ function displayAsList(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.properties &&
6
+ modifier.properties.group &&
7
+ modifier.properties.group.displayType === 'list'
8
+ );
9
+ };
@@ -0,0 +1,12 @@
1
+ module.exports = ({ utils }) => {
2
+ const { helpers } = utils;
3
+ return function duplicate(modifier) {
4
+ if (!modifier) return null;
5
+
6
+ return {
7
+ ...modifier,
8
+ modifierId: modifier.modifierId || modifier._id,
9
+ _id: helpers.getObjectID(),
10
+ };
11
+ };
12
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = () =>
2
+ function enableAutoPopup(modifier) {
3
+ return !!(
4
+ modifier &&
5
+ modifier.properties &&
6
+ modifier.properties.group &&
7
+ modifier.properties.group.enableAutoPopup
8
+ );
9
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = () =>
2
+ function filterByRequiredModifiers(modifiers) {
3
+ return modifiers.filter(each => each.required);
4
+ };
@@ -0,0 +1,7 @@
1
+ module.exports = () =>
2
+ function findById(modifiers, id) {
3
+ if (!Array.isArray(modifiers)) return null;
4
+ return modifiers
5
+ .filter(Boolean)
6
+ .find(each => each._id === id || each.modifierId === id);
7
+ };
@@ -0,0 +1,10 @@
1
+ module.exports = ({ actions }) =>
2
+ function findByPaymentMethod({ modifiers, paymentMethod = '' }) {
3
+ if (!Array.isArray(modifiers) || !paymentMethod) return null;
4
+
5
+ return modifiers.find(
6
+ each =>
7
+ actions.isPaymentMethods(each) &&
8
+ each.conditions.paymentMethods.includes(paymentMethod)
9
+ );
10
+ };
@@ -0,0 +1,10 @@
1
+ module.exports = ({ actions }) =>
2
+ function findByPaymentType({ modifiers, paymentType = '' }) {
3
+ if (!Array.isArray(modifiers) || !paymentType) return null;
4
+
5
+ return modifiers.find(
6
+ each =>
7
+ actions.isPaymentTypes(each) &&
8
+ each.conditions.paymentTypes.includes(paymentType)
9
+ );
10
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ actions }) =>
2
+ function getAvailablePromotions(modifiers) {
3
+ if (!Array.isArray(modifiers)) return [];
4
+ return modifiers.filter(each => actions.isAvailablePromotion(each));
5
+ };
@@ -0,0 +1,15 @@
1
+ module.exports = ({ actions }) =>
2
+ /*
3
+ * This function will receive a list of promotion modifiers and filter them by the limits that we have for promotions
4
+ * Filters are:
5
+ * modifier.properties.promotion.dateLimit.{from, to} which compares today with these two dates
6
+ * modifier.properties.promotion.numberOfUsesLimit which will be checked with modifier.properties.promotion.numberOfUses
7
+ */
8
+ function getAvailablePromotionsOrSubscriptions(modifiers) {
9
+ if (!Array.isArray(modifiers)) return [];
10
+ return modifiers.filter(
11
+ each =>
12
+ actions.isAvailableSubscription(each) ||
13
+ actions.isAvailablePromotion(each)
14
+ );
15
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ actions }) =>
2
+ function getAvailableSubscriptions(modifiers) {
3
+ if (!Array.isArray(modifiers)) return [];
4
+ return modifiers.filter(each => actions.isAvailableSubscription(each));
5
+ };
@@ -0,0 +1,6 @@
1
+ module.exports = ({ actions }) =>
2
+ //
3
+ function getByAttribute(modifiers, attribute) {
4
+ if (!modifiers) return [];
5
+ return modifiers.filter(each => actions.hasAttribute(each, attribute));
6
+ };
@@ -0,0 +1,6 @@
1
+ module.exports = ({ actions }) =>
2
+ //
3
+ function getCreditModifier(modifiers) {
4
+ if (!modifiers) return null;
5
+ return modifiers.find(actions.isCredit);
6
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = ({ actions }) =>
2
+ function getDefaultModifiers(modifiers) {
3
+ return (modifiers || []).filter(each => actions.isDefault(each));
4
+ };
@@ -0,0 +1,10 @@
1
+ module.exports = () =>
2
+ function getDepartmentMaxItems(modifier) {
3
+ return (
4
+ (modifier &&
5
+ modifier.properties &&
6
+ modifier.properties.department &&
7
+ modifier.properties.department.maxItems) ||
8
+ 0
9
+ );
10
+ };
@@ -0,0 +1,11 @@
1
+ module.exports = ({ actions, utils }) => {
2
+ const { math } = utils;
3
+ const getOrder = modifier => (modifier && modifier.order) || 0;
4
+
5
+ return function getDepartmentModifiers(modifiers) {
6
+ if (!modifiers || !Array.isArray(modifiers)) return [];
7
+ return modifiers
8
+ .filter(each => actions.isDepartment(each))
9
+ .sort((mod1, mod2) => math.sub(getOrder(mod1), getOrder(mod2)));
10
+ };
11
+ };
@@ -0,0 +1,6 @@
1
+ module.exports = () =>
2
+ function getDescription(modifier) {
3
+ return (
4
+ (modifier && modifier._computed && modifier._computed.description) || ''
5
+ );
6
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = ({ actions }) =>
2
+ function getDescriptions(modifiers) {
3
+ if (!Array.isArray(modifiers)) return '';
4
+
5
+ const descriptions = modifiers
6
+ .map(each => actions.getDescription(each))
7
+ .filter(Boolean);
8
+ return descriptions.join(', ');
9
+ };
@@ -0,0 +1,5 @@
1
+ module.exports = ({ actions }) =>
2
+ function getDirectModifiers(modifiers) {
3
+ if (!Array.isArray(modifiers)) return [];
4
+ return modifiers.filter(each => actions.isDirect(each));
5
+ };