@things-factory/worksheet-base 8.0.0-beta.9 → 8.0.1

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,554 @@
1
+ import { In, IsNull } from 'typeorm'
2
+
3
+ import { Product, ProductDetail } from '@things-factory/product-base'
4
+ import {
5
+ ORDER_INVENTORY_STATUS,
6
+ ORDER_STATUS,
7
+ OrderInventory,
8
+ OrderNoGenerator,
9
+ OrderTote,
10
+ OrderToteItem,
11
+ ReleaseGood
12
+ } from '@things-factory/sales-base'
13
+ import {
14
+ Inventory,
15
+ INVENTORY_ITEM_SOURCE,
16
+ INVENTORY_STATUS,
17
+ INVENTORY_TRANSACTION_TYPE,
18
+ InventoryItem,
19
+ InventoryNoGenerator,
20
+ Tote,
21
+ TOTE_STATUS
22
+ } from '@things-factory/warehouse-base'
23
+
24
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
25
+ import { Worksheet, WorksheetDetail } from '../../entities'
26
+ import { VasWorksheetController } from '../vas/vas-worksheet-controller'
27
+
28
+ export class SortingWorksheetController extends VasWorksheetController {
29
+ async generateSortingWorksheet(
30
+ batchPickingWorksheet: Worksheet,
31
+ targetInventories: Partial<OrderInventory>[]
32
+ ): Promise<Worksheet> {
33
+ const worksheet: Worksheet = await this.generateBatchWorksheet(
34
+ WORKSHEET_TYPE.SORTING,
35
+ batchPickingWorksheet,
36
+ //@ts-ignore
37
+ targetInventories,
38
+ ORDER_INVENTORY_STATUS.READY_TO_SORT
39
+ )
40
+
41
+ return worksheet
42
+ }
43
+
44
+ async activateSorting(worksheetNo: string, sortingWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {
45
+ const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.SORTING, [
46
+ 'worksheetDetails',
47
+ 'worksheetDetails.targetInventory',
48
+ 'worksheetDetails.targetInventory.releaseGood'
49
+ ])
50
+
51
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
52
+ let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
53
+
54
+ targetInventories = targetInventories
55
+ .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.READY_TO_SORT)
56
+ .map((targetInventory: OrderInventory) => {
57
+ targetInventory.status = ORDER_INVENTORY_STATUS.SORTING
58
+ targetInventory.updater = this.user
59
+ return targetInventory
60
+ })
61
+
62
+ let releaseGoods: ReleaseGood[] = worksheet.worksheetDetails.map(
63
+ (wsd: WorksheetDetail) => wsd.targetInventory.releaseGood
64
+ )
65
+ releaseGoods = [...new Map(releaseGoods.map(item => [item.id, item])).values()]
66
+ releaseGoods.forEach((releaseGood: ReleaseGood) => {
67
+ releaseGood.status = ORDER_STATUS.SORTING
68
+ })
69
+ await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)
70
+
71
+ if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)
72
+ return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)
73
+ }
74
+
75
+ async scanProductSorting(
76
+ taskNo: string,
77
+ releaseGoodNo: string,
78
+ productBarcode: string,
79
+ serialNumber: string,
80
+ toteNo: string
81
+ ): Promise<void> {
82
+ const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
83
+ where: {
84
+ domain: { id: this.domain.id },
85
+ taskNo,
86
+ type: WORKSHEET_TYPE.SORTING,
87
+ status: WORKSHEET_STATUS.EXECUTING
88
+ },
89
+ relations: [
90
+ 'worksheetDetails',
91
+ 'worksheetDetails.targetInventory',
92
+ 'worksheetDetails.targetInventory.product',
93
+ 'worksheetDetails.targetInventory.orderProduct',
94
+ 'worksheetDetails.targetInventory.bizplace',
95
+ 'worksheetDetails.targetInventory.inventory',
96
+ 'worksheetDetails.targetInventory.inventory.product',
97
+ 'worksheetDetails.targetInventory.inventory.product.productDetails',
98
+ 'worksheetDetails.targetInventory.inventory.product.productDetails.product',
99
+ 'worksheetDetails.targetInventory.releaseGood'
100
+ ]
101
+ })
102
+
103
+ this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
104
+
105
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
106
+ const orderInventories: OrderInventory[] = worksheetDetails
107
+ .map((wsd: WorksheetDetail) => wsd.targetInventory)
108
+ .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo)
109
+
110
+ if (productBarcode) {
111
+ let productDetails: ProductDetail[] = []
112
+ orderInventories.map((oi: OrderInventory) => {
113
+ const foundPDs: ProductDetail[] = oi.inventory && oi.inventory.product && oi.inventory.product.productDetails
114
+ foundPDs.map(productDetail => {
115
+ productDetails.push(productDetail)
116
+ })
117
+ })
118
+
119
+ const matchingProductDetail: ProductDetail = productDetails.find(
120
+ (productDetail: ProductDetail) => productDetail.gtin === productBarcode
121
+ )
122
+ if (!matchingProductDetail) throw new Error('Unable to find product barcode.')
123
+ const packingType: string = matchingProductDetail.packingType
124
+ const packingSize: number = matchingProductDetail.packingSize
125
+ if (!matchingProductDetail)
126
+ throw new Error(this.ERROR_MSG.PRODUCT.BARCODE_NOT_EXIST(productBarcode, packingType, packingSize))
127
+
128
+ let matchingOIs: OrderInventory[] = orderInventories.filter(
129
+ (oi: OrderInventory) =>
130
+ oi.packingType === packingType &&
131
+ oi.packingSize === packingSize &&
132
+ oi.product?.id === matchingProductDetail.product?.id
133
+ )
134
+
135
+ let sortedQty: number = 1
136
+
137
+ if (!matchingOIs?.length) {
138
+ throw new Error(this.ERROR_MSG.ORDER_ITEM.NO_MATCHING_RESULT(packingType, packingSize))
139
+ } else {
140
+ await Promise.all(
141
+ matchingOIs.map(async (matchingOI: OrderInventory) => {
142
+ const releaseQty: number = matchingOI.releaseQty
143
+ const inventory: Inventory = matchingOI.inventory
144
+ const releaseGood: ReleaseGood = matchingOI.releaseGood
145
+ const product: Product = inventory.product
146
+
147
+ if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {
148
+ // Serial Number scanning for batch picking
149
+ if (matchingOI?.refWorksheetId) {
150
+ if (product?.isRequireSerialNumberScanningOutbound) {
151
+ if (!serialNumber || serialNumber == '') {
152
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))
153
+ }
154
+
155
+ let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({
156
+ where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } }
157
+ })
158
+
159
+ if (foundSerialNumber) {
160
+ if (foundSerialNumber.inventoryId !== inventory.id) {
161
+ throw new Error('Serial Number scanned is in another inventory')
162
+ }
163
+
164
+ if (foundSerialNumber.outboundOrderId) {
165
+ let releaseGood: ReleaseGood = await this.trxMgr
166
+ .getRepository(ReleaseGood)
167
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } })
168
+ throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)
169
+ }
170
+
171
+ foundSerialNumber.status = INVENTORY_STATUS.SORTING
172
+ foundSerialNumber.updater = this.user
173
+ foundSerialNumber.outboundOrderId = releaseGood.id
174
+
175
+ await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)
176
+ } else {
177
+ let inventoryItem: InventoryItem = new InventoryItem()
178
+ inventoryItem.name = InventoryNoGenerator.inventoryItemName()
179
+ inventoryItem.serialNumber = serialNumber
180
+ inventoryItem.status = INVENTORY_STATUS.SORTING
181
+ inventoryItem.outboundOrderId = releaseGood.id
182
+ inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND
183
+ inventoryItem.product = product
184
+ inventoryItem.inventory = inventory
185
+ inventoryItem.domain = this.domain
186
+
187
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)
188
+ }
189
+ }
190
+ }
191
+
192
+ matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty
193
+ sortedQty -= 1
194
+ if (matchingOI.sortedQty == releaseQty) {
195
+ matchingOI.status = ORDER_INVENTORY_STATUS.SORTED
196
+ await this.updateOrderTargets([matchingOI])
197
+ await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)
198
+
199
+ let worksheetDetail: WorksheetDetail = worksheetDetails.find(
200
+ wsd => wsd.targetInventory.id === matchingOI.id
201
+ )
202
+ worksheetDetail.status = WORKSHEET_STATUS.DONE
203
+ worksheetDetail.updater = this.user
204
+ await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
205
+
206
+ //@ts-ignore
207
+ let inventoryItems: InventoryItem = await this.trxMgr
208
+ .getRepository(InventoryItem)
209
+ .find({ where: { outboundOrderId: releaseGood.id } })
210
+
211
+ //@ts-ignore
212
+ if (inventoryItems.length > 0) {
213
+ //@ts-ignore
214
+ inventoryItems.forEach((itm: InventoryItem) => {
215
+ itm.status = INVENTORY_STATUS.SORTED
216
+ itm.updater = this.user
217
+ })
218
+
219
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
220
+ }
221
+ } else if (matchingOI?.sortedQty > releaseQty) {
222
+ const product: Product = matchingOI.inventory.product
223
+ throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))
224
+ } else {
225
+ await this.updateOrderTargets([matchingOI])
226
+ }
227
+
228
+ if (toteNo) {
229
+ await this.toteScanning(
230
+ toteNo,
231
+ matchingOI.orderProduct,
232
+ matchingOI,
233
+ 1,
234
+ releaseGood,
235
+ matchingOI.bizplace
236
+ )
237
+ }
238
+ }
239
+ })
240
+ )
241
+ }
242
+ }
243
+ }
244
+
245
+ async sortingProduct(
246
+ taskNo: string,
247
+ releaseGoodNo: string,
248
+ productId: string,
249
+ sortingQty: number,
250
+ serialNumber: string,
251
+ toteNo: string
252
+ ): Promise<void> {
253
+ const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
254
+ where: {
255
+ domain: { id: this.domain.id },
256
+ taskNo,
257
+ type: WORKSHEET_TYPE.SORTING,
258
+ status: WORKSHEET_STATUS.EXECUTING
259
+ },
260
+ relations: [
261
+ 'worksheetDetails',
262
+ 'worksheetDetails.targetInventory',
263
+ 'worksheetDetails.targetInventory.product',
264
+ 'worksheetDetails.targetInventory.orderProduct',
265
+ 'worksheetDetails.targetInventory.bizplace',
266
+ 'worksheetDetails.targetInventory.inventory',
267
+ 'worksheetDetails.targetInventory.inventory.product',
268
+ 'worksheetDetails.targetInventory.inventory.product.productDetails',
269
+ 'worksheetDetails.targetInventory.inventory.product.productDetails.product',
270
+ 'worksheetDetails.targetInventory.releaseGood'
271
+ ]
272
+ })
273
+
274
+ this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
275
+
276
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
277
+ let orderInventories: OrderInventory[] = worksheetDetails
278
+ .map((wsd: WorksheetDetail) => wsd.targetInventory)
279
+ .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo && oi.product.id === productId)
280
+
281
+ if (!orderInventories?.length) {
282
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productId))
283
+ } else {
284
+ await Promise.all(
285
+ orderInventories.map(async (matchingOI: OrderInventory) => {
286
+ const releaseQty: number = matchingOI.releaseQty
287
+ const inventory: Inventory = matchingOI.inventory
288
+ const releaseGood: ReleaseGood = matchingOI.releaseGood
289
+ const product: Product = matchingOI.inventory.product
290
+ const packingType: string = matchingOI.packingType
291
+ const packingSize: number = matchingOI.packingSize
292
+
293
+ if (product?.isRequireSerialNumberScanningOutbound) {
294
+ if (!serialNumber || serialNumber == '') {
295
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))
296
+ }
297
+
298
+ let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({
299
+ where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } },
300
+ relations: ['product', 'inventory']
301
+ })
302
+
303
+ if (foundSerialNumber) {
304
+ if (foundSerialNumber.outboundOrderId) {
305
+ let releaseGood: ReleaseGood = await this.trxMgr
306
+ .getRepository(ReleaseGood)
307
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } })
308
+ throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)
309
+ }
310
+
311
+ foundSerialNumber.status = INVENTORY_STATUS.SORTING
312
+ foundSerialNumber.updater = this.user
313
+ foundSerialNumber.outboundOrderId = releaseGood.id
314
+
315
+ await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)
316
+ } else {
317
+ let inventoryItem: InventoryItem = new InventoryItem()
318
+ inventoryItem.name = InventoryNoGenerator.inventoryItemName()
319
+ inventoryItem.serialNumber = serialNumber
320
+ inventoryItem.status = INVENTORY_STATUS.SORTING
321
+ inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND
322
+ inventoryItem.outboundOrderId = releaseGood.id
323
+ inventoryItem.product = product
324
+ inventoryItem.inventory = inventory
325
+ inventoryItem.domain = this.domain
326
+
327
+ foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)
328
+ }
329
+ }
330
+
331
+ if (toteNo) {
332
+ await this.toteScanning(
333
+ toteNo,
334
+ matchingOI.orderProduct,
335
+ matchingOI,
336
+ sortingQty,
337
+ releaseGood,
338
+ matchingOI.bizplace
339
+ )
340
+ }
341
+
342
+ if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {
343
+ if (product?.isRequireSerialNumberScanningOutbound) {
344
+ matchingOI.sortedQty += sortingQty
345
+ } else {
346
+ matchingOI.sortedQty = releaseQty
347
+ }
348
+
349
+ sortingQty -= releaseQty
350
+ if (matchingOI.sortedQty == releaseQty) {
351
+ matchingOI.status = ORDER_INVENTORY_STATUS.SORTED
352
+ await this.updateOrderTargets([matchingOI])
353
+ await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)
354
+
355
+ //@ts-ignore
356
+ let inventoryItems: InventoryItem = await this.trxMgr
357
+ .getRepository(InventoryItem)
358
+ .find({ where: { outboundOrderId: releaseGood.id } })
359
+
360
+ //@ts-ignore
361
+ if (inventoryItems.length > 0) {
362
+ //@ts-ignore
363
+ inventoryItems.forEach((itm: InventoryItem) => {
364
+ //@ts-ignore
365
+ itm.status = INVENTORY_STATUS.PACKED
366
+ itm.updater = this.user
367
+ })
368
+
369
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
370
+ }
371
+
372
+ let worksheetDetail: WorksheetDetail = worksheetDetails.find(
373
+ wsd => wsd.targetInventory.id === matchingOI.id
374
+ )
375
+ worksheetDetail.status = WORKSHEET_STATUS.DONE
376
+ worksheetDetail.updater = this.user
377
+ await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
378
+ } else if (matchingOI?.sortedQty > releaseQty) {
379
+ throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))
380
+ } else {
381
+ await this.updateOrderTargets([matchingOI])
382
+ }
383
+ }
384
+ })
385
+ )
386
+ }
387
+ }
388
+
389
+ async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {
390
+ try {
391
+ //@ts-ignore
392
+ let releaseGood: ReleaseGood = await this.findRefOrder(
393
+ //@ts-ignore
394
+ ReleaseGood,
395
+ {
396
+ domain: this.domain,
397
+ name: releaseGoodNo,
398
+ status: ORDER_STATUS.SORTING
399
+ },
400
+ ['bizplace', 'orderInventories']
401
+ )
402
+
403
+ if (!releaseGood) {
404
+ throw new Error('Order is already sorted')
405
+ }
406
+
407
+ const foundNotSealedOrderTote = await this.trxMgr
408
+ .getRepository(OrderTote)
409
+ .findOne({ where: { releaseGood: { id: releaseGood.id }, closedDate: IsNull() } })
410
+
411
+ if (foundNotSealedOrderTote) {
412
+ throw new Error('Please seal the tote(s) before proceeding')
413
+ }
414
+
415
+ releaseGood.status = ORDER_STATUS.READY_TO_LOAD
416
+ releaseGood.updater = this.user
417
+ await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
418
+
419
+ //@ts-ignore
420
+ let inventoryItems: InventoryItem = await this.trxMgr
421
+ .getRepository(InventoryItem)
422
+ .find({ where: { outboundOrderId: releaseGood.id } })
423
+
424
+ //@ts-ignore
425
+ if (inventoryItems.length > 0) {
426
+ //@ts-ignore
427
+ inventoryItems.forEach((itm: InventoryItem) => {
428
+ itm.status = INVENTORY_STATUS.TERMINATED
429
+ itm.updater = this.user
430
+ })
431
+
432
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
433
+ }
434
+
435
+ return releaseGood
436
+ } catch (e) {
437
+ throw e
438
+ }
439
+ }
440
+
441
+ async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {
442
+ let worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
443
+ where: {
444
+ domain: { id: this.domain.id },
445
+ taskNo,
446
+ type: WORKSHEET_TYPE.SORTING,
447
+ status: WORKSHEET_STATUS.EXECUTING
448
+ },
449
+ relations: [
450
+ 'worksheetDetails',
451
+ 'worksheetDetails.targetInventory',
452
+ 'worksheetDetails.targetInventory.releaseGood'
453
+ ]
454
+ })
455
+
456
+ let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)
457
+
458
+ const foundNotSealedOrderTote = await this.trxMgr
459
+ .getRepository(OrderTote)
460
+ .findOne({ where: { releaseGood: { id: In(releaseGoodIds) }, closedDate: IsNull() } })
461
+
462
+ if (foundNotSealedOrderTote) {
463
+ throw new Error('Please seal the tote(s) before proceeding')
464
+ }
465
+
466
+ this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
467
+
468
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
469
+ const allTaskCompleted: boolean = worksheetDetails.every(wsd => wsd.status === WORKSHEET_STATUS.DONE)
470
+
471
+ if (!allTaskCompleted)
472
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('complete worksheet', 'few incompleted line items'))
473
+
474
+ worksheet.status = WORKSHEET_STATUS.DONE
475
+ worksheet.endedAt = new Date()
476
+ worksheet.updater = this.user
477
+ worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
478
+
479
+ return worksheet
480
+ }
481
+
482
+ private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
483
+ //1. find tote
484
+ let foundTote: Tote = await this.trxMgr
485
+ .getRepository(Tote)
486
+ .findOne({ where: { bizplace: { id: bizplace.id }, name: toteNo, deletedAt: IsNull() } })
487
+
488
+ if (foundTote?.status == TOTE_STATUS.DAMAGED) {
489
+ throw new Error('Tote is damaged')
490
+ }
491
+
492
+ if (foundTote?.status == TOTE_STATUS.DISPATCHED) {
493
+ throw new Error('Tote is dispatched')
494
+ }
495
+
496
+ //2. find order tote
497
+ let foundOrderTote: OrderTote = await this.trxMgr
498
+ .getRepository(OrderTote)
499
+ .findOne({ where: { domain: { id: this.domain.id }, name: toteNo, releaseGood: { id: releaseGood.id } } })
500
+
501
+ //if order tote not found the create one, if tote not found means it's tote box
502
+ //create order tote item
503
+ if (!foundOrderTote) {
504
+ const orderTote = await this.trxMgr.getRepository(OrderTote).save({
505
+ name: toteNo,
506
+ domain: this.domain,
507
+ releaseGood,
508
+ tote: foundTote ? foundTote : null,
509
+ updater: this.user
510
+ })
511
+
512
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
513
+ domain: this.domain,
514
+ name: OrderNoGenerator.orderToteItem(),
515
+ orderProduct: targetProduct,
516
+ orderInventory: targetInventory,
517
+ orderTote,
518
+ qty: pickedQty,
519
+ updater: this.user
520
+ })
521
+ } else {
522
+ if (foundOrderTote.closedDate) {
523
+ throw new Error('Tote has been sealed, please try another tote!')
524
+ }
525
+
526
+ //if found order tote then check if order tote item exist
527
+ const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOneBy({
528
+ domain: { id: this.domain.id },
529
+ orderProduct: { id: targetProduct.id },
530
+ orderInventory: { id: targetInventory.id },
531
+ orderTote: { id: foundOrderTote.id }
532
+ })
533
+
534
+ //if not order tote item doesnt exist then create one
535
+ if (!foundOrderToteItem) {
536
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
537
+ domain: this.domain,
538
+ name: OrderNoGenerator.orderToteItem(),
539
+ orderProduct: targetProduct,
540
+ orderInventory: targetInventory,
541
+ orderTote: foundOrderTote,
542
+ qty: pickedQty,
543
+ updater: this.user
544
+ })
545
+ } else {
546
+ //if found order tote item found then add the quantity
547
+ const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
548
+ ...foundOrderToteItem,
549
+ qty: foundOrderToteItem.qty + pickedQty
550
+ })
551
+ }
552
+ }
553
+ }
554
+ }