@darkpos/pricing 1.0.112 → 1.0.115

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.
@@ -4,7 +4,10 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
4
4
  //
5
5
 
6
6
  const calculateOne = (inputItem, opts = {}) => {
7
- const item = _.cloneDeep(inputItem);
7
+ const item = _.cloneDeep({
8
+ ...inputItem,
9
+ quantity: math.max(0, Number(inputItem.quantity) || 0),
10
+ });
8
11
  const amountToPay =
9
12
  typeof opts.amountToPay === 'number' ? opts.amountToPay : 0;
10
13
  const paymentMethod = opts.paymentMethod || null;
@@ -41,11 +44,9 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
41
44
  }
42
45
 
43
46
  const modifiers = [];
44
- let { modifiers: itemModifiersPrev = [] } =
45
- actions.removeModifiersByQuantity(item);
46
47
 
47
- itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
48
- modifiers: itemModifiersPrev,
48
+ const itemModifiersPrev = modifierActions.unlockCustomerStatsModifiers({
49
+ modifiers: item.modifiers,
49
50
  customer,
50
51
  });
51
52
 
@@ -175,6 +176,7 @@ module.exports = ({ _, utils, actions, modifierActions }) => {
175
176
  };
176
177
  item.price = priceOverride;
177
178
  price = priceOverride;
179
+ computedPrice = priceOverride;
178
180
  }
179
181
 
180
182
  if (modifierActions.isQuantityOverride(modifier)) {
package/lib/item/index.js CHANGED
@@ -43,7 +43,7 @@ const getTotalsDifference = require('./getTotalsDifference');
43
43
  const getTotalNeareastDifference = require('./getTotalNeareastDifference');
44
44
  const getNoteTags = require('./getNoteTags');
45
45
  const getBasePrice = require('./getBasePrice');
46
- const removeModifiersByQuantity = require('./removeModifiersByQuantity');
46
+ const validateModifiersByQuantity = require('./validateModifiersByQuantity');
47
47
  const getModifiersBySingleValueId = require('./getModifiersBySingleValueId');
48
48
  const getLastLocation = require('./getLastLocation');
49
49
  const hasAddModifiers = require('./hasAddModifiers');
@@ -126,7 +126,7 @@ const itemActions = (deps = {}) => {
126
126
  getTotalNeareastDifference: getTotalNeareastDifference(innerDeps),
127
127
  getNoteTags: getNoteTags(innerDeps),
128
128
  getBasePrice: getBasePrice(innerDeps),
129
- removeModifiersByQuantity: removeModifiersByQuantity(innerDeps),
129
+ validateModifiersByQuantity: validateModifiersByQuantity(innerDeps),
130
130
  getModifiersBySingleValueId: getModifiersBySingleValueId(innerDeps),
131
131
  getLastLocation: getLastLocation(innerDeps),
132
132
  hasAddModifiers: hasAddModifiers(innerDeps),
@@ -1,4 +1,4 @@
1
- module.exports = ({ modifierActions }) =>
1
+ module.exports = ({ modifierActions, actions }) =>
2
2
  function validateModifiers({
3
3
  item,
4
4
  itemModifiers,
@@ -11,7 +11,7 @@ module.exports = ({ modifierActions }) =>
11
11
  customer,
12
12
  }) {
13
13
  const validatedModifiers = [];
14
- const firstValidatedModifiers = itemModifiers.map(each =>
14
+ let firstValidatedModifiers = itemModifiers.map(each =>
15
15
  modifierActions.validate(each, {
16
16
  item,
17
17
  startRequestDate,
@@ -24,20 +24,30 @@ module.exports = ({ modifierActions }) =>
24
24
  })
25
25
  );
26
26
 
27
+ firstValidatedModifiers = actions.validateModifiersByQuantity({
28
+ modifiers: firstValidatedModifiers,
29
+ quantity: item.quantity,
30
+ });
31
+
32
+ const isIdMatch = (mod, modifierId) => {
33
+ if (typeof mod === 'string') return mod === modifierId;
34
+ return mod._id === modifierId;
35
+ };
36
+
27
37
  firstValidatedModifiers.forEach(validModifier => {
28
38
  const parentAddModifier = firstValidatedModifiers.find(
29
39
  validMod =>
30
40
  validMod.addModifiers &&
31
- validMod.addModifiers.some(
32
- addMod => addMod._id === validModifier.modifierId
41
+ validMod.addModifiers.some(addMod =>
42
+ isIdMatch(addMod, validModifier.modifierId)
33
43
  )
34
44
  );
35
45
 
36
46
  const parentDelModifier = firstValidatedModifiers.find(
37
47
  validMod =>
38
48
  validMod.delModifiers &&
39
- validMod.delModifiers.some(
40
- delMod => delMod._id === validModifier.modifierId
49
+ validMod.delModifiers.some(delMod =>
50
+ isIdMatch(delMod, validModifier.modifierId)
41
51
  )
42
52
  );
43
53
 
@@ -53,13 +63,8 @@ module.exports = ({ modifierActions }) =>
53
63
  nextValidModifier.conditions.valid;
54
64
 
55
65
  if (shouldInvalidateAddModifier || shouldInvalidateDelModifier) {
56
- nextValidModifier = {
57
- ...nextValidModifier,
58
- conditions: {
59
- ...validModifier.conditions,
60
- valid: false,
61
- },
62
- };
66
+ nextValidModifier =
67
+ modifierActions.markModifierAsNotValid(nextValidModifier);
63
68
  }
64
69
 
65
70
  if (
@@ -0,0 +1,32 @@
1
+ module.exports = ({ modifierActions, utils }) =>
2
+ function validateModifiersByQuantity({ modifiers, quantity }) {
3
+ if (!modifiers || !Array.isArray(modifiers)) {
4
+ return [];
5
+ }
6
+
7
+ const modifierCounts = {};
8
+
9
+ return modifiers.map(modifier => {
10
+ if (
11
+ modifierActions.isPaymentModifier(modifier) ||
12
+ modifierActions.isCalculatedPaymentModifier(modifier) ||
13
+ modifierActions.isGroupOfModifiers(modifier) ||
14
+ !modifier.modifierId ||
15
+ !modifierActions.isDirect(modifier) ||
16
+ modifierActions.isUnlimitedItemUse(modifier)
17
+ )
18
+ return modifier;
19
+
20
+ const count = modifierCounts[modifier.modifierId] || 0;
21
+
22
+ const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
23
+ const maxQuantity = utils.math.mul(quantity || 0, maxApplies) || quantity;
24
+
25
+ if (count < maxQuantity) {
26
+ modifierCounts[modifier.modifierId] = count + 1;
27
+ return modifier;
28
+ }
29
+
30
+ return modifierActions.markModifierAsNotValid(modifier);
31
+ });
32
+ };
@@ -177,6 +177,7 @@ const isAutoSplit = require('./isAutoSplit');
177
177
  const isKeepRelatedItems = require('./isKeepRelatedItems');
178
178
  const isSplitDepartment = require('./isSplitDepartment');
179
179
  const isModifierValid = require('./isModifierValid');
180
+ const markModifierAsNotValid = require('./markModifierAsNotValid');
180
181
 
181
182
  const modifierActions = (deps = {}) => {
182
183
  const actions = {};
@@ -367,6 +368,7 @@ const modifierActions = (deps = {}) => {
367
368
  isKeepRelatedItems: isKeepRelatedItems(innerDeps),
368
369
  isSplitDepartment: isSplitDepartment(innerDeps),
369
370
  isModifierValid: isModifierValid(innerDeps),
371
+ markModifierAsNotValid: markModifierAsNotValid(innerDeps),
370
372
  });
371
373
 
372
374
  Object.keys(freezedActions).forEach(actionName => {
@@ -14,9 +14,9 @@ module.exports = ({ utils, actions }) => {
14
14
  };
15
15
 
16
16
  if (
17
- properties.numberOfUses &&
18
- properties.numberOfUsesLimit &&
19
- math.gte(properties.numberOfUses, properties.numberOfUsesLimit)
17
+ properties.uses &&
18
+ properties.usesLimit &&
19
+ math.gte(properties.uses, properties.usesLimit)
20
20
  )
21
21
  return false;
22
22
 
@@ -0,0 +1,10 @@
1
+ module.exports = () =>
2
+ function markModifierAsNotValid(modifier) {
3
+ return {
4
+ ...modifier,
5
+ conditions: {
6
+ ...modifier.conditions,
7
+ valid: false,
8
+ },
9
+ };
10
+ };
@@ -26,15 +26,15 @@ module.exports = ({ actions, itemActions, modifierActions, utils, _ }) => {
26
26
  }
27
27
 
28
28
  const { quantity, price } = orderItem;
29
- let numberOfUses = quantity;
29
+ let uses = quantity;
30
30
  if (remaining) {
31
31
  const left = remaining - (used || 0);
32
- if (quantity > left) numberOfUses = left;
32
+ if (quantity > left) uses = left;
33
33
  }
34
34
 
35
35
  const modifier = modifierActions.createSubscriptionModifier({
36
- amount: math.mul(numberOfUses, price),
37
- properties: { subscription: { numberOfUses } },
36
+ amount: math.mul(uses, price),
37
+ properties: { subscription: { uses } },
38
38
  });
39
39
  orderItem.modifiers.push(modifier);
40
40
 
@@ -1,13 +1,9 @@
1
1
  module.exports = ({ actions, modifierActions }) => {
2
2
  const getRemaining = (subscriptions, orderId) => {
3
3
  const remaining = subscriptions.reduce((total, subscription) => {
4
- const {
5
- numberOfUsesLimit = 0,
6
- numberOfUses = 0,
7
- history = {},
8
- } = subscription;
4
+ const { usesLimit = 0, uses = 0, history = {} } = subscription;
9
5
  const orderHistory = history[orderId] || 0;
10
- return total + numberOfUsesLimit + orderHistory - numberOfUses;
6
+ return total + usesLimit + orderHistory - uses;
11
7
  }, 0);
12
8
 
13
9
  return remaining;
@@ -27,16 +23,16 @@ module.exports = ({ actions, modifierActions }) => {
27
23
  ],
28
24
  []
29
25
  );
30
- const numberOfUses = modifiers.reduce(
26
+ const uses = modifiers.reduce(
31
27
  (sum, each) =>
32
28
  sum +
33
29
  ((each.properties &&
34
30
  each.properties.subscription &&
35
- each.properties.subscription.numberOfUses) ||
31
+ each.properties.subscription.uses) ||
36
32
  0),
37
33
  0
38
34
  );
39
- return numberOfUses;
35
+ return uses;
40
36
  };
41
37
 
42
38
  const getSubscriptions = subscriptions =>
@@ -56,12 +52,14 @@ module.exports = ({ actions, modifierActions }) => {
56
52
 
57
53
  subscriptions = getSubscriptions(subscriptions);
58
54
 
59
- const isUnlimited = subscriptions.some(each => !each.numberOfUsesLimit);
55
+ const isUnlimited = subscriptions.some(
56
+ each => !each.usesLimit || each.renewalType === 'limit_reached'
57
+ );
60
58
  if (isUnlimited) return [true];
61
59
 
62
60
  const remaining = getRemaining(subscriptions, order.parentId || order._id);
63
- const numberOfUses = getNumberOfUses(order.items, item);
61
+ const uses = getNumberOfUses(order.items, item);
64
62
 
65
- return [remaining > numberOfUses, remaining, numberOfUses];
63
+ return [remaining > uses, remaining, uses];
66
64
  };
67
65
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darkpos/pricing",
3
- "version": "1.0.112",
3
+ "version": "1.0.115",
4
4
  "description": "Pricing calculator",
5
5
  "author": "Dark POS",
6
6
  "license": "ISC",
@@ -55,5 +55,5 @@
55
55
  "supertest": "^6.2.3",
56
56
  "supervisor": "^0.12.0"
57
57
  },
58
- "gitHead": "ecde0ddb5fed6841e2ff1fa688120201557971cb"
58
+ "gitHead": "c2e7e75c33bf1253408a3fab94fe14d6f7fed2ec"
59
59
  }
@@ -1,36 +0,0 @@
1
- module.exports = ({ modifierActions, utils }) =>
2
- function removeModifiersByQuantity(item) {
3
- if (!item || !Array.isArray(item.modifiers)) {
4
- return item;
5
- }
6
-
7
- const modifierCounts = {};
8
-
9
- return {
10
- ...item,
11
- modifiers: item.modifiers.filter(modifier => {
12
- if (
13
- modifierActions.isPaymentModifier(modifier) ||
14
- modifierActions.isCalculatedPaymentModifier(modifier) ||
15
- modifierActions.isGroupOfModifiers(modifier) ||
16
- !modifier.modifierId ||
17
- !modifierActions.isDirect(modifier) ||
18
- modifierActions.isUnlimitedItemUse(modifier)
19
- )
20
- return true;
21
-
22
- const count = modifierCounts[modifier.modifierId] || 0;
23
-
24
- const maxApplies = modifierActions.getMaxItemUse(modifier) || 0;
25
- const maxQuantity =
26
- utils.math.mul(item.quantity || 0, maxApplies) || item.quantity;
27
-
28
- if (count < maxQuantity) {
29
- modifierCounts[modifier.modifierId] = count + 1;
30
- return true;
31
- }
32
-
33
- return false;
34
- }),
35
- };
36
- };