@darkpos/pricing 1.0.3 → 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.
- package/.eslintrc +22 -0
- package/README.md +110 -4
- package/__TEST__/item.test.js +285 -0
- package/__TEST__/order.test.js +234 -0
- package/index.js +1 -0
- package/lib/constants/index.js +5 -0
- package/lib/constants/status.js +39 -0
- package/lib/index.js +36 -9
- package/lib/item/addIndirectModifier.js +55 -0
- package/lib/item/calculate.js +108 -0
- package/lib/item/create.js +35 -0
- package/lib/item/filterByDirectModifiers.js +13 -0
- package/lib/item/findOriginalItem.js +8 -0
- package/lib/item/getBalanceToPay.js +12 -0
- package/lib/item/getDepartmentModifiers.js +5 -0
- package/lib/item/getDiscountModifiers.js +7 -0
- package/lib/item/getItemModifiers.js +16 -0
- package/lib/item/getItemModifiersDescription.js +22 -0
- package/lib/item/getItemPrice.js +57 -0
- package/lib/item/getItemsTotalPaid.js +9 -0
- package/lib/item/getItemsTotalPieces.js +7 -0
- package/lib/item/getNotIncludedModifiers.js +11 -0
- package/lib/item/getParentItem.js +5 -0
- package/lib/item/getPendingIndex.js +5 -0
- package/lib/item/getTotal.js +8 -0
- package/lib/item/getTotalPieces.js +7 -0
- package/lib/item/getTotals.js +25 -0
- package/lib/item/hasCreateSubscription.js +7 -0
- package/lib/item/hasModifier.js +15 -0
- package/lib/item/hasModifierWithValue.js +11 -0
- package/lib/item/hasModifiers.js +9 -0
- package/lib/item/hasSubscription.js +5 -0
- package/lib/item/index.js +80 -4
- package/lib/item/isParentIncluded.js +4 -0
- package/lib/item/isRelatedItem.js +4 -0
- package/lib/item/isSelected.js +13 -0
- package/lib/item/openRecommendationDialog.js +4 -0
- package/lib/item/removeModifier.js +84 -0
- package/lib/item/removeModifierById.js +8 -0
- package/lib/item/removeModifiers.js +14 -0
- package/lib/order/addCreditModifier.js +27 -0
- package/lib/order/addDiscountModifier.js +9 -0
- package/lib/order/addItem.js +292 -0
- package/lib/order/addItemModifier.js +214 -0
- package/lib/order/addModifier.js +9 -0
- package/lib/order/addModifierToAllItems.js +16 -0
- package/lib/order/addNote.js +25 -0
- package/lib/order/addTable.js +11 -0
- package/lib/order/calculate.js +105 -0
- package/lib/order/calculateDue.js +15 -0
- package/lib/order/calculateOrdersDue.js +26 -0
- package/lib/order/canSplit.js +4 -0
- package/lib/order/changeEndDate.js +15 -0
- package/lib/order/changeLocation.js +20 -0
- package/lib/order/changeStartDate.js +14 -0
- package/lib/order/combineSubOrders.js +14 -0
- package/lib/order/containsSerial.js +5 -0
- package/lib/order/create.js +67 -0
- package/lib/order/createParent.js +9 -0
- package/lib/order/duplicateItem.js +16 -0
- package/lib/order/findItemIndex.js +6 -0
- package/lib/order/getAppliedCredit.js +5 -0
- package/lib/order/getBalance.js +9 -0
- package/lib/order/getCustomer.js +4 -0
- package/lib/order/getCustomerStoreCredit.js +14 -0
- package/lib/order/getCustomerSubscriptions.js +8 -0
- package/lib/order/getCustomerSubscriptionsByItem.js +14 -0
- package/lib/order/getDepartmentModifiers.js +9 -0
- package/lib/order/getEndDate.js +6 -0
- package/lib/order/getItemByItemId.js +6 -0
- package/lib/order/getItemIndex.js +9 -0
- package/lib/order/getItemsToPay.js +17 -0
- package/lib/order/getMenuItemsByCustomer.js +19 -0
- package/lib/order/getNumberOfItems.js +12 -0
- package/lib/order/getOrdersPieces.js +10 -0
- package/lib/order/getPendingItemIndex.js +5 -0
- package/lib/order/getRelatedItems.js +11 -0
- package/lib/order/getSameItems.js +14 -0
- package/lib/order/getScheduleByCustomer.js +20 -0
- package/lib/order/getScreenCustomerNotes.js +12 -0
- package/lib/order/getSelectedItem.js +6 -0
- package/lib/order/getStartDate.js +4 -0
- package/lib/order/getTip.js +10 -0
- package/lib/order/getTotalPieces.js +17 -0
- package/lib/order/getTotals.js +28 -0
- package/lib/order/hasAggregate.js +20 -0
- package/lib/order/hasItem.js +7 -0
- package/lib/order/hasRemainingSubscription.js +67 -0
- package/lib/order/hold.js +12 -0
- package/lib/order/index.js +167 -4
- package/lib/order/isDetailed.js +4 -0
- package/lib/order/isHold.js +4 -0
- package/lib/order/isNew.js +4 -0
- package/lib/order/isOpen.js +4 -0
- package/lib/order/isParent.js +7 -0
- package/lib/order/merge.js +96 -0
- package/lib/order/open.js +11 -0
- package/lib/order/pickEndDate.js +70 -0
- package/lib/order/removeApplyModifier.js +24 -0
- package/lib/order/removeDiscountModifier.js +16 -0
- package/lib/order/removeItem.js +56 -0
- package/lib/order/removeItemByIndex.js +5 -0
- package/lib/order/removeItemModifier.js +69 -0
- package/lib/order/removeModifier.js +21 -0
- package/lib/order/removeModifierByAttribute.js +23 -0
- package/lib/order/removeModifiersWithPaymentMethods.js +29 -0
- package/lib/order/removeModifiersWithPaymentTypes.js +27 -0
- package/lib/order/setCustomer.js +50 -0
- package/lib/order/splitByDepartments.js +151 -0
- package/lib/order/toggleModifier.js +9 -0
- package/lib/order/updateItem.js +8 -0
- package/lib/order/updateItemQuantity.js +35 -0
- package/lib/order/void.js +11 -0
- package/package.json +20 -23
- package/lib/item/actions.js +0 -135
- package/lib/modifier/actions.js +0 -163
- package/lib/modifier/constants.js +0 -46
- package/lib/modifier/index.js +0 -8
- package/lib/order/actions.js +0 -47
- package/lib/utils/defaultPrices.js +0 -10
- package/lib/utils/helpers.js +0 -26
- package/lib/utils/index.js +0 -9
- package/lib/utils/math.js +0 -71
package/lib/modifier/actions.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
const { math, applyQuantity, defaultPrices, objId } = require('../utils');
|
|
2
|
-
const constants = require('./constants');
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* If Modifier has an attribute
|
|
6
|
-
*/
|
|
7
|
-
const _hasAttribute = (modifier = {}, attribute) => {
|
|
8
|
-
if (!Array.isArray(modifier.attributes)) return false;
|
|
9
|
-
const { attributes = [] } = modifier;
|
|
10
|
-
return attributes.includes(attribute);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
const _getNonOrderOverrideModifiers = (modifiers = []) =>
|
|
15
|
-
modifiers.filter(
|
|
16
|
-
modifier =>
|
|
17
|
-
!_hasAttribute(modifier, constants.attributes.order) && modifier.action !== 'override'
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
const _getTotalOverrideModifier = (modifiers = []) =>
|
|
22
|
-
modifiers.find(modifier => _hasAttribute(modifier, constants.attributes.modifierTotalOverride));
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
const _getDistributedModifiers = (modifiers = []) =>
|
|
26
|
-
modifiers.filter(modifier => _hasAttribute(modifier, constants.attributes.distributed));
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* create a distrubuted Modifier based on Order and Item
|
|
30
|
-
*/
|
|
31
|
-
const _createDistributedModifier = (order, item, modifier) => {
|
|
32
|
-
let { attributes } = modifier;
|
|
33
|
-
|
|
34
|
-
if (!attributes.includes(constants.attributes.distributed))
|
|
35
|
-
attributes = [...(modifier.attributes || []), constants.attributes.distributed];
|
|
36
|
-
|
|
37
|
-
let modifierAmount = 0;
|
|
38
|
-
|
|
39
|
-
if (modifier.type === 'percentage')
|
|
40
|
-
modifierAmount = math.div(math.mul(order.total, modifier.amount), 100);
|
|
41
|
-
else ({ amount: modifierAmount } = modifier);
|
|
42
|
-
|
|
43
|
-
const amountToApply = math.div(math.mul(modifierAmount, item.total), order.total, item.quantity);
|
|
44
|
-
return {
|
|
45
|
-
_id: objId(),
|
|
46
|
-
...modifier,
|
|
47
|
-
type: 'fixed',
|
|
48
|
-
attributes: attributes.filter(a => a !== constants.order),
|
|
49
|
-
amount: amountToApply,
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Get Description of a modifier based on its fields
|
|
55
|
-
*/
|
|
56
|
-
const _getDescription = modifier => {
|
|
57
|
-
const { name, amount, properties = {}, action } = modifier;
|
|
58
|
-
|
|
59
|
-
if (
|
|
60
|
-
_hasAttribute(modifier, constants.attributes.list) &&
|
|
61
|
-
properties.selectedValue &&
|
|
62
|
-
Array.isArray(properties.selectedValue)
|
|
63
|
-
)
|
|
64
|
-
return properties.selectedValue.join(', ');
|
|
65
|
-
|
|
66
|
-
const symbol = constants.symbols[action];
|
|
67
|
-
const amountStr = math.gt(amount, 0)
|
|
68
|
-
? `(${[symbol, math.toFixed(amount)].filter(Boolean).join('')})`
|
|
69
|
-
: null;
|
|
70
|
-
const description = [name, amountStr].filter(Boolean).join('');
|
|
71
|
-
|
|
72
|
-
return description;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Get pricing of modifier
|
|
77
|
-
*/
|
|
78
|
-
const pricing = (modifier = {}, options = { price: 0, quantity: 1 }) => {
|
|
79
|
-
const isType = type => modifier.type === type;
|
|
80
|
-
const isAction = action => modifier.action === action;
|
|
81
|
-
|
|
82
|
-
let actionValue = 1;
|
|
83
|
-
let amount = 0;
|
|
84
|
-
const prices = { ...defaultPrices };
|
|
85
|
-
const minItems = (modifier.properties || {}).minItems || 0;
|
|
86
|
-
const isOverrideModifier = isAction('override');
|
|
87
|
-
|
|
88
|
-
if (isAction('add')) actionValue = 1;
|
|
89
|
-
else if (isAction('subtract')) actionValue = -1;
|
|
90
|
-
else if (isOverrideModifier) actionValue = 1;
|
|
91
|
-
|
|
92
|
-
if (isType('fixed')) amount = parseFloat(modifier.amount);
|
|
93
|
-
else if (isType('percentage')) amount = math.div(math.mul(options.price, modifier.amount), 100);
|
|
94
|
-
|
|
95
|
-
const value = math.mul(actionValue, amount);
|
|
96
|
-
if (isOverrideModifier) prices.subTotal = value;
|
|
97
|
-
else if (
|
|
98
|
-
(_hasAttribute(modifier, constants.attributes.discount) ||
|
|
99
|
-
_hasAttribute(modifier, constants.attributes.promotion)) &&
|
|
100
|
-
((minItems > 0 && options.quantity && options.quantity >= minItems) || minItems <= 0)
|
|
101
|
-
)
|
|
102
|
-
prices.discount = value;
|
|
103
|
-
else if (_hasAttribute(modifier, constants.attributes.tax)) prices.tax = value;
|
|
104
|
-
else if (_hasAttribute(modifier, constants.attributes.gratuity)) prices.tip = value;
|
|
105
|
-
else if (
|
|
106
|
-
_hasAttribute(modifier, constants.attributes.paymentMethods) ||
|
|
107
|
-
_hasAttribute(modifier, constants.attributes.paymentTypes)
|
|
108
|
-
)
|
|
109
|
-
prices.fee = value;
|
|
110
|
-
else prices.subTotal = value;
|
|
111
|
-
|
|
112
|
-
if (_hasAttribute(modifier, constants.attributes.distributed))
|
|
113
|
-
prices.distributed = math.add(prices.discount, prices.tax, prices.subTotal);
|
|
114
|
-
|
|
115
|
-
return applyQuantity(prices, options.quantity);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Get pricing of modifirs in item
|
|
120
|
-
*/
|
|
121
|
-
const pricingModifiers = (modifiers, options = { price: 0, quantity: 1 }) => {
|
|
122
|
-
const modifierDPrices = { ...defaultPrices };
|
|
123
|
-
if (!modifiers.length) return modifierDPrices;
|
|
124
|
-
|
|
125
|
-
// get modifiers in order level and without override action
|
|
126
|
-
const itemModifiers = _getNonOrderOverrideModifiers(modifiers);
|
|
127
|
-
// get distributed modifiers
|
|
128
|
-
const distributedModifiers = _getDistributedModifiers(itemModifiers);
|
|
129
|
-
// find one override modifier
|
|
130
|
-
const totalOverrideModifier = _getTotalOverrideModifier(modifiers);
|
|
131
|
-
|
|
132
|
-
if (totalOverrideModifier) {
|
|
133
|
-
modifierDPrices.subTotal = totalOverrideModifier.amount;
|
|
134
|
-
modifierDPrices.total = totalOverrideModifier.amount;
|
|
135
|
-
}
|
|
136
|
-
const modifiersToCalculate = totalOverrideModifier ? distributedModifiers : itemModifiers;
|
|
137
|
-
|
|
138
|
-
const prices = modifiersToCalculate.reduce((acc, modifier) => {
|
|
139
|
-
const modifierPrices = pricing(modifier, options);
|
|
140
|
-
const subTotal = math.add(acc.subTotal, modifierPrices.subTotal);
|
|
141
|
-
const tax = math.add(acc.tax, modifierPrices.tax);
|
|
142
|
-
const fee = math.add(acc.fee, modifierPrices.fee);
|
|
143
|
-
const tip = math.add(acc.tip, modifierPrices.tip);
|
|
144
|
-
const discount = math.add(acc.discount, modifierPrices.discount);
|
|
145
|
-
const distributed = math.add(acc.distributed, modifierPrices.distributed);
|
|
146
|
-
return { subTotal, tax, fee, tip, discount, distributed };
|
|
147
|
-
}, modifierDPrices);
|
|
148
|
-
|
|
149
|
-
prices.total = math.add(prices.subTotal, prices.tax, prices.fee, prices.tip, prices.discount);
|
|
150
|
-
return prices;
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
//
|
|
154
|
-
module.exports = {
|
|
155
|
-
pricing,
|
|
156
|
-
pricingModifiers,
|
|
157
|
-
_getDescription,
|
|
158
|
-
_hasAttribute,
|
|
159
|
-
_getDistributedModifiers,
|
|
160
|
-
_getNonOrderOverrideModifiers,
|
|
161
|
-
_getTotalOverrideModifier,
|
|
162
|
-
_createDistributedModifier,
|
|
163
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
const primaryAttributes = {
|
|
2
|
-
promotion: 'promotion',
|
|
3
|
-
discount: 'discount',
|
|
4
|
-
tax: 'tax',
|
|
5
|
-
paymentMethods: 'paymentMethods',
|
|
6
|
-
paymentTypes: 'paymentTypes',
|
|
7
|
-
group: 'group',
|
|
8
|
-
list: 'list',
|
|
9
|
-
priceOverride: 'priceOverride',
|
|
10
|
-
quantityOverride: 'quantityOverride',
|
|
11
|
-
department: 'department',
|
|
12
|
-
starch: 'starch',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const secondAttributes = {
|
|
16
|
-
hidden: 'hidden',
|
|
17
|
-
required: 'required',
|
|
18
|
-
default: 'default',
|
|
19
|
-
order: 'order',
|
|
20
|
-
relatedItems: 'relatedItems',
|
|
21
|
-
recommended: 'recommended',
|
|
22
|
-
category: 'category',
|
|
23
|
-
multiple: 'multiple',
|
|
24
|
-
bind: 'bind',
|
|
25
|
-
customerTagsExtend: 'customerTagsExtend',
|
|
26
|
-
removeModifiers: 'removeModifiers',
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const attributes = {
|
|
30
|
-
...primaryAttributes,
|
|
31
|
-
...secondAttributes,
|
|
32
|
-
gratuity: 'gratuity',
|
|
33
|
-
subscription: 'subscription',
|
|
34
|
-
distributed: 'distributed',
|
|
35
|
-
modifierTotalOverride: 'modifierTotalOverride',
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const symbols = {
|
|
39
|
-
add: '+',
|
|
40
|
-
subtract: '-',
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
module.exports = {
|
|
44
|
-
attributes,
|
|
45
|
-
symbols,
|
|
46
|
-
};
|
package/lib/modifier/index.js
DELETED
package/lib/order/actions.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
const { uniqBy, cloneDeep } = require('lodash');
|
|
2
|
-
const itemActions = require('../item/actions');
|
|
3
|
-
const modifierActions = require('../modifier/actions');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* return calculated Order
|
|
7
|
-
*/
|
|
8
|
-
const calculateOrder = order => {
|
|
9
|
-
const { items = [] } = order;
|
|
10
|
-
if (!items.length) return order;
|
|
11
|
-
|
|
12
|
-
// WNDM: with not distributed modifiers
|
|
13
|
-
let itemsWNDM = [];
|
|
14
|
-
let newOrder = null;
|
|
15
|
-
let prices = {};
|
|
16
|
-
|
|
17
|
-
const orderItemsModifiers = itemActions._getOrderModifiers(items);
|
|
18
|
-
const concatModifiers = [...(order.modifiers || []), ...orderItemsModifiers];
|
|
19
|
-
const modifiers = uniqBy(concatModifiers, '_id');
|
|
20
|
-
// if there is no order level modifiers, we have to remove them from items
|
|
21
|
-
itemsWNDM = itemActions._removeOrderModifiers(items);
|
|
22
|
-
itemsWNDM = itemActions.calculateItems(itemsWNDM);
|
|
23
|
-
prices = itemActions._itemsPricing(itemsWNDM);
|
|
24
|
-
newOrder = { ...order, ...prices, items: itemsWNDM };
|
|
25
|
-
|
|
26
|
-
if (!modifiers.length) return newOrder;
|
|
27
|
-
|
|
28
|
-
const newItems = itemsWNDM || items;
|
|
29
|
-
let itemsWDM = cloneDeep(newItems);
|
|
30
|
-
modifiers.forEach(mod => {
|
|
31
|
-
const itemsModifiers = itemActions._addOrderModifier(newOrder, newItems, mod);
|
|
32
|
-
// adding the modifiers to items
|
|
33
|
-
itemsWDM = itemsWDM.map(item => ({
|
|
34
|
-
...item,
|
|
35
|
-
modifiers: [...(item.modifiers || []), itemsModifiers[item._id]],
|
|
36
|
-
}));
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
const calculatedItemWDM = itemActions.calculateItems(itemsWDM);
|
|
40
|
-
prices = itemActions._itemsPricing(calculatedItemWDM);
|
|
41
|
-
return { ...order, ...prices, items: calculatedItemWDM };
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
module.exports = {
|
|
46
|
-
calculateOrder,
|
|
47
|
-
};
|
package/lib/utils/helpers.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const ObjectID = require('bson-objectid');
|
|
2
|
-
const math = require('./math');
|
|
3
|
-
const defaultPrices = require('./defaultPrices');
|
|
4
|
-
|
|
5
|
-
const objId = () => ObjectID();
|
|
6
|
-
|
|
7
|
-
const applyQuantity = (prices = defaultPrices, quantity = 1) =>
|
|
8
|
-
Object.keys(prices).reduce(
|
|
9
|
-
(obj, key) => ({
|
|
10
|
-
...obj,
|
|
11
|
-
[key]: math.mul(prices[key], quantity),
|
|
12
|
-
}),
|
|
13
|
-
prices
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
const filterExports = funcs => {
|
|
17
|
-
const names = Object.keys(funcs).filter(name => !name.includes('_'));
|
|
18
|
-
return names.reduce((newFuncs, name) => ({ ...newFuncs, [name]: funcs[name] }), {});
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
module.exports = {
|
|
23
|
-
objId,
|
|
24
|
-
applyQuantity,
|
|
25
|
-
filterExports,
|
|
26
|
-
};
|
package/lib/utils/index.js
DELETED
package/lib/utils/math.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
const Decimal = require('decimal.js');
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
const add = (...args) => {
|
|
5
|
-
if (!args || !Array.isArray(args) || !args.length) throw new Error('Invalid argument');
|
|
6
|
-
|
|
7
|
-
const sum = args.reduce((acc, current) => acc.add(Decimal(current)), Decimal(0));
|
|
8
|
-
|
|
9
|
-
// console.log('add =>', args, ' : ', sum);
|
|
10
|
-
return Decimal(sum.toFixed(2, 1)).toNumber();
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
const sub = (...args) => {
|
|
15
|
-
if (!args || !Array.isArray(args) || !args.length) throw new Error('Invalid argument');
|
|
16
|
-
|
|
17
|
-
const numbers = [...args];
|
|
18
|
-
const first = numbers.shift();
|
|
19
|
-
const sum = numbers.reduce((acc, current) => acc.sub(Decimal(current)), Decimal(first));
|
|
20
|
-
|
|
21
|
-
// console.log('sub =>', args, ' : ', sum);
|
|
22
|
-
return Decimal(sum.toFixed(2, 1)).toNumber();
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
const mul = (...args) => {
|
|
27
|
-
if (!args || !Array.isArray(args) || !args.length) throw new Error('Invalid argument');
|
|
28
|
-
|
|
29
|
-
const sum = args.reduce((acc, current) => acc.mul(Decimal(current)), Decimal(1));
|
|
30
|
-
|
|
31
|
-
// console.log('mul =>', args, ' : ', sum);
|
|
32
|
-
return Decimal(sum.toFixed(2, 1)).toNumber();
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
const div = (...args) => {
|
|
37
|
-
if (!args || !Array.isArray(args) || !args.length) throw new Error('Invalid argument');
|
|
38
|
-
|
|
39
|
-
const numbers = [...args];
|
|
40
|
-
const first = numbers.shift();
|
|
41
|
-
const sum = numbers.reduce((acc, current) => acc.div(Decimal(current)), Decimal(first));
|
|
42
|
-
|
|
43
|
-
// console.log('div =>', args, ' : ', sum);
|
|
44
|
-
return Decimal(sum.toFixed(2, 1)).toNumber();
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
const lte = (x, y) => Decimal(x).lte(Decimal(y));
|
|
49
|
-
|
|
50
|
-
//
|
|
51
|
-
const gt = (x, y) => Decimal(x).gt(Decimal(y));
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
const abs = x =>
|
|
55
|
-
Decimal(x)
|
|
56
|
-
.abs()
|
|
57
|
-
.toNumber();
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
const toFixed = x => Decimal(x).toFixed(2, 1);
|
|
61
|
-
|
|
62
|
-
module.exports = {
|
|
63
|
-
mul,
|
|
64
|
-
div,
|
|
65
|
-
add,
|
|
66
|
-
sub,
|
|
67
|
-
abs,
|
|
68
|
-
lte,
|
|
69
|
-
gt,
|
|
70
|
-
toFixed,
|
|
71
|
-
};
|