@darkpos/pricing 1.0.125 → 1.0.128
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.
|
@@ -2446,155 +2446,6 @@ describe('Order actions', () => {
|
|
|
2446
2446
|
});
|
|
2447
2447
|
});
|
|
2448
2448
|
|
|
2449
|
-
test('CU-86dueyuqj -> Merge Parent orders', () => {
|
|
2450
|
-
const item1 = {
|
|
2451
|
-
_id: 1,
|
|
2452
|
-
price: 10,
|
|
2453
|
-
quantity: 1,
|
|
2454
|
-
modifiers: [],
|
|
2455
|
-
};
|
|
2456
|
-
const item2 = {
|
|
2457
|
-
_id: 2,
|
|
2458
|
-
price: 20,
|
|
2459
|
-
quantity: 1,
|
|
2460
|
-
modifiers: [],
|
|
2461
|
-
};
|
|
2462
|
-
|
|
2463
|
-
const user = {
|
|
2464
|
-
_id: 'userId123',
|
|
2465
|
-
firstName: 'Esteban',
|
|
2466
|
-
lastName: 'Mero',
|
|
2467
|
-
};
|
|
2468
|
-
|
|
2469
|
-
const childOrder1 = pricingService.order.calculate({
|
|
2470
|
-
items: [item1],
|
|
2471
|
-
_id: 'abc',
|
|
2472
|
-
_parentId: 1,
|
|
2473
|
-
});
|
|
2474
|
-
const childOrder2 = pricingService.order.calculate({
|
|
2475
|
-
items: [item2],
|
|
2476
|
-
_id: 'bcd',
|
|
2477
|
-
_parentId: 2,
|
|
2478
|
-
});
|
|
2479
|
-
|
|
2480
|
-
const parentOrder1 = {
|
|
2481
|
-
items: [],
|
|
2482
|
-
orders: [childOrder1],
|
|
2483
|
-
_isParent: true,
|
|
2484
|
-
_id: 1,
|
|
2485
|
-
};
|
|
2486
|
-
const parentOrder2 = {
|
|
2487
|
-
items: [],
|
|
2488
|
-
orders: [childOrder2],
|
|
2489
|
-
_isParent: true,
|
|
2490
|
-
_id: 2,
|
|
2491
|
-
};
|
|
2492
|
-
|
|
2493
|
-
const [newParentOrder, voidedOrders, ordersToDelete, subOrders] =
|
|
2494
|
-
pricingService.order.merge({
|
|
2495
|
-
orders: [parentOrder1, parentOrder2],
|
|
2496
|
-
subOrdersToMerge: [childOrder1, childOrder2],
|
|
2497
|
-
aggregateItems: true,
|
|
2498
|
-
user,
|
|
2499
|
-
});
|
|
2500
|
-
|
|
2501
|
-
expect(newParentOrder).toHaveProperty('total', 30);
|
|
2502
|
-
expect(voidedOrders.length).toBe(1);
|
|
2503
|
-
expect(ordersToDelete.length).toBe(0);
|
|
2504
|
-
expect(subOrders.length).toBe(2);
|
|
2505
|
-
expect(newParentOrder.orders.length).toBe(2);
|
|
2506
|
-
});
|
|
2507
|
-
|
|
2508
|
-
test('CU-86dueyuqj -> Merge Orders that are not parents and not children', () => {
|
|
2509
|
-
const item1 = {
|
|
2510
|
-
_id: 1,
|
|
2511
|
-
price: 10,
|
|
2512
|
-
quantity: 1,
|
|
2513
|
-
modifiers: [],
|
|
2514
|
-
};
|
|
2515
|
-
const item2 = {
|
|
2516
|
-
_id: 2,
|
|
2517
|
-
price: 20,
|
|
2518
|
-
quantity: 1,
|
|
2519
|
-
modifiers: [],
|
|
2520
|
-
};
|
|
2521
|
-
|
|
2522
|
-
const user = {
|
|
2523
|
-
_id: 'userId123',
|
|
2524
|
-
firstName: 'Esteban',
|
|
2525
|
-
lastName: 'Mero',
|
|
2526
|
-
};
|
|
2527
|
-
|
|
2528
|
-
const order1 = pricingService.order.calculate({
|
|
2529
|
-
items: [item1],
|
|
2530
|
-
_id: 'abc',
|
|
2531
|
-
});
|
|
2532
|
-
const order2 = pricingService.order.calculate({
|
|
2533
|
-
items: [item2],
|
|
2534
|
-
_id: 'bcd',
|
|
2535
|
-
});
|
|
2536
|
-
|
|
2537
|
-
const [newOrder, voidedOrders, ordersToDelete, subOrders] =
|
|
2538
|
-
pricingService.order.merge({
|
|
2539
|
-
orders: [order1, order2],
|
|
2540
|
-
subOrdersToMerge: [],
|
|
2541
|
-
aggregateItems: true,
|
|
2542
|
-
user,
|
|
2543
|
-
});
|
|
2544
|
-
|
|
2545
|
-
expect(newOrder).toHaveProperty('total', 30);
|
|
2546
|
-
expect(voidedOrders.length).toBe(1);
|
|
2547
|
-
expect(ordersToDelete.length).toBe(0);
|
|
2548
|
-
expect(subOrders.length).toBe(0);
|
|
2549
|
-
expect(newOrder.orders).toBe(undefined);
|
|
2550
|
-
});
|
|
2551
|
-
|
|
2552
|
-
test('CU-86dueyuqj -> Merge Child orders', () => {
|
|
2553
|
-
const item1 = {
|
|
2554
|
-
_id: 1,
|
|
2555
|
-
price: 10,
|
|
2556
|
-
quantity: 1,
|
|
2557
|
-
modifiers: [],
|
|
2558
|
-
};
|
|
2559
|
-
const item2 = {
|
|
2560
|
-
_id: 2,
|
|
2561
|
-
price: 20,
|
|
2562
|
-
quantity: 1,
|
|
2563
|
-
modifiers: [],
|
|
2564
|
-
};
|
|
2565
|
-
|
|
2566
|
-
const user = {
|
|
2567
|
-
_id: 'userId123',
|
|
2568
|
-
firstName: 'Esteban',
|
|
2569
|
-
lastName: 'Mero',
|
|
2570
|
-
};
|
|
2571
|
-
|
|
2572
|
-
const childOrder1 = pricingService.order.calculate({
|
|
2573
|
-
items: [item1],
|
|
2574
|
-
_id: 'abc',
|
|
2575
|
-
_parentId: 1,
|
|
2576
|
-
});
|
|
2577
|
-
const childOrder2 = pricingService.order.calculate({
|
|
2578
|
-
items: [item2],
|
|
2579
|
-
_id: 'bcd',
|
|
2580
|
-
_parentId: 1,
|
|
2581
|
-
});
|
|
2582
|
-
|
|
2583
|
-
const [newParentOrder, voidedOrders, ordersToDelete, subOrders] =
|
|
2584
|
-
pricingService.order.merge({
|
|
2585
|
-
orders: [childOrder1, childOrder2],
|
|
2586
|
-
subOrdersToMerge: [],
|
|
2587
|
-
aggregateItems: true,
|
|
2588
|
-
user,
|
|
2589
|
-
});
|
|
2590
|
-
|
|
2591
|
-
expect(newParentOrder).toHaveProperty('total', 30);
|
|
2592
|
-
expect(voidedOrders.length).toBe(1);
|
|
2593
|
-
expect(ordersToDelete.length).toBe(0);
|
|
2594
|
-
expect(subOrders.length).toBe(0);
|
|
2595
|
-
expect(newParentOrder.orders).toBe(undefined);
|
|
2596
|
-
});
|
|
2597
|
-
|
|
2598
2449
|
test('Get calculated Order, multiple items and indirect modifiers #2 toNeareastMultiple', () => {
|
|
2599
2450
|
const pricingService2 = usePricing({
|
|
2600
2451
|
store: { _settings: { localization: { nearestMultiple: '0.5' } } },
|
|
@@ -5,8 +5,6 @@ module.exports = ({ actions }) =>
|
|
|
5
5
|
const computeAmount = modifier.compute && modifier.compute.amount;
|
|
6
6
|
const { fixedValue } = modifier.properties.override;
|
|
7
7
|
|
|
8
|
-
console.log({ computeAmount, fixedValue });
|
|
9
|
-
|
|
10
8
|
const result =
|
|
11
9
|
typeof computeAmount !== 'number' && typeof fixedValue !== 'number';
|
|
12
10
|
|
package/lib/order/calculate.js
CHANGED
|
@@ -150,6 +150,9 @@ module.exports = ({
|
|
|
150
150
|
const { subTotals, subTotal, total } =
|
|
151
151
|
itemActions.getItemsTotals(calculatedItems);
|
|
152
152
|
|
|
153
|
+
const pieceCount = calculatedItems.length
|
|
154
|
+
? itemActions.getItemsTotalPieces(calculatedItems)
|
|
155
|
+
: order.properties.pieceCount;
|
|
153
156
|
return {
|
|
154
157
|
...order,
|
|
155
158
|
subTotals,
|
|
@@ -157,5 +160,9 @@ module.exports = ({
|
|
|
157
160
|
total,
|
|
158
161
|
items: calculatedItems,
|
|
159
162
|
status: actions.getUpdatedStatus({ status: order.status, total }),
|
|
163
|
+
properties: {
|
|
164
|
+
...(order.properties || {}),
|
|
165
|
+
pieceCount,
|
|
166
|
+
},
|
|
160
167
|
};
|
|
161
168
|
};
|
package/lib/order/index.js
CHANGED
|
@@ -50,7 +50,6 @@ const getTotals = require('./getTotals');
|
|
|
50
50
|
const getDepartmentModifiers = require('./getDepartmentModifiers');
|
|
51
51
|
const getCustomerStoreCredit = require('./getCustomerStoreCredit');
|
|
52
52
|
const getTip = require('./getTip');
|
|
53
|
-
const merge = require('./merge');
|
|
54
53
|
const calculateOrdersDue = require('./calculateOrdersDue');
|
|
55
54
|
const removeModifierByAttribute = require('./removeModifierByAttribute');
|
|
56
55
|
const removeApplyModifier = require('./removeApplyModifier');
|
|
@@ -155,7 +154,6 @@ const orderActions = (deps = {}) => {
|
|
|
155
154
|
getDepartmentModifiers: getDepartmentModifiers(innerDeps),
|
|
156
155
|
getCustomerStoreCredit: getCustomerStoreCredit(innerDeps),
|
|
157
156
|
getTip: getTip(innerDeps),
|
|
158
|
-
merge: merge(innerDeps),
|
|
159
157
|
calculateOrdersDue: calculateOrdersDue(innerDeps),
|
|
160
158
|
removeModifierByAttribute: removeModifierByAttribute(innerDeps),
|
|
161
159
|
removeApplyModifier: removeApplyModifier(innerDeps),
|
package/lib/order/setPieces.js
CHANGED
|
@@ -13,10 +13,12 @@ module.exports = ({ utils }) => {
|
|
|
13
13
|
);
|
|
14
14
|
|
|
15
15
|
if (Array.isArray(nextOrder.properties.pieces)) {
|
|
16
|
-
nextOrder.properties.pieces = nextOrder.properties.pieces
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
nextOrder.properties.pieces = nextOrder.properties.pieces
|
|
17
|
+
.map(pc => ({
|
|
18
|
+
...pc,
|
|
19
|
+
count: helpers.toNumberOrZero(pc.count),
|
|
20
|
+
}))
|
|
21
|
+
.filter(pc => pc.count > 0);
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
return nextOrder;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.128",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -46,14 +46,11 @@
|
|
|
46
46
|
"eslint": "^8.2.0",
|
|
47
47
|
"eslint-config-airbnb": "^19.0.4",
|
|
48
48
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
49
|
-
"eslint-config-prettier": "^8.5.0",
|
|
50
49
|
"eslint-plugin-import": "^2.26.0",
|
|
51
50
|
"eslint-plugin-jest": "^26.5.3",
|
|
52
|
-
"eslint-plugin-prettier": "^4.0.0",
|
|
53
51
|
"jest": "^28.1.1",
|
|
54
|
-
"prettier": "^2.7.0",
|
|
55
52
|
"supertest": "^6.2.3",
|
|
56
53
|
"supervisor": "^0.12.0"
|
|
57
54
|
},
|
|
58
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "8246fe8ba99264f6428a8fa725fb951b49961c95"
|
|
59
56
|
}
|
package/lib/order/merge.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
module.exports = ({ _, actions, utils }) => {
|
|
2
|
-
const { math } = utils;
|
|
3
|
-
|
|
4
|
-
const isAggregatableItems = (first, second) => {
|
|
5
|
-
if (
|
|
6
|
-
first.itemId !== second.itemId ||
|
|
7
|
-
first.price !== second.price ||
|
|
8
|
-
first.description !== second.description ||
|
|
9
|
-
(first.modifiers && !second.modifiers) ||
|
|
10
|
-
(!first.modifiers && second.modifiers) ||
|
|
11
|
-
first.modifiers.length !== second.modifiers.length
|
|
12
|
-
) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
let hasInvalidModifier = false;
|
|
16
|
-
first.modifiers.forEach(modifier => {
|
|
17
|
-
if (!second.modifiers.find(mod => mod._id === modifier._id)) {
|
|
18
|
-
hasInvalidModifier = true;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
return !hasInvalidModifier;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// return: [Order, Order, Array<Order>]
|
|
26
|
-
return function merge({ orders, subOrdersToMerge, aggregateItems, user }) {
|
|
27
|
-
const items = orders.reduce((res, order) => res.concat(order.items), []);
|
|
28
|
-
let newOrder = null;
|
|
29
|
-
// Unique Orders
|
|
30
|
-
const mOrders = _.uniqBy(orders, '_id');
|
|
31
|
-
if (aggregateItems) {
|
|
32
|
-
const newItems = [];
|
|
33
|
-
items.forEach(item => {
|
|
34
|
-
const repeatedItem = newItems.find(each =>
|
|
35
|
-
isAggregatableItems(each, item)
|
|
36
|
-
);
|
|
37
|
-
if (repeatedItem) {
|
|
38
|
-
repeatedItem.quantity = math.add(
|
|
39
|
-
repeatedItem.quantity,
|
|
40
|
-
item.quantity
|
|
41
|
-
);
|
|
42
|
-
} else {
|
|
43
|
-
newItems.push({ ...item });
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
newOrder = {
|
|
47
|
-
...mOrders[0],
|
|
48
|
-
items: newItems,
|
|
49
|
-
};
|
|
50
|
-
} else {
|
|
51
|
-
newOrder = {
|
|
52
|
-
...mOrders[0],
|
|
53
|
-
items,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const ordersToDelete = [];
|
|
58
|
-
const voidedOrders = [];
|
|
59
|
-
for (let i = 1; i < mOrders.length; i += 1) {
|
|
60
|
-
if (mOrders[i] && mOrders[i].parentId) {
|
|
61
|
-
ordersToDelete.push(mOrders[i]);
|
|
62
|
-
} else {
|
|
63
|
-
let voidedOrder = actions.voidOrder(mOrders[i]);
|
|
64
|
-
if (!voidedOrder) return null;
|
|
65
|
-
voidedOrder.isParent = false;
|
|
66
|
-
voidedOrder = actions.addNote({
|
|
67
|
-
order: voidedOrder,
|
|
68
|
-
message: `This order was merged into order #${mOrders[i].displayId}`,
|
|
69
|
-
user,
|
|
70
|
-
});
|
|
71
|
-
voidedOrders.push(voidedOrder);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
let subOrders = [];
|
|
76
|
-
if (newOrder && subOrdersToMerge && subOrdersToMerge.length > 0) {
|
|
77
|
-
subOrders = subOrdersToMerge.map(s => ({
|
|
78
|
-
...s,
|
|
79
|
-
parentId: newOrder._id,
|
|
80
|
-
customer: newOrder.customer,
|
|
81
|
-
}));
|
|
82
|
-
newOrder.orders = subOrders;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
newOrder = actions.calculate(newOrder);
|
|
86
|
-
newOrder = actions.addNote({
|
|
87
|
-
order: newOrder,
|
|
88
|
-
message: `This order was merged with ${
|
|
89
|
-
mOrders.length === 2 ? ` order ` : ` orders `
|
|
90
|
-
} # ${mOrders.slice(1).map(order => ` ${order.displayId}`)}`,
|
|
91
|
-
user,
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
return [newOrder, voidedOrders, ordersToDelete, subOrders];
|
|
95
|
-
};
|
|
96
|
-
};
|