@things-factory/worksheet-base 4.0.22 → 4.0.26

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.
Files changed (104) hide show
  1. package/dist-server/controllers/ecommerce/ecommerce-controller.js +10 -3
  2. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +5 -3
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +24 -4
  6. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +98 -140
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
  10. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/picking-worksheet-controller.js +4 -4
  12. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/render-orientage-do.js +3 -3
  14. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  15. package/dist-server/controllers/render-orientage-grn.js +4 -4
  16. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  17. package/dist-server/controllers/worksheet-controller.js +5 -5
  18. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +14 -0
  20. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -0
  21. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  22. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
  23. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
  24. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +8 -4
  25. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  26. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +6 -4
  27. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  28. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -7
  29. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  30. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
  31. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  32. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
  33. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +5 -1
  35. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +6 -2
  37. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -1
  39. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +2 -1
  41. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +4 -5
  43. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js +4 -4
  45. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +4 -2
  47. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/worksheet.js +28 -1
  49. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  50. package/dist-server/graphql/types/worksheet/index.js +7 -8
  51. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  52. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  53. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  54. package/package.json +16 -16
  55. package/server/controllers/ecommerce/ecommerce-controller.ts +18 -4
  56. package/server/controllers/ecommerce/sellercraft-controller.ts +11 -5
  57. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +28 -6
  58. package/server/controllers/inbound/unloading-worksheet-controller.ts +130 -152
  59. package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
  60. package/server/controllers/outbound/picking-worksheet-controller.ts +4 -4
  61. package/server/controllers/render-orientage-do.ts +7 -5
  62. package/server/controllers/render-orientage-grn.ts +9 -7
  63. package/server/controllers/worksheet-controller.ts +5 -5
  64. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +22 -0
  65. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
  66. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +2 -0
  67. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +9 -5
  68. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +7 -4
  69. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -8
  70. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
  71. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +1 -0
  72. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +9 -3
  73. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +9 -3
  74. package/server/graphql/resolvers/worksheet/return-worksheet.ts +7 -3
  75. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -2
  76. package/server/graphql/resolvers/worksheet/unloading/index.ts +3 -5
  77. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +9 -6
  78. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +7 -3
  79. package/server/graphql/resolvers/worksheet/worksheet.ts +29 -1
  80. package/server/graphql/types/worksheet/index.ts +8 -9
  81. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  82. package/dist-server/graphql/resolvers/worksheet/edit-batch-no.js +0 -79
  83. package/dist-server/graphql/resolvers/worksheet/edit-batch-no.js.map +0 -1
  84. package/dist-server/graphql/resolvers/worksheet/preunload-worksheet.js +0 -68
  85. package/dist-server/graphql/resolvers/worksheet/preunload-worksheet.js.map +0 -1
  86. package/dist-server/graphql/resolvers/worksheet/proceed-edited-batch.js +0 -113
  87. package/dist-server/graphql/resolvers/worksheet/proceed-edited-batch.js.map +0 -1
  88. package/dist-server/graphql/resolvers/worksheet/submit-adjustment-for-approval.js +0 -58
  89. package/dist-server/graphql/resolvers/worksheet/submit-adjustment-for-approval.js.map +0 -1
  90. package/dist-server/graphql/resolvers/worksheet/unloading/complete-preunload.js +0 -23
  91. package/dist-server/graphql/resolvers/worksheet/unloading/complete-preunload.js.map +0 -1
  92. package/dist-server/graphql/resolvers/worksheet/unloading/preunload.js +0 -16
  93. package/dist-server/graphql/resolvers/worksheet/unloading/preunload.js.map +0 -1
  94. package/dist-server/graphql/resolvers/worksheet/unloading/undo-preunload.js +0 -16
  95. package/dist-server/graphql/resolvers/worksheet/unloading/undo-preunload.js.map +0 -1
  96. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js +0 -15
  97. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js.map +0 -1
  98. package/dist-server/graphql/resolvers/worksheet/unloading-return/undo-unload-returning.js +0 -15
  99. package/dist-server/graphql/resolvers/worksheet/unloading-return/undo-unload-returning.js.map +0 -1
  100. package/dist-server/graphql/resolvers/worksheet/unloading-return/unload-return.js +0 -15
  101. package/dist-server/graphql/resolvers/worksheet/unloading-return/unload-return.js.map +0 -1
  102. package/dist-server/migrations/1605856745211-SeedPrivilege.js +0 -56
  103. package/dist-server/migrations/1605856745211-SeedPrivilege.js.map +0 -1
  104. package/server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.ts +0 -23
@@ -508,170 +508,148 @@ export class UnloadingWorksheetController extends VasWorksheetController {
508
508
  )
509
509
  }
510
510
 
511
- async undoUnload(worksheetDetailName: string, palletId: string): Promise<void> {
512
- const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, [
513
- 'targetProduct',
514
- 'targetInventory',
515
- 'worksheet',
516
- 'worksheet.arrivalNotice',
517
- 'worksheet.returnOrder'
518
- ])
519
- this.checkRecordValidity(worksheetDetail, {
520
- status: (status: string) => {
521
- const availableStatus: string[] = [WORKSHEET_STATUS.EXECUTING, WORKSHEET_STATUS.PARTIALLY_UNLOADED]
522
- if (availableStatus.indexOf(status) < 0) {
523
- throw new Error(
524
- this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('status', 'Executing or Partially Unloaded', status)
525
- )
526
- }
527
- return true
528
- }
529
- })
530
-
531
- const worksheet: Worksheet = worksheetDetail.worksheet
532
-
533
- let arrivalNotice: ArrivalNotice
534
- let returnOrder: ReturnOrder
535
- if (worksheet?.arrivalNotice) arrivalNotice = worksheet.arrivalNotice
536
- else if (worksheet?.returnOrder) returnOrder = worksheet.returnOrder
537
-
538
- let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({
539
- where: { domain: this.domain, status: INVENTORY_STATUS.UNLOADED, palletId },
540
- relations: ['location']
541
- })
542
-
543
- const qty: number = inventory.qty
544
-
545
- if (arrivalNotice) {
546
- let targetProduct: OrderProduct = worksheetDetail.targetProduct
547
- targetProduct.actualPackQty -= qty
548
- targetProduct.actualPalletQty--
549
- targetProduct.remark = null
550
- targetProduct.issue = null
551
- targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
552
- targetProduct.updater = this.user
553
- await this.updateOrderTargets([targetProduct])
554
- } else if (returnOrder) {
555
- let targetInventory: OrderInventory = worksheetDetail.targetInventory
556
- targetInventory.actualPackQty -= qty
557
- targetInventory.actualPalletQty--
558
- targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
559
- targetInventory.updater = this.user
560
- await this.updateOrderTargets([targetInventory])
561
- }
562
-
563
- worksheetDetail.issue = null
564
- worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
565
- worksheetDetail.updater = this.user
566
- await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
567
-
568
- inventory.lastSeq++
569
- inventory.status = INVENTORY_STATUS.DELETED
570
- inventory = await this.transactionInventory(
571
- inventory,
572
- Boolean(arrivalNotice) ? arrivalNotice : returnOrder,
573
- -inventory.qty,
574
- -inventory.uomValue,
575
- INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
576
- )
577
- inventory.qty = 0
578
- inventory.uomValue = 0
579
- inventory.updater = this.user
580
-
581
- await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
582
-
583
- await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
584
- }
511
+ async undoUnload(orderType: string, orderNo: string, inventoryIds: [string]): Promise<void> {
512
+ for (var i = 0; i < inventoryIds.length; i++) {
513
+ const inventoryId: string = inventoryIds[i]
514
+ let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({
515
+ where: { domain: this.domain, id: inventoryId },
516
+ relations: ['location', 'product']
517
+ })
585
518
 
586
- async undoProductScanUnload(worksheetDetailName: string, palletId: string, cartonId: string): Promise<void> {
587
- const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, [
588
- 'targetProduct',
589
- 'targetInventory',
590
- 'bizplace',
591
- 'targetProduct.product',
592
- 'targetInventory.product',
593
- 'worksheet',
594
- 'worksheet.arrivalNotice',
595
- 'worksheet.returnOrder'
596
- ])
597
- this.checkRecordValidity(worksheetDetail, {
598
- status: (status: string) => {
599
- const availableStatus: string[] = [WORKSHEET_STATUS.EXECUTING, WORKSHEET_STATUS.PARTIALLY_UNLOADED]
600
- if (availableStatus.indexOf(status) < 0) {
601
- throw new Error(
602
- this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('status', 'Executing or Partially Unloaded', status)
603
- )
519
+ this.checkRecordValidity(inventory, {
520
+ status: (status: string) => {
521
+ const availableStatus: string[] = [INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED]
522
+ if (availableStatus.indexOf(status) < 0) {
523
+ throw new Error(
524
+ this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(
525
+ 'status',
526
+ 'Inventory current status unable to undo',
527
+ status
528
+ )
529
+ )
530
+ }
531
+ return true
604
532
  }
605
- return true
606
- }
607
- })
533
+ })
608
534
 
609
- let targetProduct: OrderProduct = worksheetDetail.targetProduct
610
- let targetInventory: OrderInventory = worksheetDetail.targetInventory
611
- const bizplace: Bizplace = worksheetDetail.bizplace
612
- const arrivalNotice: ArrivalNotice = worksheetDetail.worksheet.arrivalNotice
613
- const returnOrder: ReturnOrder = worksheetDetail.worksheet.returnOrder
614
- const product: Product = Boolean(arrivalNotice) ? targetProduct.product : targetInventory.product
615
- const packingType: string = Boolean(arrivalNotice) ? targetProduct.packingType : targetInventory.packingType
616
- const packingSize: number = Boolean(arrivalNotice) ? targetProduct.packingSize : targetInventory.packingSize
617
- const batchId: string = Boolean(arrivalNotice) ? targetProduct.batchId : targetInventory.batchId
535
+ const qty: number = inventory.qty
536
+
537
+ let targetProduct: OrderProduct
538
+ let targetInventory: OrderInventory
539
+ let arrivalNotice: ArrivalNotice
540
+ let returnOrder: ReturnOrder
541
+ let worksheetDetail: WorksheetDetail
542
+
543
+ if (orderType === ORDER_TYPES.ARRIVAL_NOTICE) {
544
+ arrivalNotice = await this.trxMgr.getRepository(ArrivalNotice).findOne({
545
+ where: { domain: this.domain, name: orderNo },
546
+ relations: ['orderProducts', 'orderProducts.product']
547
+ })
548
+
549
+ targetProduct = arrivalNotice.orderProducts.find(
550
+ op =>
551
+ op.batchId == inventory.batchId &&
552
+ op.packingType == inventory.packingType &&
553
+ op.product.id === inventory.product.id
554
+ )
618
555
 
619
- const invQb: SelectQueryBuilder<Inventory> = await this.trxMgr
620
- .getRepository(Inventory)
621
- .createQueryBuilder('INV')
622
- .where('INV.domain_id = :domainId', { domainId: this.domain.id })
623
- .andWhere('INV.bizplace_id = :bizplaceId', { bizplaceId: bizplace.id })
624
- .andWhere('INV.product_id = :productId', { productId: product.id })
625
- .andWhere('INV.batch_id = :batchId', { batchId: batchId })
626
- .andWhere('INV.packing_type = :packingType', { packingType: packingType })
627
- .andWhere('INV.packing_size = :packingSize', { packingSize: packingSize })
556
+ if (inventory.status == INVENTORY_STATUS.UNLOADED) {
557
+ targetProduct.actualPackQty -= qty
558
+ targetProduct.actualPalletQty--
559
+ targetProduct.remark = null
560
+ targetProduct.issue = null
561
+ targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
562
+ } else {
563
+ targetProduct.actualPackQty--
564
+ }
565
+ targetProduct.updater = this.user
566
+ await this.updateOrderTargets([targetProduct])
628
567
 
629
- if (arrivalNotice) invQb.andWhere('INV.ref_order_id = :arrivalNoticeId', { arrivalNoticeId: arrivalNotice.id })
630
- else if (returnOrder) invQb.andWhere('INV.ref_order_id = :returnOrderId', { returnOrderId: returnOrder.id })
568
+ worksheetDetail = await this.trxMgr
569
+ .getRepository(WorksheetDetail)
570
+ .findOne({ where: { domain: this.domain, targetProduct } })
571
+ } else {
572
+ returnOrder = await this.trxMgr.getRepository(ReturnOrder).findOne({
573
+ where: { domain: this.domain, name: orderNo },
574
+ relations: ['orderInventories', 'orderInventories.inventory', 'orderInventories.product']
575
+ })
576
+
577
+ targetInventory = returnOrder.orderInventories.find(
578
+ oi =>
579
+ oi.batchId == inventory.batchId &&
580
+ oi.packingType == inventory.packingType &&
581
+ oi.product.id == inventory.product.id &&
582
+ oi.inventory.id == inventory.id
583
+ )
584
+ if (inventory.status == INVENTORY_STATUS.UNLOADED) {
585
+ targetInventory.actualPackQty -= qty
586
+ targetInventory.actualPalletQty--
587
+ targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
588
+ } else {
589
+ targetInventory.actualPackQty--
590
+ }
591
+ targetInventory.updater = this.user
592
+ await this.updateOrderTargets([targetInventory])
631
593
 
632
- if (cartonId) invQb.andWhere('INV.carton_id = :cartonId', { cartonId: cartonId })
633
- else invQb.andWhere('INV.pallet_id = :palletId', { palletId: palletId })
594
+ worksheetDetail = await this.trxMgr
595
+ .getRepository(WorksheetDetail)
596
+ .findOne({ where: { domain: this.domain, targetInventory } })
597
+ }
634
598
 
635
- let foundInventory: Inventory = await invQb.getOne()
636
- if (!foundInventory) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(foundInventory.palletId))
599
+ if (inventory.status == INVENTORY_STATUS.CHECKED) {
600
+ inventory.qty--
601
+ inventory.uomValue =
602
+ Math.round(
603
+ inventory.qty *
604
+ (Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE)
605
+ ? targetProduct.uomValue
606
+ : targetInventory.returnUomValue) *
607
+ 100
608
+ ) / 100
609
+ inventory.updater = this.user
610
+ await this.trxMgr.getRepository(Inventory).save(inventory)
611
+
612
+ if (inventory == 0) {
613
+ inventory.lastSeq++
614
+ inventory.status = INVENTORY_STATUS.DELETED
615
+ inventory = await this.transactionInventory(
616
+ inventory,
617
+ Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
618
+ -inventory.qty,
619
+ -inventory.uomValue,
620
+ INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
621
+ )
622
+ inventory.qty = 0
623
+ inventory.uomValue = 0
624
+ inventory.updater = this.user
637
625
 
638
- if (arrivalNotice) {
639
- targetProduct.actualPackQty--
640
- targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
641
- targetProduct.updater = this.user
642
- } else if (returnOrder) {
643
- targetInventory.actualPackQty--
644
- targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
645
- targetInventory.updater = this.user
646
- }
626
+ await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
647
627
 
648
- foundInventory.qty--
649
- foundInventory.uomValue =
650
- Math.round(
651
- foundInventory.qty * (Boolean(arrivalNotice) ? targetProduct.uomValue : targetInventory.returnUomValue) * 100
652
- ) / 100
653
- foundInventory.updater = this.user
628
+ await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
629
+ }
630
+ } else {
631
+ inventory.lastSeq++
632
+ inventory.status = INVENTORY_STATUS.DELETED
633
+ inventory = await this.transactionInventory(
634
+ inventory,
635
+ Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
636
+ -inventory.qty,
637
+ -inventory.uomValue,
638
+ INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
639
+ )
640
+ inventory.qty = 0
641
+ inventory.uomValue = 0
642
+ inventory.updater = this.user
654
643
 
655
- worksheetDetail.issue = foundInventory.qty == 0 && worksheetDetail.issue ? null : worksheetDetail.issue
656
- worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
657
- worksheetDetail.updater = this.user
658
- await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
644
+ await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
659
645
 
660
- if (foundInventory.qty == 0) {
661
- if (arrivalNotice) {
662
- targetProduct.actualPalletQty--
663
- targetProduct.issue = null
664
- targetProduct.remark = null
665
- await this.updateOrderTargets([targetProduct])
666
- } else if (returnOrder) {
667
- targetInventory.actualPalletQty--
668
- await this.updateOrderTargets([targetInventory])
646
+ await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
669
647
  }
670
- await this.trxMgr.getRepository(Inventory).delete({ id: foundInventory.id })
671
- } else {
672
- if (arrivalNotice) await this.updateOrderTargets([targetProduct])
673
- else if (returnOrder) await this.updateOrderTargets([targetInventory])
674
- await this.trxMgr.getRepository(Inventory).save(foundInventory)
648
+
649
+ worksheetDetail.issue = inventory.qty == 0 && worksheetDetail?.issue ? null : worksheetDetail.issue
650
+ worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
651
+ worksheetDetail.updater = this.user
652
+ await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
675
653
  }
676
654
  }
677
655
 
@@ -12,12 +12,11 @@ export class PackingWorksheetController extends VasWorksheetController {
12
12
  ReleaseGood,
13
13
  {
14
14
  domain: this.domain,
15
- name: releaseGoodNo,
16
- status: ORDER_STATUS.READY_TO_PACK
15
+ name: releaseGoodNo
17
16
  },
18
17
  ['orderInventories', 'orderInventories.inventory']
19
18
  )
20
- const orderInventories: OrderInventory[] = releaseGood.orderInventories
19
+ let orderInventories: OrderInventory[] = releaseGood.orderInventories
21
20
 
22
21
  const existingPackingWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
23
22
  where: { domain: this.domain, releaseGood, type: WORKSHEET_TYPE.PACKING, status: WORKSHEET_STATUS.DEACTIVATED }
@@ -40,10 +39,6 @@ export class PackingWorksheetController extends VasWorksheetController {
40
39
  })
41
40
  await this.updateOrderTargets(orderInventories)
42
41
 
43
- releaseGood.status = ORDER_STATUS.READY_TO_PACK
44
- releaseGood.updater = this.user
45
- await this.updateRefOrder(releaseGood)
46
-
47
42
  return worksheet
48
43
  }
49
44
 
@@ -823,16 +823,16 @@ export class PickingWorksheetController extends VasWorksheetController {
823
823
  status: ORDER_STATUS.PICKING
824
824
  })
825
825
 
826
- const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
826
+ let worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
827
827
  'worksheetDetails',
828
828
  'worksheetDetails.targetInventory'
829
829
  ])
830
- this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
830
+ await this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
831
831
 
832
832
  let orderStatus: string
833
833
  if (releaseGood?.packingOption) {
834
834
  orderStatus = ORDER_STATUS.READY_TO_PACK
835
- } else if (!releaseGood?.courierOption && !releaseGood?.packingOption) {
835
+ } else {
836
836
  orderStatus = ORDER_STATUS.LOADING
837
837
  }
838
838
 
@@ -933,7 +933,7 @@ export class PickingWorksheetController extends VasWorksheetController {
933
933
  name: 'enable-bin-picking'
934
934
  }
935
935
  })
936
- if (binPickingSetting?.value && binPickingSetting.value.toLowerCase() === 'true') {
936
+ if (binPickingSetting != undefined && binPickingSetting.value.toLowerCase() == 'true') {
937
937
  if (binLocation) {
938
938
  const foundBinLocation: Location = await this.trxMgr.getRepository(Location).findOne({
939
939
  where: { domain: this.domain, name: binLocation, type: LOCATION_TYPE.BIN }
@@ -1,14 +1,16 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+ import { Equal, getRepository, In } from 'typeorm'
4
+
1
5
  import { Attachment, STORAGE } from '@things-factory/attachment-base'
2
6
  import { Partner } from '@things-factory/auth-base'
3
7
  import { Bizplace, ContactPoint } from '@things-factory/biz-base'
4
8
  import { config } from '@things-factory/env'
5
- import { DeliveryOrder, OrderInventory, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
9
+ import { ProductDetail } from '@things-factory/product-base'
10
+ import { DeliveryOrder, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
6
11
  import { Domain } from '@things-factory/shell'
7
- import { Product, ProductDetail } from '@things-factory/product-base'
8
12
  import { Inventory, Pallet } from '@things-factory/warehouse-base'
9
- import FormData from 'form-data'
10
- import fetch from 'node-fetch'
11
- import { Equal, getRepository, In } from 'typeorm'
13
+
12
14
  import { TEMPLATE_TYPE, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
13
15
  import { Worksheet, WorksheetDetail } from '../entities'
14
16
 
@@ -1,19 +1,21 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+ import { getRepository, IsNull, Not } from 'typeorm'
4
+
1
5
  import { Attachment, STORAGE } from '@things-factory/attachment-base'
2
6
  import { Partner } from '@things-factory/auth-base'
3
7
  import { Bizplace, ContactPoint } from '@things-factory/biz-base'
4
8
  import { config } from '@things-factory/env'
9
+ import { ProductDetail } from '@things-factory/product-base'
5
10
  import {
6
11
  ArrivalNotice,
7
12
  GoodsReceivalNote,
8
- OrderProduct,
9
13
  ORDER_PRODUCT_STATUS,
10
- ORDER_STATUS
14
+ ORDER_STATUS,
15
+ OrderProduct
11
16
  } from '@things-factory/sales-base'
12
- import { Product, ProductDetail } from '@things-factory/product-base'
13
17
  import { Domain } from '@things-factory/shell'
14
- import FormData from 'form-data'
15
- import fetch from 'node-fetch'
16
- import { getRepository, IsNull, Not } from 'typeorm'
18
+
17
19
  import { TEMPLATE_TYPE } from '../constants'
18
20
  import { Worksheet } from '../entities'
19
21
  import { DateTimeConverter } from '../utils/datetime-util'
@@ -134,7 +136,7 @@ export async function renderOrientageGRN({ grnNo }, context: any) {
134
136
  pack_qty: item.packQty ? item.packQty : 0,
135
137
  actual_pack_qty: item.actualPackQty ? item.actualPackQty : 0,
136
138
  container_no: foundGAN.containerNo ? foundGAN.containerNo : '',
137
- aux_value_3: item.product.auxValue3 ? item.product.auxValue3 : '',
139
+ aux_value_3: matchedProductDetail?.auxValue3 ? matchedProductDetail.auxValue3 : '',
138
140
  product_volume: matchedProductDetail
139
141
  ? matchedProductDetail?.volume
140
142
  ? matchedProductDetail.volume
@@ -387,7 +387,7 @@ export class WorksheetController {
387
387
  type: string,
388
388
  additionalProps: Partial<Worksheet> = {}
389
389
  ): Promise<Worksheet> {
390
- let refOrderType: string = this.getRefOrderField(refOrder)
390
+ let refOrderType: string = await this.getRefOrderField(refOrder)
391
391
  const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)
392
392
 
393
393
  const worksheet: Partial<Worksheet> = {
@@ -676,7 +676,7 @@ export class WorksheetController {
676
676
  'worksheetDetails.targetVas'
677
677
  ])
678
678
 
679
- const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
679
+ let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
680
680
 
681
681
  worksheetDetails
682
682
  .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
@@ -687,7 +687,7 @@ export class WorksheetController {
687
687
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)
688
688
 
689
689
  if (worksheetType === WORKSHEET_TYPE.UNLOADING) {
690
- const targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
690
+ let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
691
691
  let targetProduct: OrderProduct = wsd.targetProduct
692
692
  targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED
693
693
  targetProduct.updater = this.user
@@ -696,7 +696,7 @@ export class WorksheetController {
696
696
 
697
697
  await this.updateOrderTargets(targetProducts)
698
698
  } else if (worksheetType === WORKSHEET_TYPE.VAS) {
699
- const targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
699
+ let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
700
700
  let targetVAS: OrderVas = wsd.targetVas
701
701
  targetVAS.status = ORDER_VAS_STATUS.TERMINATED
702
702
  targetVAS.updater = this.user
@@ -712,7 +712,7 @@ export class WorksheetController {
712
712
  worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||
713
713
  worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN
714
714
  ) {
715
- const targetInventories: OrderInventory[] = worksheet.worksheetDetails
715
+ let targetInventories: OrderInventory[] = worksheet.worksheetDetails
716
716
  .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
717
717
  .map((wsd: WorksheetDetail) => {
718
718
  let targetInventory: OrderInventory = wsd.targetInventory
@@ -0,0 +1,22 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { OrderInventory } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { PickingWorksheetController } from '../../../../controllers/'
8
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
9
+
10
+ import { generatePickingWorksheet } from './generate-release-good-worksheet'
11
+
12
+ export const generateMultipleReleaseGoodWorksheetResolver = {
13
+ async generateMultipleReleaseGoodWorksheet(_: any, { releaseGoodNos }, context: any) {
14
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
15
+
16
+ for (let idx = 0; idx < releaseGoodNos.length; idx++) {
17
+ await generatePickingWorksheet(tx, domain, user, releaseGoodNos[idx])
18
+ }
19
+
20
+ return true
21
+ }
22
+ }
@@ -1,7 +1,9 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { OrderInventory } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { EntityManager } from 'typeorm'
6
+
5
7
  import { PickingWorksheetController } from '../../../../controllers/'
6
8
  import { Worksheet, WorksheetDetail } from '../../../../entities'
7
9
 
@@ -4,6 +4,7 @@ import { generateCycleCountWorksheetResolver } from './generate-cycle-count-work
4
4
  import { generatePartialPutawayWorksheetResolver } from './generate-partial-putaway-worksheet'
5
5
  import { generatePutawayWorksheetResolver } from './generate-putaway-worksheet'
6
6
  import { generateReleaseGoodWorksheetResolver } from './generate-release-good-worksheet'
7
+ import { generateMultipleReleaseGoodWorksheetResolver } from './generate-multiple-release-good-worksheet'
7
8
  import { generateVasOrderWorksheetResolver } from './generate-vas-order-worksheet'
8
9
  import { generateReturnOrderWorksheetResolver } from './generate-return-order-worksheet'
9
10
  import { generatePartialPutawayReturnWorksheetResolver } from './generate-partial-putaway-return-worksheet'
@@ -15,6 +16,7 @@ export const Mutations = {
15
16
  ...generatePartialPutawayWorksheetResolver,
16
17
  ...generatePutawayWorksheetResolver,
17
18
  ...generateReleaseGoodWorksheetResolver,
19
+ ...generateMultipleReleaseGoodWorksheetResolver,
18
20
  ...generateVasOrderWorksheetResolver,
19
21
  ...generateReturnOrderWorksheetResolver,
20
22
  ...generatePartialPutawayReturnWorksheetResolver
@@ -1,9 +1,9 @@
1
- import { EntityManager, In, SelectQueryBuilder } from 'typeorm'
1
+ import { EntityManager, SelectQueryBuilder } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { MarketplaceOrder, MarketplaceOrderItem, MarketplaceOrderShipping } from '@things-factory/marketplace-base'
6
- import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
6
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
7
7
  import { Domain } from '@things-factory/shell'
8
8
  import { Inventory, Location } from '@things-factory/warehouse-base'
9
9
 
@@ -11,7 +11,6 @@ import { WORKSHEET_TYPE } from '../../../constants'
11
11
  import { SellercraftController } from '../../../controllers'
12
12
  import { Worksheet, WorksheetDetail } from '../../../entities'
13
13
  import { fetchExecutingWorksheet } from '../../../utils'
14
- import { ORDER_STATUS } from '@things-factory/sales-base'
15
14
 
16
15
  export const packingWorksheetResolver = {
17
16
  async packingWorksheet(_: any, { releaseGoodNo }, context: any) {
@@ -30,12 +29,16 @@ export const packingWorksheetResolver = {
30
29
  where: { domain, name: releaseGoodNo }
31
30
  })
32
31
 
33
- const qb: SelectQueryBuilder<OrderInventory> = tx.getRepository(OrderInventory).createQueryBuilder('orderInventory')
32
+ const qb: SelectQueryBuilder<OrderInventory> = tx
33
+ .getRepository(OrderInventory)
34
+ .createQueryBuilder('orderInventory')
34
35
  qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')
35
36
  .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
36
37
  .innerJoinAndSelect('bizplace.domain', 'domain')
37
38
  .where('orderInventory.domain_id = :domainId', { domainId: domain.id })
38
- .andWhere('orderInventory.status IN (:...orderInventoryStatus)', { orderInventoryStatus: [ORDER_INVENTORY_STATUS.PACKING, ORDER_INVENTORY_STATUS.PACKED] })
39
+ .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
40
+ orderInventoryStatus: [ORDER_INVENTORY_STATUS.PACKING, ORDER_INVENTORY_STATUS.PACKED]
41
+ })
39
42
  .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
40
43
  .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.PACKING })
41
44
 
@@ -138,6 +141,7 @@ export const packingWorksheetResolver = {
138
141
  bizplaceName: releaseGood.bizplace.name,
139
142
  refNo: releaseGood.refNo,
140
143
  refNo2: releaseGood.refNo2,
144
+ refNo3: releaseGood.refNo3,
141
145
  partnerDomainId: releaseGood.bizplace?.domain.id,
142
146
  startedAt: worksheet.startedAt,
143
147
  shippingProvider: shippingProvider ? shippingProvider : '',
@@ -52,11 +52,14 @@ export async function activatePicking(
52
52
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
53
53
  relations: ['marketplaceStore']
54
54
  })
55
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
56
55
 
57
- if (marketplaceStore.isAutoUpdateShipment) {
58
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
59
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
56
+ if (marketplaceOrder) {
57
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
58
+
59
+ if (marketplaceStore.isAutoUpdateShipment) {
60
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
61
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
62
+ }
60
63
  }
61
64
  }
62
65
  }
@@ -45,7 +45,7 @@ export async function completePicking(
45
45
  releaseGoodNo: string
46
46
  ): Promise<void> {
47
47
  const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
48
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
48
+ let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
49
49
  where: { domain, name: releaseGoodNo },
50
50
  relations: [
51
51
  'bizplace',
@@ -53,6 +53,7 @@ export async function completePicking(
53
53
  'bizplace.company',
54
54
  'bizplace.company.domain',
55
55
  'orderInventories',
56
+ 'orderInventories.inventory',
56
57
  'orderInventories.product'
57
58
  ]
58
59
  })
@@ -84,13 +85,13 @@ export async function completePicking(
84
85
 
85
86
  if (sellercraft) {
86
87
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
87
- await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
+ releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
89
  await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
89
90
  } else {
90
91
  const companyDomain: Domain = releaseGood.bizplace.company.domain
91
92
  let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
92
93
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
93
- relations: ['marketplaceStore']
94
+ relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
94
95
  })
95
96
  const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
96
97
  let eTraxOption: boolean
@@ -100,11 +101,6 @@ export async function completePicking(
100
101
  await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
101
102
  }
102
103
 
103
- marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
104
- where: { orderNo: releaseGood.refNo },
105
- relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
106
- })
107
-
108
104
  if (!marketplaceOrder)
109
105
  throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
110
106
  eTraxOption = marketplaceOrder?.marketplaceStore.eTrax