@things-factory/worksheet-base 4.3.539 → 4.3.542
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/dist-server/controllers/outbound/index.js +7 -1
- package/dist-server/controllers/outbound/index.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +512 -138
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/utils/lmd-util.js +213 -124
- package/dist-server/utils/lmd-util.js.map +1 -1
- package/package.json +9 -9
- package/server/controllers/outbound/index.ts +9 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +593 -131
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +1 -1
- package/server/utils/lmd-util.ts +271 -140
|
@@ -11,8 +11,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.createOrderPackageAndItems = exports.PickingWorksheetController = void 0;
|
|
14
|
+
exports.sortingProduct = exports.createConsignmentWithMultipackage = exports.createConsignmentPackageItem = exports.createConsignmentPackage = exports.createOrderConsignment = exports.splitOrderConsignment = exports.createOrderPackageAndItems = exports.PickingWorksheetController = void 0;
|
|
15
15
|
const typeorm_1 = require("typeorm");
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
16
17
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
17
18
|
const env_1 = require("@things-factory/env");
|
|
18
19
|
const id_rule_base_1 = require("@things-factory/id-rule-base");
|
|
@@ -149,7 +150,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
149
150
|
return await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PICKING, [targetInventory]);
|
|
150
151
|
}
|
|
151
152
|
async activatePicking(worksheetNo) {
|
|
152
|
-
var _a;
|
|
153
|
+
var _a, _b;
|
|
153
154
|
let worksheet = await this.findActivatableWorksheet(worksheetNo, constants_1.WORKSHEET_TYPE.PICKING, [
|
|
154
155
|
'releaseGood',
|
|
155
156
|
'releaseGood.bizplace',
|
|
@@ -186,8 +187,19 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
186
187
|
'orderPackageItems.orderProduct.productDetail'
|
|
187
188
|
]
|
|
188
189
|
});
|
|
189
|
-
|
|
190
|
+
let orderConsignments = await this.trxMgr.getRepository(sales_base_1.OrderConsignment).find({
|
|
191
|
+
where: { releaseGood: worksheet.releaseGood },
|
|
192
|
+
relations: [
|
|
193
|
+
'orderPackages',
|
|
194
|
+
'orderPackages.orderPackageItems',
|
|
195
|
+
'orderPackages.orderPackageItems.orderProduct',
|
|
196
|
+
'orderPackages.orderPackageItems.orderProduct.product',
|
|
197
|
+
'orderPackages.orderPackageItems.orderProduct.productDetail'
|
|
198
|
+
]
|
|
199
|
+
});
|
|
200
|
+
worksheet.releaseGood = Object.assign(Object.assign({}, worksheet.releaseGood), { orderProducts, orderPackages, orderConsignments });
|
|
190
201
|
let releaseGood = Object.assign(new sales_base_1.ReleaseGood(), worksheet.releaseGood);
|
|
202
|
+
let newReleaseGood;
|
|
191
203
|
// assign inventory if unassigned
|
|
192
204
|
if (!releaseGood.assignedInventory) {
|
|
193
205
|
worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet);
|
|
@@ -269,22 +281,32 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
269
281
|
break;
|
|
270
282
|
default:
|
|
271
283
|
if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
272
|
-
let
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
284
|
+
let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
|
|
285
|
+
switch (mps) {
|
|
286
|
+
case true:
|
|
287
|
+
newReleaseGood = await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
|
|
288
|
+
break;
|
|
289
|
+
case false:
|
|
290
|
+
case undefined:
|
|
291
|
+
let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
|
|
292
|
+
let orderPackage = {
|
|
293
|
+
name: sales_base_1.OrderNoGenerator.orderPackage(),
|
|
294
|
+
packageId: null,
|
|
295
|
+
trackingNo: null,
|
|
296
|
+
transporter: null,
|
|
297
|
+
airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
|
|
298
|
+
invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
|
|
299
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
300
|
+
releaseGood,
|
|
301
|
+
domain: releaseGood.domain,
|
|
302
|
+
bizplace: releaseGood.bizplace,
|
|
303
|
+
creator: this.user,
|
|
304
|
+
updater: this.user,
|
|
305
|
+
orderConsignment: orderConsignment
|
|
306
|
+
};
|
|
307
|
+
newReleaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
288
310
|
}
|
|
289
311
|
break;
|
|
290
312
|
}
|
|
@@ -292,6 +314,9 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
292
314
|
catch (error) {
|
|
293
315
|
env_1.logger.error(`picking-worksheet-controller[activatePicking]: ${error}`);
|
|
294
316
|
}
|
|
317
|
+
if (newReleaseGood) {
|
|
318
|
+
worksheet.releaseGood = newReleaseGood;
|
|
319
|
+
}
|
|
295
320
|
return worksheet;
|
|
296
321
|
}
|
|
297
322
|
async activateBulkPicking(worksheetNo) {
|
|
@@ -306,13 +331,19 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
306
331
|
.leftJoinAndSelect('w.releaseGood', 'rg')
|
|
307
332
|
.leftJoinAndSelect('rg.domain', 'rgd')
|
|
308
333
|
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
309
|
-
.leftJoinAndSelect('rg.orderPackages', '
|
|
310
|
-
.leftJoinAndSelect('
|
|
311
|
-
.leftJoinAndSelect('
|
|
334
|
+
.leftJoinAndSelect('rg.orderPackages', 'op')
|
|
335
|
+
.leftJoinAndSelect('op.orderPackageItems', 'opi')
|
|
336
|
+
.leftJoinAndSelect('opi.orderProduct', 'op2')
|
|
312
337
|
.leftJoinAndSelect('op2.product', 'p')
|
|
313
338
|
.leftJoinAndSelect('op2.productDetail', 'pd')
|
|
314
|
-
.leftJoinAndSelect('rg.
|
|
315
|
-
.leftJoinAndSelect('
|
|
339
|
+
.leftJoinAndSelect('rg.orderConsignments', 'oc')
|
|
340
|
+
.leftJoinAndSelect('oc.orderPackages', 'ocop')
|
|
341
|
+
.leftJoinAndSelect('ocop.orderPackageItems', 'ocpi')
|
|
342
|
+
.leftJoinAndSelect('ocpi.orderProduct', 'ocp2')
|
|
343
|
+
.leftJoinAndSelect('ocp2.product', 'ocp')
|
|
344
|
+
.leftJoinAndSelect('ocp2.productDetail', 'ocpd')
|
|
345
|
+
.leftJoinAndSelect('rg.bizplace', 'rgb')
|
|
346
|
+
.leftJoinAndSelect('rgb.domain', 'rgbd')
|
|
316
347
|
.leftJoinAndSelect('b.domain', 'bd')
|
|
317
348
|
.leftJoinAndSelect('b.company', 'c')
|
|
318
349
|
.leftJoinAndSelect('c.domain', 'cd')
|
|
@@ -387,32 +418,51 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
387
418
|
// retrieve order inventory
|
|
388
419
|
const pickingOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).find({
|
|
389
420
|
where: { domain: this.domain, refWorksheetId: worksheet.id, status: sales_base_1.ORDER_STATUS.PICKING },
|
|
390
|
-
relations: [
|
|
391
|
-
'releaseGood',
|
|
392
|
-
'releaseGood.domain',
|
|
393
|
-
'releaseGood.lastMileDelivery',
|
|
394
|
-
'releaseGood.bizplace',
|
|
395
|
-
'releaseGood.bizplace.domain',
|
|
396
|
-
'releaseGood.orderPackages',
|
|
397
|
-
'releaseGood.orderPackages.orderPackageItems',
|
|
398
|
-
'releaseGood.orderPackages.orderPackageItems.orderProduct',
|
|
399
|
-
'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
|
|
400
|
-
'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
401
|
-
'releaseGood.orderProducts',
|
|
402
|
-
'releaseGood.orderProducts.productDetail',
|
|
403
|
-
'releaseGood.orderProducts.product'
|
|
404
|
-
]
|
|
421
|
+
relations: ['releaseGood']
|
|
405
422
|
});
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
423
|
+
const releaseGoodIds = pickingOrderInventory.reduce((data, order) => {
|
|
424
|
+
const id = order.releaseGood.id;
|
|
425
|
+
if (!data.includes(id)) {
|
|
426
|
+
data.push(id);
|
|
409
427
|
}
|
|
410
428
|
return data;
|
|
411
429
|
}, []);
|
|
430
|
+
let releaseGoods = await this.trxMgr.getRepository(sales_base_1.ReleaseGood).find({
|
|
431
|
+
where: { id: (0, typeorm_1.In)(releaseGoodIds) },
|
|
432
|
+
relations: [
|
|
433
|
+
'domain',
|
|
434
|
+
'lastMileDelivery',
|
|
435
|
+
'bizplace',
|
|
436
|
+
'bizplace.domain',
|
|
437
|
+
'orderPackages',
|
|
438
|
+
'orderPackages.orderPackageItems',
|
|
439
|
+
'orderPackages.orderPackageItems.orderProduct',
|
|
440
|
+
'orderPackages.orderPackageItems.orderProduct.product',
|
|
441
|
+
'orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
442
|
+
'orderProducts',
|
|
443
|
+
'orderProducts.productDetail',
|
|
444
|
+
'orderProducts.product',
|
|
445
|
+
'orderConsignments',
|
|
446
|
+
'orderConsignments.orderPackages',
|
|
447
|
+
'orderConsignments.orderPackages.orderPackageItems',
|
|
448
|
+
'orderConsignments.orderPackages.orderPackageItems.orderProduct',
|
|
449
|
+
'orderConsignments.orderPackages.orderPackageItems.orderProduct.product',
|
|
450
|
+
'orderConsignments.orderPackages.orderPackageItems.orderProduct.productDetail'
|
|
451
|
+
]
|
|
452
|
+
});
|
|
453
|
+
pickingOrderInventory.forEach(order => {
|
|
454
|
+
order.releaseGood = releaseGoods.find(rg => rg.id === order.releaseGood.id);
|
|
455
|
+
});
|
|
456
|
+
// let releaseGoodss: ReleaseGood[] = pickingOrderInventory.reduce((data, oi: OrderInventory) => {
|
|
457
|
+
// if (!data.find(x => x.id == oi.releaseGood.id)) {
|
|
458
|
+
// data.push(oi.releaseGood)
|
|
459
|
+
// }
|
|
460
|
+
// return data
|
|
461
|
+
// }, [])
|
|
412
462
|
// massage data and trigger SC pack order asynchronously
|
|
413
463
|
if (releaseGoods === null || releaseGoods === void 0 ? void 0 : releaseGoods.length) {
|
|
414
464
|
releaseGoods = await Promise.all(releaseGoods.map(async (releaseGood) => {
|
|
415
|
-
var _a;
|
|
465
|
+
var _a, _b;
|
|
416
466
|
try {
|
|
417
467
|
const orderSource = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.source;
|
|
418
468
|
switch (orderSource) {
|
|
@@ -458,21 +508,32 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
458
508
|
break;
|
|
459
509
|
default:
|
|
460
510
|
if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
461
|
-
let
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
511
|
+
let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
|
|
512
|
+
switch (mps) {
|
|
513
|
+
case true:
|
|
514
|
+
await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
|
|
515
|
+
break;
|
|
516
|
+
case false:
|
|
517
|
+
case undefined:
|
|
518
|
+
let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
|
|
519
|
+
let orderPackage = {
|
|
520
|
+
name: sales_base_1.OrderNoGenerator.orderPackage(),
|
|
521
|
+
packageId: null,
|
|
522
|
+
trackingNo: null,
|
|
523
|
+
transporter: null,
|
|
524
|
+
airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
|
|
525
|
+
invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
|
|
526
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
527
|
+
releaseGood,
|
|
528
|
+
domain: releaseGood.domain,
|
|
529
|
+
bizplace: releaseGood.bizplace,
|
|
530
|
+
creator: this.user,
|
|
531
|
+
updater: this.user,
|
|
532
|
+
orderConsignment: orderConsignment
|
|
533
|
+
};
|
|
534
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
476
537
|
}
|
|
477
538
|
break;
|
|
478
539
|
}
|
|
@@ -482,7 +543,12 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
482
543
|
}
|
|
483
544
|
return Object.assign(Object.assign({}, releaseGood), { status: releaseGood.status != 'PENDING_CANCEL' ? sales_base_1.ORDER_STATUS.PICKING : releaseGood.status, updater: this.user, assignedInventory: true });
|
|
484
545
|
}));
|
|
485
|
-
await this.trxMgr.getRepository(sales_base_1.ReleaseGood).
|
|
546
|
+
await Promise.all(releaseGoods.map(rg => this.trxMgr.getRepository(sales_base_1.ReleaseGood).update(rg.id, {
|
|
547
|
+
status: rg.status,
|
|
548
|
+
updater: this.user,
|
|
549
|
+
assignedInventory: true,
|
|
550
|
+
updatedAt: () => 'CURRENT_TIMESTAMP'
|
|
551
|
+
})));
|
|
486
552
|
}
|
|
487
553
|
for (const releaseGood of releaseGoods) {
|
|
488
554
|
(0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEvents.PickingStarted);
|
|
@@ -1898,7 +1964,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
1898
1964
|
return newWorksheetDetails;
|
|
1899
1965
|
}
|
|
1900
1966
|
async activateBulkWorksheets(bizplaceId, worksheetIds) {
|
|
1901
|
-
var _a;
|
|
1967
|
+
var _a, _b;
|
|
1902
1968
|
const updatedWs = [];
|
|
1903
1969
|
try {
|
|
1904
1970
|
for (const worksheetId of worksheetIds) {
|
|
@@ -1908,36 +1974,55 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
1908
1974
|
await (0, typeorm_1.getManager)().transaction(async (tx) => {
|
|
1909
1975
|
var _a;
|
|
1910
1976
|
const worksheetRepo = tx.getRepository(entities_1.Worksheet);
|
|
1911
|
-
let worksheet = await worksheetRepo
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
.leftJoinAndSelect('opi_op.product', 'op_p2')
|
|
1929
|
-
.leftJoinAndSelect('opi_op.productDetail', 'op_pd2')
|
|
1930
|
-
.leftJoinAndSelect('w.domain', 'd')
|
|
1931
|
-
.leftJoinAndSelect('w.bizplace', 'b')
|
|
1932
|
-
.leftJoinAndSelect('b.company', 'c')
|
|
1933
|
-
.leftJoinAndSelect('c.domain', 'c_d')
|
|
1934
|
-
.leftJoinAndSelect('w.worksheetDetails', 'wd')
|
|
1935
|
-
.leftJoinAndSelect('wd.targetInventory', 'ti')
|
|
1936
|
-
.leftJoinAndSelect('ti.product', 'tp')
|
|
1937
|
-
.where('w.id = :worksheetId', { worksheetId: worksheetId })
|
|
1938
|
-
.andWhere('w.bizplace_id = :bizplaceId', { bizplaceId: bizplaceId })
|
|
1939
|
-
.getOne();
|
|
1977
|
+
let worksheet = await worksheetRepo.findOne({
|
|
1978
|
+
where: { id: worksheetId, bizplace: bizplaceId },
|
|
1979
|
+
relations: [
|
|
1980
|
+
'domain',
|
|
1981
|
+
'bizplace',
|
|
1982
|
+
'bizplace.company',
|
|
1983
|
+
'bizplace.company.domain',
|
|
1984
|
+
'releaseGood',
|
|
1985
|
+
'releaseGood.bizplace',
|
|
1986
|
+
'releaseGood.domain',
|
|
1987
|
+
'releaseGood.lastMileDelivery',
|
|
1988
|
+
'releaseGood.bizplace.domain',
|
|
1989
|
+
'worksheetDetails',
|
|
1990
|
+
'worksheetDetails.targetInventory',
|
|
1991
|
+
'worksheetDetails.targetInventory.product'
|
|
1992
|
+
]
|
|
1993
|
+
});
|
|
1940
1994
|
let worksheetDetails;
|
|
1995
|
+
let orderProducts = await tx.getRepository(sales_base_1.OrderProduct).find({
|
|
1996
|
+
where: { releaseGood: worksheet.releaseGood },
|
|
1997
|
+
relations: [
|
|
1998
|
+
'product',
|
|
1999
|
+
'productDetail',
|
|
2000
|
+
'productBundle',
|
|
2001
|
+
'productBundle.productBundleSettings',
|
|
2002
|
+
'productBundle.productBundleSettings.productDetail',
|
|
2003
|
+
'productDetail.product'
|
|
2004
|
+
]
|
|
2005
|
+
});
|
|
2006
|
+
let orderPackages = await tx.getRepository(sales_base_1.OrderPackage).find({
|
|
2007
|
+
where: { releaseGood: worksheet.releaseGood },
|
|
2008
|
+
relations: [
|
|
2009
|
+
'orderPackageItems',
|
|
2010
|
+
'orderPackageItems.orderProduct',
|
|
2011
|
+
'orderPackageItems.orderProduct.product',
|
|
2012
|
+
'orderPackageItems.orderProduct.product.productDetails'
|
|
2013
|
+
]
|
|
2014
|
+
});
|
|
2015
|
+
let orderConsignments = await tx.getRepository(sales_base_1.OrderConsignment).find({
|
|
2016
|
+
where: { releaseGood: worksheet.releaseGood },
|
|
2017
|
+
relations: [
|
|
2018
|
+
'orderPackages',
|
|
2019
|
+
'orderPackages.orderPackageItems',
|
|
2020
|
+
'orderPackages.orderPackageItems.orderProduct',
|
|
2021
|
+
'orderPackages.orderPackageItems.orderProduct.product',
|
|
2022
|
+
'orderPackages.orderPackageItems.orderProduct.product.productDetails'
|
|
2023
|
+
]
|
|
2024
|
+
});
|
|
2025
|
+
worksheet.releaseGood = Object.assign(Object.assign({}, worksheet.releaseGood), { orderProducts, orderPackages, orderConsignments });
|
|
1941
2026
|
if (((_a = worksheet.releaseGood) === null || _a === void 0 ? void 0 : _a.assignedInventory) == false) {
|
|
1942
2027
|
worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet, tx);
|
|
1943
2028
|
worksheet.worksheetDetails = worksheetDetails;
|
|
@@ -2003,23 +2088,36 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
2003
2088
|
// Trigger Whole Order Process
|
|
2004
2089
|
sales_base_1.WebspertController.triggerOrderProcesses(releaseGood, this.domain, this.user);
|
|
2005
2090
|
break;
|
|
2091
|
+
case auth_base_1.ApplicationType.MMS:
|
|
2092
|
+
break;
|
|
2006
2093
|
default:
|
|
2007
2094
|
if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
2008
|
-
let
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2095
|
+
let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
|
|
2096
|
+
switch (mps) {
|
|
2097
|
+
case true:
|
|
2098
|
+
await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
|
|
2099
|
+
break;
|
|
2100
|
+
case false:
|
|
2101
|
+
case undefined:
|
|
2102
|
+
let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
|
|
2103
|
+
let orderPackage = {
|
|
2104
|
+
name: sales_base_1.OrderNoGenerator.orderPackage(),
|
|
2105
|
+
packageId: null,
|
|
2106
|
+
trackingNo: null,
|
|
2107
|
+
transporter: null,
|
|
2108
|
+
airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
|
|
2109
|
+
invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
|
|
2110
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2111
|
+
releaseGood,
|
|
2112
|
+
domain: releaseGood.domain,
|
|
2113
|
+
bizplace: releaseGood.bizplace,
|
|
2114
|
+
creator: this.user,
|
|
2115
|
+
updater: this.user,
|
|
2116
|
+
orderConsignment: orderConsignment
|
|
2117
|
+
};
|
|
2118
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
|
|
2119
|
+
break;
|
|
2120
|
+
}
|
|
2023
2121
|
}
|
|
2024
2122
|
break;
|
|
2025
2123
|
}
|
|
@@ -2037,44 +2135,320 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
2037
2135
|
}
|
|
2038
2136
|
exports.PickingWorksheetController = PickingWorksheetController;
|
|
2039
2137
|
async function createOrderPackageAndItems(tx, releaseGood, orderPackage) {
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2138
|
+
try {
|
|
2139
|
+
let savedOrderPackage = await tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
|
|
2140
|
+
const orderPackageItems = releaseGood.orderProducts
|
|
2141
|
+
.map(op => {
|
|
2142
|
+
if (op.product) {
|
|
2143
|
+
return {
|
|
2144
|
+
id: (0, uuid_1.v4)(),
|
|
2145
|
+
name: sales_base_1.OrderNoGenerator.orderPackageItem(),
|
|
2146
|
+
orderProduct: op,
|
|
2147
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2148
|
+
releaseQty: op.releaseQty,
|
|
2149
|
+
orderPackage: savedOrderPackage,
|
|
2150
|
+
domain: releaseGood.domain,
|
|
2151
|
+
bizplace: releaseGood.bizplace,
|
|
2152
|
+
creator: releaseGood.creator,
|
|
2153
|
+
updater: releaseGood.updater,
|
|
2154
|
+
productDetail: op.productDetail
|
|
2155
|
+
};
|
|
2156
|
+
}
|
|
2157
|
+
else {
|
|
2158
|
+
let productBundle = op.productBundle;
|
|
2159
|
+
return productBundle.productBundleSettings.map(pbs => ({
|
|
2160
|
+
name: sales_base_1.OrderNoGenerator.orderPackageItem(),
|
|
2161
|
+
orderProduct: op,
|
|
2162
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2163
|
+
releaseQty: op.releaseQty * pbs.bundleQty,
|
|
2164
|
+
orderPackage: savedOrderPackage,
|
|
2165
|
+
domain: releaseGood.domain,
|
|
2166
|
+
bizplace: releaseGood.bizplace,
|
|
2167
|
+
creator: releaseGood.creator,
|
|
2168
|
+
updater: releaseGood.updater,
|
|
2169
|
+
productDetail: pbs.productDetail
|
|
2170
|
+
}));
|
|
2171
|
+
}
|
|
2172
|
+
})
|
|
2173
|
+
.flat();
|
|
2174
|
+
await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
|
|
2175
|
+
orderPackage.orderPackageItems = orderPackageItems;
|
|
2176
|
+
releaseGood.orderPackages = [orderPackage];
|
|
2177
|
+
return releaseGood;
|
|
2178
|
+
}
|
|
2179
|
+
catch (e) {
|
|
2180
|
+
env_1.logger.error(`error:${e}`);
|
|
2181
|
+
}
|
|
2182
|
+
}
|
|
2183
|
+
exports.createOrderPackageAndItems = createOrderPackageAndItems;
|
|
2184
|
+
async function splitOrderConsignment(tx, releaseGood, user, domain) {
|
|
2185
|
+
try {
|
|
2186
|
+
let currentConsignment = { id: (0, uuid_1.v4)(), totalWeight: 0, orderPackages: [] };
|
|
2187
|
+
let totalConsignments = [];
|
|
2188
|
+
let currOrderProducts = [];
|
|
2189
|
+
let totalConsignmentWeight = 0;
|
|
2190
|
+
let orderProducts = releaseGood.orderProducts;
|
|
2191
|
+
let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight;
|
|
2192
|
+
//sort product according to packingType
|
|
2193
|
+
let sortOrderProducts = await sortingProduct(orderProducts);
|
|
2194
|
+
//initialise new orderConsignment created
|
|
2195
|
+
const createdNewConsignment = () => ({
|
|
2196
|
+
id: (0, uuid_1.v4)(),
|
|
2197
|
+
totalWeight: 0,
|
|
2198
|
+
orderPackages: []
|
|
2199
|
+
});
|
|
2200
|
+
//push orderPackage & packageItems into consigment
|
|
2201
|
+
const createPackageConsignment = (consignment, packageWeight, releaseGood, orderProduct, releaseQty, user) => {
|
|
2202
|
+
consignment.totalWeight += packageWeight;
|
|
2203
|
+
currentConsignment.orderPackages.push({
|
|
2204
|
+
id: (0, uuid_1.v4)(),
|
|
2205
|
+
name: sales_base_1.OrderNoGenerator.orderPackage(),
|
|
2206
|
+
packageId: null,
|
|
2207
|
+
trackingNo: null,
|
|
2208
|
+
transporter: null,
|
|
2209
|
+
airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
|
|
2210
|
+
invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
|
|
2047
2211
|
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2048
|
-
|
|
2049
|
-
orderPackage: savedOrderPackage,
|
|
2212
|
+
releaseGood,
|
|
2050
2213
|
domain: releaseGood.domain,
|
|
2051
2214
|
bizplace: releaseGood.bizplace,
|
|
2052
|
-
creator:
|
|
2053
|
-
updater:
|
|
2054
|
-
|
|
2055
|
-
|
|
2215
|
+
creator: user,
|
|
2216
|
+
updater: user,
|
|
2217
|
+
orderPackageItems: [
|
|
2218
|
+
{
|
|
2219
|
+
id: (0, uuid_1.v4)(),
|
|
2220
|
+
name: sales_base_1.OrderNoGenerator.orderPackageItem(),
|
|
2221
|
+
releaseQty: releaseQty,
|
|
2222
|
+
orderProduct: orderProduct,
|
|
2223
|
+
domain: releaseGood.domain,
|
|
2224
|
+
bizplace: releaseGood.bizplace,
|
|
2225
|
+
creator: releaseGood.creator,
|
|
2226
|
+
updater: releaseGood.updater,
|
|
2227
|
+
productDetail: orderProduct.productDetail
|
|
2228
|
+
}
|
|
2229
|
+
]
|
|
2230
|
+
});
|
|
2231
|
+
};
|
|
2232
|
+
const createPackage = op => {
|
|
2233
|
+
let releaseQty = op.productDetail.packingType.toLowerCase() === 'carton' ? 1 : op.releaseQty;
|
|
2234
|
+
let packageWeight = op.productDetail.packingType.toLowerCase() === 'carton'
|
|
2235
|
+
? op.productDetail.grossWeight
|
|
2236
|
+
: op.productDetail.grossWeight * releaseQty;
|
|
2237
|
+
const isCarton = op.productDetail.packingType.toLowerCase() === 'carton';
|
|
2238
|
+
totalConsignmentWeight += packageWeight;
|
|
2239
|
+
const requiresNewConsignment = totalConsignmentWeight >= maxConsignmentWeight;
|
|
2240
|
+
if (isCarton || op.releaseQty > 1) {
|
|
2241
|
+
if (requiresNewConsignment) {
|
|
2242
|
+
//push the current consignment to create new consignment
|
|
2243
|
+
totalConsignments.push(currentConsignment);
|
|
2244
|
+
//Initialise the totalConsignment weight to the new data
|
|
2245
|
+
totalConsignmentWeight = packageWeight + 0;
|
|
2246
|
+
currentConsignment = createdNewConsignment();
|
|
2247
|
+
}
|
|
2248
|
+
createPackageConsignment(currentConsignment, packageWeight, releaseGood, op, releaseQty, user);
|
|
2249
|
+
}
|
|
2250
|
+
else {
|
|
2251
|
+
currOrderProducts.push(op);
|
|
2252
|
+
}
|
|
2253
|
+
};
|
|
2254
|
+
sortOrderProducts.forEach(item => {
|
|
2255
|
+
if (item.packingType.toLowerCase() === 'carton') {
|
|
2256
|
+
for (let i = 0; i < item.releaseQty; i++) {
|
|
2257
|
+
createPackage(item);
|
|
2258
|
+
}
|
|
2259
|
+
}
|
|
2260
|
+
else {
|
|
2261
|
+
createPackage(item);
|
|
2262
|
+
}
|
|
2263
|
+
});
|
|
2264
|
+
// Add any remaining items to the last orderPackage
|
|
2265
|
+
if (currOrderProducts.length > 0) {
|
|
2266
|
+
let availableConsignment;
|
|
2267
|
+
for (let i = 0; i < currOrderProducts.length; i++) {
|
|
2268
|
+
let op = currOrderProducts[i];
|
|
2269
|
+
let releaseQty = op.releaseQty;
|
|
2270
|
+
let currProductWeight = op.productDetail.grossWeight * op.releaseQty;
|
|
2271
|
+
let lastOrderPackage = currentConsignment.orderPackages[currentConsignment.orderPackages.length - 1];
|
|
2272
|
+
//push the product into last current consignment orderPackage
|
|
2273
|
+
if (currentConsignment.totalWeight + currProductWeight < maxConsignmentWeight) {
|
|
2274
|
+
if (lastOrderPackage) {
|
|
2275
|
+
lastOrderPackage.orderPackageItems.push({
|
|
2276
|
+
id: (0, uuid_1.v4)(),
|
|
2277
|
+
name: sales_base_1.OrderNoGenerator.orderPackageItem(),
|
|
2278
|
+
releaseQty: op.releaseQty,
|
|
2279
|
+
orderProduct: op,
|
|
2280
|
+
domain: releaseGood.domain,
|
|
2281
|
+
bizplace: releaseGood.bizplace,
|
|
2282
|
+
creator: releaseGood.creator,
|
|
2283
|
+
updater: releaseGood.updater,
|
|
2284
|
+
productDetail: op.productDetail
|
|
2285
|
+
});
|
|
2286
|
+
}
|
|
2287
|
+
else {
|
|
2288
|
+
await createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user);
|
|
2289
|
+
}
|
|
2290
|
+
}
|
|
2291
|
+
else {
|
|
2292
|
+
//push the currentConsignment into list of all the consignments
|
|
2293
|
+
if (!totalConsignments.some(tc => tc.id === currentConsignment.id)) {
|
|
2294
|
+
totalConsignments.push(currentConsignment);
|
|
2295
|
+
}
|
|
2296
|
+
//find one order consignment to include the product
|
|
2297
|
+
availableConsignment = totalConsignments.find(tc => {
|
|
2298
|
+
tc.totalWeight += currProductWeight < maxConsignmentWeight;
|
|
2299
|
+
});
|
|
2300
|
+
if (availableConsignment) {
|
|
2301
|
+
let lastOrderPackage = availableConsignment.orderPackages[currentConsignment.orderPackages.length - 1];
|
|
2302
|
+
lastOrderPackage.orderPackageItems.push({
|
|
2303
|
+
id: (0, uuid_1.v4)(),
|
|
2304
|
+
name: sales_base_1.OrderNoGenerator.orderPackageItem(),
|
|
2305
|
+
releaseQty: op.releaseQty,
|
|
2306
|
+
orderProducts: op,
|
|
2307
|
+
domain: releaseGood.domain,
|
|
2308
|
+
bizplace: releaseGood.bizplace,
|
|
2309
|
+
creator: releaseGood.creator,
|
|
2310
|
+
updater: releaseGood.updater,
|
|
2311
|
+
productDetail: op.productDetail
|
|
2312
|
+
});
|
|
2313
|
+
//update the totalConsignment data
|
|
2314
|
+
totalConsignments = totalConsignments.map(tc => {
|
|
2315
|
+
tc.id === availableConsignment.id ? availableConsignment : tc;
|
|
2316
|
+
});
|
|
2317
|
+
}
|
|
2318
|
+
else {
|
|
2319
|
+
//create new consignment if no consignment available
|
|
2320
|
+
currentConsignment = createdNewConsignment();
|
|
2321
|
+
createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user);
|
|
2322
|
+
totalConsignments.push(currentConsignment);
|
|
2323
|
+
}
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2056
2326
|
}
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
orderProduct: op,
|
|
2062
|
-
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2063
|
-
releaseQty: op.releaseQty * pbs.bundleQty,
|
|
2064
|
-
orderPackage: savedOrderPackage,
|
|
2065
|
-
domain: releaseGood.domain,
|
|
2066
|
-
bizplace: releaseGood.bizplace,
|
|
2067
|
-
creator: releaseGood.creator,
|
|
2068
|
-
updater: releaseGood.updater,
|
|
2069
|
-
productDetail: pbs.productDetail
|
|
2070
|
-
}));
|
|
2327
|
+
//totalConsignments.length < 1 ? totalConsignments.push(currentConsignment) : totalConsignments
|
|
2328
|
+
const existingConsignment = totalConsignments.find(tc => tc.id === currentConsignment.id);
|
|
2329
|
+
if (!existingConsignment) {
|
|
2330
|
+
totalConsignments.push(currentConsignment);
|
|
2071
2331
|
}
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2332
|
+
let orderConsignment = totalConsignments;
|
|
2333
|
+
let newReleaseGood = await createConsignmentWithMultipackage(tx, orderConsignment, releaseGood, user, domain);
|
|
2334
|
+
return newReleaseGood;
|
|
2335
|
+
}
|
|
2336
|
+
catch (e) {
|
|
2337
|
+
env_1.logger.error(`[lmd-create-consignment-notes]: ${e} `);
|
|
2338
|
+
}
|
|
2078
2339
|
}
|
|
2079
|
-
exports.
|
|
2340
|
+
exports.splitOrderConsignment = splitOrderConsignment;
|
|
2341
|
+
async function createOrderConsignment(tx, orderCons, releaseGood, user) {
|
|
2342
|
+
var _a;
|
|
2343
|
+
try {
|
|
2344
|
+
let orderConsignment = {
|
|
2345
|
+
id: (0, uuid_1.v4)(),
|
|
2346
|
+
name: sales_base_1.OrderNoGenerator.orderConsignment(),
|
|
2347
|
+
noOfPackages: ((_a = orderCons === null || orderCons === void 0 ? void 0 : orderCons.orderPackages) === null || _a === void 0 ? void 0 : _a.length) ? orderCons.orderPackages.length : 1,
|
|
2348
|
+
domain: releaseGood.domain,
|
|
2349
|
+
bizplace: releaseGood.bizplace,
|
|
2350
|
+
releaseGood: releaseGood,
|
|
2351
|
+
orderPackages: [],
|
|
2352
|
+
creator: user,
|
|
2353
|
+
updater: user
|
|
2354
|
+
};
|
|
2355
|
+
orderConsignment = await tx.getRepository(sales_base_1.OrderConsignment).save(orderConsignment);
|
|
2356
|
+
return orderConsignment;
|
|
2357
|
+
}
|
|
2358
|
+
catch (e) {
|
|
2359
|
+
env_1.logger.error(`[lmd-create-order-consignment]: ${e} `);
|
|
2360
|
+
}
|
|
2361
|
+
}
|
|
2362
|
+
exports.createOrderConsignment = createOrderConsignment;
|
|
2363
|
+
async function createConsignmentPackage(tx, orderPackageData, releaseGood, user, orderConsignment) {
|
|
2364
|
+
try {
|
|
2365
|
+
const orderPackage = {
|
|
2366
|
+
id: (0, uuid_1.v4)(),
|
|
2367
|
+
name: sales_base_1.OrderNoGenerator.orderPackage(),
|
|
2368
|
+
packageId: null,
|
|
2369
|
+
trackingNo: null,
|
|
2370
|
+
transporter: null,
|
|
2371
|
+
airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
|
|
2372
|
+
invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
|
|
2373
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2374
|
+
releaseGood,
|
|
2375
|
+
domain: releaseGood.domain,
|
|
2376
|
+
bizplace: releaseGood.bizplace,
|
|
2377
|
+
creator: user,
|
|
2378
|
+
updater: user,
|
|
2379
|
+
orderConsignment
|
|
2380
|
+
};
|
|
2381
|
+
return tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
|
|
2382
|
+
}
|
|
2383
|
+
catch (e) {
|
|
2384
|
+
env_1.logger.error(`[lmd-create-order-package]: ${e} `);
|
|
2385
|
+
}
|
|
2386
|
+
}
|
|
2387
|
+
exports.createConsignmentPackage = createConsignmentPackage;
|
|
2388
|
+
async function createConsignmentPackageItem(tx, orderPackageItemsData, savedOrderPackage, releaseGood) {
|
|
2389
|
+
try {
|
|
2390
|
+
const orderPackageItems = orderPackageItemsData.map(opi => ({
|
|
2391
|
+
id: opi.id,
|
|
2392
|
+
name: opi.name,
|
|
2393
|
+
orderProduct: opi.orderProduct,
|
|
2394
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
2395
|
+
releaseQty: opi.releaseQty,
|
|
2396
|
+
orderPackage: savedOrderPackage,
|
|
2397
|
+
domain: releaseGood.domain,
|
|
2398
|
+
bizplace: releaseGood.bizplace,
|
|
2399
|
+
creator: releaseGood.creator,
|
|
2400
|
+
updater: releaseGood.updater,
|
|
2401
|
+
productDetail: opi.productDetail
|
|
2402
|
+
}));
|
|
2403
|
+
await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
|
|
2404
|
+
return orderPackageItems;
|
|
2405
|
+
}
|
|
2406
|
+
catch (e) {
|
|
2407
|
+
env_1.logger.error(`[lmd-create-order-package]: ${e} `);
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
exports.createConsignmentPackageItem = createConsignmentPackageItem;
|
|
2411
|
+
async function createConsignmentWithMultipackage(tx, orderConsList, releaseGood, user, domain) {
|
|
2412
|
+
try {
|
|
2413
|
+
let newOrderPackages = [];
|
|
2414
|
+
let newOrderConsignments = [];
|
|
2415
|
+
for (const orderCons of orderConsList) {
|
|
2416
|
+
const savedOrderConsignment = await createOrderConsignment(tx, orderCons, releaseGood, user);
|
|
2417
|
+
for (const currentPackage of orderCons.orderPackages) {
|
|
2418
|
+
const savedOrderPackage = await createConsignmentPackage(tx, currentPackage, releaseGood, user, savedOrderConsignment);
|
|
2419
|
+
const orderPackageItems = await createConsignmentPackageItem(tx, currentPackage.orderPackageItems, savedOrderPackage, releaseGood);
|
|
2420
|
+
savedOrderPackage.orderPackageItems = orderPackageItems;
|
|
2421
|
+
savedOrderConsignment.orderPackages.push(savedOrderPackage);
|
|
2422
|
+
newOrderPackages.push(savedOrderPackage);
|
|
2423
|
+
}
|
|
2424
|
+
newOrderConsignments.push(savedOrderConsignment);
|
|
2425
|
+
}
|
|
2426
|
+
releaseGood.orderConsignments = newOrderConsignments;
|
|
2427
|
+
releaseGood.orderPackages = newOrderPackages;
|
|
2428
|
+
return releaseGood;
|
|
2429
|
+
}
|
|
2430
|
+
catch (error) {
|
|
2431
|
+
console.error('Error creating consignment with multiple packages:', error);
|
|
2432
|
+
throw error;
|
|
2433
|
+
}
|
|
2434
|
+
}
|
|
2435
|
+
exports.createConsignmentWithMultipackage = createConsignmentWithMultipackage;
|
|
2436
|
+
async function sortingProduct(orderProducts) {
|
|
2437
|
+
try {
|
|
2438
|
+
orderProducts.sort((a, b) => {
|
|
2439
|
+
if (a.product.packingType !== b.product.packingType) {
|
|
2440
|
+
return a.product.packingType < b.product.packingType ? -1 : 1;
|
|
2441
|
+
}
|
|
2442
|
+
if (a.product.sku !== b.product.sku) {
|
|
2443
|
+
return a.product.sku < b.product.sku ? -1 : 1;
|
|
2444
|
+
}
|
|
2445
|
+
return 0;
|
|
2446
|
+
});
|
|
2447
|
+
return orderProducts;
|
|
2448
|
+
}
|
|
2449
|
+
catch (e) {
|
|
2450
|
+
env_1.logger.error(`[lmd-sort-product]: ${e} `);
|
|
2451
|
+
}
|
|
2452
|
+
}
|
|
2453
|
+
exports.sortingProduct = sortingProduct;
|
|
2080
2454
|
//# sourceMappingURL=picking-worksheet-controller.js.map
|