@things-factory/worksheet-base 5.0.0-alpha.5 → 5.0.0-alpha.52

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 (243) 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 +24 -10
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
  6. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +2 -0
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/outbound/loading-worksheet-controller.js +56 -9
  12. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
  14. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/picking-worksheet-controller.js +500 -18
  16. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
  18. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +215 -12
  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 +77 -45
  24. package/dist-server/controllers/render-grn.js.map +1 -1
  25. package/dist-server/controllers/render-invoices.js +103 -65
  26. package/dist-server/controllers/render-invoices.js.map +1 -1
  27. package/dist-server/controllers/render-manifest.js +12 -5
  28. package/dist-server/controllers/render-manifest.js.map +1 -1
  29. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  30. package/dist-server/controllers/render-orientage-grn.js +1 -0
  31. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  32. package/dist-server/controllers/render-po.js +147 -0
  33. package/dist-server/controllers/render-po.js.map +1 -0
  34. package/dist-server/controllers/render-ro-do.js +65 -1
  35. package/dist-server/controllers/render-ro-do.js.map +1 -1
  36. package/dist-server/controllers/worksheet-controller.js +23 -1
  37. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  38. package/dist-server/entities/index.js +2 -1
  39. package/dist-server/entities/index.js.map +1 -1
  40. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
  41. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
  42. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
  43. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
  45. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
  46. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +12 -4
  47. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
  49. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
  51. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
  53. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -0
  55. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +48 -2
  57. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
  59. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
  61. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
  63. package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
  64. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
  65. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
  67. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
  69. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
  70. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +153 -132
  71. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
  73. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
  75. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  77. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  78. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +14 -25
  79. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet/picking/index.js +3 -1
  81. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  82. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +49 -58
  83. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
  84. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  85. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  86. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  87. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  88. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  89. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  90. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
  91. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
  92. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
  93. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  94. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
  95. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  96. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
  97. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  98. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  99. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  100. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  101. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  102. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +6 -0
  103. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  104. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
  105. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  106. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
  107. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  108. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
  109. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  110. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
  111. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
  112. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
  113. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
  114. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
  115. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
  116. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  117. package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
  118. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  119. package/dist-server/graphql/resolvers/worksheet/worksheets.js +45 -5
  120. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  121. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -8
  122. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  123. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
  124. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  125. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
  126. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
  127. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +12 -3
  128. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  129. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
  130. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  131. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
  132. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
  133. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
  134. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
  135. package/dist-server/graphql/types/worksheet/index.js +52 -11
  136. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  137. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
  138. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  139. package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
  140. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +8 -3
  141. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  142. package/dist-server/graphql/types/worksheet/worksheet-info.js +3 -0
  143. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  144. package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
  145. package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
  146. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  147. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  148. package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
  149. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  150. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +5 -2
  151. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  152. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js +1 -1
  153. package/dist-server/index.js +5 -0
  154. package/dist-server/index.js.map +1 -1
  155. package/dist-server/routes.js +12 -0
  156. package/dist-server/routes.js.map +1 -1
  157. package/dist-server/utils/inventory-util.js +14 -25
  158. package/dist-server/utils/inventory-util.js.map +1 -1
  159. package/dist-server/utils/worksheet-no-generator.js +25 -28
  160. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  161. package/package.json +17 -17
  162. package/server/constants/template.ts +1 -0
  163. package/server/controllers/ecommerce/sellercraft-controller.ts +38 -10
  164. package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
  165. package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
  166. package/server/controllers/index.ts +3 -0
  167. package/server/controllers/outbound/loading-worksheet-controller.ts +94 -15
  168. package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
  169. package/server/controllers/outbound/picking-worksheet-controller.ts +653 -24
  170. package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
  171. package/server/controllers/outbound/sorting-worksheet-controller.ts +303 -18
  172. package/server/controllers/render-fm-grn.ts +266 -0
  173. package/server/controllers/render-grn.ts +95 -52
  174. package/server/controllers/render-invoices.ts +119 -72
  175. package/server/controllers/render-manifest.ts +12 -5
  176. package/server/controllers/render-orientage-do.ts +11 -11
  177. package/server/controllers/render-orientage-grn.ts +12 -11
  178. package/server/controllers/render-po.ts +170 -0
  179. package/server/controllers/render-ro-do.ts +93 -8
  180. package/server/controllers/worksheet-controller.ts +32 -3
  181. package/server/entities/index.ts +2 -1
  182. package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
  183. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
  184. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
  185. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +15 -5
  186. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
  187. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
  188. package/server/graphql/resolvers/worksheet/index.ts +3 -1
  189. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
  190. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +67 -8
  191. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
  192. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
  193. package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
  194. package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
  195. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
  196. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  197. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
  198. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
  199. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
  200. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  201. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +18 -31
  202. package/server/graphql/resolvers/worksheet/picking/index.ts +5 -1
  203. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
  204. package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
  205. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  206. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  207. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  208. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
  209. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
  210. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
  211. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +6 -4
  212. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +6 -4
  213. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +6 -0
  214. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
  215. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
  216. package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
  217. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  218. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  219. package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
  220. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
  221. package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
  222. package/server/graphql/resolvers/worksheet/worksheets.ts +64 -5
  223. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +30 -14
  224. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
  225. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
  226. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +15 -3
  227. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
  228. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
  229. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  230. package/server/graphql/types/worksheet/index.ts +52 -11
  231. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
  232. package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
  233. package/server/graphql/types/worksheet/worksheet-detail-info.ts +8 -3
  234. package/server/graphql/types/worksheet/worksheet-info.ts +3 -0
  235. package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
  236. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  237. package/server/graphql/types/worksheet-detail/index.ts +0 -2
  238. package/server/graphql/types/worksheet-detail/inventory-detail.ts +5 -2
  239. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +1 -1
  240. package/server/index.ts +5 -0
  241. package/server/routes.ts +17 -0
  242. package/server/utils/inventory-util.ts +15 -23
  243. package/server/utils/worksheet-no-generator.ts +25 -25
@@ -124,6 +124,9 @@ export class ReturningWorksheetController extends VasWorksheetController {
124
124
  // update status of order inventory
125
125
  targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
126
126
  targetInventory.updater = this.user
127
+ targetInventory.returnToLocationQty = targetInventory.releaseQty
128
+ targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue
129
+
127
130
  await this.updateOrderTargets([targetInventory])
128
131
 
129
132
  // update status of worksheet detail (EXECUTING => DONE)
@@ -164,7 +167,13 @@ export class ReturningWorksheetController extends VasWorksheetController {
164
167
  where: {
165
168
  domain: this.domain,
166
169
  name: toLocationName,
167
- type: In([LOCATION_TYPE.SHELF, LOCATION_TYPE.BUFFER, LOCATION_TYPE.FLOOR, LOCATION_TYPE.BIN])
170
+ type: In([
171
+ LOCATION_TYPE.SHELF,
172
+ LOCATION_TYPE.BUFFER,
173
+ LOCATION_TYPE.FLOOR,
174
+ LOCATION_TYPE.BIN,
175
+ LOCATION_TYPE.QUARANTINE
176
+ ])
168
177
  },
169
178
  relations: ['warehouse']
170
179
  })
@@ -189,6 +198,8 @@ export class ReturningWorksheetController extends VasWorksheetController {
189
198
 
190
199
  targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
191
200
  targetInventory.updater = this.user
201
+ targetInventory.returnToLocationQty = targetInventory.releaseQty
202
+ targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue
192
203
  await this.updateOrderTargets([targetInventory])
193
204
 
194
205
  worksheetDetail.status = WORKSHEET_STATUS.DONE
@@ -1,9 +1,29 @@
1
+ import { IsNull, In } from 'typeorm'
2
+
1
3
  import { VasWorksheetController } from '../vas/vas-worksheet-controller'
2
4
  import { Product, ProductDetail } from '@things-factory/product-base'
3
- import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
4
- import { ReleaseGood, OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS } from '@things-factory/sales-base'
5
+ import {
6
+ Inventory,
7
+ INVENTORY_TRANSACTION_TYPE,
8
+ InventoryItem,
9
+ INVENTORY_STATUS,
10
+ InventoryNoGenerator,
11
+ INVENTORY_ITEM_SOURCE,
12
+ Tote,
13
+ TOTE_STATUS
14
+ } from '@things-factory/warehouse-base'
15
+ import {
16
+ ReleaseGood,
17
+ OrderInventory,
18
+ ORDER_INVENTORY_STATUS,
19
+ ORDER_STATUS,
20
+ OrderTote,
21
+ OrderToteItem,
22
+ OrderNoGenerator
23
+ } from '@things-factory/sales-base'
5
24
  import { Worksheet, WorksheetDetail } from '../../entities'
6
25
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
26
+ import { temporaryGetRemainInventoryAmount } from 'server/graphql/resolvers/worksheet/vas-transactions/common-utils'
7
27
 
8
28
  export class SortingWorksheetController extends VasWorksheetController {
9
29
  async generateSortingWorksheet(
@@ -51,7 +71,13 @@ export class SortingWorksheetController extends VasWorksheetController {
51
71
  return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)
52
72
  }
53
73
 
54
- async scanProductSorting(taskNo: string, releaseGoodNo: string, productBarcode: string): Promise<void> {
74
+ async scanProductSorting(
75
+ taskNo: string,
76
+ releaseGoodNo: string,
77
+ productBarcode: string,
78
+ serialNumber: string,
79
+ toteNo: string
80
+ ): Promise<void> {
55
81
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
56
82
  where: {
57
83
  domain: this.domain,
@@ -63,6 +89,8 @@ export class SortingWorksheetController extends VasWorksheetController {
63
89
  'worksheetDetails',
64
90
  'worksheetDetails.targetInventory',
65
91
  'worksheetDetails.targetInventory.product',
92
+ 'worksheetDetails.targetInventory.orderProduct',
93
+ 'worksheetDetails.targetInventory.bizplace',
66
94
  'worksheetDetails.targetInventory.inventory',
67
95
  'worksheetDetails.targetInventory.inventory.product',
68
96
  'worksheetDetails.targetInventory.inventory.product.productDetails',
@@ -113,8 +141,53 @@ export class SortingWorksheetController extends VasWorksheetController {
113
141
  const releaseQty: number = matchingOI.releaseQty
114
142
  const inventory: Inventory = matchingOI.inventory
115
143
  const releaseGood: ReleaseGood = matchingOI.releaseGood
144
+ const product: Product = inventory.product
116
145
 
117
146
  if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {
147
+ // Serial Number scanning for batch picking
148
+ if (matchingOI?.refWorksheetId) {
149
+ if (product?.isRequireSerialNumberScanningOutbound) {
150
+ if (!serialNumber || serialNumber == '') {
151
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))
152
+ }
153
+
154
+ let foundSerialNumber: InventoryItem = await this.trxMgr
155
+ .getRepository(InventoryItem)
156
+ .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } })
157
+
158
+ if (foundSerialNumber) {
159
+ if (foundSerialNumber.inventoryId !== inventory.id) {
160
+ throw new Error('Serial Number scanned is in another inventory')
161
+ }
162
+
163
+ if (foundSerialNumber.outboundOrderId) {
164
+ let releaseGood: ReleaseGood = await this.trxMgr
165
+ .getRepository(ReleaseGood)
166
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } })
167
+ throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)
168
+ }
169
+
170
+ foundSerialNumber.status = INVENTORY_STATUS.SORTING
171
+ foundSerialNumber.updater = this.user
172
+ foundSerialNumber.outboundOrderId = releaseGood.id
173
+
174
+ await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)
175
+ } else {
176
+ let inventoryItem: InventoryItem = new InventoryItem()
177
+ inventoryItem.name = InventoryNoGenerator.inventoryItemName()
178
+ inventoryItem.serialNumber = serialNumber
179
+ inventoryItem.status = INVENTORY_STATUS.SORTING
180
+ inventoryItem.outboundOrderId = releaseGood.id
181
+ inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND
182
+ inventoryItem.product = product
183
+ inventoryItem.inventory = inventory
184
+ inventoryItem.domain = this.domain
185
+
186
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)
187
+ }
188
+ }
189
+ }
190
+
118
191
  matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty
119
192
  sortedQty -= 1
120
193
  if (matchingOI.sortedQty == releaseQty) {
@@ -128,12 +201,36 @@ export class SortingWorksheetController extends VasWorksheetController {
128
201
  worksheetDetail.status = WORKSHEET_STATUS.DONE
129
202
  worksheetDetail.updater = this.user
130
203
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
204
+
205
+ let inventoryItems: InventoryItem = await this.trxMgr
206
+ .getRepository(InventoryItem)
207
+ .find({ where: { outboundOrderId: releaseGood.id } })
208
+
209
+ if (inventoryItems.length > 0) {
210
+ inventoryItems.forEach((itm: InventoryItem) => {
211
+ itm.status = INVENTORY_STATUS.SORTED
212
+ itm.updater = this.user
213
+ })
214
+
215
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
216
+ }
131
217
  } else if (matchingOI?.sortedQty > releaseQty) {
132
218
  const product: Product = matchingOI.inventory.product
133
219
  throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))
134
220
  } else {
135
221
  await this.updateOrderTargets([matchingOI])
136
222
  }
223
+
224
+ if (toteNo) {
225
+ await this.toteScanning(
226
+ toteNo,
227
+ matchingOI.orderProduct,
228
+ matchingOI,
229
+ 1,
230
+ releaseGood,
231
+ matchingOI.bizplace
232
+ )
233
+ }
137
234
  }
138
235
  })
139
236
  )
@@ -141,7 +238,14 @@ export class SortingWorksheetController extends VasWorksheetController {
141
238
  }
142
239
  }
143
240
 
144
- async sortingProduct(taskNo: string, releaseGoodNo: string, productId: string, sortingQty: number): Promise<void> {
241
+ async sortingProduct(
242
+ taskNo: string,
243
+ releaseGoodNo: string,
244
+ productId: string,
245
+ sortingQty: number,
246
+ serialNumber: string,
247
+ toteNo: string
248
+ ): Promise<void> {
145
249
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
146
250
  where: {
147
251
  domain: this.domain,
@@ -153,6 +257,8 @@ export class SortingWorksheetController extends VasWorksheetController {
153
257
  'worksheetDetails',
154
258
  'worksheetDetails.targetInventory',
155
259
  'worksheetDetails.targetInventory.product',
260
+ 'worksheetDetails.targetInventory.orderProduct',
261
+ 'worksheetDetails.targetInventory.bizplace',
156
262
  'worksheetDetails.targetInventory.inventory',
157
263
  'worksheetDetails.targetInventory.inventory.product',
158
264
  'worksheetDetails.targetInventory.inventory.product.productDetails',
@@ -180,14 +286,81 @@ export class SortingWorksheetController extends VasWorksheetController {
180
286
  const packingType: string = matchingOI.packingType
181
287
  const packingSize: number = matchingOI.packingSize
182
288
 
289
+ if (product?.isRequireSerialNumberScanningOutbound) {
290
+ if (!serialNumber || serialNumber == '') {
291
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))
292
+ }
293
+
294
+ let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({
295
+ where: { domain: this.domain, serialNumber: serialNumber, product },
296
+ relations: ['product', 'inventory']
297
+ })
298
+
299
+ if (foundSerialNumber) {
300
+ if (foundSerialNumber.outboundOrderId) {
301
+ let releaseGood: ReleaseGood = await this.trxMgr
302
+ .getRepository(ReleaseGood)
303
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } })
304
+ throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)
305
+ }
306
+
307
+ foundSerialNumber.status = INVENTORY_STATUS.SORTING
308
+ foundSerialNumber.updater = this.user
309
+ foundSerialNumber.outboundOrderId = releaseGood.id
310
+
311
+ await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)
312
+ } else {
313
+ let inventoryItem: InventoryItem = new InventoryItem()
314
+ inventoryItem.name = InventoryNoGenerator.inventoryItemName()
315
+ inventoryItem.serialNumber = serialNumber
316
+ inventoryItem.status = INVENTORY_STATUS.SORTING
317
+ inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND
318
+ inventoryItem.outboundOrderId = releaseGood.id
319
+ inventoryItem.product = product
320
+ inventoryItem.inventory = inventory
321
+ inventoryItem.domain = this.domain
322
+
323
+ foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)
324
+ }
325
+ }
326
+
327
+ if (toteNo) {
328
+ await this.toteScanning(
329
+ toteNo,
330
+ matchingOI.orderProduct,
331
+ matchingOI,
332
+ sortingQty,
333
+ releaseGood,
334
+ matchingOI.bizplace
335
+ )
336
+ }
337
+
183
338
  if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {
184
- matchingOI.sortedQty = releaseQty
339
+ if (product?.isRequireSerialNumberScanningOutbound) {
340
+ matchingOI.sortedQty += sortingQty
341
+ } else {
342
+ matchingOI.sortedQty = releaseQty
343
+ }
344
+
185
345
  sortingQty -= releaseQty
186
346
  if (matchingOI.sortedQty == releaseQty) {
187
347
  matchingOI.status = ORDER_INVENTORY_STATUS.SORTED
188
348
  await this.updateOrderTargets([matchingOI])
189
349
  await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)
190
350
 
351
+ let inventoryItems: InventoryItem = await this.trxMgr
352
+ .getRepository(InventoryItem)
353
+ .find({ where: { outboundOrderId: releaseGood.id } })
354
+
355
+ if (inventoryItems.length > 0) {
356
+ inventoryItems.forEach((itm: InventoryItem) => {
357
+ itm.status = INVENTORY_STATUS.PACKED
358
+ itm.updater = this.user
359
+ })
360
+
361
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
362
+ }
363
+
191
364
  let worksheetDetail: WorksheetDetail = worksheetDetails.find(
192
365
  wsd => wsd.targetInventory.id === matchingOI.id
193
366
  )
@@ -206,21 +379,50 @@ export class SortingWorksheetController extends VasWorksheetController {
206
379
  }
207
380
 
208
381
  async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {
209
- let releaseGood: ReleaseGood = await this.findRefOrder(
210
- ReleaseGood,
211
- {
212
- domain: this.domain,
213
- name: releaseGoodNo,
214
- status: ORDER_STATUS.SORTING
215
- },
216
- ['bizplace', 'orderInventories']
217
- )
382
+ try {
383
+ let releaseGood: ReleaseGood = await this.findRefOrder(
384
+ ReleaseGood,
385
+ {
386
+ domain: this.domain,
387
+ name: releaseGoodNo,
388
+ status: ORDER_STATUS.SORTING
389
+ },
390
+ ['bizplace', 'orderInventories']
391
+ )
392
+
393
+ if (!releaseGood) {
394
+ throw new Error('Order is already sorted')
395
+ }
396
+
397
+ const foundNotSealedOrderTote = await this.trxMgr
398
+ .getRepository(OrderTote)
399
+ .findOne({ where: { releaseGood, closedDate: IsNull() } })
400
+
401
+ if (foundNotSealedOrderTote) {
402
+ throw new Error('Please seal the tote(s) before proceeding')
403
+ }
404
+
405
+ releaseGood.status = ORDER_STATUS.READY_TO_LOAD
406
+ releaseGood.updater = this.user
407
+ await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
218
408
 
219
- releaseGood.status = ORDER_STATUS.READY_TO_LOAD
220
- releaseGood.updater = this.user
221
- await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
409
+ let inventoryItems: InventoryItem = await this.trxMgr
410
+ .getRepository(InventoryItem)
411
+ .find({ where: { outboundOrderId: releaseGood.id } })
222
412
 
223
- return releaseGood
413
+ if (inventoryItems.length > 0) {
414
+ inventoryItems.forEach((itm: InventoryItem) => {
415
+ itm.status = INVENTORY_STATUS.TERMINATED
416
+ itm.updater = this.user
417
+ })
418
+
419
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
420
+ }
421
+
422
+ return releaseGood
423
+ } catch (e) {
424
+ throw e
425
+ }
224
426
  }
225
427
 
226
428
  async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {
@@ -238,6 +440,16 @@ export class SortingWorksheetController extends VasWorksheetController {
238
440
  ]
239
441
  })
240
442
 
443
+ let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)
444
+
445
+ const foundNotSealedOrderTote = await this.trxMgr
446
+ .getRepository(OrderTote)
447
+ .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })
448
+
449
+ if (foundNotSealedOrderTote) {
450
+ throw new Error('Please seal the tote(s) before proceeding')
451
+ }
452
+
241
453
  this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
242
454
 
243
455
  const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
@@ -253,4 +465,77 @@ export class SortingWorksheetController extends VasWorksheetController {
253
465
 
254
466
  return worksheet
255
467
  }
468
+
469
+ private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
470
+ //1. find tote
471
+ let foundTote: Tote = await this.trxMgr
472
+ .getRepository(Tote)
473
+ .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })
474
+
475
+ if (foundTote?.status == TOTE_STATUS.DAMAGED) {
476
+ throw new Error('Tote is damaged')
477
+ }
478
+
479
+ if (foundTote?.status == TOTE_STATUS.DISPATCHED) {
480
+ throw new Error('Tote is dispatched')
481
+ }
482
+
483
+ //2. find order tote
484
+ let foundOrderTote: OrderTote = await this.trxMgr
485
+ .getRepository(OrderTote)
486
+ .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })
487
+
488
+ //if order tote not found the create one, if tote not found means it's tote box
489
+ //create order tote item
490
+ if (!foundOrderTote) {
491
+ const orderTote = await this.trxMgr.getRepository(OrderTote).save({
492
+ name: toteNo,
493
+ domain: this.domain,
494
+ releaseGood,
495
+ tote: foundTote ? foundTote : null,
496
+ updater: this.user
497
+ })
498
+
499
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
500
+ domain: this.domain,
501
+ name: OrderNoGenerator.orderToteItem(),
502
+ orderProduct: targetProduct,
503
+ orderInventory: targetInventory,
504
+ orderTote,
505
+ qty: pickedQty,
506
+ updater: this.user
507
+ })
508
+ } else {
509
+ if (foundOrderTote.closedDate) {
510
+ throw new Error('Tote has been sealed, please try another tote!')
511
+ }
512
+
513
+ //if found order tote then check if order tote item exist
514
+ const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({
515
+ domain: this.domain,
516
+ orderProduct: targetProduct,
517
+ orderInventory: targetInventory,
518
+ orderTote: foundOrderTote
519
+ })
520
+
521
+ //if not order tote item doesnt exist then create one
522
+ if (!foundOrderToteItem) {
523
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
524
+ domain: this.domain,
525
+ name: OrderNoGenerator.orderToteItem(),
526
+ orderProduct: targetProduct,
527
+ orderInventory: targetInventory,
528
+ orderTote: foundOrderTote,
529
+ qty: pickedQty,
530
+ updater: this.user
531
+ })
532
+ } else {
533
+ //if found order tote item found then add the quantity
534
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
535
+ ...foundOrderToteItem,
536
+ qty: foundOrderToteItem.qty + pickedQty
537
+ })
538
+ }
539
+ }
540
+ }
256
541
  }