@things-factory/worksheet-base 8.0.0-beta.8 → 8.0.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 (288) hide show
  1. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +2 -0
  2. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  3. package/dist-server/graphql/resolvers/worksheet/vas-candidates.d.ts +2 -0
  4. package/dist-server/tsconfig.tsbuildinfo +1 -1
  5. package/dist-server/utils/inventory-util.d.ts +2 -0
  6. package/package.json +17 -17
  7. package/server/constants/index.ts +5 -0
  8. package/server/constants/rule-type.ts +4 -0
  9. package/server/constants/target-type.ts +6 -0
  10. package/server/constants/template.ts +12 -0
  11. package/server/constants/transaction-type.ts +9 -0
  12. package/server/constants/worksheet.ts +38 -0
  13. package/server/controllers/ecommerce/ecommerce-controller.ts +209 -0
  14. package/server/controllers/ecommerce/index.ts +2 -0
  15. package/server/controllers/ecommerce/sellercraft-controller.ts +358 -0
  16. package/server/controllers/inbound/index.ts +4 -0
  17. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +450 -0
  18. package/server/controllers/inbound/putaway-worksheet-controller.ts +454 -0
  19. package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +291 -0
  20. package/server/controllers/inbound/unloading-worksheet-controller.ts +1400 -0
  21. package/server/controllers/index.ts +21 -0
  22. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +537 -0
  23. package/server/controllers/inspect/index.ts +1 -0
  24. package/server/controllers/outbound/index.ts +5 -0
  25. package/server/controllers/outbound/loading-worksheet-controller.ts +377 -0
  26. package/server/controllers/outbound/packing-worksheet-controller.ts +449 -0
  27. package/server/controllers/outbound/picking-worksheet-controller.ts +1769 -0
  28. package/server/controllers/outbound/returning-worksheet-controller.ts +254 -0
  29. package/server/controllers/outbound/sorting-worksheet-controller.ts +554 -0
  30. package/server/controllers/render-elccl-grn.ts +228 -0
  31. package/server/controllers/render-fm-grn.ts +287 -0
  32. package/server/controllers/render-grn.ts +285 -0
  33. package/server/controllers/render-invoices.ts +201 -0
  34. package/server/controllers/render-job-sheet.ts +208 -0
  35. package/server/controllers/render-kimeda-grn.ts +185 -0
  36. package/server/controllers/render-manifest.ts +76 -0
  37. package/server/controllers/render-manual-do.ts +227 -0
  38. package/server/controllers/render-orientage-do.ts +376 -0
  39. package/server/controllers/render-orientage-grn.ts +191 -0
  40. package/server/controllers/render-po.ts +182 -0
  41. package/server/controllers/render-ro-do.ts +404 -0
  42. package/server/controllers/render-seebuu-grn.ts +208 -0
  43. package/server/controllers/vas/index.ts +1 -0
  44. package/server/controllers/vas/vas-worksheet-controller.ts +848 -0
  45. package/server/controllers/worksheet-controller.ts +1267 -0
  46. package/server/entities/index.ts +8 -0
  47. package/server/entities/warehouse-bizplace-onhand-inventory.ts +148 -0
  48. package/server/entities/worksheet-detail.ts +106 -0
  49. package/server/entities/worksheet-movement.ts +34 -0
  50. package/server/entities/worksheet.ts +100 -0
  51. package/server/graphql/index.ts +7 -0
  52. package/server/graphql/resolvers/index.ts +8 -0
  53. package/server/graphql/resolvers/pallet/index.ts +7 -0
  54. package/server/graphql/resolvers/pallet/pallet-outbound.ts +92 -0
  55. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +137 -0
  56. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +20 -0
  57. package/server/graphql/resolvers/worksheet/check-inventory-release.ts +37 -0
  58. package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +63 -0
  59. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +213 -0
  60. package/server/graphql/resolvers/worksheet/create-worksheet.ts +21 -0
  61. package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +173 -0
  62. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +211 -0
  63. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +79 -0
  64. package/server/graphql/resolvers/worksheet/delete-worksheet.ts +21 -0
  65. package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +104 -0
  66. package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +191 -0
  67. package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
  68. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +36 -0
  69. package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +29 -0
  70. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
  71. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +100 -0
  72. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +26 -0
  73. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +51 -0
  74. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +17 -0
  75. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +69 -0
  76. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +65 -0
  77. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +54 -0
  78. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +114 -0
  79. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +45 -0
  80. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +35 -0
  81. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +23 -0
  82. package/server/graphql/resolvers/worksheet/having-vas.ts +45 -0
  83. package/server/graphql/resolvers/worksheet/index.ts +142 -0
  84. package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +24 -0
  85. package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +49 -0
  86. package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +18 -0
  87. package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +41 -0
  88. package/server/graphql/resolvers/worksheet/inspecting/index.ts +17 -0
  89. package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +30 -0
  90. package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +46 -0
  91. package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +23 -0
  92. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +150 -0
  93. package/server/graphql/resolvers/worksheet/loaded-inventories.ts +40 -0
  94. package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +73 -0
  95. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +165 -0
  96. package/server/graphql/resolvers/worksheet/loading/index.ts +11 -0
  97. package/server/graphql/resolvers/worksheet/loading/loading.ts +46 -0
  98. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +25 -0
  99. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +150 -0
  100. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +34 -0
  101. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +69 -0
  102. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +102 -0
  103. package/server/graphql/resolvers/worksheet/packing/index.ts +13 -0
  104. package/server/graphql/resolvers/worksheet/packing/packing.ts +59 -0
  105. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +70 -0
  106. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  107. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +378 -0
  108. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +142 -0
  109. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +234 -0
  110. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +40 -0
  111. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +98 -0
  112. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +50 -0
  113. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +44 -0
  114. package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +32 -0
  115. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +137 -0
  116. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +282 -0
  117. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +121 -0
  118. package/server/graphql/resolvers/worksheet/picking/index.ts +31 -0
  119. package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +35 -0
  120. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +96 -0
  121. package/server/graphql/resolvers/worksheet/picking/picking.ts +55 -0
  122. package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +52 -0
  123. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +25 -0
  124. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  125. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +31 -0
  126. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  127. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +147 -0
  128. package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +242 -0
  129. package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +51 -0
  130. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +105 -0
  131. package/server/graphql/resolvers/worksheet/putaway/index.ts +11 -0
  132. package/server/graphql/resolvers/worksheet/putaway/putaway.ts +26 -0
  133. package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +25 -0
  134. package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +55 -0
  135. package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +38 -0
  136. package/server/graphql/resolvers/worksheet/putaway-return/index.ts +11 -0
  137. package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +30 -0
  138. package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +29 -0
  139. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +83 -0
  140. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +82 -0
  141. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +133 -0
  142. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +186 -0
  143. package/server/graphql/resolvers/worksheet/relocate-pallet.ts +67 -0
  144. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +127 -0
  145. package/server/graphql/resolvers/worksheet/return-worksheet.ts +70 -0
  146. package/server/graphql/resolvers/worksheet/returning/activate-return.ts +24 -0
  147. package/server/graphql/resolvers/worksheet/returning/complete-return.ts +39 -0
  148. package/server/graphql/resolvers/worksheet/returning/index.ts +9 -0
  149. package/server/graphql/resolvers/worksheet/returning/returning.ts +26 -0
  150. package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +25 -0
  151. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +40 -0
  152. package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +23 -0
  153. package/server/graphql/resolvers/worksheet/sorting/index.ts +13 -0
  154. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +31 -0
  155. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +32 -0
  156. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +87 -0
  157. package/server/graphql/resolvers/worksheet/transfer.ts +176 -0
  158. package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +54 -0
  159. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +78 -0
  160. package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +56 -0
  161. package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +25 -0
  162. package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +25 -0
  163. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +76 -0
  164. package/server/graphql/resolvers/worksheet/unloading/index.ts +21 -0
  165. package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +26 -0
  166. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  167. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  168. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +25 -0
  169. package/server/graphql/resolvers/worksheet/unloading/unload.ts +26 -0
  170. package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +28 -0
  171. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +29 -0
  172. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +91 -0
  173. package/server/graphql/resolvers/worksheet/unloading-return/index.ts +9 -0
  174. package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +75 -0
  175. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +98 -0
  176. package/server/graphql/resolvers/worksheet/update-worksheet.ts +25 -0
  177. package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +25 -0
  178. package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +25 -0
  179. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +72 -0
  180. package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +31 -0
  181. package/server/graphql/resolvers/worksheet/vas/index.ts +15 -0
  182. package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +24 -0
  183. package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +24 -0
  184. package/server/graphql/resolvers/worksheet/vas-candidates.ts +177 -0
  185. package/server/graphql/resolvers/worksheet/vas-inventories.ts +41 -0
  186. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +1182 -0
  187. package/server/graphql/resolvers/worksheet/vas-transactions/index.ts +5 -0
  188. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +56 -0
  189. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.ts +20 -0
  190. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +27 -0
  191. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.ts +14 -0
  192. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.ts +14 -0
  193. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +96 -0
  194. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +93 -0
  195. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.ts +4 -0
  196. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +105 -0
  197. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +40 -0
  198. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +236 -0
  199. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.ts +3 -0
  200. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +402 -0
  201. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +166 -0
  202. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +116 -0
  203. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.ts +3 -0
  204. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +167 -0
  205. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +74 -0
  206. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +20 -0
  207. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.ts +2 -0
  208. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +164 -0
  209. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +110 -0
  210. package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +43 -0
  211. package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +46 -0
  212. package/server/graphql/resolvers/worksheet/worksheet.ts +330 -0
  213. package/server/graphql/resolvers/worksheet/worksheets.ts +493 -0
  214. package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +22 -0
  215. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +38 -0
  216. package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +18 -0
  217. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +206 -0
  218. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +165 -0
  219. package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +26 -0
  220. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +94 -0
  221. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +259 -0
  222. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +142 -0
  223. package/server/graphql/resolvers/worksheet-detail/index.ts +34 -0
  224. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +165 -0
  225. package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +39 -0
  226. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +19 -0
  227. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +56 -0
  228. package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +21 -0
  229. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +17 -0
  230. package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +12 -0
  231. package/server/graphql/resolvers/worksheet-movement/index.ts +17 -0
  232. package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +15 -0
  233. package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +10 -0
  234. package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +14 -0
  235. package/server/graphql/types/index.ts +15 -0
  236. package/server/graphql/types/pallet/index.ts +12 -0
  237. package/server/graphql/types/pallet/pallet.ts +7 -0
  238. package/server/graphql/types/worksheet/arrival-notice-worksheet.ts +8 -0
  239. package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
  240. package/server/graphql/types/worksheet/contact-point-info.ts +12 -0
  241. package/server/graphql/types/worksheet/cycle-count-worksheet.ts +16 -0
  242. package/server/graphql/types/worksheet/delivery-info.ts +11 -0
  243. package/server/graphql/types/worksheet/delivery-order-info.ts +25 -0
  244. package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
  245. package/server/graphql/types/worksheet/delivery-worksheet.ts +7 -0
  246. package/server/graphql/types/worksheet/executing-worksheet.ts +8 -0
  247. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  248. package/server/graphql/types/worksheet/goods-delivery-note.ts +8 -0
  249. package/server/graphql/types/worksheet/index.ts +750 -0
  250. package/server/graphql/types/worksheet/inventory-check-worksheet.ts +7 -0
  251. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +9 -0
  252. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  253. package/server/graphql/types/worksheet/my-picking-assignment-status.ts +9 -0
  254. package/server/graphql/types/worksheet/new-worksheet.ts +10 -0
  255. package/server/graphql/types/worksheet/picking-assignment-status.ts +9 -0
  256. package/server/graphql/types/worksheet/product-approval.ts +11 -0
  257. package/server/graphql/types/worksheet/release-good-worksheet.ts +8 -0
  258. package/server/graphql/types/worksheet/return-order-worksheet.ts +8 -0
  259. package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
  260. package/server/graphql/types/worksheet/vas-order-worksheet.ts +7 -0
  261. package/server/graphql/types/worksheet/vas-worksheet.ts +8 -0
  262. package/server/graphql/types/worksheet/worksheet-detail-info.ts +68 -0
  263. package/server/graphql/types/worksheet/worksheet-info.ts +33 -0
  264. package/server/graphql/types/worksheet/worksheet-list.ts +8 -0
  265. package/server/graphql/types/worksheet/worksheet-patch.ts +19 -0
  266. package/server/graphql/types/worksheet/worksheet-with-pagination.ts +9 -0
  267. package/server/graphql/types/worksheet/worksheet.ts +34 -0
  268. package/server/graphql/types/worksheet-detail/index.ts +81 -0
  269. package/server/graphql/types/worksheet-detail/inventory-detail.ts +39 -0
  270. package/server/graphql/types/worksheet-detail/new-worksheet-detail.ts +20 -0
  271. package/server/graphql/types/worksheet-detail/pallet-info.ts +8 -0
  272. package/server/graphql/types/worksheet-detail/worksheet-detail-list.ts +8 -0
  273. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +28 -0
  274. package/server/graphql/types/worksheet-detail/worksheet-detail.ts +29 -0
  275. package/server/graphql/types/worksheet-movement/index.ts +30 -0
  276. package/server/graphql/types/worksheet-movement/new-worksheet-movement.ts +8 -0
  277. package/server/graphql/types/worksheet-movement/worksheet-movement-list.ts +8 -0
  278. package/server/graphql/types/worksheet-movement/worksheet-movement-patch.ts +8 -0
  279. package/server/graphql/types/worksheet-movement/worksheet-movement.ts +10 -0
  280. package/server/index.ts +14 -0
  281. package/server/middlewares/index.ts +3 -0
  282. package/server/migrations/index.ts +9 -0
  283. package/server/routes.ts +80 -0
  284. package/server/utils/datetime-util.ts +54 -0
  285. package/server/utils/index.ts +4 -0
  286. package/server/utils/inventory-util.ts +390 -0
  287. package/server/utils/worksheet-no-generator.ts +206 -0
  288. package/server/utils/worksheet-util.ts +85 -0
@@ -0,0 +1,234 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { Bizplace } from '@things-factory/biz-base'
4
+ import {
5
+ DeliveryOrder,
6
+ ORDER_INVENTORY_STATUS,
7
+ ORDER_STATUS,
8
+ ORDER_VAS_STATUS,
9
+ OrderInventory,
10
+ OrderVas,
11
+ ReleaseGood
12
+ } from '@things-factory/sales-base'
13
+
14
+ import { Worksheet, WorksheetDetail } from '../../../entities'
15
+
16
+ export const pendingCancellationReleaseOrder = {
17
+ async pendingCancellationReleaseOrder(_: any, { name }, context: ResolverContext) {
18
+ const { tx, domain, user } = context.state
19
+ const foundRO: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
20
+ where: { domain: { id: domain.id }, name },
21
+ relations: ['bizplace', 'orderInventories', 'orderVass']
22
+ })
23
+
24
+ if (foundRO.status === 'DONE') throw new Error('Release good has been completed!')
25
+ if (!foundRO) throw new Error(`Release good order doesn't exists.`)
26
+ let targetOIs: OrderInventory[] = foundRO.orderInventories
27
+ let foundOVs: OrderVas[] = foundRO.orderVass
28
+ let customerBizplace: Bizplace = foundRO.bizplace
29
+ let pickedOIs: OrderInventory[]
30
+ let pickingOIs: OrderInventory[]
31
+
32
+ // 1. Check RO status
33
+ if (
34
+ foundRO.status === ORDER_STATUS.LOADING ||
35
+ foundRO.status === ORDER_STATUS.PACKING ||
36
+ foundRO.status === ORDER_STATUS.SORTING
37
+ ) {
38
+ // 1a. Case 1: RO is done or loading, pending cancel order, worksheet, worksheet detail, order inventory
39
+ // update status of order inventory to PENDING_CANCEL
40
+ pickedOIs = targetOIs.map((orderInv: OrderInventory) => {
41
+ return {
42
+ ...orderInv,
43
+ status: ORDER_INVENTORY_STATUS.PENDING_REVERSE,
44
+ updater: user
45
+ }
46
+ })
47
+ await tx.getRepository(OrderInventory).save(pickedOIs)
48
+ } else if (
49
+ foundRO.status === ORDER_STATUS.PICKING ||
50
+ foundRO.status === ORDER_STATUS.READY_TO_PICK ||
51
+ foundRO.status === ORDER_STATUS.PENDING_WORKSHEET
52
+ ) {
53
+ pickingOIs = targetOIs
54
+ .filter(
55
+ (oi: OrderInventory) =>
56
+ oi.status === ORDER_INVENTORY_STATUS.ASSIGNED ||
57
+ oi.status === ORDER_INVENTORY_STATUS.PICKING ||
58
+ oi.status === ORDER_INVENTORY_STATUS.READY_TO_PICK ||
59
+ oi.status === ORDER_INVENTORY_STATUS.PENDING_SPLIT ||
60
+ oi.status === ORDER_INVENTORY_STATUS.PENDING_WORKSHEET
61
+ )
62
+ .map((targetOI: OrderInventory) => {
63
+ return {
64
+ ...targetOI,
65
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
66
+ updater: user
67
+ }
68
+ })
69
+ await tx.getRepository(OrderInventory).save(pickingOIs)
70
+
71
+ pickedOIs = targetOIs
72
+ .filter((pickedOI: OrderInventory) => pickedOI.status === ORDER_INVENTORY_STATUS.PICKED)
73
+ .map((targetOI: OrderInventory) => {
74
+ return {
75
+ ...targetOI,
76
+ status: ORDER_INVENTORY_STATUS.PENDING_REVERSE,
77
+ updater: user
78
+ }
79
+ })
80
+ await tx.getRepository(OrderInventory).save(pickedOIs)
81
+ }
82
+
83
+ // update status of order vass to PENDING_CANCEL
84
+ if (foundOVs && foundOVs.length) {
85
+ foundOVs = foundOVs.map((orderVas: OrderVas) => {
86
+ return {
87
+ ...orderVas,
88
+ status: ORDER_VAS_STATUS.PENDING_CANCEL,
89
+ updater: user
90
+ }
91
+ })
92
+ await tx.getRepository(OrderVas).save(foundOVs)
93
+ }
94
+
95
+ // find worksheet and update status to PENDING_CANCEL
96
+ let foundWS: Worksheet = await tx.getRepository(Worksheet).findOne({
97
+ where: {
98
+ domain: { id: domain.id },
99
+ releaseGood: { id: foundRO.id }
100
+ },
101
+ order: { createdAt: 'DESC' }
102
+ })
103
+
104
+ if (foundWS) {
105
+ await tx.getRepository(Worksheet).update(
106
+ { id: foundWS.id },
107
+ {
108
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
109
+ updater: user
110
+ }
111
+ )
112
+
113
+ if (pickedOIs && pickedOIs.length) {
114
+ let pickedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
115
+ where: {
116
+ domain: { id: domain.id },
117
+ targetInventory: { id: In(pickedOIs.map(oi => oi.id)) },
118
+ status: ORDER_INVENTORY_STATUS.DONE,
119
+ worksheet: { id: foundWS.id }
120
+ }
121
+ })
122
+
123
+ pickedWSD = pickedWSD.map((wsd: WorksheetDetail) => {
124
+ return {
125
+ ...wsd,
126
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
127
+ updater: user
128
+ }
129
+ })
130
+ await tx.getRepository(WorksheetDetail).save(pickedWSD)
131
+
132
+ let replacedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
133
+ where: {
134
+ domain: { id: domain.id },
135
+ targetInventory: { id: In(pickedOIs.map(oi => oi.id)) },
136
+ status: ORDER_INVENTORY_STATUS.REPLACED,
137
+ worksheet: { id: foundWS.id }
138
+ },
139
+ relations: ['targetInventory']
140
+ })
141
+
142
+ if (replacedWSD && replacedWSD.length) {
143
+ let replacedOI: OrderInventory[] = replacedWSD.map((wsd: WorksheetDetail) => wsd.targetInventory)
144
+ replacedOI = replacedOI.map((oi: OrderInventory) => {
145
+ return {
146
+ ...oi,
147
+ status: ORDER_INVENTORY_STATUS.REPLACED,
148
+ updater: user
149
+ }
150
+ })
151
+ await tx.getRepository(OrderInventory).save(replacedOI)
152
+ }
153
+ }
154
+
155
+ if (pickingOIs && pickingOIs.length) {
156
+ let pickingWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
157
+ where: {
158
+ domain: { id: domain.id },
159
+ targetInventory: { id: In(pickingOIs.map(oi => oi.id)) },
160
+ worksheet: { id: foundWS.id }
161
+ }
162
+ })
163
+
164
+ pickingWSD = pickingWSD.map((wsd: WorksheetDetail) => {
165
+ return {
166
+ ...wsd,
167
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
168
+ updater: user
169
+ }
170
+ })
171
+ await tx.getRepository(WorksheetDetail).save(pickingWSD)
172
+ }
173
+ }
174
+
175
+ // find DO and change status to pending cancel
176
+ let foundDO: DeliveryOrder[] = await tx.getRepository(DeliveryOrder).find({
177
+ where: { domain: { id: domain.id }, releaseGood: { id: foundRO.id } }
178
+ })
179
+
180
+ foundDO = foundDO.map((deliveryOrder: DeliveryOrder) => {
181
+ return {
182
+ ...deliveryOrder,
183
+ status: ORDER_STATUS.PENDING_CANCEL,
184
+ updater: user
185
+ }
186
+ })
187
+ await tx.getRepository(DeliveryOrder).save(foundDO)
188
+
189
+ await tx.getRepository(ReleaseGood).save({
190
+ ...foundRO,
191
+ status: ORDER_STATUS.PENDING_CANCEL,
192
+ updater: user
193
+ })
194
+
195
+ /**
196
+ * @notes Temporary off sendNotification due to suspect of causing wms down
197
+ */
198
+ // // notification logics
199
+ // // get Office Admin Users
200
+ // const users: any[] = await tx
201
+ // .getRepository('users_roles')
202
+ // .createQueryBuilder('ur')
203
+ // .select('ur.users_id', 'id')
204
+ // .where(qb => {
205
+ // const subQuery = qb
206
+ // .subQuery()
207
+ // .select('role.id')
208
+ // .from(Role, 'role')
209
+ // .where("role.name = 'Office Admin'")
210
+ // .andWhere('role.domain_id = :domain', { domain: domain.id })
211
+ // .getQuery()
212
+ // return 'ur.roles_id IN ' + subQuery
213
+ // })
214
+ // .getRawMany()
215
+
216
+ // // send notification to Office Admin Users
217
+ // if (users?.length && context.header?.referer) {
218
+ // const receivers: any[] = users.map(user => user.id)
219
+ // const msg = {
220
+ // title: `${foundRO.name} cancellation`,
221
+ // body: `${customerBizplace.name} is requesting to cancel order`,
222
+ // url: context.header.referer,
223
+ // data: { url: context.header.referer }
224
+ // }
225
+
226
+ // await sendNotification({
227
+ // receivers,
228
+ // message: { ...msg }
229
+ // })
230
+ // }
231
+
232
+ return
233
+ }
234
+ }
@@ -0,0 +1,40 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { EcommerceController, PickingWorksheetController } from '../../../../controllers'
8
+ import { Worksheet } from '../../../../entities'
9
+
10
+ export const activateBatchPickingResolver = {
11
+ async activateBatchPicking(_: any, { worksheetNo }, context: ResolverContext) {
12
+ const { tx, domain, user } = context.state
13
+ return await activateBatchPicking(tx, domain, user, worksheetNo)
14
+ }
15
+ }
16
+
17
+ export async function activateBatchPicking(
18
+ tx: EntityManager,
19
+ domain: Domain,
20
+ user: User,
21
+ worksheetNo: string
22
+ ): Promise<Worksheet> {
23
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
24
+ const worksheet = await worksheetController.activateBatchPicking(worksheetNo)
25
+ const worksheetDetails = worksheet.worksheetDetails
26
+ const companyDomain: Domain = worksheet?.bizplace.company.domain
27
+
28
+ // find for any existing marketplace store connections
29
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
30
+ where: { domain: { id: companyDomain.id }, status: 'ACTIVE', isAutoUpdateStockQty: true },
31
+ relations: ['marketplaceDistributors']
32
+ })
33
+
34
+ if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
35
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
36
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
37
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
38
+ }
39
+ return worksheet
40
+ }
@@ -0,0 +1,98 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
+ import { MarketplaceOrder } from '@things-factory/marketplace-base'
6
+ import { ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
7
+ import { Domain } from '@things-factory/shell'
8
+
9
+ import { EcommerceController, PickingWorksheetController } from '../../../../controllers'
10
+ import { Worksheet } from '../../../../entities'
11
+
12
+ export const activatePickingResolver = {
13
+ async activatePicking(_: any, { worksheetNo }, context: ResolverContext) {
14
+ const { tx, domain, user } = context.state
15
+ return await activatePicking(tx, domain, user, worksheetNo)
16
+ }
17
+ }
18
+
19
+ export async function activatePicking(
20
+ tx: EntityManager,
21
+ domain: Domain,
22
+ user: User,
23
+ worksheetNo: string
24
+ ): Promise<Worksheet> {
25
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
26
+ const worksheet = await worksheetController.activatePicking(worksheetNo)
27
+ const companyDomain: Domain = worksheet?.bizplace.company.domain
28
+
29
+ let releaseGood: ReleaseGood = worksheet.releaseGood
30
+
31
+ const orderSource: string = releaseGood.source
32
+ switch (orderSource) {
33
+ case ApplicationType.MMS:
34
+ // find for any existing marketplace store connections
35
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
36
+ where: { domain: { id: companyDomain.id }, status: 'ACTIVE', isAutoUpdateStockQty: true },
37
+ relations: ['marketplaceDistributors']
38
+ })
39
+
40
+ if (marketplaceStores?.length) {
41
+ if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
42
+ const worksheetDetails = worksheet.worksheetDetails
43
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
44
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
45
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
46
+ }
47
+
48
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
49
+ where: { orderNo: releaseGood.refNo, domain: { id: companyDomain.id } },
50
+ relations: ['marketplaceStore']
51
+ })
52
+
53
+ if (marketplaceOrder) {
54
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
55
+
56
+ if (marketplaceStore.isAutoUpdateShipment) {
57
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
58
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
59
+ }
60
+ }
61
+ }
62
+ break
63
+
64
+ default:
65
+ break
66
+ }
67
+
68
+ // if (releaseGood.type === 'b2c') {
69
+ // const sellercraft: Sellercraft = await tx
70
+ // .getRepository(Sellercraft)
71
+ // .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
72
+
73
+ // if (marketplaceStores?.length && !sellercraft) {
74
+ // if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
75
+ // const worksheetDetails = worksheet.worksheetDetails
76
+ // let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
77
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
78
+ // await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
79
+ // }
80
+
81
+ // const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
82
+ // where: { orderNo: releaseGood.refNo, domain: { id: companyDomain.id } },
83
+ // relations: ['marketplaceStore']
84
+ // })
85
+
86
+ // if (marketplaceOrder) {
87
+ // const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
88
+
89
+ // if (marketplaceStore.isAutoUpdateShipment) {
90
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
91
+ // await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
92
+ // }
93
+ // }
94
+ // }
95
+ // }
96
+
97
+ return worksheet
98
+ }
@@ -0,0 +1,50 @@
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
+ import { WorksheetDetail } from '../../../../entities'
8
+
9
+ export const assignPickingInventoriesResolver = {
10
+ async assignPickingInventories(
11
+ _: any,
12
+ { worksheetNo, batchId, productId, packingType, packingSize, worksheetDetails },
13
+ context: any
14
+ ): Promise<void> {
15
+ const { tx, domain, user } = context.state
16
+ await assignPickingInventories(
17
+ tx,
18
+ domain,
19
+ user,
20
+ worksheetNo,
21
+ batchId,
22
+ productId,
23
+ packingType,
24
+ packingSize,
25
+ worksheetDetails
26
+ )
27
+ }
28
+ }
29
+
30
+ export async function assignPickingInventories(
31
+ tx: EntityManager,
32
+ domain: Domain,
33
+ user: User,
34
+ worksheetNo: string,
35
+ batchId: string,
36
+ productId: string,
37
+ packingType: string,
38
+ packingSize: number,
39
+ worksheetDetails: Partial<WorksheetDetail>[]
40
+ ): Promise<void> {
41
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
42
+ await worksheetController.assignPickingInventories(
43
+ worksheetNo,
44
+ batchId,
45
+ productId,
46
+ packingType,
47
+ packingSize,
48
+ worksheetDetails
49
+ )
50
+ }
@@ -0,0 +1,44 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
7
+ import { Worksheet } from '../../../../entities'
8
+
9
+ export const assignPickingWorkerResolver = {
10
+ async assignPickingWorker(
11
+ _parentObj: void,
12
+ { worksheetId, userId }: { worksheetId: [string]; userId: string },
13
+ context: any
14
+ ): Promise<void> {
15
+ const { tx, domain } = context.state
16
+ const assignee: User = await tx.getRepository(User).findOne({
17
+ where: { id: userId },
18
+ relations: ['domains']
19
+ })
20
+ if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
21
+ throw new Error('Target user is not belong to current domain')
22
+
23
+ if (!assignee) throw new Error('failed to find target user')
24
+
25
+ await Promise.all(
26
+ worksheetId.map(async worksheetId => {
27
+ const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
28
+ where: {
29
+ id: worksheetId,
30
+ type: In([WORKSHEET_TYPE.BATCH_PICKING, WORKSHEET_TYPE.PICKING])
31
+ }
32
+ /* CONFIRMME regarding TYPEORM */
33
+ })
34
+
35
+ if (!worksheet) throw new Error('failed to find target picking worksheet')
36
+ if (worksheet.status !== WORKSHEET_STATUS.DEACTIVATED)
37
+ throw new Error(`current status of worksheet is not able to assign worker`)
38
+
39
+ worksheet.assignee = assignee
40
+ await tx.getRepository(Worksheet).save(worksheet)
41
+ })
42
+ )
43
+ }
44
+ }
@@ -0,0 +1,32 @@
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 batchPickingResolver = {
9
+ async batchPicking(
10
+ _: any,
11
+ { taskNo, worksheetType, palletId, locationName, binLocationName, releaseQty },
12
+ context: any
13
+ ) {
14
+ const { tx, domain, user } = context.state
15
+ await batchPicking(tx, domain, user, taskNo, worksheetType, palletId, locationName, binLocationName, releaseQty)
16
+ }
17
+ }
18
+
19
+ export async function batchPicking(
20
+ tx: EntityManager,
21
+ domain: Domain,
22
+ user: User,
23
+ taskNo: string,
24
+ worksheetType: string,
25
+ palletId: string,
26
+ locationName: string,
27
+ binLocationName: string,
28
+ releaseQty: number
29
+ ) {
30
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
31
+ await worksheetController.batchPicking(taskNo, worksheetType, palletId, locationName, binLocationName, releaseQty)
32
+ }
@@ -0,0 +1,137 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
+ import { Bizplace, getMyBizplace } from '@things-factory/biz-base'
5
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
6
+ import { OrderInventory, ReleaseGood } from '@things-factory/sales-base'
7
+ import { Domain } from '@things-factory/shell'
8
+
9
+ import {
10
+ PackingWorksheetController,
11
+ PickingWorksheetController,
12
+ SellercraftController,
13
+ SortingWorksheetController
14
+ } from '../../../../controllers/'
15
+ import { WorksheetController } from '../../../../controllers/worksheet-controller'
16
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
17
+
18
+ export const completeBatchPickingResolver = {
19
+ async completeBatchPicking(_: any, { taskNo }, context: ResolverContext) {
20
+ const { tx, domain, user } = context.state
21
+
22
+ await completeBatchPicking(tx, domain, user, taskNo)
23
+
24
+ const bizplace: Bizplace = await getMyBizplace(domain, user)
25
+ const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
26
+ await worksheetController.notifyToCustomer(bizplace, {
27
+ title: `Picking has been completed (${bizplace.name}, ${taskNo})`,
28
+ body: `Items now are ready for sorting`,
29
+ url: context.header.referer,
30
+ data: { url: context.header.referer }
31
+ })
32
+ }
33
+ }
34
+
35
+ export async function completeBatchPicking(
36
+ tx: EntityManager,
37
+ domain: Domain,
38
+ user: User,
39
+ taskNo: string
40
+ ): Promise<void> {
41
+ const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
42
+ const worksheet = await pickingWSCtrl.completeBatchPicking(taskNo)
43
+
44
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
45
+ const targetInventories: OrderInventory[] = worksheetDetails
46
+ .filter(wsd => wsd.status != 'MISSING')
47
+ .map((wsd: WorksheetDetail) => wsd.targetInventory)
48
+
49
+ const releaseGoods: ReleaseGood[] = worksheetDetails.map(
50
+ worksheetDetail => worksheetDetail.targetInventory && worksheetDetail.targetInventory.releaseGood
51
+ )
52
+ const uniqueReleaseGoods: ReleaseGood[] = []
53
+ const map = new Map()
54
+ for (const releaseGood of releaseGoods) {
55
+ if (!map.has(releaseGood.id)) {
56
+ map.set(releaseGood.id, true)
57
+ uniqueReleaseGoods.push({ ...releaseGood })
58
+ }
59
+ }
60
+
61
+ await Promise.all(
62
+ uniqueReleaseGoods.map(async releaseGood => {
63
+ let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
64
+ where: { id: releaseGood.id },
65
+ relations: ['orderProducts', 'orderProducts.product']
66
+ })
67
+ const orderSource: string = foundReleaseGood.source
68
+ switch (orderSource) {
69
+ case ApplicationType.SELLERCRAFT:
70
+ const sellercraft: Sellercraft = await tx
71
+ .getRepository(Sellercraft)
72
+ .findOneBy({ domain: { id: worksheet.bizplace.domain.id }, status: SellercraftStatus.ACTIVE })
73
+
74
+ if (sellercraft) {
75
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
76
+ if (!foundReleaseGood?.packageId) {
77
+ foundReleaseGood = await sellercraftCtrl.packOrder(sellercraft, foundReleaseGood)
78
+ if (foundReleaseGood?.packageId) {
79
+ await tx
80
+ .getRepository(ReleaseGood)
81
+ .update(
82
+ { id: foundReleaseGood.id },
83
+ { packageId: foundReleaseGood.packageId, updater: foundReleaseGood.updater }
84
+ )
85
+ }
86
+ }
87
+
88
+ sellercraftCtrl.initiateOrderShipment(sellercraft, foundReleaseGood)
89
+ }
90
+ break
91
+
92
+ default:
93
+ break
94
+ }
95
+ })
96
+ )
97
+
98
+ const pickPackTargetInventories: OrderInventory[] = targetInventories
99
+ .filter(targetInventory => targetInventory.releaseGood.packingOption)
100
+ .map((pickPackTargetInventory: OrderInventory) => {
101
+ return pickPackTargetInventory
102
+ })
103
+
104
+ const pickSortTargetInventories: OrderInventory[] = targetInventories
105
+ .filter(targetInventory => !targetInventory.releaseGood.packingOption)
106
+ .map((pickSortTargetInventory: OrderInventory) => {
107
+ return pickSortTargetInventory
108
+ })
109
+
110
+ if (pickPackTargetInventories?.length) {
111
+ // pull out all unique RO
112
+ const roNoList: string[] = pickPackTargetInventories.map((oi: OrderInventory) => oi.releaseGood.name)
113
+ let uniqueRoNo: string[] = []
114
+ roNoList.forEach(roNo => {
115
+ if (!uniqueRoNo.includes(roNo)) {
116
+ uniqueRoNo.push(roNo)
117
+ }
118
+ })
119
+
120
+ // loop to generate packing worksheet
121
+ for (let i: number = 0; i < uniqueRoNo.length; i++) {
122
+ const releaseGoodNo: string = uniqueRoNo[i]
123
+ const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
124
+ await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
125
+ }
126
+ }
127
+
128
+ if (pickSortTargetInventories?.length) {
129
+ const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
130
+ const sortingWorksheet: Worksheet = await sortingWSCtrl.generateSortingWorksheet(
131
+ worksheet,
132
+ pickSortTargetInventories
133
+ )
134
+
135
+ await sortingWSCtrl.activateSorting(sortingWorksheet.name, sortingWorksheet.worksheetDetails)
136
+ }
137
+ }