@things-factory/worksheet-base 4.3.538 → 4.3.541

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.
@@ -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
- worksheet.releaseGood = Object.assign(Object.assign({}, worksheet.releaseGood), { orderProducts, orderPackages });
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 orderPackage = {
273
- name: sales_base_1.OrderNoGenerator.orderPackage(),
274
- packageId: null,
275
- trackingNo: null,
276
- transporter: null,
277
- airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
278
- invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
279
- status: sales_base_1.ORDER_STATUS.PROCESSING,
280
- releaseGood,
281
- domain: releaseGood.domain,
282
- bizplace: releaseGood.bizplace,
283
- creator: this.user,
284
- updater: this.user
285
- };
286
- worksheet.releaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
287
- //worksheet.releaseGood = releaseGood
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', 'rgop')
310
- .leftJoinAndSelect('rgop.orderPackageItems', 'rgopi')
311
- .leftJoinAndSelect('rgopi.orderProduct', 'op2')
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.bizplace', 'rgbz')
315
- .leftJoinAndSelect('rgbz.domain', 'bzd')
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
- let releaseGoods = pickingOrderInventory.reduce((data, oi) => {
407
- if (!data.find(x => x.id == oi.releaseGood.id)) {
408
- data.push(oi.releaseGood);
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 orderPackage = {
462
- name: sales_base_1.OrderNoGenerator.orderPackage(),
463
- packageId: null,
464
- trackingNo: null,
465
- transporter: null,
466
- airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
467
- invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
468
- status: sales_base_1.ORDER_STATUS.PROCESSING,
469
- releaseGood,
470
- domain: releaseGood.domain,
471
- bizplace: releaseGood.bizplace,
472
- creator: this.user,
473
- updater: this.user
474
- };
475
- releaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
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).save(releaseGoods);
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
- .createQueryBuilder('w')
1913
- .leftJoinAndSelect('w.releaseGood', 'rg')
1914
- .leftJoinAndSelect('rg.bizplace', 'rg_b')
1915
- .leftJoinAndSelect('rg.domain', 'rg_d')
1916
- .leftJoinAndSelect('rg.lastMileDelivery', 'rg_lmd')
1917
- .leftJoinAndSelect('rg_b.domain', 'b_d')
1918
- .leftJoinAndSelect('rg.orderProducts', 'rg_op')
1919
- .leftJoinAndSelect('rg_op.product', 'op_p')
1920
- .leftJoinAndSelect('rg_op.productDetail', 'op_pd')
1921
- .leftJoinAndSelect('rg_op.productBundle', 'op_pb')
1922
- .leftJoinAndSelect('op_pb.productBundleSettings', 'pb_ps')
1923
- .leftJoinAndSelect('pb_ps.productDetail', 'ps_pd')
1924
- .leftJoinAndSelect('op_pd.product', 'pd_p')
1925
- .leftJoinAndSelect('rg.orderPackages', 'rg_opc')
1926
- .leftJoinAndSelect('rg_opc.orderPackageItems', 'opc_opi')
1927
- .leftJoinAndSelect('opc_opi.orderProduct', 'opi_op')
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 orderPackage = {
2009
- name: sales_base_1.OrderNoGenerator.orderPackage(),
2010
- packageId: null,
2011
- trackingNo: null,
2012
- transporter: null,
2013
- airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill,
2014
- invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
2015
- status: sales_base_1.ORDER_STATUS.PROCESSING,
2016
- releaseGood,
2017
- domain: releaseGood.domain,
2018
- bizplace: releaseGood.bizplace,
2019
- creator: this.user,
2020
- updater: this.user
2021
- };
2022
- await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
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
- let savedOrderPackage = await tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
2041
- const orderPackageItems = releaseGood.orderProducts
2042
- .map(op => {
2043
- if (op.product) {
2044
- return {
2045
- name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2046
- orderProduct: op,
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
- releaseQty: op.releaseQty,
2049
- orderPackage: savedOrderPackage,
2212
+ releaseGood,
2050
2213
  domain: releaseGood.domain,
2051
2214
  bizplace: releaseGood.bizplace,
2052
- creator: releaseGood.creator,
2053
- updater: releaseGood.updater,
2054
- productDetail: op.productDetail
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
- else {
2058
- let productBundle = op.productBundle;
2059
- return productBundle.productBundleSettings.map(pbs => ({
2060
- name: sales_base_1.OrderNoGenerator.orderPackageItem(),
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
- .flat();
2074
- await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
2075
- orderPackage.orderPackageItems = orderPackageItems;
2076
- releaseGood.orderPackages = [orderPackage];
2077
- return releaseGood;
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.createOrderPackageAndItems = createOrderPackageAndItems;
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