@things-factory/worksheet-base 5.0.0-alpha.4 → 5.0.0-alpha.40

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 (160) hide show
  1. package/dist-server/constants/template.js +1 -0
  2. package/dist-server/constants/template.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +9 -3
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
  6. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/index.js +2 -0
  8. package/dist-server/controllers/index.js.map +1 -1
  9. package/dist-server/controllers/outbound/loading-worksheet-controller.js +10 -0
  10. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
  12. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/picking-worksheet-controller.js +352 -11
  14. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
  16. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +110 -3
  18. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/render-fm-grn.js +229 -0
  20. package/dist-server/controllers/render-fm-grn.js.map +1 -0
  21. package/dist-server/controllers/render-grn.js +45 -21
  22. package/dist-server/controllers/render-grn.js.map +1 -1
  23. package/dist-server/controllers/render-invoices.js +103 -65
  24. package/dist-server/controllers/render-invoices.js.map +1 -1
  25. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  26. package/dist-server/controllers/render-orientage-grn.js +1 -0
  27. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  28. package/dist-server/controllers/render-po.js +147 -0
  29. package/dist-server/controllers/render-po.js.map +1 -0
  30. package/dist-server/controllers/render-ro-do.js +65 -1
  31. package/dist-server/controllers/render-ro-do.js.map +1 -1
  32. package/dist-server/controllers/worksheet-controller.js +15 -0
  33. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +10 -3
  35. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
  37. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
  39. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -0
  41. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +26 -2
  43. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
  45. package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
  47. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
  49. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
  51. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
  52. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +152 -132
  53. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
  55. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +6 -19
  57. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
  59. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +49 -58
  61. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
  63. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
  64. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  65. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  67. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +6 -0
  69. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  70. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
  71. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
  73. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
  75. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
  76. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
  77. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
  78. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
  79. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
  80. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  81. package/dist-server/graphql/resolvers/worksheet/worksheets.js +18 -0
  82. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  83. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +4 -5
  84. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  85. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +4 -2
  86. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  87. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
  88. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
  89. package/dist-server/graphql/types/worksheet/index.js +33 -6
  90. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  91. package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
  92. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +3 -0
  93. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  94. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  95. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  96. package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
  97. package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
  98. package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
  99. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  100. package/dist-server/index.js +5 -0
  101. package/dist-server/index.js.map +1 -1
  102. package/dist-server/routes.js +12 -0
  103. package/dist-server/routes.js.map +1 -1
  104. package/dist-server/utils/inventory-util.js +14 -25
  105. package/dist-server/utils/inventory-util.js.map +1 -1
  106. package/package.json +17 -17
  107. package/server/constants/template.ts +1 -0
  108. package/server/controllers/ecommerce/sellercraft-controller.ts +10 -3
  109. package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
  110. package/server/controllers/index.ts +3 -0
  111. package/server/controllers/outbound/loading-worksheet-controller.ts +13 -0
  112. package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
  113. package/server/controllers/outbound/picking-worksheet-controller.ts +465 -16
  114. package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
  115. package/server/controllers/outbound/sorting-worksheet-controller.ts +149 -4
  116. package/server/controllers/render-fm-grn.ts +266 -0
  117. package/server/controllers/render-grn.ts +57 -23
  118. package/server/controllers/render-invoices.ts +119 -72
  119. package/server/controllers/render-orientage-do.ts +11 -11
  120. package/server/controllers/render-orientage-grn.ts +12 -11
  121. package/server/controllers/render-po.ts +170 -0
  122. package/server/controllers/render-ro-do.ts +93 -8
  123. package/server/controllers/worksheet-controller.ts +18 -2
  124. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +13 -4
  125. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
  126. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
  127. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
  128. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +41 -8
  129. package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
  130. package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
  131. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
  132. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  133. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
  134. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
  135. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +5 -20
  136. package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
  137. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
  138. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  139. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +5 -4
  140. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +5 -4
  141. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +6 -0
  142. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
  143. package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
  144. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  145. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  146. package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
  147. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
  148. package/server/graphql/resolvers/worksheet/worksheets.ts +26 -0
  149. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +10 -12
  150. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +4 -2
  151. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  152. package/server/graphql/types/worksheet/index.ts +33 -6
  153. package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
  154. package/server/graphql/types/worksheet/worksheet-detail-info.ts +3 -0
  155. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  156. package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
  157. package/server/graphql/types/worksheet-detail/index.ts +0 -2
  158. package/server/index.ts +5 -0
  159. package/server/routes.ts +17 -0
  160. package/server/utils/inventory-util.ts +15 -23
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { SortingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const sortingProductResolver = {
7
- async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty }, context: any) {
7
+ async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber }, context: any) {
8
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty)
9
+ await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
10
10
  }
11
11
  }
12
12
 
@@ -17,8 +17,9 @@ export async function sortingProduct(
17
17
  taskNo: string,
18
18
  releaseGoodNo: string,
19
19
  productId: string,
20
- sortingQty: number
20
+ sortingQty: number,
21
+ serialNumber?: string
21
22
  ) {
22
23
  const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
23
- await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty)
24
+ await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
24
25
  }
@@ -26,22 +26,26 @@ export const sortingWorksheetResolver = {
26
26
  const qb: SelectQueryBuilder<OrderInventory> = getRepository(OrderInventory).createQueryBuilder('OI')
27
27
  qb.select('SUM(OI.releaseQty)', 'releaseQty')
28
28
  .addSelect('SUM(OI.sortedQty)', 'sortedQty')
29
+ .addSelect(`string_agg(CONCAT(BIN.name, '(', OI.releaseQty, ')' ), ' ')`, 'binRemarks')
29
30
  .addSelect('PROD.id', 'productId')
30
31
  .addSelect('PROD.name', 'productName')
31
32
  .addSelect('PROD.sku', 'productSku')
32
33
  .addSelect('PROD.description', 'productDescription')
34
+ .addSelect('PROD.isRequireSerialNumberScanningOutbound', 'isRequireSerialNumberScanningOutbound')
33
35
  .addSelect('OI.batch_id', 'batchId')
34
36
  .addSelect('OI.packing_type', 'packingType')
35
37
  .addSelect('OI.packing_size', 'packingSize')
36
38
  .addSelect('INV.expiration_date', 'expirationDate')
37
39
  .leftJoin('OI.product', 'PROD')
38
40
  .leftJoin('OI.inventory', 'INV')
41
+ .leftJoin('OI.binLocation', 'BIN')
39
42
  .where('OI.release_good_id = :releaseGoodId', { releaseGoodId: releaseGood?.id })
40
43
  .andWhere('OI.status <> :releaseGoodStatus', { releaseGoodStatus: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT })
41
44
  .groupBy('PROD.id')
42
45
  .addGroupBy('PROD.name')
43
46
  .addGroupBy('PROD.sku')
44
47
  .addGroupBy('PROD.description')
48
+ .addGroupBy('PROD.isRequireSerialNumberScanningOutbound')
45
49
  .addGroupBy('INV.expiration_date')
46
50
  .addGroupBy('OI.batch_id')
47
51
  .addGroupBy('OI.packing_type')
@@ -67,12 +71,14 @@ export const sortingWorksheetResolver = {
67
71
  productSku: item?.productSku,
68
72
  productName: item?.productName,
69
73
  productDescription: item?.productDescription,
74
+ isRequireSerialNumberScanningOutbound: item?.isRequireSerialNumberScanningOutbound,
70
75
  releaseQty: item.releaseQty,
71
76
  sortedQty: item.sortedQty,
72
77
  status: item.status,
73
78
  expirationDate: item?.expirationDate,
74
79
  packingType: item?.packingType,
75
80
  packingSize: item?.packingSize,
81
+ binRemarks: item?.binRemarks,
76
82
  releaseGood
77
83
  }
78
84
  })
@@ -1,7 +1,9 @@
1
+ import { getRepository, In } from 'typeorm'
2
+
1
3
  import { ArrivalNotice, Bizplace, ReturnOrder } from '@things-factory/sales-base'
2
4
  import { Domain } from '@things-factory/shell'
3
5
  import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
4
- import { getRepository, In } from 'typeorm'
6
+
5
7
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
6
8
  import { WorksheetDetail } from '../../../entities'
7
9
 
@@ -46,9 +48,11 @@ export const unloadedInventories = {
46
48
  })
47
49
  const items = foundInv.map((inv: Inventory) => {
48
50
  const expirationDate: Date = inv.expirationDate ? new Date(inv.expirationDate) : null
51
+ const manufactureDate: Date = inv.manufactureDate ? new Date(inv.manufactureDate) : null
49
52
  return {
50
53
  ...inv,
51
- expirationDate: expirationDate
54
+ expirationDate: expirationDate,
55
+ manufactureDate: manufactureDate
52
56
  }
53
57
  })
54
58
 
@@ -3,14 +3,18 @@ import { completeProductScanUnloadResolver } from './complete-product-scan-unloa
3
3
  import { completeUnloadingResolver } from './complete-unloading'
4
4
  import { completeUnloadingPartiallyResolver } from './complete-unloading-partially'
5
5
  import { scanProductUnloadResolver } from './scan-product-unload'
6
+ import { scanSerialNumberUnloadResolver } from './scan-serial-number-unload'
7
+ import { undoSerialNumberUnloadResolver } from './undo-serial-number-unload'
6
8
  import { undoUnloadingResolver } from './undo-unloading'
7
9
  import { unloadResolver } from './unload'
8
10
 
9
11
  export const Mutations = {
10
12
  ...activateUnloadingResolver,
11
13
  ...scanProductUnloadResolver,
14
+ ...scanSerialNumberUnloadResolver,
12
15
  ...unloadResolver,
13
16
  ...undoUnloadingResolver,
17
+ ...undoSerialNumberUnloadResolver,
14
18
  ...completeProductScanUnloadResolver,
15
19
  ...completeUnloadingResolver,
16
20
  ...completeUnloadingPartiallyResolver
@@ -0,0 +1,26 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+ import { Inventory } from '@things-factory/warehouse-base'
6
+
7
+ import { UnloadingWorksheetController } from '../../../../controllers'
8
+
9
+ export const scanSerialNumberUnloadResolver = {
10
+ async scanSerialNumberUnload(_: any, { worksheetDetailName, serialNumber, inventory }, context: any) {
11
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
12
+ await scanSerialNumberUnload(tx, domain, user, worksheetDetailName, serialNumber, inventory)
13
+ }
14
+ }
15
+
16
+ async function scanSerialNumberUnload(
17
+ tx: EntityManager,
18
+ domain: Domain,
19
+ user: User,
20
+ worksheetDetailName: string,
21
+ serialNumber: string,
22
+ inventory: Partial<Inventory>
23
+ ): Promise<void> {
24
+ const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
25
+ await worksheetController.scanSerialNumberUnload(worksheetDetailName, serialNumber, inventory)
26
+ }
@@ -0,0 +1,24 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { UnloadingWorksheetController } from '../../../../controllers'
7
+
8
+ export const undoSerialNumberUnloadResolver = {
9
+ async undoSerialNumberUnload(_: any, { worksheetDetailName, inventoryItemId }, context: any) {
10
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
11
+ await undoSerialNumberUnload(tx, domain, user, worksheetDetailName, inventoryItemId)
12
+ }
13
+ }
14
+
15
+ async function undoSerialNumberUnload(
16
+ tx: EntityManager,
17
+ domain: Domain,
18
+ user: User,
19
+ worksheetDetailName: string,
20
+ inventoryItemId: string
21
+ ): Promise<void> {
22
+ const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
23
+ await worksheetController.undoSerialNumberUnload(worksheetDetailName, inventoryItemId)
24
+ }
@@ -1,7 +1,9 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Domain } from '@things-factory/shell'
3
5
  import { Inventory } from '@things-factory/warehouse-base'
4
- import { EntityManager } from 'typeorm'
6
+
5
7
  import { UnloadingWorksheetController } from '../../../../controllers'
6
8
 
7
9
  export const unloadResolver = {
@@ -59,6 +59,7 @@ export const unloadingWorksheetResolver = {
59
59
 
60
60
  return {
61
61
  worksheetInfo: {
62
+ arrivalNotice,
62
63
  bizplaceName: customerBizplace.name,
63
64
  partnerDomainId: customerBizplace?.domain.id,
64
65
  customerCompanyDomainId: customerCompanyDomain.id,
@@ -90,7 +91,8 @@ export const unloadingWorksheetResolver = {
90
91
  actualPackQty: targetProduct.actualPackQty,
91
92
  remark: targetProduct.remark,
92
93
  issue: productWSD.issue,
93
- status: productWSD.status
94
+ status: productWSD.status,
95
+ manufactureDate: targetProduct.manufactureDate ? new Date(targetProduct.manufactureDate) : null
94
96
  }
95
97
  })
96
98
  }
@@ -99,6 +99,7 @@ export const worksheetsResolver = {
99
99
  const releaseGoodCrossDockingParam = params.filters.find(param => param.name === 'crossDocking')
100
100
  const releaseGoodCourierOptionParam = params.filters.find(param => param.name === 'courierOption')
101
101
  const releaseGoodPackingOptionParam = params.filters.find(param => param.name === 'packingOption')
102
+ const releaseGoodPickerOptionParam = params.filters.find(param => param.name === 'assignee')
102
103
  if (
103
104
  releaseGoodParam ||
104
105
  releaseGoodRefNoParam ||
@@ -252,6 +253,31 @@ export const worksheetsResolver = {
252
253
  }
253
254
  }
254
255
 
256
+ //find assignee
257
+
258
+ const assigneeParam = params.filters.find(param => param.name === 'assignee')
259
+ let assigneeFilter = []
260
+ if (assigneeParam) {
261
+ params.filters.splice(
262
+ params.filters.findIndex(item => item.name == 'assignee'),
263
+ 1
264
+ )
265
+ assigneeFilter.push({ ...assigneeParam, name: 'name' })
266
+
267
+ const foundAssignee: User[] = await getRepository(User).find({
268
+ ...convertListParams({ filters: assigneeFilter })
269
+ })
270
+
271
+ if (foundAssignee) {
272
+ params.filters.push({
273
+ name: 'assigneeId',
274
+ operator: 'in',
275
+ value: foundAssignee.map((foundIC: User) => foundIC.id),
276
+ relation: false
277
+ })
278
+ }
279
+ }
280
+
255
281
  ////Set default bizplace filter
256
282
  const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
257
283
  if (!bizplaceFilter && typeParam.value[0] !== WORKSHEET_TYPE.BATCH_PICKING) {
@@ -1,20 +1,19 @@
1
- import { Product } from '@things-factory/product-base'
2
- import { OrderInventory, OrderNoGenerator, ORDER_INVENTORY_STATUS, ORDER_TYPES } from '@things-factory/sales-base'
3
- import { Inventory } from '@things-factory/warehouse-base'
1
+ import { EntityManager, getRepository } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ORDER_INVENTORY_STATUS, ORDER_TYPES, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
4
5
  import { Setting } from '@things-factory/setting-base'
5
- import { EntityManager, In, getRepository } from 'typeorm'
6
+ import { Domain } from '@things-factory/shell'
7
+ import { Inventory } from '@things-factory/warehouse-base'
8
+
6
9
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
7
10
  import { Worksheet, WorksheetDetail } from '../../../entities'
8
- import { WorksheetNoGenerator, inventoriesByStrategy } from '../../../utils'
9
- import { User } from '@things-factory/auth-base'
10
- import { Domain } from '@things-factory/shell'
11
- import { generateBatchPickingWorksheetDetailsResolver } from './generate-batch-picking-worksheet-details'
12
- import orderBy from 'lodash/orderBy'
11
+ import { inventoriesByStrategy, WorksheetNoGenerator } from '../../../utils'
13
12
 
14
13
  export const generateBatchPickingWorksheetDetailsByBulkResolver = {
15
14
  async generateBatchPickingWorksheetDetailsByBulk(
16
15
  _: any,
17
- { worksheetId, bizplaceId, selectedItems, pickingStrategy },
16
+ { worksheetId, bizplaceId, selectedItems },
18
17
  context: any
19
18
  ): Promise<Boolean> {
20
19
  const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
@@ -50,7 +49,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
50
49
  })
51
50
 
52
51
  await Promise.all(
53
- selectedItems.map(async (oi: OrderInventory) => {
52
+ selectedItems.map(async (oi: OrderInventory & { pickingStrategy: string }) => {
54
53
  try {
55
54
  let pOrderInventories = tx.getRepository(OrderInventory).find({
56
55
  where: {
@@ -72,7 +71,6 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
72
71
  ...oi,
73
72
  worksheetId: worksheet.id,
74
73
  bizplaceId,
75
- pickingStrategy,
76
74
  locationSortingRules: inventoryAssignmentSetting ? JSON.parse(inventoryAssignmentSetting.value) : false
77
75
  },
78
76
  domain,
@@ -20,7 +20,7 @@ import { WorksheetNoGenerator } from '../../../utils'
20
20
  export const generatePickingWorksheetDetailsResolver = {
21
21
  async generatePickingWorksheetDetails(
22
22
  _: any,
23
- { bizplaceId, selectedItems, pickingStrategy, worksheetNo, locationSortingRules },
23
+ { bizplaceId, selectedItems, worksheetNo, locationSortingRules },
24
24
  context: any
25
25
  ): Promise<Boolean> {
26
26
  const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
@@ -54,7 +54,6 @@ export const generatePickingWorksheetDetailsResolver = {
54
54
  bizplaceId,
55
55
  worksheetId,
56
56
  selectedItems,
57
- pickingStrategy,
58
57
  locationSortingRules,
59
58
  tx
60
59
  )
@@ -162,6 +161,9 @@ function _composeWorksheetDetails(
162
161
 
163
162
  while (compReleaseQty < record.releaseQty) {
164
163
  const inv = inventories[idx]
164
+
165
+ if (!inv) break
166
+
165
167
  let releaseQty: number = 0
166
168
  let releaseUomValue: number = 0
167
169
 
@@ -0,0 +1,8 @@
1
+ import { gql } from 'apollo-server-koa'
2
+
3
+ export const FindReleaseOrdersByTaskNo = gql`
4
+ type FindReleaseOrdersByTaskNo {
5
+ taskNo: String
6
+ releaseGoods: [ReleaseGood]
7
+ }
8
+ `
@@ -22,6 +22,7 @@ import { WorksheetInfo } from './worksheet-info'
22
22
  import { WorksheetList } from './worksheet-list'
23
23
  import { WorksheetPatch } from './worksheet-patch'
24
24
  import { WorksheetWithPagination } from './worksheet-with-pagination'
25
+ import { FindReleaseOrdersByTaskNo } from './find-release-orders-by-task-no'
25
26
 
26
27
  export const Mutation = /* GraphQL */ `
27
28
  createWorksheet (
@@ -164,10 +165,20 @@ export const Mutation = /* GraphQL */ `
164
165
  worksheetNo: [String!]!
165
166
  ): [Worksheet] @privilege(category: "worksheet_control", privilege: "mutation") @transaction
166
167
 
168
+ undoSerialNumberPacking (
169
+ worksheetDetailName: String!
170
+ inventoryItemId: String!
171
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
172
+
167
173
  activateBatchPicking (
168
174
  worksheetNo: String!
169
175
  ): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
170
176
 
177
+ undoSerialNumberPicking (
178
+ worksheetDetailName: String!
179
+ inventoryItemId: String!
180
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
181
+
171
182
  unload (
172
183
  worksheetDetailName: String!
173
184
  inventory: InventoryPatch!
@@ -185,6 +196,12 @@ export const Mutation = /* GraphQL */ `
185
196
  inventory: InventoryPatch!
186
197
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
187
198
 
199
+ scanSerialNumberUnload (
200
+ worksheetDetailName: String!
201
+ serialNumber: String!
202
+ inventory: InventoryPatch!
203
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
204
+
188
205
  cycleCountAdjustment (
189
206
  cycleCountNo: String!
190
207
  ): Boolean @transaction
@@ -195,6 +212,11 @@ export const Mutation = /* GraphQL */ `
195
212
  inventoryIds: [String]!
196
213
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
197
214
 
215
+ undoSerialNumberUnload (
216
+ worksheetDetailName: String!
217
+ inventoryItemId: String!
218
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
219
+
198
220
  completeUnloadingPartially (
199
221
  arrivalNoticeNo: String!
200
222
  worksheetDetail: [WorksheetDetailPatch!]
@@ -307,22 +329,26 @@ export const Mutation = /* GraphQL */ `
307
329
  releaseGoodNo: String!
308
330
  productId: String!
309
331
  sortingQty: Float!
332
+ serialNumber: String
310
333
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
311
334
 
312
335
  scanProductSorting (
313
336
  taskNo: String!
314
337
  releaseGoodNo: String!
315
338
  productBarcode: String!
339
+ serialNumber: String
316
340
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
317
341
 
318
342
  packing (
319
343
  worksheetDetailName: String!
320
344
  releaseQty: Int!
345
+ serialNumber: String
321
346
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
322
347
 
323
348
  scanProductPacking (
324
349
  worksheetDetailName: String!
325
350
  productBarcode: String!
351
+ serialNumber: String
326
352
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
327
353
 
328
354
  batchPicking (
@@ -514,7 +540,7 @@ export const Mutation = /* GraphQL */ `
514
540
  ): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
515
541
 
516
542
  assignPickingWorker (
517
- worksheetId: String!
543
+ worksheetId: [String]!
518
544
  userId: String!
519
545
  ): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
520
546
 
@@ -655,16 +681,16 @@ export const Query = /* GraphQL */ `
655
681
  ): [Inventory] @privilege(category: "worksheet", privilege: "query")
656
682
 
657
683
  pickingAssignmentStatusByUsers(
658
- bizplaceId: String!
659
- name: String
660
- email: String
684
+ filters: [Filter],
685
+ pagination: Pagination,
686
+ sortings: [Sorting]
661
687
  ): [PickingAssignmentStatus] @privilege(category: "worksheet", privilege: "query")
662
688
 
663
689
  myPickingAssignmentStatus: MyPickingAssignmentStatus @privilege(category: "worksheet", privilege: "query")
664
690
 
665
691
  recommendPutawayLocation(worksheetDetailName: String!, optCnt: Int): [Location] @privilege(category: "worksheet", privilege: "query")
666
692
 
667
- findReleaseOrdersByTaskNo(taskNo: String!): [ReleaseGood] @privilege(category: "worksheet", privilege: "query") @transaction
693
+ findReleaseOrdersByTaskNo(taskNo: String!): FindReleaseOrdersByTaskNo @privilege(category: "worksheet", privilege: "query") @transaction
668
694
  `
669
695
 
670
696
  export const Types = /* GraphQL */ [
@@ -691,5 +717,6 @@ export const Types = /* GraphQL */ [
691
717
  ProductApproval,
692
718
  WorksheetWithPagination,
693
719
  PickingAssignmentStatus,
694
- MyPickingAssignmentStatus
720
+ MyPickingAssignmentStatus,
721
+ FindReleaseOrdersByTaskNo
695
722
  ]
@@ -3,7 +3,7 @@ import { gql } from 'apollo-server-koa'
3
3
  export const PickingAssignmentStatus = gql`
4
4
  type PickingAssignmentStatus {
5
5
  user: User
6
- pending: [Worksheet]
7
- picking: [Worksheet]
6
+ pending: String
7
+ picking: String
8
8
  }
9
9
  `
@@ -59,5 +59,8 @@ export const WorksheetDetailInfo = gql`
59
59
  releaseGood: ReleaseGood
60
60
  actualQty: Int
61
61
  actualUomValue: Float
62
+ manufactureDate: String
63
+ binRemarks: String
64
+ isRequireSerialNumberScanningOutbound: Boolean
62
65
  }
63
66
  `
@@ -2,6 +2,7 @@ import { gql } from 'apollo-server-koa'
2
2
 
3
3
  export const WorksheetInfo = gql`
4
4
  type WorksheetInfo {
5
+ arrivalNotice: ArrivalNotice
5
6
  releaseGood: ReleaseGood
6
7
  returnOrder: ReturnOrder
7
8
  bizplaceName: String
@@ -11,6 +11,7 @@ export const WorksheetPatch = gql`
11
11
  initialBatchId: String
12
12
  status: String
13
13
  truckNo: String
14
+ transportDriver: ObjectRef
14
15
  palletQty: String
15
16
  ownCollection: Boolean
16
17
  cuFlag: String
@@ -41,13 +41,11 @@ export const Mutation = /* GraphQL */ `
41
41
  bizplaceId: String
42
42
  locationSortingRules: [Sorting]
43
43
  selectedItems: [OrderInventoryPatch]!
44
- pickingStrategy: String!
45
44
  ): Boolean @transaction
46
45
 
47
46
  generatePickingWorksheetDetails(
48
47
  bizplaceId: String!
49
48
  selectedItems: [OrderInventoryPatch]!
50
- pickingStrategy: String!
51
49
  worksheetNo: String!
52
50
  locationSortingRules: [Sorting]
53
51
  ): Boolean @transaction
package/server/index.ts CHANGED
@@ -5,4 +5,9 @@ export * from './entities'
5
5
  export * from './graphql'
6
6
  export * from './graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet'
7
7
  export * from './graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details'
8
+ export * from './graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet'
9
+ export * from './graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details'
10
+ export * from './graphql/resolvers/worksheet/unloading/activate-unloading'
11
+ export * from './graphql/resolvers/worksheet/picking/activate-picking'
8
12
  export * from './migrations'
13
+ export * from './controllers'
package/server/routes.ts CHANGED
@@ -8,7 +8,10 @@ import { renderOrientageDO } from './controllers/render-orientage-do'
8
8
  import { renderOrientageGRN } from './controllers/render-orientage-grn'
9
9
  import { renderRODO } from './controllers/render-ro-do'
10
10
  import { renderSeebuuGRN } from './controllers/render-seebuu-grn'
11
+ import { renderFmGRN } from './controllers/render-fm-grn'
11
12
  import { renderInvoices } from './controllers/render-invoices'
13
+ import { renderPO } from './controllers/render-po'
14
+
12
15
 
13
16
  process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
14
17
  routes.get('/view_document_ro_do/:doNo', async (context, next) => {
@@ -43,6 +46,10 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
43
46
  context.body = await renderSeebuuGRN(context.params, context)
44
47
  })
45
48
 
49
+ routes.get('/view_fm_grn/:grnNo/:timezoneOffSet', async (context, next) => {
50
+ context.body = await renderFmGRN(context.params, context)
51
+ })
52
+
46
53
  routes.get('/view_job_sheet/:ganNo/:timezoneOffSet', async (context, next) => {
47
54
  context.body = await renderJobSheet(context.params, context)
48
55
  })
@@ -60,4 +67,14 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
60
67
  context.type = 'application/json'
61
68
  context.body = data
62
69
  })
70
+
71
+ routes.post('/view_purchase_orders/:timezoneOffSet', async (context, next) => {
72
+ let req = context.request.body || {}
73
+ let timezoneOffSet = context.params.timezoneOffSet || 0
74
+
75
+ let data = await renderPO({ req, timezoneOffSet }, context)
76
+
77
+ context.type = 'application/json'
78
+ context.body = data
79
+ })
63
80
  })
@@ -265,7 +265,9 @@ export async function inventoriesByStrategy(
265
265
  .andWhere('"INV"."packing_size" = :packingSize')
266
266
  .andWhere('"INV"."uom" = :uom')
267
267
  .andWhere('"INV"."status" = :status', { status: 'STORED' })
268
- .andWhere('"LOC"."type" NOT IN (:...locationTypes)', { locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE] })
268
+ .andWhere('"LOC"."type" NOT IN (:...locationTypes)', {
269
+ locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
270
+ })
269
271
  .setParameters({
270
272
  domainId: domain.id,
271
273
  productId,
@@ -289,12 +291,7 @@ export async function inventoriesByStrategy(
289
291
  qb.orderBy('"INV"."created_at"', 'ASC')
290
292
  if (locationSortingRules) {
291
293
  for (const key in locationSortingRules) {
292
- if (locIdx === 0) {
293
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
294
- } else {
295
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
296
- }
297
- ++locIdx
294
+ qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
298
295
  }
299
296
  }
300
297
  break
@@ -303,12 +300,7 @@ export async function inventoriesByStrategy(
303
300
  qb.orderBy('"INV"."created_at"', 'DESC')
304
301
  if (locationSortingRules) {
305
302
  for (const key in locationSortingRules) {
306
- if (locIdx === 0) {
307
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
308
- } else {
309
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
310
- }
311
- ++locIdx
303
+ qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
312
304
  }
313
305
  }
314
306
  break
@@ -317,12 +309,16 @@ export async function inventoriesByStrategy(
317
309
  qb.orderBy('"INV"."expiration_date"', 'ASC')
318
310
  if (locationSortingRules) {
319
311
  for (const key in locationSortingRules) {
320
- if (locIdx === 0) {
321
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
322
- } else {
323
- qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
324
- }
325
- ++locIdx
312
+ qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
313
+ }
314
+ }
315
+ break
316
+
317
+ case 'FMFO':
318
+ qb.orderBy('"INV"."manufacture_date"', 'ASC')
319
+ if (locationSortingRules) {
320
+ for (const key in locationSortingRules) {
321
+ qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
326
322
  }
327
323
  }
328
324
  break
@@ -338,10 +334,6 @@ export async function inventoriesByStrategy(
338
334
  ++locIdx
339
335
  }
340
336
  } else qb.orderBy('"LOC"."name"', 'DESC')
341
- break
342
- default:
343
- qb.orderBy('"INV"."created_at"', 'ASC')
344
-
345
337
  break
346
338
  }
347
339