@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.
- package/__TEST__/modifier/calculate.test.js +73 -0
- package/__TEST__/modifier/getAvailablePromotionsOrSubscriptions.test.js +81 -0
- package/__TEST__/modifier/getMatchTagsModifiers.test.js +109 -0
- package/__TEST__/modifier/getModifierIndex.test.js +40 -0
- package/__TEST__/modifier/getRecommendedModifiers.test.js +17 -0
- package/__TEST__/modifier/hasAllTags.test.js +25 -0
- package/__TEST__/modifier/hasAttribute.test.js +47 -0
- package/__TEST__/modifier/hasMatchTags.test.js +56 -0
- package/__TEST__/modifier/hasNoTags.test.js +21 -0
- package/__TEST__/modifier/mocks/toggleModifier_no1.json +13440 -0
- package/__TEST__/modifier/mocks/toggleModifier_no2.json +13438 -0
- package/__TEST__/modifier/mocks/toggleModifier_no3.json +13598 -0
- package/__TEST__/modifier/sort.test.js +41 -0
- package/__TEST__/order.test.js +0 -1
- package/lib/constants/Modifier/Attributes.js +9 -0
- package/lib/constants/Modifier/Compute.js +15 -0
- package/lib/constants/Modifier/Types.js +7 -0
- package/lib/constants/Modifier/index.js +9 -0
- package/lib/constants/{status.js → Status.js} +0 -0
- package/lib/constants/index.js +4 -2
- package/lib/index.js +4 -2
- package/lib/item/getItemsTotalPieces.js +1 -1
- package/lib/modifier/addFile.js +19 -0
- package/lib/modifier/addImage.js +18 -0
- package/lib/modifier/calculate.js +43 -0
- package/lib/modifier/contains.js +5 -0
- package/lib/modifier/convertMenuModifiers.js +5 -0
- package/lib/modifier/create.js +44 -0
- package/lib/modifier/createAmountOverrideModifier.js +20 -0
- package/lib/modifier/createCreditModifier.js +32 -0
- package/lib/modifier/createDiscountModifier.js +25 -0
- package/lib/modifier/createGroupValuesModifier.js +29 -0
- package/lib/modifier/createIndirectModifier.js +42 -0
- package/lib/modifier/createSubscriptionModifier.js +19 -0
- package/lib/modifier/displayAsCard.js +9 -0
- package/lib/modifier/displayAsChips.js +9 -0
- package/lib/modifier/displayAsList.js +9 -0
- package/lib/modifier/duplicate.js +12 -0
- package/lib/modifier/enableAutoPopup.js +9 -0
- package/lib/modifier/filterByRequiredModifiers.js +4 -0
- package/lib/modifier/findById.js +7 -0
- package/lib/modifier/findByPaymentMethod.js +10 -0
- package/lib/modifier/findByPaymentType.js +10 -0
- package/lib/modifier/getAvailablePromotions.js +5 -0
- package/lib/modifier/getAvailablePromotionsOrSubscriptions.js +15 -0
- package/lib/modifier/getAvailableSubscriptions.js +5 -0
- package/lib/modifier/getByAttribute.js +6 -0
- package/lib/modifier/getCreditModifier.js +6 -0
- package/lib/modifier/getDefaultModifiers.js +4 -0
- package/lib/modifier/getDepartmentMaxItems.js +10 -0
- package/lib/modifier/getDepartmentModifiers.js +11 -0
- package/lib/modifier/getDescription.js +6 -0
- package/lib/modifier/getDescriptions.js +9 -0
- package/lib/modifier/getDirectModifiers.js +5 -0
- package/lib/modifier/getDiscountModifiers.js +7 -0
- package/lib/modifier/getEntityModifiers.js +11 -0
- package/lib/modifier/getEntityPromotions.js +11 -0
- package/lib/modifier/getExtendedTags.js +14 -0
- package/lib/modifier/getFiles.js +5 -0
- package/lib/modifier/getGroupModifiers.js +9 -0
- package/lib/modifier/getGroupOfItemsModifiers.js +4 -0
- package/lib/modifier/getGroupRelatedModifiers.js +26 -0
- package/lib/modifier/getImages.js +5 -0
- package/lib/modifier/getInheritedModifiers.js +30 -0
- package/lib/modifier/getItemModifiers.js +39 -0
- package/lib/modifier/getLaundryModifiers.js +9 -0
- package/lib/modifier/getMatchTagsModifiers.js +9 -0
- package/lib/modifier/getModifierIndex.js +14 -0
- package/lib/modifier/getPreferences.js +24 -0
- package/lib/modifier/getPromotionModifiers.js +5 -0
- package/lib/modifier/getPromptMessage.js +6 -0
- package/lib/modifier/getProperty.js +11 -0
- package/lib/modifier/getRecommendedModifiers.js +7 -0
- package/lib/modifier/getRelatedModifiers.js +10 -0
- package/lib/modifier/getRequiredModifiers.js +4 -0
- package/lib/modifier/getSelectedValues.js +7 -0
- package/lib/modifier/getService.js +5 -0
- package/lib/modifier/getSplittedModifiers.js +30 -0
- package/lib/modifier/getStarchModifier.js +9 -0
- package/lib/modifier/getSubscriptionItem.js +12 -0
- package/lib/modifier/getSubscriptionModifiers.js +5 -0
- package/lib/modifier/getSuggestion.js +9 -0
- package/lib/modifier/getUnhiddenModifiers.js +9 -0
- package/lib/modifier/getUsingCount.js +11 -0
- package/lib/modifier/hasAddModifiers.js +5 -0
- package/lib/modifier/hasAllTag.js +12 -0
- package/lib/modifier/hasAttribute.js +8 -0
- package/lib/modifier/hasAttributes.js +19 -0
- package/lib/modifier/hasCreateSubscription.js +10 -0
- package/lib/modifier/hasDisplayPrompt.js +9 -0
- package/lib/modifier/hasMatchTags.js +27 -0
- package/lib/modifier/hasModifier.js +12 -0
- package/lib/modifier/hasNoTags.js +9 -0
- package/lib/modifier/hasRelatedItems.js +8 -0
- package/lib/modifier/includePiecesInQuantity.js +10 -0
- package/lib/modifier/includesInGroup.js +9 -0
- package/lib/modifier/index.js +242 -0
- package/lib/modifier/isAmountOverride.js +7 -0
- package/lib/modifier/isAvailablePromotion.js +23 -0
- package/lib/modifier/isAvailableSubscription.js +28 -0
- package/lib/modifier/isCompact.js +12 -0
- package/lib/modifier/isCredit.js +6 -0
- package/lib/modifier/isCustomerTagsExtend.js +9 -0
- package/lib/modifier/isDefault.js +4 -0
- package/lib/modifier/isDepartment.js +6 -0
- package/lib/modifier/isDirect.js +6 -0
- package/lib/modifier/isDiscount.js +6 -0
- package/lib/modifier/isEditable.js +10 -0
- package/lib/modifier/isGratuity.js +6 -0
- package/lib/modifier/isGroupOfItems.js +12 -0
- package/lib/modifier/isGroupOfModifiers.js +12 -0
- package/lib/modifier/isGroupOfValues.js +13 -0
- package/lib/modifier/isHidden.js +4 -0
- package/lib/modifier/isIncluded.js +4 -0
- package/lib/modifier/isManual.js +9 -0
- package/lib/modifier/isMultiplier.js +11 -0
- package/lib/modifier/isOverride.js +6 -0
- package/lib/modifier/isPaymentMethods.js +8 -0
- package/lib/modifier/isPaymentTypes.js +8 -0
- package/lib/modifier/isPreferences.js +8 -0
- package/lib/modifier/isPriceOverride.js +7 -0
- package/lib/modifier/isPromotion.js +6 -0
- package/lib/modifier/isQuantityOverride.js +7 -0
- package/lib/modifier/isRemoveModifier.js +4 -0
- package/lib/modifier/isRequired.js +4 -0
- package/lib/modifier/isRequiredAndOverride.js +4 -0
- package/lib/modifier/isService.js +9 -0
- package/lib/modifier/isSingleValue.js +9 -0
- package/lib/modifier/isSubscription.js +6 -0
- package/lib/modifier/isTrackUsageSubscription.js +5 -0
- package/lib/modifier/isValueSelected.js +7 -0
- package/lib/modifier/purifyModifiers.js +15 -0
- package/lib/modifier/sort.js +35 -0
- package/lib/order/create.js +3 -3
- package/lib/order/getEndDate.js +2 -4
- package/lib/order/getNumberOfItems.js +2 -4
- package/lib/order/getSameItems.js +6 -1
- package/lib/order/hold.js +1 -1
- package/lib/order/index.js +0 -3
- package/lib/order/open.js +1 -1
- package/lib/order/removeItem.js +2 -3
- package/lib/order/void.js +1 -1
- package/package.json +3 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getEntityModifiers(entity) {
|
|
3
|
+
if (!entity || !entity.modifiers || !entity.modifiers.length) return [];
|
|
4
|
+
return entity.modifiers.map(each => {
|
|
5
|
+
const modifierId = each.modifierId || each._id;
|
|
6
|
+
return {
|
|
7
|
+
...each,
|
|
8
|
+
modifierId,
|
|
9
|
+
};
|
|
10
|
+
});
|
|
11
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getEntityPromotions({ modifiers, entity }) {
|
|
3
|
+
if (!entity) return [];
|
|
4
|
+
let entityModifiers = actions.getMatchTagsModifiers({
|
|
5
|
+
modifiers,
|
|
6
|
+
entity,
|
|
7
|
+
});
|
|
8
|
+
entityModifiers = actions.getUnhiddenModifiers(entityModifiers);
|
|
9
|
+
const promotions = actions.getAvailablePromotions(entityModifiers);
|
|
10
|
+
return promotions;
|
|
11
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getExtendedTags(modifiers) {
|
|
3
|
+
if (!modifiers) return [];
|
|
4
|
+
const filteredModifiers = modifiers.filter(each =>
|
|
5
|
+
actions.isCustomerTagsExtend(each)
|
|
6
|
+
);
|
|
7
|
+
if (!filteredModifiers.length) return [];
|
|
8
|
+
|
|
9
|
+
const extendedTags = filteredModifiers.reduce(
|
|
10
|
+
(arr, each) => arr.concat(each.properties.department.customerTagsExtend),
|
|
11
|
+
[]
|
|
12
|
+
);
|
|
13
|
+
return extendedTags;
|
|
14
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getGroupModifiers({ modifier, includeParent = true }) {
|
|
3
|
+
const { properties } = modifier;
|
|
4
|
+
if (!properties || !properties.group) return [];
|
|
5
|
+
const { modifiers = [] } = properties.group;
|
|
6
|
+
const groupModifiers = [...modifiers];
|
|
7
|
+
if (includeParent) groupModifiers.push(modifier);
|
|
8
|
+
return groupModifiers.filter(Boolean);
|
|
9
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module.exports = ({ actions }) => {
|
|
2
|
+
const find = (modifiers = [], modifierId = '') =>
|
|
3
|
+
modifiers.find(each => each._id === modifierId);
|
|
4
|
+
// This method returns all modifiers which are referenced by a modifier
|
|
5
|
+
return function getGroupRelatedModifiers({ cache, modifier }) {
|
|
6
|
+
if (!modifier) return [];
|
|
7
|
+
const checkCache = Array.isArray(cache) && cache.length;
|
|
8
|
+
const modifiers = actions.getGroupModifiers({
|
|
9
|
+
modifier,
|
|
10
|
+
includeParent: false,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const groupModifiers = modifiers.reduce((arr, each) => {
|
|
14
|
+
if (!each || !each._id) return arr;
|
|
15
|
+
if (checkCache) {
|
|
16
|
+
const org = find(cache, each.modifierId || each._id);
|
|
17
|
+
if (org) arr.push(org);
|
|
18
|
+
}
|
|
19
|
+
return arr;
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
if (actions.includesInGroup(modifier)) groupModifiers.unshift(modifier);
|
|
23
|
+
|
|
24
|
+
return groupModifiers;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = ({ actions }) => {
|
|
2
|
+
const isRelated = modifier => actions.isGroupOfItems(modifier);
|
|
3
|
+
|
|
4
|
+
return function getInheritedModifiers({ parentItem, childItem }) {
|
|
5
|
+
if (!parentItem || !childItem) return [];
|
|
6
|
+
|
|
7
|
+
const { addModifiers: parentModifiers } = parentItem;
|
|
8
|
+
const { addModifiers: childModifiers = [], _id } = childItem;
|
|
9
|
+
const modifiers = [...childModifiers];
|
|
10
|
+
|
|
11
|
+
const relatedItemModifier = parentModifiers.find(each => isRelated(each));
|
|
12
|
+
if (!relatedItemModifier) return modifiers;
|
|
13
|
+
|
|
14
|
+
const { properties = {} } = relatedItemModifier;
|
|
15
|
+
const items = (properties.group && properties.group.items) || [];
|
|
16
|
+
|
|
17
|
+
const relatedItem = items.find(each => each._id === _id);
|
|
18
|
+
if (!relatedItem) return [];
|
|
19
|
+
|
|
20
|
+
if (properties.inheritModifiers && parentModifiers.length) {
|
|
21
|
+
const inheritedModifiers = parentModifiers
|
|
22
|
+
.filter(each => !isRelated(each))
|
|
23
|
+
.map(each => actions.duplicate(each));
|
|
24
|
+
|
|
25
|
+
if (inheritedModifiers.length) modifiers.push(...inheritedModifiers);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return actions.purifyModifiers(modifiers);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module.exports = ({ actions, utils }) => {
|
|
2
|
+
const { helpers } = utils;
|
|
3
|
+
return function getItemModifiers({ modifiers, customer, cache }) {
|
|
4
|
+
const matchedModifiers = actions.getMatchTagsModifiers({
|
|
5
|
+
modifiers,
|
|
6
|
+
entity: customer,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
const enabledModifiers = matchedModifiers.filter(
|
|
10
|
+
each =>
|
|
11
|
+
(actions.isDefault(each) || actions.isRequired(each)) &&
|
|
12
|
+
!(actions.isGroupOfValues(each) || actions.isGroupOfModifiers(each))
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
const relatedModifiers = enabledModifiers
|
|
16
|
+
.map(each =>
|
|
17
|
+
actions.getRelatedModifiers({
|
|
18
|
+
modifier: each,
|
|
19
|
+
modifiers,
|
|
20
|
+
})
|
|
21
|
+
)
|
|
22
|
+
.reduce((acc, val) => acc.concat(val), []);
|
|
23
|
+
|
|
24
|
+
const starchModifier = actions.getStarchModifier({
|
|
25
|
+
cache,
|
|
26
|
+
modifiers: enabledModifiers,
|
|
27
|
+
starch: customer && customer.properties && customer.properties.starch,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const itemModifiers = [...enabledModifiers, ...relatedModifiers];
|
|
31
|
+
if (starchModifier) itemModifiers.push(starchModifier);
|
|
32
|
+
|
|
33
|
+
return itemModifiers.map(each => ({
|
|
34
|
+
...each,
|
|
35
|
+
modifierId: each.modifierId || each._id,
|
|
36
|
+
_id: helpers.getObjectID(),
|
|
37
|
+
}));
|
|
38
|
+
};
|
|
39
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getMatchTagsModifiers({ modifiers, entity }) {
|
|
3
|
+
if (!Array.isArray(modifiers)) return [];
|
|
4
|
+
|
|
5
|
+
return modifiers.filter(each => {
|
|
6
|
+
const modifier = each.modifier || each;
|
|
7
|
+
return modifier && actions.hasMatchTags(modifier, entity);
|
|
8
|
+
});
|
|
9
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
/*
|
|
3
|
+
* will check the entity to find the input modifier
|
|
4
|
+
* if it finds the modifier will return the index of modifier
|
|
5
|
+
* otherwise will return -1
|
|
6
|
+
* */
|
|
7
|
+
function getModifierIndex({ entity, modifier }) {
|
|
8
|
+
if (!entity || !modifier) return -1;
|
|
9
|
+
const { modifiers = [] } = entity;
|
|
10
|
+
const { _id } = modifier;
|
|
11
|
+
return modifiers.findIndex(
|
|
12
|
+
each => each.modifierId === _id || each._id === _id
|
|
13
|
+
);
|
|
14
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module.exports = ({ actions, _ }) =>
|
|
2
|
+
/**
|
|
3
|
+
* This function is for fetching preference Modifiers
|
|
4
|
+
*/
|
|
5
|
+
function getPreferences(modifiers) {
|
|
6
|
+
if (!Array.isArray(modifiers) || !modifiers.length) return [];
|
|
7
|
+
|
|
8
|
+
const preferences = modifiers.filter(modifier =>
|
|
9
|
+
actions.isPreferences(modifier)
|
|
10
|
+
);
|
|
11
|
+
if (!Array.isArray(preferences) || !preferences.length) return [];
|
|
12
|
+
|
|
13
|
+
const groups = preferences.map(modifier => modifier.group).filter(Boolean);
|
|
14
|
+
const sortedGroups = _.sortBy([...new Set(groups)]);
|
|
15
|
+
|
|
16
|
+
const categories = sortedGroups.map(name => ({
|
|
17
|
+
name,
|
|
18
|
+
modifiers: _.sortBy(
|
|
19
|
+
preferences.filter(each => each.group === name),
|
|
20
|
+
['order']
|
|
21
|
+
),
|
|
22
|
+
}));
|
|
23
|
+
return categories;
|
|
24
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getProperty(modifier, key) {
|
|
3
|
+
if (
|
|
4
|
+
modifier &&
|
|
5
|
+
modifier.properties &&
|
|
6
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
7
|
+
modifier.properties.hasOwnProperty(key)
|
|
8
|
+
)
|
|
9
|
+
return modifier.properties[key];
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getRelatedModifiers({ modifier, modifiers }) {
|
|
3
|
+
if (!modifier || !modifier.addModifiers || !modifiers) return [];
|
|
4
|
+
// get related modifiers
|
|
5
|
+
const relatedModifiers = modifier.addModifiers
|
|
6
|
+
.map(each => actions.findById(modifiers, each._id))
|
|
7
|
+
.filter(Boolean);
|
|
8
|
+
|
|
9
|
+
return relatedModifiers;
|
|
10
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getSelectedValues(modifier) {
|
|
3
|
+
if (!actions.isGroupOfValues(modifier)) return null;
|
|
4
|
+
if (Array.isArray(modifier.properties.group.selectedValues))
|
|
5
|
+
return modifier.properties.group.selectedValues.join(', ');
|
|
6
|
+
return null;
|
|
7
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = ({ utils }) => {
|
|
2
|
+
const { math, helpers } = utils;
|
|
3
|
+
return function getSplittedModifiers(
|
|
4
|
+
modifiers,
|
|
5
|
+
totalOriginOrder,
|
|
6
|
+
totalSplitedOrder
|
|
7
|
+
) {
|
|
8
|
+
return modifiers.map(each => {
|
|
9
|
+
const modifier = { ...each };
|
|
10
|
+
const { compute = {} } = modifier;
|
|
11
|
+
if (compute.type === 'fixed' && compute.amount) {
|
|
12
|
+
const amount = totalOriginOrder
|
|
13
|
+
? math.div(
|
|
14
|
+
math.mul(compute.amount, totalSplitedOrder || 0),
|
|
15
|
+
totalOriginOrder
|
|
16
|
+
)
|
|
17
|
+
: 0;
|
|
18
|
+
return {
|
|
19
|
+
...modifier,
|
|
20
|
+
_id: helpers.getObjectID(),
|
|
21
|
+
compute: {
|
|
22
|
+
...compute,
|
|
23
|
+
amount,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return modifier;
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
function getStarchModifier({ modifiers, starch, cache = {} }) {
|
|
3
|
+
const laundryModifiers = actions.getLaundryModifiers(modifiers);
|
|
4
|
+
|
|
5
|
+
if (cache && cache.modifiers && laundryModifiers.length && starch)
|
|
6
|
+
return actions.findById(cache.modifiers, starch);
|
|
7
|
+
|
|
8
|
+
return null;
|
|
9
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getSubscriptionItem(modifier) {
|
|
3
|
+
if (
|
|
4
|
+
modifier &&
|
|
5
|
+
modifier.properties &&
|
|
6
|
+
modifier.properties.subscription &&
|
|
7
|
+
modifier.properties.subscription.item
|
|
8
|
+
)
|
|
9
|
+
return modifier.properties.subscription.item;
|
|
10
|
+
|
|
11
|
+
return null;
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getSuggestion(modifier) {
|
|
3
|
+
const none = 'none';
|
|
4
|
+
if (!modifier) return none;
|
|
5
|
+
if (modifier.required) return 'required';
|
|
6
|
+
if (modifier.recommended) return 'recommended';
|
|
7
|
+
if (modifier.default) return 'default';
|
|
8
|
+
return none;
|
|
9
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
function getUsingCount(modifiers, modifier) {
|
|
3
|
+
if (!Array.isArray(modifiers) || !modifier) return false;
|
|
4
|
+
let count = 0;
|
|
5
|
+
modifiers.forEach(each => {
|
|
6
|
+
if (each.modifierId === modifier._id) {
|
|
7
|
+
count += 1;
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
return count;
|
|
11
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
/*
|
|
3
|
+
* Check if entity has the 'ALL' tag
|
|
4
|
+
* this helps us to check if the modifier with tags
|
|
5
|
+
* can have access to other entities without tags or not
|
|
6
|
+
* will return true if the entity has 'ALL' tag or false otherwise
|
|
7
|
+
* */
|
|
8
|
+
function hasAllTag(modifier) {
|
|
9
|
+
if (!modifier || !Array.isArray(modifier.tags)) return false;
|
|
10
|
+
|
|
11
|
+
return !!modifier.tags.find(tag => tag.toUpperCase() === 'ALL');
|
|
12
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
/*
|
|
3
|
+
* will find the attributes in modifier
|
|
4
|
+
* if it finds any of the attributes will return true
|
|
5
|
+
* otherwise will return false
|
|
6
|
+
* */
|
|
7
|
+
function hasAttributes(modifier, attributes) {
|
|
8
|
+
if (
|
|
9
|
+
!modifier ||
|
|
10
|
+
!Array.isArray(attributes) ||
|
|
11
|
+
!Array.isArray(modifier.attributes)
|
|
12
|
+
)
|
|
13
|
+
return false;
|
|
14
|
+
|
|
15
|
+
for (let i = 0; i < attributes.length; i += 1) {
|
|
16
|
+
if (actions.hasAttribute(modifier, attributes[i])) return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module.exports = ({ _ }) =>
|
|
2
|
+
function hasCreateSubscription(modifiers) {
|
|
3
|
+
return (
|
|
4
|
+
Array.isArray(modifiers) &&
|
|
5
|
+
modifiers.some(modifier => {
|
|
6
|
+
const subscription = _.get(modifier, 'properties.subscription');
|
|
7
|
+
return subscription && subscription.create;
|
|
8
|
+
})
|
|
9
|
+
);
|
|
10
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module.exports = ({ actions }) =>
|
|
2
|
+
/* checks if the customer can be matched with the entity or not,
|
|
3
|
+
* This function will return true in these conditions:
|
|
4
|
+
* Neither customer nor the entity has any tags
|
|
5
|
+
* Customer has no tags and entity has the 'all' tag
|
|
6
|
+
* customer has the 'all' tag and entity has no tags
|
|
7
|
+
* customer and entity have at least one exact tag (case-sensitive)
|
|
8
|
+
* In any other case the function should return false
|
|
9
|
+
* */
|
|
10
|
+
function hasMatchTags(modifier, entity) {
|
|
11
|
+
const entityNoTags = actions.hasNoTags(entity);
|
|
12
|
+
const modifierNoTags = actions.hasNoTags(modifier);
|
|
13
|
+
if (
|
|
14
|
+
(modifierNoTags && entityNoTags) ||
|
|
15
|
+
(entityNoTags && actions.hasAllTag(modifier)) || // customer has no tags but modifier has the all tag
|
|
16
|
+
(modifierNoTags && actions.hasAllTag(entity)) // modifier has no tags but customer has the all tag
|
|
17
|
+
) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (!entity || !entity.tags) return false;
|
|
22
|
+
if (!modifier || !modifier.tags) return false;
|
|
23
|
+
|
|
24
|
+
const sameTag = modifier.tags.find(tag => entity.tags.includes(tag));
|
|
25
|
+
|
|
26
|
+
return !!sameTag;
|
|
27
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
/*
|
|
3
|
+
* will return true if the modifier is in entity and false if it is not
|
|
4
|
+
* */
|
|
5
|
+
function hasModifier({ entity, modifier }) {
|
|
6
|
+
if (!entity || !Array.isArray(entity.modifiers) || !modifier) return false;
|
|
7
|
+
|
|
8
|
+
const { _id } = modifier;
|
|
9
|
+
return !!entity.modifiers.find(
|
|
10
|
+
each => each.modifierId === _id || each._id === _id
|
|
11
|
+
);
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = () =>
|
|
2
|
+
/*
|
|
3
|
+
* Checks if the entity has any tags or not
|
|
4
|
+
* will return true if the entity has not any tag
|
|
5
|
+
* will return false otherwise
|
|
6
|
+
* */
|
|
7
|
+
function hasNoTags(modifier) {
|
|
8
|
+
return !modifier || !Array.isArray(modifier.tags) || !modifier.tags.length;
|
|
9
|
+
};
|