@things-factory/worksheet-base 4.3.523 → 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.
@@ -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 orderPackage: OrderPackage = {
372
- name: OrderNoGenerator.orderPackage(),
373
- packageId: null,
374
- trackingNo: null,
375
- transporter: null,
376
- airwayBill: releaseGood?.airwayBill,
377
- invoice: releaseGood?.invoice,
378
- status: ORDER_STATUS.PROCESSING,
379
- releaseGood,
380
- domain: releaseGood.domain,
381
- bizplace: releaseGood.bizplace,
382
- creator: this.user,
383
- updater: this.user
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', 'rgop')
410
- .leftJoinAndSelect('rgop.orderPackageItems', 'rgopi')
411
- .leftJoinAndSelect('rgopi.orderProduct', 'op2')
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.bizplace', 'rgbz')
415
- .leftJoinAndSelect('rgbz.domain', 'bzd')
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 orderPackage: OrderPackage = {
589
- name: OrderNoGenerator.orderPackage(),
590
- packageId: null,
591
- trackingNo: null,
592
- transporter: null,
593
- airwayBill: releaseGood?.airwayBill,
594
- invoice: releaseGood?.invoice,
595
- status: ORDER_STATUS.PROCESSING,
596
- releaseGood,
597
- domain: releaseGood.domain,
598
- bizplace: releaseGood.bizplace,
599
- creator: this.user,
600
- updater: this.user
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,28 +2737,42 @@ export class PickingWorksheetController extends VasWorksheetController {
2662
2737
  })
2663
2738
  break
2664
2739
 
2665
- case ApplicationType.WEBSPERT:
2666
- // Trigger Whole Order Process
2667
- WebspertController.triggerOrderProcesses(releaseGood, this.domain, this.user)
2740
+ case ApplicationType.MMS:
2668
2741
  break
2669
2742
 
2670
2743
  default:
2671
2744
  if (!releaseGood?.orderPackages?.length) {
2672
- let orderPackage: OrderPackage = {
2673
- name: OrderNoGenerator.orderPackage(),
2674
- packageId: null,
2675
- trackingNo: null,
2676
- transporter: null,
2677
- airwayBill: releaseGood?.airwayBill,
2678
- invoice: releaseGood?.invoice,
2679
- status: ORDER_STATUS.PROCESSING,
2680
- releaseGood,
2681
- domain: releaseGood.domain,
2682
- bizplace: releaseGood.bizplace,
2683
- creator: this.user,
2684
- updater: this.user
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
2685
2775
  }
2686
- await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
2687
2776
  }
2688
2777
  break
2689
2778
  }
@@ -2706,44 +2795,374 @@ export async function createOrderPackageAndItems(
2706
2795
  releaseGood: ReleaseGood,
2707
2796
  orderPackage: OrderPackage
2708
2797
  ): Promise<ReleaseGood> {
2709
- let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
2798
+ try {
2799
+ let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
2710
2800
 
2711
- const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts
2712
- .map(op => {
2713
- if (op.product) {
2714
- return {
2715
- name: OrderNoGenerator.orderPackageItem(),
2716
- orderProduct: op,
2717
- status: ORDER_STATUS.PROCESSING,
2718
- releaseQty: op.releaseQty,
2719
- orderPackage: savedOrderPackage,
2720
- domain: releaseGood.domain,
2721
- bizplace: releaseGood.bizplace,
2722
- creator: releaseGood.creator,
2723
- updater: releaseGood.updater,
2724
- productDetail: op.productDetail
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
+ }))
2725
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)
2726
2925
  } else {
2727
- let productBundle = op.productBundle
2728
- return productBundle.productBundleSettings.map(pbs => ({
2729
- name: OrderNoGenerator.orderPackageItem(),
2730
- orderProduct: op,
2731
- status: ORDER_STATUS.PROCESSING,
2732
- releaseQty: op.releaseQty * pbs.bundleQty,
2733
- orderPackage: savedOrderPackage,
2734
- domain: releaseGood.domain,
2735
- bizplace: releaseGood.bizplace,
2736
- creator: releaseGood.creator,
2737
- updater: releaseGood.updater,
2738
- productDetail: pbs.productDetail
2739
- }))
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)
2740
2937
  }
2741
2938
  })
2742
- .flat()
2743
2939
 
2744
- await tx.getRepository(OrderPackageItem).save(orderPackageItems)
2745
- orderPackage.orderPackageItems = orderPackageItems
2746
- releaseGood.orderPackages = [orderPackage]
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
+ }
2747
2972
 
2748
- return releaseGood
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
+ }
3042
+
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
+ }
2749
3168
  }