@things-factory/worksheet-base 4.3.522 → 4.3.524
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 +440 -90
- 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 +214 -123
- package/dist-server/utils/lmd-util.js.map +1 -1
- package/package.json +18 -18
- package/server/controllers/outbound/index.ts +9 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +507 -83
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +1 -1
- package/server/utils/lmd-util.ts +272 -139
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EntityManager, Equal, getConnection, getManager, In, IsNull, Not } from 'typeorm'
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid'
|
|
2
3
|
|
|
3
|
-
import { ApplicationType } from '@things-factory/auth-base'
|
|
4
|
+
import { ApplicationType, User } from '@things-factory/auth-base'
|
|
4
5
|
import { Bizplace } from '@things-factory/biz-base'
|
|
5
6
|
import { logger } from '@things-factory/env'
|
|
6
7
|
import { generateId } from '@things-factory/id-rule-base'
|
|
@@ -26,6 +27,7 @@ import {
|
|
|
26
27
|
OrderToteItem,
|
|
27
28
|
OrderToteSeal,
|
|
28
29
|
OrderVas,
|
|
30
|
+
OrderConsignment,
|
|
29
31
|
PowrupController,
|
|
30
32
|
ReleaseGood,
|
|
31
33
|
WebspertController
|
|
@@ -52,6 +54,7 @@ import { SellercraftController } from '../../controllers'
|
|
|
52
54
|
import { ActiveWorksheetPickingView, Worksheet, WorksheetDetail } from '../../entities'
|
|
53
55
|
import { inventoriesByStrategy, isInventoryObsolete, WorksheetNoGenerator } from '../../utils'
|
|
54
56
|
import { VasWorksheetController } from '../vas/vas-worksheet-controller'
|
|
57
|
+
import { sortingProductResolver } from 'server/graphql/resolvers/worksheet/sorting/sorting-product'
|
|
55
58
|
|
|
56
59
|
export class PickingWorksheetController extends VasWorksheetController {
|
|
57
60
|
async generatePickingWorksheet(releaseGoodNo: string, currentStatus: string = null): Promise<Worksheet> {
|
|
@@ -227,6 +230,24 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
227
230
|
'releaseGood.domain',
|
|
228
231
|
'releaseGood.lastMileDelivery',
|
|
229
232
|
'releaseGood.bizplace.domain',
|
|
233
|
+
'releaseGood.orderProducts',
|
|
234
|
+
'releaseGood.orderProducts.productDetail',
|
|
235
|
+
'releaseGood.orderProducts.product',
|
|
236
|
+
'releaseGood.orderProducts.productDetail.product',
|
|
237
|
+
'releaseGood.orderProducts.productBundle',
|
|
238
|
+
'releaseGood.orderProducts.productBundle.productBundleSettings',
|
|
239
|
+
'releaseGood.orderProducts.productBundle.productBundleSettings.productDetail',
|
|
240
|
+
'releaseGood.orderPackages',
|
|
241
|
+
'releaseGood.orderPackages.orderPackageItems',
|
|
242
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct',
|
|
243
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
|
|
244
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
245
|
+
'releaseGood.orderConsignments',
|
|
246
|
+
'releaseGood.orderConsignments.orderPackages',
|
|
247
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems',
|
|
248
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct',
|
|
249
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct.product',
|
|
250
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
230
251
|
'domain',
|
|
231
252
|
'bizplace',
|
|
232
253
|
'bizplace.domain',
|
|
@@ -263,6 +284,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
263
284
|
worksheet.releaseGood = { ...worksheet.releaseGood, orderProducts, orderPackages }
|
|
264
285
|
|
|
265
286
|
let releaseGood: ReleaseGood = Object.assign(new ReleaseGood(), worksheet.releaseGood)
|
|
287
|
+
let newReleaseGood: ReleaseGood
|
|
266
288
|
|
|
267
289
|
// assign inventory if unassigned
|
|
268
290
|
if (!releaseGood.assignedInventory) {
|
|
@@ -368,22 +390,37 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
368
390
|
|
|
369
391
|
default:
|
|
370
392
|
if (!releaseGood?.orderPackages?.length) {
|
|
371
|
-
let
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
393
|
+
let mps = releaseGood?.lastMileDelivery?.mps
|
|
394
|
+
switch (mps) {
|
|
395
|
+
case true:
|
|
396
|
+
newReleaseGood = await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain)
|
|
397
|
+
break
|
|
398
|
+
case false:
|
|
399
|
+
case undefined:
|
|
400
|
+
let orderConsignment: OrderConsignment = await createOrderConsignment(
|
|
401
|
+
this.trxMgr,
|
|
402
|
+
{},
|
|
403
|
+
releaseGood,
|
|
404
|
+
this.user
|
|
405
|
+
)
|
|
406
|
+
let orderPackage: OrderPackage = {
|
|
407
|
+
name: OrderNoGenerator.orderPackage(),
|
|
408
|
+
packageId: null,
|
|
409
|
+
trackingNo: null,
|
|
410
|
+
transporter: null,
|
|
411
|
+
airwayBill: releaseGood?.airwayBill,
|
|
412
|
+
invoice: releaseGood?.invoice,
|
|
413
|
+
status: ORDER_STATUS.PROCESSING,
|
|
414
|
+
releaseGood,
|
|
415
|
+
domain: releaseGood.domain,
|
|
416
|
+
bizplace: releaseGood.bizplace,
|
|
417
|
+
creator: this.user,
|
|
418
|
+
updater: this.user,
|
|
419
|
+
orderConsignment: orderConsignment
|
|
420
|
+
}
|
|
421
|
+
newReleaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
422
|
+
break
|
|
384
423
|
}
|
|
385
|
-
worksheet.releaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
386
|
-
//worksheet.releaseGood = releaseGood
|
|
387
424
|
}
|
|
388
425
|
break
|
|
389
426
|
}
|
|
@@ -391,6 +428,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
391
428
|
logger.error(`picking-worksheet-controller[activatePicking]: ${error}`)
|
|
392
429
|
}
|
|
393
430
|
|
|
431
|
+
if (newReleaseGood) {
|
|
432
|
+
worksheet.releaseGood = newReleaseGood
|
|
433
|
+
}
|
|
434
|
+
|
|
394
435
|
return worksheet
|
|
395
436
|
}
|
|
396
437
|
|
|
@@ -406,13 +447,19 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
406
447
|
.leftJoinAndSelect('w.releaseGood', 'rg')
|
|
407
448
|
.leftJoinAndSelect('rg.domain', 'rgd')
|
|
408
449
|
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
409
|
-
.leftJoinAndSelect('rg.orderPackages', '
|
|
410
|
-
.leftJoinAndSelect('
|
|
411
|
-
.leftJoinAndSelect('
|
|
450
|
+
.leftJoinAndSelect('rg.orderPackages', 'op')
|
|
451
|
+
.leftJoinAndSelect('op.orderPackageItems', 'opi')
|
|
452
|
+
.leftJoinAndSelect('opi.orderProduct', 'op2')
|
|
412
453
|
.leftJoinAndSelect('op2.product', 'p')
|
|
413
454
|
.leftJoinAndSelect('op2.productDetail', 'pd')
|
|
414
|
-
.leftJoinAndSelect('rg.
|
|
415
|
-
.leftJoinAndSelect('
|
|
455
|
+
.leftJoinAndSelect('rg.orderConsignments', 'oc')
|
|
456
|
+
.leftJoinAndSelect('oc.orderPackages', 'ocop')
|
|
457
|
+
.leftJoinAndSelect('ocop.orderPackageItems', 'ocpi')
|
|
458
|
+
.leftJoinAndSelect('ocpi.orderProduct', 'ocp2')
|
|
459
|
+
.leftJoinAndSelect('ocp2.product', 'ocp')
|
|
460
|
+
.leftJoinAndSelect('ocp2.productDetail', 'ocpd')
|
|
461
|
+
.leftJoinAndSelect('rg.bizplace', 'rgb')
|
|
462
|
+
.leftJoinAndSelect('rgb.domain', 'rgbd')
|
|
416
463
|
.leftJoinAndSelect('b.domain', 'bd')
|
|
417
464
|
.leftJoinAndSelect('b.company', 'c')
|
|
418
465
|
.leftJoinAndSelect('c.domain', 'cd')
|
|
@@ -508,7 +555,13 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
508
555
|
'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
509
556
|
'releaseGood.orderProducts',
|
|
510
557
|
'releaseGood.orderProducts.productDetail',
|
|
511
|
-
'releaseGood.orderProducts.product'
|
|
558
|
+
'releaseGood.orderProducts.product',
|
|
559
|
+
'releaseGood.orderConsignments',
|
|
560
|
+
'releaseGood.orderConsignments.orderPackages',
|
|
561
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems',
|
|
562
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct',
|
|
563
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct.product',
|
|
564
|
+
'releaseGood.orderConsignments.orderPackages.orderPackageItems.orderProduct.productDetail'
|
|
512
565
|
]
|
|
513
566
|
})
|
|
514
567
|
|
|
@@ -585,21 +638,37 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
585
638
|
|
|
586
639
|
default:
|
|
587
640
|
if (!releaseGood?.orderPackages?.length) {
|
|
588
|
-
let
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
641
|
+
let mps = releaseGood?.lastMileDelivery?.mps
|
|
642
|
+
switch (mps) {
|
|
643
|
+
case true:
|
|
644
|
+
await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain)
|
|
645
|
+
break
|
|
646
|
+
case false:
|
|
647
|
+
case undefined:
|
|
648
|
+
let orderConsignment: OrderConsignment = await createOrderConsignment(
|
|
649
|
+
this.trxMgr,
|
|
650
|
+
{},
|
|
651
|
+
releaseGood,
|
|
652
|
+
this.user
|
|
653
|
+
)
|
|
654
|
+
let orderPackage: OrderPackage = {
|
|
655
|
+
name: OrderNoGenerator.orderPackage(),
|
|
656
|
+
packageId: null,
|
|
657
|
+
trackingNo: null,
|
|
658
|
+
transporter: null,
|
|
659
|
+
airwayBill: releaseGood?.airwayBill,
|
|
660
|
+
invoice: releaseGood?.invoice,
|
|
661
|
+
status: ORDER_STATUS.PROCESSING,
|
|
662
|
+
releaseGood,
|
|
663
|
+
domain: releaseGood.domain,
|
|
664
|
+
bizplace: releaseGood.bizplace,
|
|
665
|
+
creator: this.user,
|
|
666
|
+
updater: this.user,
|
|
667
|
+
orderConsignment: orderConsignment
|
|
668
|
+
}
|
|
669
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
670
|
+
break
|
|
601
671
|
}
|
|
602
|
-
releaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
603
672
|
}
|
|
604
673
|
break
|
|
605
674
|
}
|
|
@@ -2553,6 +2622,12 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2553
2622
|
.leftJoinAndSelect('opc_opi.orderProduct', 'opi_op')
|
|
2554
2623
|
.leftJoinAndSelect('opi_op.product', 'op_p2')
|
|
2555
2624
|
.leftJoinAndSelect('opi_op.productDetail', 'op_pd2')
|
|
2625
|
+
.leftJoinAndSelect('rg.orderConsignments', 'rg_oc')
|
|
2626
|
+
.leftJoinAndSelect('rg_oc.orderPackages', 'oc_op')
|
|
2627
|
+
.leftJoinAndSelect('oc_op.orderPackageItems', 'oc_opi')
|
|
2628
|
+
.leftJoinAndSelect('oc_opi.orderProduct', 'opi_op2')
|
|
2629
|
+
.leftJoinAndSelect('opi_op2.product', 'op_p3')
|
|
2630
|
+
.leftJoinAndSelect('opi_op2.productDetail', 'op_pd3')
|
|
2556
2631
|
.leftJoinAndSelect('w.domain', 'd')
|
|
2557
2632
|
.leftJoinAndSelect('w.bizplace', 'b')
|
|
2558
2633
|
.leftJoinAndSelect('b.company', 'c')
|
|
@@ -2662,23 +2737,42 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2662
2737
|
})
|
|
2663
2738
|
break
|
|
2664
2739
|
|
|
2740
|
+
case ApplicationType.MMS:
|
|
2741
|
+
break
|
|
2742
|
+
|
|
2665
2743
|
default:
|
|
2666
2744
|
if (!releaseGood?.orderPackages?.length) {
|
|
2667
|
-
let
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2745
|
+
let mps = releaseGood?.lastMileDelivery?.mps
|
|
2746
|
+
switch (mps) {
|
|
2747
|
+
case true:
|
|
2748
|
+
await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain)
|
|
2749
|
+
break
|
|
2750
|
+
case false:
|
|
2751
|
+
case undefined:
|
|
2752
|
+
let orderConsignment: OrderConsignment = await createOrderConsignment(
|
|
2753
|
+
this.trxMgr,
|
|
2754
|
+
{},
|
|
2755
|
+
releaseGood,
|
|
2756
|
+
this.user
|
|
2757
|
+
)
|
|
2758
|
+
let orderPackage: OrderPackage = {
|
|
2759
|
+
name: OrderNoGenerator.orderPackage(),
|
|
2760
|
+
packageId: null,
|
|
2761
|
+
trackingNo: null,
|
|
2762
|
+
transporter: null,
|
|
2763
|
+
airwayBill: releaseGood?.airwayBill,
|
|
2764
|
+
invoice: releaseGood?.invoice,
|
|
2765
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2766
|
+
releaseGood,
|
|
2767
|
+
domain: releaseGood.domain,
|
|
2768
|
+
bizplace: releaseGood.bizplace,
|
|
2769
|
+
creator: this.user,
|
|
2770
|
+
updater: this.user,
|
|
2771
|
+
orderConsignment: orderConsignment
|
|
2772
|
+
}
|
|
2773
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
2774
|
+
break
|
|
2680
2775
|
}
|
|
2681
|
-
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
2682
2776
|
}
|
|
2683
2777
|
break
|
|
2684
2778
|
}
|
|
@@ -2701,44 +2795,374 @@ export async function createOrderPackageAndItems(
|
|
|
2701
2795
|
releaseGood: ReleaseGood,
|
|
2702
2796
|
orderPackage: OrderPackage
|
|
2703
2797
|
): Promise<ReleaseGood> {
|
|
2704
|
-
|
|
2798
|
+
try {
|
|
2799
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
2705
2800
|
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2801
|
+
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts
|
|
2802
|
+
.map(op => {
|
|
2803
|
+
if (op.product) {
|
|
2804
|
+
return {
|
|
2805
|
+
id: uuidv4(),
|
|
2806
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2807
|
+
orderProduct: op,
|
|
2808
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2809
|
+
releaseQty: op.releaseQty,
|
|
2810
|
+
orderPackage: savedOrderPackage,
|
|
2811
|
+
domain: releaseGood.domain,
|
|
2812
|
+
bizplace: releaseGood.bizplace,
|
|
2813
|
+
creator: releaseGood.creator,
|
|
2814
|
+
updater: releaseGood.updater,
|
|
2815
|
+
productDetail: op.productDetail
|
|
2816
|
+
}
|
|
2817
|
+
} else {
|
|
2818
|
+
let productBundle = op.productBundle
|
|
2819
|
+
return productBundle.productBundleSettings.map(pbs => ({
|
|
2820
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2821
|
+
orderProduct: op,
|
|
2822
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2823
|
+
releaseQty: op.releaseQty * pbs.bundleQty,
|
|
2824
|
+
orderPackage: savedOrderPackage,
|
|
2825
|
+
domain: releaseGood.domain,
|
|
2826
|
+
bizplace: releaseGood.bizplace,
|
|
2827
|
+
creator: releaseGood.creator,
|
|
2828
|
+
updater: releaseGood.updater,
|
|
2829
|
+
productDetail: pbs.productDetail
|
|
2830
|
+
}))
|
|
2720
2831
|
}
|
|
2832
|
+
})
|
|
2833
|
+
.flat()
|
|
2834
|
+
|
|
2835
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
2836
|
+
orderPackage.orderPackageItems = orderPackageItems
|
|
2837
|
+
releaseGood.orderPackages = [orderPackage]
|
|
2838
|
+
|
|
2839
|
+
return releaseGood
|
|
2840
|
+
} catch (e) {
|
|
2841
|
+
logger.error(`error:${e}`)
|
|
2842
|
+
}
|
|
2843
|
+
}
|
|
2844
|
+
|
|
2845
|
+
export async function splitOrderConsignment(
|
|
2846
|
+
tx: EntityManager,
|
|
2847
|
+
releaseGood: ReleaseGood,
|
|
2848
|
+
user: User,
|
|
2849
|
+
domain: Domain
|
|
2850
|
+
): Promise<any> {
|
|
2851
|
+
try {
|
|
2852
|
+
let currentConsignment = { id: uuidv4(), totalWeight: 0, orderPackages: [] }
|
|
2853
|
+
let totalConsignments = []
|
|
2854
|
+
let currOrderProducts = []
|
|
2855
|
+
let totalConsignmentWeight = 0
|
|
2856
|
+
|
|
2857
|
+
let orderProducts: OrderProduct = releaseGood.orderProducts
|
|
2858
|
+
let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight
|
|
2859
|
+
|
|
2860
|
+
//sort product according to packingType
|
|
2861
|
+
let sortOrderProducts = await sortingProduct(orderProducts)
|
|
2862
|
+
|
|
2863
|
+
//initialise new orderConsignment created
|
|
2864
|
+
const createdNewConsignment = () => ({
|
|
2865
|
+
id: uuidv4(),
|
|
2866
|
+
totalWeight: 0,
|
|
2867
|
+
orderPackages: []
|
|
2868
|
+
})
|
|
2869
|
+
|
|
2870
|
+
//push orderPackage & packageItems into consigment
|
|
2871
|
+
const createPackageConsignment = (consignment, packageWeight, releaseGood, orderProduct, releaseQty, user) => {
|
|
2872
|
+
consignment.totalWeight += packageWeight
|
|
2873
|
+
|
|
2874
|
+
currentConsignment.orderPackages.push({
|
|
2875
|
+
id: uuidv4(),
|
|
2876
|
+
name: OrderNoGenerator.orderPackage(),
|
|
2877
|
+
packageId: null,
|
|
2878
|
+
trackingNo: null,
|
|
2879
|
+
transporter: null,
|
|
2880
|
+
airwayBill: releaseGood?.airwayBill,
|
|
2881
|
+
invoice: releaseGood?.invoice,
|
|
2882
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2883
|
+
releaseGood,
|
|
2884
|
+
domain: releaseGood.domain,
|
|
2885
|
+
bizplace: releaseGood.bizplace,
|
|
2886
|
+
creator: user,
|
|
2887
|
+
updater: user,
|
|
2888
|
+
orderPackageItems: [
|
|
2889
|
+
{
|
|
2890
|
+
id: uuidv4(),
|
|
2891
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2892
|
+
releaseQty: releaseQty,
|
|
2893
|
+
orderProduct: orderProduct,
|
|
2894
|
+
domain: releaseGood.domain,
|
|
2895
|
+
bizplace: releaseGood.bizplace,
|
|
2896
|
+
creator: releaseGood.creator,
|
|
2897
|
+
updater: releaseGood.updater,
|
|
2898
|
+
productDetail: orderProduct.productDetail
|
|
2899
|
+
}
|
|
2900
|
+
]
|
|
2901
|
+
})
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2904
|
+
const createPackage = op => {
|
|
2905
|
+
let releaseQty = op.productDetail.packingType.toLowerCase() === 'carton' ? 1 : op.releaseQty
|
|
2906
|
+
let packageWeight =
|
|
2907
|
+
op.productDetail.packingType.toLowerCase() === 'carton'
|
|
2908
|
+
? op.productDetail.grossWeight
|
|
2909
|
+
: op.productDetail.grossWeight * releaseQty
|
|
2910
|
+
|
|
2911
|
+
const isCarton = op.productDetail.packingType.toLowerCase() === 'carton'
|
|
2912
|
+
totalConsignmentWeight += packageWeight
|
|
2913
|
+
const requiresNewConsignment = totalConsignmentWeight >= maxConsignmentWeight
|
|
2914
|
+
|
|
2915
|
+
if (isCarton || op.releaseQty > 1) {
|
|
2916
|
+
if (requiresNewConsignment) {
|
|
2917
|
+
//push the current consignment to create new consignment
|
|
2918
|
+
totalConsignments.push(currentConsignment)
|
|
2919
|
+
|
|
2920
|
+
//Initialise the totalConsignment weight to the new data
|
|
2921
|
+
totalConsignmentWeight = packageWeight + 0
|
|
2922
|
+
currentConsignment = createdNewConsignment()
|
|
2923
|
+
}
|
|
2924
|
+
createPackageConsignment(currentConsignment, packageWeight, releaseGood, op, releaseQty, user)
|
|
2721
2925
|
} else {
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
productDetail: pbs.productDetail
|
|
2734
|
-
}))
|
|
2926
|
+
currOrderProducts.push(op)
|
|
2927
|
+
}
|
|
2928
|
+
}
|
|
2929
|
+
|
|
2930
|
+
sortOrderProducts.forEach(item => {
|
|
2931
|
+
if (item.packingType.toLowerCase() === 'carton') {
|
|
2932
|
+
for (let i = 0; i < item.releaseQty; i++) {
|
|
2933
|
+
createPackage(item)
|
|
2934
|
+
}
|
|
2935
|
+
} else {
|
|
2936
|
+
createPackage(item)
|
|
2735
2937
|
}
|
|
2736
2938
|
})
|
|
2737
|
-
.flat()
|
|
2738
2939
|
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2940
|
+
// Add any remaining items to the last orderPackage
|
|
2941
|
+
if (currOrderProducts.length > 0) {
|
|
2942
|
+
let availableConsignment
|
|
2943
|
+
|
|
2944
|
+
for (let i = 0; i < currOrderProducts.length; i++) {
|
|
2945
|
+
let op = currOrderProducts[i]
|
|
2946
|
+
let releaseQty = op.releaseQty
|
|
2947
|
+
let currProductWeight = op.productDetail.grossWeight * op.releaseQty
|
|
2948
|
+
let lastOrderPackage = currentConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
|
|
2949
|
+
|
|
2950
|
+
//push the product into last current consignment orderPackage
|
|
2951
|
+
if (currentConsignment.totalWeight + currProductWeight < maxConsignmentWeight) {
|
|
2952
|
+
if (lastOrderPackage) {
|
|
2953
|
+
lastOrderPackage.orderPackageItems.push({
|
|
2954
|
+
id: uuidv4(),
|
|
2955
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2956
|
+
releaseQty: op.releaseQty,
|
|
2957
|
+
orderProduct: op,
|
|
2958
|
+
domain: releaseGood.domain,
|
|
2959
|
+
bizplace: releaseGood.bizplace,
|
|
2960
|
+
creator: releaseGood.creator,
|
|
2961
|
+
updater: releaseGood.updater,
|
|
2962
|
+
productDetail: op.productDetail
|
|
2963
|
+
})
|
|
2964
|
+
} else {
|
|
2965
|
+
await createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
|
|
2966
|
+
}
|
|
2967
|
+
} else {
|
|
2968
|
+
//push the currentConsignment into list of all the consignments
|
|
2969
|
+
if (!totalConsignments.some(tc => tc.id === currentConsignment.id)) {
|
|
2970
|
+
totalConsignments.push(currentConsignment)
|
|
2971
|
+
}
|
|
2972
|
+
|
|
2973
|
+
//find one order consignment to include the product
|
|
2974
|
+
availableConsignment = totalConsignments.find(tc => {
|
|
2975
|
+
tc.totalWeight += currProductWeight < maxConsignmentWeight
|
|
2976
|
+
})
|
|
2977
|
+
|
|
2978
|
+
if (availableConsignment) {
|
|
2979
|
+
let lastOrderPackage = availableConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
|
|
2980
|
+
lastOrderPackage.orderPackageItems.push({
|
|
2981
|
+
id: uuidv4(),
|
|
2982
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2983
|
+
releaseQty: op.releaseQty,
|
|
2984
|
+
orderProducts: op,
|
|
2985
|
+
domain: releaseGood.domain,
|
|
2986
|
+
bizplace: releaseGood.bizplace,
|
|
2987
|
+
creator: releaseGood.creator,
|
|
2988
|
+
updater: releaseGood.updater,
|
|
2989
|
+
productDetail: op.productDetail
|
|
2990
|
+
})
|
|
2991
|
+
|
|
2992
|
+
//update the totalConsignment data
|
|
2993
|
+
totalConsignments = totalConsignments.map(tc => {
|
|
2994
|
+
tc.id === availableConsignment.id ? availableConsignment : tc
|
|
2995
|
+
})
|
|
2996
|
+
} else {
|
|
2997
|
+
//create new consignment if no consignment available
|
|
2998
|
+
currentConsignment = createdNewConsignment()
|
|
2999
|
+
createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
|
|
3000
|
+
|
|
3001
|
+
totalConsignments.push(currentConsignment)
|
|
3002
|
+
}
|
|
3003
|
+
}
|
|
3004
|
+
}
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
//totalConsignments.length < 1 ? totalConsignments.push(currentConsignment) : totalConsignments
|
|
3008
|
+
|
|
3009
|
+
const existingConsignment = totalConsignments.find(tc => tc.id === currentConsignment.id)
|
|
3010
|
+
|
|
3011
|
+
if (!existingConsignment) {
|
|
3012
|
+
totalConsignments.push(currentConsignment)
|
|
3013
|
+
}
|
|
3014
|
+
|
|
3015
|
+
let orderConsignment = totalConsignments
|
|
3016
|
+
let newReleaseGood = await createConsignmentWithMultipackage(tx, orderConsignment, releaseGood, user, domain)
|
|
3017
|
+
|
|
3018
|
+
return newReleaseGood
|
|
3019
|
+
} catch (e) {
|
|
3020
|
+
logger.error(`[lmd-create-consignment-notes]: ${e} `)
|
|
3021
|
+
}
|
|
3022
|
+
}
|
|
3023
|
+
|
|
3024
|
+
export async function createOrderConsignment(
|
|
3025
|
+
tx: EntityManager,
|
|
3026
|
+
orderCons: OrderConsignment,
|
|
3027
|
+
releaseGood: ReleaseGood,
|
|
3028
|
+
user: User
|
|
3029
|
+
): Promise<OrderConsignment> {
|
|
3030
|
+
try {
|
|
3031
|
+
const orderConsignment: OrderConsignment = {
|
|
3032
|
+
id: uuidv4(),
|
|
3033
|
+
name: OrderNoGenerator.orderConsignment(),
|
|
3034
|
+
noOfPackages: orderCons?.orderPackages?.length ? orderCons.orderPackages.length : 1,
|
|
3035
|
+
domain: releaseGood.domain,
|
|
3036
|
+
bizplace: releaseGood.bizplace,
|
|
3037
|
+
releaseGood: releaseGood,
|
|
3038
|
+
orderPackages: [],
|
|
3039
|
+
creator: user,
|
|
3040
|
+
updater: user
|
|
3041
|
+
}
|
|
2742
3042
|
|
|
2743
|
-
|
|
3043
|
+
return tx.getRepository(OrderConsignment).save(orderConsignment)
|
|
3044
|
+
} catch (e) {
|
|
3045
|
+
logger.error(`[lmd-create-order-consignment]: ${e} `)
|
|
3046
|
+
}
|
|
3047
|
+
}
|
|
3048
|
+
|
|
3049
|
+
export async function createConsignmentPackage(
|
|
3050
|
+
tx: EntityManager,
|
|
3051
|
+
orderPackageData: any,
|
|
3052
|
+
releaseGood: ReleaseGood,
|
|
3053
|
+
user: User,
|
|
3054
|
+
orderConsignment: OrderConsignment
|
|
3055
|
+
): Promise<OrderPackage> {
|
|
3056
|
+
try {
|
|
3057
|
+
const orderPackage: OrderPackage = {
|
|
3058
|
+
id: uuidv4(),
|
|
3059
|
+
name: OrderNoGenerator.orderPackage(),
|
|
3060
|
+
packageId: null,
|
|
3061
|
+
trackingNo: null,
|
|
3062
|
+
transporter: null,
|
|
3063
|
+
airwayBill: releaseGood?.airwayBill,
|
|
3064
|
+
invoice: releaseGood?.invoice,
|
|
3065
|
+
status: ORDER_STATUS.PROCESSING,
|
|
3066
|
+
releaseGood,
|
|
3067
|
+
domain: releaseGood.domain,
|
|
3068
|
+
bizplace: releaseGood.bizplace,
|
|
3069
|
+
creator: user,
|
|
3070
|
+
updater: user,
|
|
3071
|
+
orderConsignment
|
|
3072
|
+
}
|
|
3073
|
+
return tx.getRepository(OrderPackage).save(orderPackage)
|
|
3074
|
+
} catch (e) {
|
|
3075
|
+
logger.error(`[lmd-create-order-package]: ${e} `)
|
|
3076
|
+
}
|
|
3077
|
+
}
|
|
3078
|
+
|
|
3079
|
+
export async function createConsignmentPackageItem(
|
|
3080
|
+
tx: EntityManager,
|
|
3081
|
+
orderPackageItemsData: any[],
|
|
3082
|
+
savedOrderPackage: OrderPackage,
|
|
3083
|
+
releaseGood: ReleaseGood
|
|
3084
|
+
): Promise<OrderPackageItem[]> {
|
|
3085
|
+
try {
|
|
3086
|
+
const orderPackageItems: OrderPackageItem[] = orderPackageItemsData.map(opi => ({
|
|
3087
|
+
id: opi.id,
|
|
3088
|
+
name: opi.name,
|
|
3089
|
+
orderProduct: opi.orderProduct,
|
|
3090
|
+
status: ORDER_STATUS.PROCESSING,
|
|
3091
|
+
releaseQty: opi.releaseQty,
|
|
3092
|
+
orderPackage: savedOrderPackage,
|
|
3093
|
+
domain: releaseGood.domain,
|
|
3094
|
+
bizplace: releaseGood.bizplace,
|
|
3095
|
+
creator: releaseGood.creator,
|
|
3096
|
+
updater: releaseGood.updater,
|
|
3097
|
+
productDetail: opi.productDetail
|
|
3098
|
+
}))
|
|
3099
|
+
|
|
3100
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
3101
|
+
return orderPackageItems
|
|
3102
|
+
} catch (e) {
|
|
3103
|
+
logger.error(`[lmd-create-order-package]: ${e} `)
|
|
3104
|
+
}
|
|
3105
|
+
}
|
|
3106
|
+
|
|
3107
|
+
export async function createConsignmentWithMultipackage(
|
|
3108
|
+
tx: EntityManager,
|
|
3109
|
+
orderConsList: OrderConsignment[],
|
|
3110
|
+
releaseGood: ReleaseGood,
|
|
3111
|
+
user: User,
|
|
3112
|
+
domain: Domain
|
|
3113
|
+
): Promise<any> {
|
|
3114
|
+
try {
|
|
3115
|
+
let newOrderPackages = []
|
|
3116
|
+
let newOrderConsignments: OrderConsignment = []
|
|
3117
|
+
|
|
3118
|
+
for (const orderCons of orderConsList) {
|
|
3119
|
+
const savedOrderConsignment = await createOrderConsignment(tx, orderCons, releaseGood, user)
|
|
3120
|
+
|
|
3121
|
+
for (const currentPackage of orderCons.orderPackages) {
|
|
3122
|
+
const savedOrderPackage = await createConsignmentPackage(
|
|
3123
|
+
tx,
|
|
3124
|
+
currentPackage,
|
|
3125
|
+
releaseGood,
|
|
3126
|
+
user,
|
|
3127
|
+
savedOrderConsignment
|
|
3128
|
+
)
|
|
3129
|
+
const orderPackageItems = await createConsignmentPackageItem(
|
|
3130
|
+
tx,
|
|
3131
|
+
currentPackage.orderPackageItems,
|
|
3132
|
+
savedOrderPackage,
|
|
3133
|
+
releaseGood
|
|
3134
|
+
)
|
|
3135
|
+
|
|
3136
|
+
savedOrderPackage.orderPackageItems = orderPackageItems
|
|
3137
|
+
savedOrderConsignment.orderPackages.push(savedOrderPackage)
|
|
3138
|
+
newOrderPackages.push(savedOrderPackage)
|
|
3139
|
+
}
|
|
3140
|
+
newOrderConsignments.push(savedOrderConsignment)
|
|
3141
|
+
}
|
|
3142
|
+
|
|
3143
|
+
releaseGood.orderConsignments = newOrderConsignments
|
|
3144
|
+
releaseGood.orderPackages = newOrderPackages
|
|
3145
|
+
|
|
3146
|
+
return releaseGood
|
|
3147
|
+
} catch (error) {
|
|
3148
|
+
console.error('Error creating consignment with multiple packages:', error)
|
|
3149
|
+
throw error
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
|
|
3153
|
+
export async function sortingProduct(orderProducts): Promise<any> {
|
|
3154
|
+
try {
|
|
3155
|
+
orderProducts.sort((a, b) => {
|
|
3156
|
+
if (a.product.packingType !== b.product.packingType) {
|
|
3157
|
+
return a.product.packingType < b.product.packingType ? -1 : 1
|
|
3158
|
+
}
|
|
3159
|
+
if (a.product.sku !== b.product.sku) {
|
|
3160
|
+
return a.product.sku < b.product.sku ? -1 : 1
|
|
3161
|
+
}
|
|
3162
|
+
return 0
|
|
3163
|
+
})
|
|
3164
|
+
return orderProducts
|
|
3165
|
+
} catch (e) {
|
|
3166
|
+
logger.error(`[lmd-sort-product]: ${e} `)
|
|
3167
|
+
}
|
|
2744
3168
|
}
|