@things-factory/worksheet-base 4.3.0-alpha.1 → 4.3.0

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 (133) hide show
  1. package/dist-server/constants/index.js +1 -5
  2. package/dist-server/constants/index.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/index.js +1 -5
  4. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  5. package/dist-server/controllers/inbound/index.js +1 -5
  6. package/dist-server/controllers/inbound/index.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +9 -3
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +2 -5
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/inspect/index.js +1 -5
  12. package/dist-server/controllers/inspect/index.js.map +1 -1
  13. package/dist-server/controllers/outbound/index.js +1 -5
  14. package/dist-server/controllers/outbound/index.js.map +1 -1
  15. package/dist-server/controllers/outbound/loading-worksheet-controller.js +47 -10
  16. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/picking-worksheet-controller.js +142 -5
  18. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +116 -20
  20. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  21. package/dist-server/controllers/render-fm-grn.js +229 -0
  22. package/dist-server/controllers/render-fm-grn.js.map +1 -0
  23. package/dist-server/controllers/render-grn.js +18 -18
  24. package/dist-server/controllers/vas/index.js +1 -5
  25. package/dist-server/controllers/vas/index.js.map +1 -1
  26. package/dist-server/graphql/index.js +1 -5
  27. package/dist-server/graphql/index.js.map +1 -1
  28. package/dist-server/graphql/resolvers/index.js +1 -5
  29. package/dist-server/graphql/resolvers/index.js.map +1 -1
  30. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
  31. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  32. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
  33. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
  35. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +1 -0
  37. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  39. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +8 -6
  41. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
  43. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  45. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  47. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  49. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  50. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
  51. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
  53. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  55. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  57. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js +1 -5
  59. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js +1 -5
  61. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js +1 -5
  63. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js.map +1 -1
  64. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js +1 -5
  65. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js +1 -5
  67. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js +1 -5
  69. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js.map +1 -1
  70. package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
  71. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/worksheets.js +17 -2
  73. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +5 -3
  75. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +15 -4
  77. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  78. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +4 -1
  79. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +6 -2
  81. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  82. package/dist-server/graphql/types/index.js +1 -5
  83. package/dist-server/graphql/types/index.js.map +1 -1
  84. package/dist-server/graphql/types/worksheet/index.js +10 -0
  85. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  86. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
  87. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  88. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +2 -0
  89. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  90. package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
  91. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  92. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  93. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  94. package/dist-server/index.js +1 -5
  95. package/dist-server/index.js.map +1 -1
  96. package/dist-server/routes.js +4 -0
  97. package/dist-server/routes.js.map +1 -1
  98. package/dist-server/utils/index.js +1 -5
  99. package/dist-server/utils/index.js.map +1 -1
  100. package/package.json +17 -17
  101. package/server/controllers/inbound/unloading-worksheet-controller.ts +14 -3
  102. package/server/controllers/index.ts +1 -0
  103. package/server/controllers/outbound/loading-worksheet-controller.ts +83 -17
  104. package/server/controllers/outbound/picking-worksheet-controller.ts +178 -7
  105. package/server/controllers/outbound/sorting-worksheet-controller.ts +167 -27
  106. package/server/controllers/render-fm-grn.ts +266 -0
  107. package/server/controllers/render-grn.ts +18 -18
  108. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
  109. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
  110. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
  111. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +1 -1
  112. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  113. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +13 -11
  114. package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
  115. package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
  116. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  117. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  118. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
  119. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
  120. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +5 -4
  121. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +5 -4
  122. package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
  123. package/server/graphql/resolvers/worksheet/worksheets.ts +26 -2
  124. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +12 -3
  125. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +22 -7
  126. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +6 -2
  127. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +7 -1
  128. package/server/graphql/types/worksheet/index.ts +10 -0
  129. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
  130. package/server/graphql/types/worksheet/worksheet-detail-info.ts +2 -0
  131. package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
  132. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  133. package/server/routes.ts +5 -0
@@ -6,7 +6,7 @@ import { PickingWorksheetController } from '../../../../controllers'
6
6
  export const scanProductPickingResolver = {
7
7
  async scanProductPicking(
8
8
  _: any,
9
- { worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber },
9
+ { worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo },
10
10
  context: any
11
11
  ) {
12
12
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
@@ -19,7 +19,8 @@ export const scanProductPickingResolver = {
19
19
  productBarcode,
20
20
  cartonId,
21
21
  binLocation,
22
- serialNumber
22
+ serialNumber,
23
+ toteNo
23
24
  )
24
25
  }
25
26
  }
@@ -33,7 +34,8 @@ export async function scanProductPicking(
33
34
  productBarcode: string,
34
35
  cartonId: string,
35
36
  binLocation?: string,
36
- serialNumber?: string
37
+ serialNumber?: string,
38
+ toteNo?: string
37
39
  ) {
38
40
  const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
39
41
  await worksheetController.scanProductPicking(
@@ -42,6 +44,7 @@ export async function scanProductPicking(
42
44
  productBarcode,
43
45
  cartonId,
44
46
  binLocation,
45
- serialNumber
47
+ serialNumber,
48
+ toteNo
46
49
  )
47
50
  }
@@ -0,0 +1,25 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { PickingWorksheetController } from '../../../../controllers'
7
+
8
+ export const sealToteResolver = {
9
+ async sealTote(_: any, { sealNo, toteNo, orderNo }, context: any) {
10
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
11
+ await sealTote(tx, domain, user, sealNo, toteNo, orderNo)
12
+ }
13
+ }
14
+
15
+ async function sealTote(
16
+ tx: EntityManager,
17
+ domain: Domain,
18
+ user: User,
19
+ sealNo: string,
20
+ toteNo: string,
21
+ orderNo: string
22
+ ): Promise<void> {
23
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
24
+ await worksheetController.sealTote(sealNo, toteNo, orderNo)
25
+ }
@@ -2,7 +2,7 @@ import { EntityManager, In, SelectQueryBuilder } from 'typeorm'
2
2
 
3
3
  import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood, ShippingOrder } from '@things-factory/sales-base'
4
4
  import { Domain } from '@things-factory/shell'
5
- import { Inventory, Location } from '@things-factory/warehouse-base'
5
+ import { Inventory, Location, InventoryChange } from '@things-factory/warehouse-base'
6
6
 
7
7
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
8
8
  import { WorksheetDetail } from '../../../entities'
@@ -109,6 +109,16 @@ export async function pickingWorksheet(
109
109
  worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
110
110
  const targetInventory: OrderInventory = pickingWSD.targetInventory
111
111
  const inventory: Inventory = targetInventory.inventory
112
+
113
+ const inventoryChangesCount: number = await tx.getRepository(InventoryChange).count({
114
+ where: {
115
+ inventory: inventory.id,
116
+ status:"PENDING",
117
+ transactionType:"MISSING"
118
+ },
119
+ relations:['inventory','product']
120
+ })
121
+
112
122
  return {
113
123
  name: pickingWSD.name,
114
124
  palletId: inventory?.palletId,
@@ -127,7 +137,8 @@ export async function pickingWorksheet(
127
137
  packingSize: inventory?.packingSize,
128
138
  expirationDate: inventory?.expirationDate,
129
139
  location: inventory?.location,
130
- relatedOrderInv: targetInventory
140
+ relatedOrderInv: targetInventory,
141
+ hasMissingInventoryChanges:inventoryChangesCount > 0 ? true:false
131
142
  }
132
143
  })
133
144
  }
@@ -19,16 +19,20 @@ export async function completeOrderSorting(
19
19
  user: User,
20
20
  releaseGoodNo: string
21
21
  ): Promise<void> {
22
- const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
23
- const releaseGood = await sortingWSCtrl.completeOrderSorting(releaseGoodNo)
22
+ try {
23
+ const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
24
+ const releaseGood = await sortingWSCtrl.completeOrderSorting(releaseGoodNo)
24
25
 
25
- const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
26
- let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
27
- releaseGood.name,
28
- releaseGood.orderInventories.filter(itm => itm.status != ORDER_INVENTORY_STATUS.COMPLETE_SPLIT)
29
- )
26
+ const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
27
+ let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
28
+ releaseGood.name,
29
+ releaseGood.orderInventories.filter(itm => itm.status != ORDER_INVENTORY_STATUS.COMPLETE_SPLIT)
30
+ )
30
31
 
31
- if (loadingWorksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
32
- await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheet.worksheetDetails)
32
+ if (loadingWorksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
33
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheet.worksheetDetails)
34
+ }
35
+ } catch (e) {
36
+ throw e
33
37
  }
34
38
  }
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { SortingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const scanProductSortingResolver = {
7
- async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber }, context: any) {
7
+ async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo }, context: any) {
8
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber)
9
+ await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
10
10
  }
11
11
  }
12
12
 
@@ -17,8 +17,9 @@ export async function scanProductSorting(
17
17
  taskNo: string,
18
18
  releaseGoodNo: string,
19
19
  productBarcode?: string,
20
- serialNumber?: string
20
+ serialNumber?: string,
21
+ toteNo?: string
21
22
  ) {
22
23
  const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
23
- await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber)
24
+ await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
24
25
  }
@@ -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, serialNumber }, context: any) {
7
+ async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo }, 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, serialNumber)
9
+ await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
10
10
  }
11
11
  }
12
12
 
@@ -18,8 +18,9 @@ export async function sortingProduct(
18
18
  releaseGoodNo: string,
19
19
  productId: string,
20
20
  sortingQty: number,
21
- serialNumber?: string
21
+ serialNumber?: string,
22
+ toteNo?: string
22
23
  ) {
23
24
  const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
24
- await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
25
+ await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
25
26
  }
@@ -117,6 +117,7 @@ export const worksheetResolver = {
117
117
  .leftJoinAndSelect('oi.releaseGood', 'releaseGood')
118
118
  .leftJoinAndSelect('oi.inventory', 'inventory')
119
119
  .leftJoinAndSelect('oi.product', 'product')
120
+ .leftJoinAndSelect('oi.orderProduct', 'orderProduct')
120
121
  .leftJoinAndSelect('inventory.location', 'location')
121
122
  .leftJoinAndSelect('oi.bizplace', 'bizplace')
122
123
  .where('"oi"."domain_id" = :domain')
@@ -146,6 +147,7 @@ export const worksheetResolver = {
146
147
  .leftJoinAndSelect('oi.releaseGood', 'releaseGood')
147
148
  .leftJoinAndSelect('oi.inventory', 'inventory')
148
149
  .leftJoinAndSelect('oi.product', 'product')
150
+ .leftJoinAndSelect('oi.orderProduct', 'orderProduct')
149
151
  .leftJoinAndSelect('inventory.location', 'location')
150
152
  .leftJoinAndSelect('oi.bizplace', 'bizplace')
151
153
  .where('"oi"."domain_id" = :domain')
@@ -99,13 +99,16 @@ 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 orderRemarkParam = params.filters.find(param => param.name === 'orderRemark')
103
+
102
104
  const releaseGoodPickerOptionParam = params.filters.find(param => param.name === 'assignee')
103
105
  if (
104
106
  releaseGoodParam ||
105
107
  releaseGoodRefNoParam ||
106
108
  releaseGoodCrossDockingParam ||
107
109
  releaseGoodCourierOptionParam ||
108
- releaseGoodPackingOptionParam
110
+ releaseGoodPackingOptionParam ||
111
+ orderRemarkParam
109
112
  ) {
110
113
  let arrFilters = []
111
114
  if (releaseGoodParam) {
@@ -115,6 +118,7 @@ export const worksheetsResolver = {
115
118
  )
116
119
  arrFilters.push({ ...releaseGoodParam, name: 'name' })
117
120
  }
121
+
118
122
  if (releaseGoodRefNoParam) {
119
123
  params.filters.splice(
120
124
  params.filters.findIndex(item => item.name == 'releaseGoodRefNo'),
@@ -147,6 +151,19 @@ export const worksheetsResolver = {
147
151
  arrFilters.push({ ...releaseGoodPackingOptionParam, name: 'packingOption' })
148
152
  }
149
153
 
154
+ if (orderRemarkParam) {
155
+ params.filters.splice(
156
+ params.filters.findIndex(item => item.name == 'orderRemark'),
157
+ 1
158
+ )
159
+
160
+ if (orderRemarkParam?.value == true) {
161
+ arrFilters.push({ operator: 'is_not_null', name: 'remark' })
162
+ } else if (orderRemarkParam?.value == false) {
163
+ arrFilters.push({ operator: 'is_null', name: 'remark' })
164
+ }
165
+ }
166
+
150
167
  const foundReleaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
151
168
  ...convertListParams({ filters: arrFilters })
152
169
  })
@@ -405,7 +422,14 @@ export const worksheetsResolver = {
405
422
 
406
423
  qb.orderBy(sort)
407
424
 
408
- const [items, total] = await qb.getManyAndCount()
425
+ let [items, total] = await qb.getManyAndCount()
426
+
427
+ items = items.map(item => {
428
+ return {
429
+ ...item,
430
+ orderRemark: item?.releaseGood?.remark ? true : false
431
+ }
432
+ })
409
433
 
410
434
  return { items, total }
411
435
  } catch (error) {
@@ -1,7 +1,13 @@
1
1
  import { EntityManager, getRepository } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
- import { ORDER_INVENTORY_STATUS, ORDER_TYPES, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
4
+ import {
5
+ ORDER_INVENTORY_STATUS,
6
+ ORDER_TYPES,
7
+ OrderInventory,
8
+ OrderNoGenerator,
9
+ OrderProduct
10
+ } from '@things-factory/sales-base'
5
11
  import { Setting } from '@things-factory/setting-base'
6
12
  import { Domain } from '@things-factory/shell'
7
13
  import { Inventory } from '@things-factory/warehouse-base'
@@ -60,7 +66,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
60
66
  packingSize: oi.packingSize,
61
67
  status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
62
68
  },
63
- relations: ['product', 'releaseGood', 'bizplace'],
69
+ relations: ['product', 'releaseGood', 'bizplace', 'orderProduct'],
64
70
  order: {
65
71
  releaseQty: 'DESC'
66
72
  }
@@ -137,7 +143,9 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
137
143
  creator: user,
138
144
  inventory: targetInventory,
139
145
  releaseQty: allocatedQty,
140
- releaseUomValue: allocatedUomValue
146
+ releaseUomValue: allocatedUomValue,
147
+ uom: orderInventory.uom,
148
+ orderProduct: orderInventory.orderProduct
141
149
  }
142
150
  newTargetInventory = await tx.getRepository(OrderInventory).save(newTargetInventory)
143
151
 
@@ -150,6 +158,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
150
158
  bizplace: orderInventory.bizplace,
151
159
  name: WorksheetNoGenerator.batchPickingDetail(),
152
160
  targetInventory: newTargetInventory,
161
+ targetProduct: newTargetInventory.orderProduct,
153
162
  type: WORKSHEET_TYPE.BATCH_PICKING,
154
163
  status: WORKSHEET_STATUS.DEACTIVATED,
155
164
  creator: user
@@ -15,7 +15,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
15
15
  context: any
16
16
  ): Promise<void> {
17
17
  const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
18
-
18
+
19
19
  // 1. Find Related Worksheet
20
20
  const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
21
21
  where: { name: worksheetNo, domain },
@@ -28,14 +28,21 @@ export const generateBatchPickingWorksheetDetailsResolver = {
28
28
  })
29
29
 
30
30
  // Only proceed if worksheet status IS "DEACTIVATED"
31
- if(worksheet.status != WORKSHEET_STATUS.DEACTIVATED){
31
+ if (worksheet.status != WORKSHEET_STATUS.DEACTIVATED) {
32
32
  return
33
33
  }
34
34
 
35
35
  // 2. Find all existing order inventory that is related to the product
36
36
  let prevOrdInvs: OrderInventory[] = await tx.getRepository(OrderInventory).find({
37
- where: { domain, refWorksheetId: worksheet.id, product: productId, batchId, packingType, status: ORDER_INVENTORY_STATUS.PENDING_SPLIT },
38
- relations: ['releaseGood', 'bizplace']
37
+ where: {
38
+ domain,
39
+ refWorksheetId: worksheet.id,
40
+ product: productId,
41
+ batchId,
42
+ packingType,
43
+ status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
44
+ },
45
+ relations: ['releaseGood', 'bizplace', 'orderProduct']
39
46
  })
40
47
 
41
48
  // Sort all release qty from highest to lowest
@@ -80,6 +87,8 @@ export const generateBatchPickingWorksheetDetailsResolver = {
80
87
  newTargetInventory.packingType = prevOrdInv.packingType
81
88
  newTargetInventory.packingSize = parseFloat(prevOrdInv.packingSize)
82
89
  newTargetInventory.creator = user
90
+ newTargetInventory.uom = selectedOrdInv.uom
91
+ newTargetInventory.orderProduct = prevOrdInv.orderProduct
83
92
 
84
93
  let inventory: Inventory = await tx.getRepository(Inventory).findOne(selectedOrdInv.inventory.id)
85
94
 
@@ -100,7 +109,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
100
109
 
101
110
  requiredQty = fulfiledQty <= 0 ? 0 : fulfiledQty
102
111
  requiredUomValue = fulfiledUomValue <= 0 ? 0 : fulfiledUomValue
103
-
112
+
104
113
  await tx.getRepository(Inventory).update(
105
114
  { domain, id: inventory.id },
106
115
  {
@@ -124,6 +133,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
124
133
  bizplace: prevOrdInv.bizplace,
125
134
  name: WorksheetNoGenerator.batchPickingDetail(),
126
135
  targetInventory: newTargetInventory,
136
+ targetProduct: prevOrdInv.orderProduct,
127
137
  type: WORKSHEET_TYPE.BATCH_PICKING,
128
138
  status: WORKSHEET_STATUS.DEACTIVATED,
129
139
  creator: user
@@ -134,11 +144,16 @@ export const generateBatchPickingWorksheetDetailsResolver = {
134
144
  selectedOrdInv.releaseUomValue = remainingUomValue <= 0 ? 0 : remainingUomValue
135
145
 
136
146
  // insufficient qty for current order inventory, use the next inventory qty
137
- if (selectedOrdInv.releaseQty == 0){
147
+ if (selectedOrdInv.releaseQty == 0) {
138
148
  j = j + 1
139
149
  }
140
150
  }
141
- await tx.getRepository(OrderInventory).update({id: prevOrdInvs[i].id},{status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, updater: user, updatedAt: new Date()})
151
+ await tx
152
+ .getRepository(OrderInventory)
153
+ .update(
154
+ { id: prevOrdInvs[i].id },
155
+ { status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, updater: user, updatedAt: new Date() }
156
+ )
142
157
  }
143
158
  }
144
159
  }
@@ -7,7 +7,8 @@ import {
7
7
  OrderInventory,
8
8
  OrderInventoryPatch,
9
9
  OrderNoGenerator,
10
- ReleaseGood
10
+ ReleaseGood,
11
+ OrderProduct
11
12
  } from '@things-factory/sales-base'
12
13
  import { Setting } from '@things-factory/setting-base'
13
14
  import { Domain } from '@things-factory/shell'
@@ -124,6 +125,7 @@ export const generatePickingWorksheetDetailsResolver = {
124
125
  name: WorksheetNoGenerator.pickingDetail(),
125
126
  seq: 0,
126
127
  targetInventory,
128
+ targetProduct: targetInventory.orderProduct,
127
129
  type: WORKSHEET_TYPE.PICKING,
128
130
  status: WORKSHEET_STATUS.DEACTIVATED,
129
131
  creator: user,
@@ -198,7 +200,9 @@ function _composeWorksheetDetails(
198
200
  creator: user,
199
201
  updater: user,
200
202
  status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
201
- type: ORDER_TYPES.RELEASE_OF_GOODS.value
203
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
204
+ uom: record.uom,
205
+ orderProduct: { id: inv.orderProductId }
202
206
  }
203
207
  })
204
208
 
@@ -2,7 +2,7 @@ import { EntityManager } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Product } from '@things-factory/product-base'
5
- import { ORDER_INVENTORY_STATUS, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
5
+ import { ORDER_INVENTORY_STATUS, OrderInventory, OrderNoGenerator, OrderProduct } from '@things-factory/sales-base'
6
6
  import { Domain } from '@things-factory/shell'
7
7
  import { Inventory } from '@things-factory/warehouse-base'
8
8
 
@@ -74,6 +74,10 @@ export async function generateReleaseGoodWorksheetDetails(
74
74
  let targetInventory: OrderInventory = wsd.targetInventory
75
75
  const inventory: Inventory = await tx.getRepository(Inventory).findOne(targetInventory.inventory.id)
76
76
 
77
+ let targetProduct: OrderProduct = await tx
78
+ .getRepository(OrderProduct)
79
+ .findOne({ where: { id: wsd.targetProduct.id } })
80
+
77
81
  targetInventory = await tx.getRepository(OrderInventory).save({
78
82
  ...targetInventory,
79
83
  domain,
@@ -87,6 +91,7 @@ export async function generateReleaseGoodWorksheetDetails(
87
91
  product: await tx.getRepository(Product).findOne(productId),
88
92
  packingType,
89
93
  packingSize,
94
+ orderProduct: targetProduct,
90
95
  creator: user,
91
96
  updater: user
92
97
  })
@@ -112,6 +117,7 @@ export async function generateReleaseGoodWorksheetDetails(
112
117
  bizplace: worksheet.bizplace,
113
118
  worksheet,
114
119
  name: WorksheetNoGenerator.pickingDetail(),
120
+ targetProduct,
115
121
  targetInventory,
116
122
  type: WORKSHEET_TYPE.PICKING,
117
123
  status: WORKSHEET_STATUS.DEACTIVATED,
@@ -179,6 +179,12 @@ export const Mutation = /* GraphQL */ `
179
179
  inventoryItemId: String!
180
180
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
181
181
 
182
+ sealTote (
183
+ sealNo: String!
184
+ toteNo: String!
185
+ orderNo: String!
186
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
187
+
182
188
  unload (
183
189
  worksheetDetailName: String!
184
190
  inventory: InventoryPatch!
@@ -313,6 +319,7 @@ export const Mutation = /* GraphQL */ `
313
319
  releaseQty: Int!
314
320
  binLocation: String
315
321
  serialNumber: String
322
+ toteNo: String
316
323
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
317
324
 
318
325
  scanProductPicking (
@@ -322,6 +329,7 @@ export const Mutation = /* GraphQL */ `
322
329
  cartonId: String!
323
330
  binLocation: String
324
331
  serialNumber: String
332
+ toteNo: String
325
333
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
326
334
 
327
335
  sortingProduct (
@@ -330,6 +338,7 @@ export const Mutation = /* GraphQL */ `
330
338
  productId: String!
331
339
  sortingQty: Float!
332
340
  serialNumber: String
341
+ toteNo: String
333
342
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
334
343
 
335
344
  scanProductSorting (
@@ -337,6 +346,7 @@ export const Mutation = /* GraphQL */ `
337
346
  releaseGoodNo: String!
338
347
  productBarcode: String!
339
348
  serialNumber: String
349
+ toteNo: String
340
350
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
341
351
 
342
352
  packing (
@@ -4,5 +4,6 @@ export const LoadedWorksheetDetail = gql`
4
4
  input LoadedWorksheetDetail {
5
5
  name: String!
6
6
  loadedQty: Float!
7
+ toteName: String
7
8
  }
8
9
  `
@@ -62,5 +62,7 @@ export const WorksheetDetailInfo = gql`
62
62
  manufactureDate: String
63
63
  binRemarks: String
64
64
  isRequireSerialNumberScanningOutbound: Boolean
65
+ hasMissingInventoryChanges: Boolean
66
+ toteName: String
65
67
  }
66
68
  `
@@ -12,6 +12,7 @@ export const WorksheetInfo = gql`
12
12
  bizplace: Bizplace
13
13
  containerNo: String
14
14
  airwayBill: String
15
+ checkedRemarkBy: String
15
16
  invoice: String
16
17
  shippingProvider: String
17
18
  trackingNo: String
@@ -22,6 +23,7 @@ export const WorksheetInfo = gql`
22
23
  startedAt: String
23
24
  ownCollection: Boolean
24
25
  palletId: String
26
+ status: String
25
27
  refNo: String
26
28
  refNo2: String
27
29
  refNo3: String
@@ -21,6 +21,7 @@ export const Worksheet = gql`
21
21
  description: String
22
22
  type: String
23
23
  worksheetDetails: [WorksheetDetail]
24
+ orderRemark: Boolean
24
25
  assignee: User
25
26
  status: String
26
27
  startedAt: String
package/server/routes.ts CHANGED
@@ -8,6 +8,7 @@ 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'
12
13
  import { renderPO } from './controllers/render-po'
13
14
 
@@ -45,6 +46,10 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
45
46
  context.body = await renderSeebuuGRN(context.params, context)
46
47
  })
47
48
 
49
+ routes.get('/view_fm_grn/:grnNo/:timezoneOffSet', async (context, next) => {
50
+ context.body = await renderFmGRN(context.params, context)
51
+ })
52
+
48
53
  routes.get('/view_job_sheet/:ganNo/:timezoneOffSet', async (context, next) => {
49
54
  context.body = await renderJobSheet(context.params, context)
50
55
  })