@things-factory/worksheet-base 4.3.651 → 4.3.652

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 (635) hide show
  1. package/dist-server/constants/index.js +22 -0
  2. package/dist-server/constants/index.js.map +1 -0
  3. package/dist-server/constants/rule-type.js +8 -0
  4. package/dist-server/constants/rule-type.js.map +1 -0
  5. package/dist-server/constants/target-type.js +10 -0
  6. package/dist-server/constants/target-type.js.map +1 -0
  7. package/dist-server/constants/template.js +17 -0
  8. package/dist-server/constants/template.js.map +1 -0
  9. package/dist-server/constants/transaction-type.js +13 -0
  10. package/dist-server/constants/transaction-type.js.map +1 -0
  11. package/dist-server/constants/worksheet.js +44 -0
  12. package/dist-server/constants/worksheet.js.map +1 -0
  13. package/dist-server/controllers/ecommerce/ecommerce-controller.js +252 -0
  14. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -0
  15. package/dist-server/controllers/ecommerce/index.js +19 -0
  16. package/dist-server/controllers/ecommerce/index.js.map +1 -0
  17. package/dist-server/controllers/ecommerce/sellercraft-controller.js +458 -0
  18. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -0
  19. package/dist-server/controllers/inbound/index.js +21 -0
  20. package/dist-server/controllers/inbound/index.js.map +1 -0
  21. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +353 -0
  22. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -0
  23. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +444 -0
  24. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -0
  25. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js +189 -0
  26. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js.map +1 -0
  27. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +1056 -0
  28. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -0
  29. package/dist-server/controllers/index.js +37 -0
  30. package/dist-server/controllers/index.js.map +1 -0
  31. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +1039 -0
  32. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -0
  33. package/dist-server/controllers/inspect/index.js +18 -0
  34. package/dist-server/controllers/inspect/index.js.map +1 -0
  35. package/dist-server/controllers/outbound/index.js +31 -0
  36. package/dist-server/controllers/outbound/index.js.map +1 -0
  37. package/dist-server/controllers/outbound/loading-worksheet-controller.js +304 -0
  38. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -0
  39. package/dist-server/controllers/outbound/packing-worksheet-controller.js +573 -0
  40. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -0
  41. package/dist-server/controllers/outbound/picking-worksheet-controller.js +2489 -0
  42. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -0
  43. package/dist-server/controllers/outbound/returning-worksheet-controller.js +171 -0
  44. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -0
  45. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +539 -0
  46. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -0
  47. package/dist-server/controllers/pos/index.js +18 -0
  48. package/dist-server/controllers/pos/index.js.map +1 -0
  49. package/dist-server/controllers/pos/xilnex-controller.js +188 -0
  50. package/dist-server/controllers/pos/xilnex-controller.js.map +1 -0
  51. package/dist-server/controllers/render-elccl-grn.js +194 -0
  52. package/dist-server/controllers/render-elccl-grn.js.map +1 -0
  53. package/dist-server/controllers/render-fm-grn.js +229 -0
  54. package/dist-server/controllers/render-fm-grn.js.map +1 -0
  55. package/dist-server/controllers/render-grn.js +240 -0
  56. package/dist-server/controllers/render-grn.js.map +1 -0
  57. package/dist-server/controllers/render-invoices.js +187 -0
  58. package/dist-server/controllers/render-invoices.js.map +1 -0
  59. package/dist-server/controllers/render-job-sheet.js +184 -0
  60. package/dist-server/controllers/render-job-sheet.js.map +1 -0
  61. package/dist-server/controllers/render-kimeda-grn.js +152 -0
  62. package/dist-server/controllers/render-kimeda-grn.js.map +1 -0
  63. package/dist-server/controllers/render-manifest.js +76 -0
  64. package/dist-server/controllers/render-manifest.js.map +1 -0
  65. package/dist-server/controllers/render-manual-do.js +204 -0
  66. package/dist-server/controllers/render-manual-do.js.map +1 -0
  67. package/dist-server/controllers/render-orientage-do.js +325 -0
  68. package/dist-server/controllers/render-orientage-do.js.map +1 -0
  69. package/dist-server/controllers/render-orientage-grn.js +158 -0
  70. package/dist-server/controllers/render-orientage-grn.js.map +1 -0
  71. package/dist-server/controllers/render-po.js +157 -0
  72. package/dist-server/controllers/render-po.js.map +1 -0
  73. package/dist-server/controllers/render-ro-do.js +393 -0
  74. package/dist-server/controllers/render-ro-do.js.map +1 -0
  75. package/dist-server/controllers/render-seebuu-grn.js +177 -0
  76. package/dist-server/controllers/render-seebuu-grn.js.map +1 -0
  77. package/dist-server/controllers/replenishment/index.js +18 -0
  78. package/dist-server/controllers/replenishment/index.js.map +1 -0
  79. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +483 -0
  80. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -0
  81. package/dist-server/controllers/vas/index.js +18 -0
  82. package/dist-server/controllers/vas/index.js.map +1 -0
  83. package/dist-server/controllers/vas/vas-worksheet-controller.js +792 -0
  84. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -0
  85. package/dist-server/controllers/worksheet-controller.js +1049 -0
  86. package/dist-server/controllers/worksheet-controller.js.map +1 -0
  87. package/dist-server/entities/active-worksheet-picking-view.js +164 -0
  88. package/dist-server/entities/active-worksheet-picking-view.js.map +1 -0
  89. package/dist-server/entities/index.js +24 -0
  90. package/dist-server/entities/index.js.map +1 -0
  91. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +171 -0
  92. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
  93. package/dist-server/entities/warehouse-inventory-assignment-ranking.js +39 -0
  94. package/dist-server/entities/warehouse-inventory-assignment-ranking.js.map +1 -0
  95. package/dist-server/entities/worksheet-detail.js +136 -0
  96. package/dist-server/entities/worksheet-detail.js.map +1 -0
  97. package/dist-server/entities/worksheet-movement.js +58 -0
  98. package/dist-server/entities/worksheet-movement.js.map +1 -0
  99. package/dist-server/entities/worksheet.js +140 -0
  100. package/dist-server/entities/worksheet.js.map +1 -0
  101. package/dist-server/graphql/index.js +33 -0
  102. package/dist-server/graphql/index.js.map +1 -0
  103. package/dist-server/graphql/resolvers/index.js +33 -0
  104. package/dist-server/graphql/resolvers/index.js.map +1 -0
  105. package/dist-server/graphql/resolvers/pallet/index.js +7 -0
  106. package/dist-server/graphql/resolvers/pallet/index.js.map +1 -0
  107. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js +53 -0
  108. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js.map +1 -0
  109. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +138 -0
  110. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -0
  111. package/dist-server/graphql/resolvers/worksheet/cancel-arrival-notice.js +55 -0
  112. package/dist-server/graphql/resolvers/worksheet/cancel-arrival-notice.js.map +1 -0
  113. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
  114. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
  115. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js +57 -0
  116. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js.map +1 -0
  117. package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js +29 -0
  118. package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js.map +1 -0
  119. package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js +63 -0
  120. package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js.map +1 -0
  121. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +249 -0
  122. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -0
  123. package/dist-server/graphql/resolvers/worksheet/create-worksheet.js +11 -0
  124. package/dist-server/graphql/resolvers/worksheet/create-worksheet.js.map +1 -0
  125. package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js +131 -0
  126. package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js.map +1 -0
  127. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +255 -0
  128. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -0
  129. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet-for-carton.js +130 -0
  130. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet-for-carton.js.map +1 -0
  131. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet-for-pallet.js +133 -0
  132. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet-for-pallet.js.map +1 -0
  133. package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js +18 -0
  134. package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js.map +1 -0
  135. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js +102 -0
  136. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js.map +1 -0
  137. package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js +169 -0
  138. package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js.map +1 -0
  139. package/dist-server/graphql/resolvers/worksheet/fetch-powrup-document.js +60 -0
  140. package/dist-server/graphql/resolvers/worksheet/fetch-powrup-document.js.map +1 -0
  141. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js +60 -0
  142. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js.map +1 -0
  143. package/dist-server/graphql/resolvers/worksheet/fetch-webspert-document.js +49 -0
  144. package/dist-server/graphql/resolvers/worksheet/fetch-webspert-document.js.map +1 -0
  145. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +34 -0
  146. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -0
  147. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.js +28 -0
  148. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.js.map +1 -0
  149. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +140 -0
  150. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
  151. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +45 -0
  152. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -0
  153. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js +16 -0
  154. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js.map +1 -0
  155. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet-carton.js +17 -0
  156. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet-carton.js.map +1 -0
  157. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js +17 -0
  158. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js.map +1 -0
  159. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +17 -0
  160. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -0
  161. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.js +48 -0
  162. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.js.map +1 -0
  163. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.js +57 -0
  164. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.js.map +1 -0
  165. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.js +42 -0
  166. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.js.map +1 -0
  167. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +495 -0
  168. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -0
  169. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js +19 -0
  170. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js.map +1 -0
  171. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js +28 -0
  172. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js.map +1 -0
  173. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js +22 -0
  174. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js.map +1 -0
  175. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +17 -0
  176. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -0
  177. package/dist-server/graphql/resolvers/worksheet/get-packing-list.js +80 -0
  178. package/dist-server/graphql/resolvers/worksheet/get-packing-list.js.map +1 -0
  179. package/dist-server/graphql/resolvers/worksheet/having-vas.js +43 -0
  180. package/dist-server/graphql/resolvers/worksheet/having-vas.js.map +1 -0
  181. package/dist-server/graphql/resolvers/worksheet/index.js +75 -0
  182. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -0
  183. package/dist-server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.js +16 -0
  184. package/dist-server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.js.map +1 -0
  185. package/dist-server/graphql/resolvers/worksheet/inspecting/add-extra-inventory.js +16 -0
  186. package/dist-server/graphql/resolvers/worksheet/inspecting/add-extra-inventory.js.map +1 -0
  187. package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-inventory-carton.js +16 -0
  188. package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-inventory-carton.js.map +1 -0
  189. package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-inventory.js +16 -0
  190. package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-inventory.js.map +1 -0
  191. package/dist-server/graphql/resolvers/worksheet/inspecting/complete-inspection.js +28 -0
  192. package/dist-server/graphql/resolvers/worksheet/inspecting/complete-inspection.js.map +1 -0
  193. package/dist-server/graphql/resolvers/worksheet/inspecting/index.js +16 -0
  194. package/dist-server/graphql/resolvers/worksheet/inspecting/index.js.map +1 -0
  195. package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting-carton.js +16 -0
  196. package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting-carton.js.map +1 -0
  197. package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting-pallet.js +16 -0
  198. package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting-pallet.js.map +1 -0
  199. package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-inventory-carton.js +16 -0
  200. package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-inventory-carton.js.map +1 -0
  201. package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-inventory.js +16 -0
  202. package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-inventory.js.map +1 -0
  203. package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection-carton.js +16 -0
  204. package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection-carton.js.map +1 -0
  205. package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection.js +16 -0
  206. package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection.js.map +1 -0
  207. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +137 -0
  208. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -0
  209. package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js +41 -0
  210. package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js.map +1 -0
  211. package/dist-server/graphql/resolvers/worksheet/loading/activate-loading.js +59 -0
  212. package/dist-server/graphql/resolvers/worksheet/loading/activate-loading.js.map +1 -0
  213. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +138 -0
  214. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -0
  215. package/dist-server/graphql/resolvers/worksheet/loading/index.js +9 -0
  216. package/dist-server/graphql/resolvers/worksheet/loading/index.js.map +1 -0
  217. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +25 -0
  218. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -0
  219. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js +16 -0
  220. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -0
  221. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +179 -0
  222. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -0
  223. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js +48 -0
  224. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js.map +1 -0
  225. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +30 -0
  226. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -0
  227. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +53 -0
  228. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -0
  229. package/dist-server/graphql/resolvers/worksheet/packing/index.js +10 -0
  230. package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -0
  231. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +51 -0
  232. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -0
  233. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +29 -0
  234. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -0
  235. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
  236. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
  237. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +619 -0
  238. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -0
  239. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +122 -0
  240. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -0
  241. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +163 -0
  242. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -0
  243. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +103 -0
  244. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -0
  245. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +81 -0
  246. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -0
  247. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js +16 -0
  248. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js.map +1 -0
  249. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +31 -0
  250. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -0
  251. package/dist-server/graphql/resolvers/worksheet/picking/batch-picking.js +16 -0
  252. package/dist-server/graphql/resolvers/worksheet/picking/batch-picking.js.map +1 -0
  253. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js +75 -0
  254. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js.map +1 -0
  255. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +273 -0
  256. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -0
  257. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +432 -0
  258. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -0
  259. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +110 -0
  260. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -0
  261. package/dist-server/graphql/resolvers/worksheet/picking/index.js +21 -0
  262. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -0
  263. package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js +22 -0
  264. package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js.map +1 -0
  265. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +62 -0
  266. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -0
  267. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +16 -0
  268. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -0
  269. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js +12 -0
  270. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js.map +1 -0
  271. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js +16 -0
  272. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js.map +1 -0
  273. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +13 -0
  274. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -0
  275. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  276. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  277. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js +16 -0
  278. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js.map +1 -0
  279. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
  280. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
  281. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +193 -0
  282. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -0
  283. package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js +162 -0
  284. package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js.map +1 -0
  285. package/dist-server/graphql/resolvers/worksheet/putaway/activate-putaway.js +41 -0
  286. package/dist-server/graphql/resolvers/worksheet/putaway/activate-putaway.js.map +1 -0
  287. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +88 -0
  288. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -0
  289. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js +16 -0
  290. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js.map +1 -0
  291. package/dist-server/graphql/resolvers/worksheet/putaway/index.js +12 -0
  292. package/dist-server/graphql/resolvers/worksheet/putaway/index.js.map +1 -0
  293. package/dist-server/graphql/resolvers/worksheet/putaway/putaway.js +17 -0
  294. package/dist-server/graphql/resolvers/worksheet/putaway/putaway.js.map +1 -0
  295. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js +15 -0
  296. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js.map +1 -0
  297. package/dist-server/graphql/resolvers/worksheet/putaway/undo-putaway.js +16 -0
  298. package/dist-server/graphql/resolvers/worksheet/putaway/undo-putaway.js.map +1 -0
  299. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js +16 -0
  300. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js.map +1 -0
  301. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js +87 -0
  302. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js.map +1 -0
  303. package/dist-server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.js +41 -0
  304. package/dist-server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.js.map +1 -0
  305. package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js +67 -0
  306. package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js.map +1 -0
  307. package/dist-server/graphql/resolvers/worksheet/putaway-return/index.js +9 -0
  308. package/dist-server/graphql/resolvers/worksheet/putaway-return/index.js.map +1 -0
  309. package/dist-server/graphql/resolvers/worksheet/putaway-return/putaway-return.js +15 -0
  310. package/dist-server/graphql/resolvers/worksheet/putaway-return/putaway-return.js.map +1 -0
  311. package/dist-server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.js +15 -0
  312. package/dist-server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.js.map +1 -0
  313. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +73 -0
  314. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -0
  315. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +141 -0
  316. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -0
  317. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js +157 -0
  318. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js.map +1 -0
  319. package/dist-server/graphql/resolvers/worksheet/refresh-active-worksheet-picking-views.js +11 -0
  320. package/dist-server/graphql/resolvers/worksheet/refresh-active-worksheet-picking-views.js.map +1 -0
  321. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +164 -0
  322. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -0
  323. package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js +41 -0
  324. package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js.map +1 -0
  325. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js +91 -0
  326. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js.map +1 -0
  327. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js +17 -0
  328. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js.map +1 -0
  329. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js +6 -0
  330. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js.map +1 -0
  331. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +63 -0
  332. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -0
  333. package/dist-server/graphql/resolvers/worksheet/returning/activate-return.js +16 -0
  334. package/dist-server/graphql/resolvers/worksheet/returning/activate-return.js.map +1 -0
  335. package/dist-server/graphql/resolvers/worksheet/returning/complete-return.js +29 -0
  336. package/dist-server/graphql/resolvers/worksheet/returning/complete-return.js.map +1 -0
  337. package/dist-server/graphql/resolvers/worksheet/returning/index.js +8 -0
  338. package/dist-server/graphql/resolvers/worksheet/returning/index.js.map +1 -0
  339. package/dist-server/graphql/resolvers/worksheet/returning/returning.js +16 -0
  340. package/dist-server/graphql/resolvers/worksheet/returning/returning.js.map +1 -0
  341. package/dist-server/graphql/resolvers/worksheet/sorting/activate-sorting.js +16 -0
  342. package/dist-server/graphql/resolvers/worksheet/sorting/activate-sorting.js.map +1 -0
  343. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +28 -0
  344. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -0
  345. package/dist-server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.js +16 -0
  346. package/dist-server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.js.map +1 -0
  347. package/dist-server/graphql/resolvers/worksheet/sorting/index.js +10 -0
  348. package/dist-server/graphql/resolvers/worksheet/sorting/index.js.map +1 -0
  349. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +16 -0
  350. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -0
  351. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +16 -0
  352. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -0
  353. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +89 -0
  354. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -0
  355. package/dist-server/graphql/resolvers/worksheet/transfer.js +88 -0
  356. package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -0
  357. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js +45 -0
  358. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js.map +1 -0
  359. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +69 -0
  360. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -0
  361. package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js +38 -0
  362. package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js.map +1 -0
  363. package/dist-server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.js +15 -0
  364. package/dist-server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.js.map +1 -0
  365. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js +32 -0
  366. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js.map +1 -0
  367. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +70 -0
  368. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -0
  369. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +14 -0
  370. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -0
  371. package/dist-server/graphql/resolvers/worksheet/unloading/scan-product-unload.js +15 -0
  372. package/dist-server/graphql/resolvers/worksheet/unloading/scan-product-unload.js.map +1 -0
  373. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
  374. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
  375. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
  376. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
  377. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js +15 -0
  378. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -0
  379. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js +19 -0
  380. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -0
  381. package/dist-server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.js +16 -0
  382. package/dist-server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.js.map +1 -0
  383. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.js +16 -0
  384. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.js.map +1 -0
  385. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js +57 -0
  386. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js.map +1 -0
  387. package/dist-server/graphql/resolvers/worksheet/unloading-return/index.js +8 -0
  388. package/dist-server/graphql/resolvers/worksheet/unloading-return/index.js.map +1 -0
  389. package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js +67 -0
  390. package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js.map +1 -0
  391. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +102 -0
  392. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -0
  393. package/dist-server/graphql/resolvers/worksheet/update-worksheet.js +20 -0
  394. package/dist-server/graphql/resolvers/worksheet/update-worksheet.js.map +1 -0
  395. package/dist-server/graphql/resolvers/worksheet/vas/activate-vas.js +16 -0
  396. package/dist-server/graphql/resolvers/worksheet/vas/activate-vas.js.map +1 -0
  397. package/dist-server/graphql/resolvers/worksheet/vas/assign-vas-inventories.js +16 -0
  398. package/dist-server/graphql/resolvers/worksheet/vas/assign-vas-inventories.js.map +1 -0
  399. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js +99 -0
  400. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -0
  401. package/dist-server/graphql/resolvers/worksheet/vas/execute-vas.js +22 -0
  402. package/dist-server/graphql/resolvers/worksheet/vas/execute-vas.js.map +1 -0
  403. package/dist-server/graphql/resolvers/worksheet/vas/index.js +11 -0
  404. package/dist-server/graphql/resolvers/worksheet/vas/index.js.map +1 -0
  405. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas-inventory.js +15 -0
  406. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas-inventory.js.map +1 -0
  407. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas.js +16 -0
  408. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas.js.map +1 -0
  409. package/dist-server/graphql/resolvers/worksheet/vas-candidates.js +123 -0
  410. package/dist-server/graphql/resolvers/worksheet/vas-candidates.js.map +1 -0
  411. package/dist-server/graphql/resolvers/worksheet/vas-inventories.js +36 -0
  412. package/dist-server/graphql/resolvers/worksheet/vas-inventories.js.map +1 -0
  413. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +729 -0
  414. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -0
  415. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js +22 -0
  416. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js.map +1 -0
  417. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js +21 -0
  418. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -0
  419. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.js +3 -0
  420. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.js.map +1 -0
  421. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.js +9 -0
  422. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.js.map +1 -0
  423. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.js +3 -0
  424. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.js.map +1 -0
  425. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.js +3 -0
  426. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.js.map +1 -0
  427. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js +71 -0
  428. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js.map +1 -0
  429. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js +46 -0
  430. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js.map +1 -0
  431. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js +21 -0
  432. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js.map +1 -0
  433. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js +68 -0
  434. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js.map +1 -0
  435. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.js +28 -0
  436. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.js.map +1 -0
  437. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js +166 -0
  438. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js.map +1 -0
  439. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js +20 -0
  440. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js.map +1 -0
  441. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js +278 -0
  442. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js.map +1 -0
  443. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js +113 -0
  444. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js.map +1 -0
  445. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js +63 -0
  446. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js.map +1 -0
  447. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js +20 -0
  448. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js.map +1 -0
  449. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js +117 -0
  450. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js.map +1 -0
  451. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.js +55 -0
  452. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.js.map +1 -0
  453. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js +15 -0
  454. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js.map +1 -0
  455. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js +19 -0
  456. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js.map +1 -0
  457. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js +132 -0
  458. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js.map +1 -0
  459. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +94 -0
  460. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -0
  461. package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js +29 -0
  462. package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js.map +1 -0
  463. package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js +54 -0
  464. package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js.map +1 -0
  465. package/dist-server/graphql/resolvers/worksheet/worksheet.js +501 -0
  466. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -0
  467. package/dist-server/graphql/resolvers/worksheet/worksheets.js +547 -0
  468. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -0
  469. package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js +22 -0
  470. package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js.map +1 -0
  471. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +39 -0
  472. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -0
  473. package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js +18 -0
  474. package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js.map +1 -0
  475. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +149 -0
  476. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -0
  477. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +122 -0
  478. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -0
  479. package/dist-server/graphql/resolvers/worksheet-detail/generate-carton-id.js +25 -0
  480. package/dist-server/graphql/resolvers/worksheet-detail/generate-carton-id.js.map +1 -0
  481. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +77 -0
  482. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -0
  483. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +177 -0
  484. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -0
  485. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +67 -0
  486. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -0
  487. package/dist-server/graphql/resolvers/worksheet-detail/index.js +20 -0
  488. package/dist-server/graphql/resolvers/worksheet-detail/index.js.map +1 -0
  489. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +100 -0
  490. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
  491. package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js +30 -0
  492. package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js.map +1 -0
  493. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +31 -0
  494. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -0
  495. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js +49 -0
  496. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js.map +1 -0
  497. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js +17 -0
  498. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js.map +1 -0
  499. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +14 -0
  500. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -0
  501. package/dist-server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.js +12 -0
  502. package/dist-server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.js.map +1 -0
  503. package/dist-server/graphql/resolvers/worksheet-movement/index.js +11 -0
  504. package/dist-server/graphql/resolvers/worksheet-movement/index.js.map +1 -0
  505. package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js +13 -0
  506. package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js.map +1 -0
  507. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js +12 -0
  508. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js.map +1 -0
  509. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js +15 -0
  510. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js.map +1 -0
  511. package/dist-server/graphql/types/index.js +39 -0
  512. package/dist-server/graphql/types/index.js.map +1 -0
  513. package/dist-server/graphql/types/pallet/index.js +13 -0
  514. package/dist-server/graphql/types/pallet/index.js.map +1 -0
  515. package/dist-server/graphql/types/pallet/pallet.js +10 -0
  516. package/dist-server/graphql/types/pallet/pallet.js.map +1 -0
  517. package/dist-server/graphql/types/worksheet/arrival-notice-worksheet.js +11 -0
  518. package/dist-server/graphql/types/worksheet/arrival-notice-worksheet.js.map +1 -0
  519. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
  520. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
  521. package/dist-server/graphql/types/worksheet/contact-point-info.js +15 -0
  522. package/dist-server/graphql/types/worksheet/contact-point-info.js.map +1 -0
  523. package/dist-server/graphql/types/worksheet/cycle-count-worksheet.js +19 -0
  524. package/dist-server/graphql/types/worksheet/cycle-count-worksheet.js.map +1 -0
  525. package/dist-server/graphql/types/worksheet/delivery-info.js +14 -0
  526. package/dist-server/graphql/types/worksheet/delivery-info.js.map +1 -0
  527. package/dist-server/graphql/types/worksheet/delivery-order-info.js +30 -0
  528. package/dist-server/graphql/types/worksheet/delivery-order-info.js.map +1 -0
  529. package/dist-server/graphql/types/worksheet/delivery-order-ro.js +18 -0
  530. package/dist-server/graphql/types/worksheet/delivery-order-ro.js.map +1 -0
  531. package/dist-server/graphql/types/worksheet/delivery-worksheet.js +10 -0
  532. package/dist-server/graphql/types/worksheet/delivery-worksheet.js.map +1 -0
  533. package/dist-server/graphql/types/worksheet/executing-worksheet.js +11 -0
  534. package/dist-server/graphql/types/worksheet/executing-worksheet.js.map +1 -0
  535. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +12 -0
  536. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
  537. package/dist-server/graphql/types/worksheet/goods-delivery-note.js +11 -0
  538. package/dist-server/graphql/types/worksheet/goods-delivery-note.js.map +1 -0
  539. package/dist-server/graphql/types/worksheet/index.js +902 -0
  540. package/dist-server/graphql/types/worksheet/index.js.map +1 -0
  541. package/dist-server/graphql/types/worksheet/inventory-check-worksheet.js +11 -0
  542. package/dist-server/graphql/types/worksheet/inventory-check-worksheet.js.map +1 -0
  543. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +12 -0
  544. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -0
  545. package/dist-server/graphql/types/worksheet/location-filter.js +13 -0
  546. package/dist-server/graphql/types/worksheet/location-filter.js.map +1 -0
  547. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
  548. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
  549. package/dist-server/graphql/types/worksheet/my-picking-assignment-status.js +12 -0
  550. package/dist-server/graphql/types/worksheet/my-picking-assignment-status.js.map +1 -0
  551. package/dist-server/graphql/types/worksheet/new-worksheet.js +13 -0
  552. package/dist-server/graphql/types/worksheet/new-worksheet.js.map +1 -0
  553. package/dist-server/graphql/types/worksheet/packing-list.js +10 -0
  554. package/dist-server/graphql/types/worksheet/packing-list.js.map +1 -0
  555. package/dist-server/graphql/types/worksheet/picking-assignment-status.js +12 -0
  556. package/dist-server/graphql/types/worksheet/picking-assignment-status.js.map +1 -0
  557. package/dist-server/graphql/types/worksheet/powrup-document.js +11 -0
  558. package/dist-server/graphql/types/worksheet/powrup-document.js.map +1 -0
  559. package/dist-server/graphql/types/worksheet/product-approval.js +14 -0
  560. package/dist-server/graphql/types/worksheet/product-approval.js.map +1 -0
  561. package/dist-server/graphql/types/worksheet/release-good-worksheet.js +11 -0
  562. package/dist-server/graphql/types/worksheet/release-good-worksheet.js.map +1 -0
  563. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js +11 -0
  564. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js.map +1 -0
  565. package/dist-server/graphql/types/worksheet/return-order-worksheet.js +11 -0
  566. package/dist-server/graphql/types/worksheet/return-order-worksheet.js.map +1 -0
  567. package/dist-server/graphql/types/worksheet/sellercraft-document.js +11 -0
  568. package/dist-server/graphql/types/worksheet/sellercraft-document.js.map +1 -0
  569. package/dist-server/graphql/types/worksheet/vas-order-worksheet.js +10 -0
  570. package/dist-server/graphql/types/worksheet/vas-order-worksheet.js.map +1 -0
  571. package/dist-server/graphql/types/worksheet/vas-worksheet.js +11 -0
  572. package/dist-server/graphql/types/worksheet/vas-worksheet.js.map +1 -0
  573. package/dist-server/graphql/types/worksheet/webspert-document.js +11 -0
  574. package/dist-server/graphql/types/worksheet/webspert-document.js.map +1 -0
  575. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +88 -0
  576. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -0
  577. package/dist-server/graphql/types/worksheet/worksheet-info.js +46 -0
  578. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -0
  579. package/dist-server/graphql/types/worksheet/worksheet-list.js +11 -0
  580. package/dist-server/graphql/types/worksheet/worksheet-list.js.map +1 -0
  581. package/dist-server/graphql/types/worksheet/worksheet-patch.js +21 -0
  582. package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -0
  583. package/dist-server/graphql/types/worksheet/worksheet-with-pagination.js +12 -0
  584. package/dist-server/graphql/types/worksheet/worksheet-with-pagination.js.map +1 -0
  585. package/dist-server/graphql/types/worksheet/worksheet.js +45 -0
  586. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -0
  587. package/dist-server/graphql/types/worksheet-detail/index.js +83 -0
  588. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -0
  589. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +48 -0
  590. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -0
  591. package/dist-server/graphql/types/worksheet-detail/new-worksheet-detail.js +24 -0
  592. package/dist-server/graphql/types/worksheet-detail/new-worksheet-detail.js.map +1 -0
  593. package/dist-server/graphql/types/worksheet-detail/pallet-info.js +14 -0
  594. package/dist-server/graphql/types/worksheet-detail/pallet-info.js.map +1 -0
  595. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-list.js +11 -0
  596. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-list.js.map +1 -0
  597. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js +32 -0
  598. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js.map +1 -0
  599. package/dist-server/graphql/types/worksheet-detail/worksheet-detail.js +34 -0
  600. package/dist-server/graphql/types/worksheet-detail/worksheet-detail.js.map +1 -0
  601. package/dist-server/graphql/types/worksheet-movement/index.js +31 -0
  602. package/dist-server/graphql/types/worksheet-movement/index.js.map +1 -0
  603. package/dist-server/graphql/types/worksheet-movement/new-worksheet-movement.js +11 -0
  604. package/dist-server/graphql/types/worksheet-movement/new-worksheet-movement.js.map +1 -0
  605. package/dist-server/graphql/types/worksheet-movement/worksheet-movement-list.js +11 -0
  606. package/dist-server/graphql/types/worksheet-movement/worksheet-movement-list.js.map +1 -0
  607. package/dist-server/graphql/types/worksheet-movement/worksheet-movement-patch.js +11 -0
  608. package/dist-server/graphql/types/worksheet-movement/worksheet-movement-patch.js.map +1 -0
  609. package/dist-server/graphql/types/worksheet-movement/worksheet-movement.js +13 -0
  610. package/dist-server/graphql/types/worksheet-movement/worksheet-movement.js.map +1 -0
  611. package/dist-server/index.js +38 -0
  612. package/dist-server/index.js.map +1 -0
  613. package/dist-server/middlewares/index.js +4 -0
  614. package/dist-server/middlewares/index.js.map +1 -0
  615. package/dist-server/migrations/index.js +12 -0
  616. package/dist-server/migrations/index.js.map +1 -0
  617. package/dist-server/routes.js +65 -0
  618. package/dist-server/routes.js.map +1 -0
  619. package/dist-server/utils/datetime-util.js +61 -0
  620. package/dist-server/utils/datetime-util.js.map +1 -0
  621. package/dist-server/utils/index.js +23 -0
  622. package/dist-server/utils/index.js.map +1 -0
  623. package/dist-server/utils/inventory-util.js +236 -0
  624. package/dist-server/utils/inventory-util.js.map +1 -0
  625. package/dist-server/utils/lambda/lambda-const.js +6 -0
  626. package/dist-server/utils/lambda/lambda-const.js.map +1 -0
  627. package/dist-server/utils/lmd-util.js +699 -0
  628. package/dist-server/utils/lmd-util.js.map +1 -0
  629. package/dist-server/utils/worksheet-no-generator.js +187 -0
  630. package/dist-server/utils/worksheet-no-generator.js.map +1 -0
  631. package/dist-server/utils/worksheet-util.js +85 -0
  632. package/dist-server/utils/worksheet-util.js.map +1 -0
  633. package/dist-server/utils/xilnex-util.js +62 -0
  634. package/dist-server/utils/xilnex-util.js.map +1 -0
  635. package/package.json +12 -12
@@ -0,0 +1,2489 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.sortingProduct = exports.createConsignmentWithMultipackage = exports.createConsignmentPackageItem = exports.createConsignmentPackage = exports.createOrderConsignment = exports.splitOrderConsignment = exports.createOrderPackageAndItems = exports.PickingWorksheetController = void 0;
15
+ const typeorm_1 = require("typeorm");
16
+ const uuid_1 = require("uuid");
17
+ const auth_base_1 = require("@things-factory/auth-base");
18
+ const env_1 = require("@things-factory/env");
19
+ const id_rule_base_1 = require("@things-factory/id-rule-base");
20
+ const integration_powrup_1 = require("@things-factory/integration-powrup");
21
+ const product_base_1 = require("@things-factory/product-base");
22
+ const sales_base_1 = require("@things-factory/sales-base");
23
+ const setting_base_1 = require("@things-factory/setting-base");
24
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
25
+ const integration_base_1 = require("@things-factory/integration-base");
26
+ const constants_1 = require("../../constants");
27
+ const entities_1 = require("../../entities");
28
+ const utils_1 = require("../../utils");
29
+ const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
30
+ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheetController {
31
+ async generatePickingWorksheet(releaseGoodNo, currentStatus = null) {
32
+ let releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
33
+ domain: this.domain,
34
+ name: releaseGoodNo,
35
+ status: sales_base_1.ORDER_STATUS.PENDING_WORKSHEET
36
+ }, ['orderInventories', 'orderInventories.inventory', 'orderVass']);
37
+ const orderInventories = releaseGood.orderInventories;
38
+ //const orderVASs: OrderVas[] = releaseGood.orderVass
39
+ let worksheet = await this.createWorksheet(releaseGood, constants_1.WORKSHEET_TYPE.PICKING);
40
+ if ((orderInventories === null || orderInventories === void 0 ? void 0 : orderInventories.length) > 0) {
41
+ let validOrderInventories = orderInventories.filter((oi) => oi.status !== 'CANCELLED');
42
+ if (validOrderInventories.every((oi) => { var _a; return (_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id; }) || releaseGood.crossDocking) {
43
+ worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PICKING, validOrderInventories // Only non-cancelled ones
44
+ );
45
+ }
46
+ orderInventories.forEach((oi) => {
47
+ var _a;
48
+ if (oi.status === sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED)
49
+ return;
50
+ oi.status =
51
+ oi.crossDocking || ((_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id)
52
+ ? sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK
53
+ : sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT;
54
+ oi.updater = this.user;
55
+ });
56
+ await this.updateOrderTargets(orderInventories);
57
+ }
58
+ // if (orderVASs?.length > 0) {
59
+ // await this.generateVasWorksheet(releaseGood)
60
+ // }
61
+ releaseGood.status = sales_base_1.ORDER_STATUS.READY_TO_PICK;
62
+ releaseGood.updater = this.user;
63
+ await this.updateRefOrder(releaseGood, null, currentStatus);
64
+ return worksheet;
65
+ }
66
+ async generateBatchPickingWorksheet(releaseGoodWithBiz) {
67
+ let worksheets = [];
68
+ for (let i = 0; i < releaseGoodWithBiz.length; i++) {
69
+ let releaseGoodNos = releaseGoodWithBiz[i].map(itm => itm.releaseGoodNo);
70
+ let releaseGoods = await this.trxMgr.getRepository(sales_base_1.ReleaseGood).find({
71
+ where: { domain: this.domain, name: (0, typeorm_1.In)(releaseGoodNos), status: sales_base_1.ORDER_STATUS.PENDING_WORKSHEET },
72
+ relations: [
73
+ 'orderProducts',
74
+ 'orderProducts.product',
75
+ 'orderInventories',
76
+ 'orderInventories.inventory',
77
+ 'bizplace',
78
+ 'bizplace.domain'
79
+ ]
80
+ });
81
+ let orderInventories = [];
82
+ releaseGoods.map((releaseGood) => {
83
+ const foundOIs = releaseGood.orderInventories;
84
+ foundOIs.map((oi) => {
85
+ orderInventories.push(oi);
86
+ });
87
+ });
88
+ const worksheetPickingAssignment = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
89
+ where: { domain: this.domain, category: 'id-rule', name: 'enable-worksheet-picking-activation-assignment' }
90
+ });
91
+ const worksheetSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
92
+ where: {
93
+ domain: this.domain,
94
+ name: constants_1.TASK_NUMBER_SETTING_KEY.TASK_NO_RULE
95
+ }
96
+ });
97
+ if (!worksheetSetting)
98
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT('task number rule'));
99
+ let worksheet = new entities_1.Worksheet();
100
+ worksheet.name = utils_1.WorksheetNoGenerator.generate(constants_1.WORKSHEET_TYPE.BATCH_PICKING);
101
+ worksheet.type = constants_1.WORKSHEET_TYPE.BATCH_PICKING;
102
+ worksheet.taskNo = await (0, id_rule_base_1.generateId)({
103
+ domain: this.domain,
104
+ type: constants_1.TASK_NUMBER_RULE_TYPE.TASK_NO,
105
+ seed: {}
106
+ });
107
+ worksheet.status = constants_1.WORKSHEET_STATUS.DEACTIVATED;
108
+ worksheet.bizplace = releaseGoodWithBiz[i][0].bizplaceId;
109
+ worksheet.domain = this.domain;
110
+ worksheet.creator = this.user;
111
+ worksheet.updater = this.user;
112
+ worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).save(worksheet);
113
+ if ((orderInventories === null || orderInventories === void 0 ? void 0 : orderInventories.length) > 0) {
114
+ if (orderInventories.some((oi) => { var _a; return (_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id; })) {
115
+ const hasInventoryOIs = orderInventories.filter((orderInventory) => orderInventory.inventory !== null || orderInventory.status !== 'CANCELLED');
116
+ worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.BATCH_PICKING, hasInventoryOIs);
117
+ }
118
+ orderInventories.forEach((oi) => {
119
+ var _a;
120
+ if (oi.status !== sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED) {
121
+ oi.refWorksheetId = worksheet.id;
122
+ oi.status = ((_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id) ? sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK : sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT;
123
+ oi.updater = this.user;
124
+ }
125
+ });
126
+ await this.updateOrderTargets(orderInventories);
127
+ }
128
+ else {
129
+ let orderProducts = [];
130
+ releaseGoods.map((releaseGood) => {
131
+ const foundOPs = releaseGood.orderProducts;
132
+ foundOPs
133
+ .filter((op) => op.status !== sales_base_1.ORDER_PRODUCT_STATUS.CANCELLED)
134
+ .forEach((op) => {
135
+ orderProducts.push(op);
136
+ });
137
+ });
138
+ if (worksheetPickingAssignment && (orderProducts === null || orderProducts === void 0 ? void 0 : orderProducts.length) > 0) {
139
+ worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.BATCH_PICKING, orderProducts);
140
+ }
141
+ }
142
+ releaseGoods = releaseGoods.map((releaseGood) => {
143
+ return Object.assign(Object.assign({}, releaseGood), { status: sales_base_1.ORDER_STATUS.READY_TO_PICK, updater: this.user });
144
+ });
145
+ await this.trxMgr.getRepository(sales_base_1.ReleaseGood).save(releaseGoods);
146
+ worksheets.push(worksheet);
147
+ }
148
+ return worksheets;
149
+ }
150
+ async generateBatchPickingWorksheetDetail(worksheet, targetInventory) {
151
+ // Create worksheet details
152
+ return await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.BATCH_PICKING, [targetInventory]);
153
+ }
154
+ async generatePickingWorksheetDetail(worksheet, targetInventory) {
155
+ // Create worksheet details
156
+ return await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PICKING, [targetInventory]);
157
+ }
158
+ async activatePicking(worksheetNo) {
159
+ var _a, _b;
160
+ let worksheet = await this.findActivatableWorksheet(worksheetNo, constants_1.WORKSHEET_TYPE.PICKING, [
161
+ 'releaseGood',
162
+ 'releaseGood.bizplace',
163
+ 'releaseGood.domain',
164
+ 'releaseGood.lastMileDelivery',
165
+ 'releaseGood.bizplace.domain',
166
+ 'domain',
167
+ 'bizplace',
168
+ 'bizplace.domain',
169
+ 'bizplace.company',
170
+ 'bizplace.company.domain',
171
+ 'worksheetDetails',
172
+ 'worksheetDetails.targetInventory',
173
+ 'worksheetDetails.targetInventory.product'
174
+ ]);
175
+ let worksheetDetails;
176
+ let orderProducts = await this.trxMgr.getRepository(sales_base_1.OrderProduct).find({
177
+ where: { releaseGood: worksheet.releaseGood },
178
+ relations: [
179
+ 'product',
180
+ 'productDetail',
181
+ 'productDetail.product',
182
+ 'productBundle',
183
+ 'productBundle.productBundleSettings',
184
+ 'productBundle.productBundleSettings.productDetail'
185
+ ]
186
+ });
187
+ let orderPackages = await this.trxMgr.getRepository(sales_base_1.OrderPackage).find({
188
+ where: { releaseGood: worksheet.releaseGood },
189
+ relations: [
190
+ 'orderPackageItems',
191
+ 'orderPackageItems.productDetail',
192
+ 'orderPackageItems.orderProduct',
193
+ 'orderPackageItems.orderProduct.product',
194
+ 'orderPackageItems.orderProduct.productDetail'
195
+ ]
196
+ });
197
+ let orderConsignments = await this.trxMgr.getRepository(sales_base_1.OrderConsignment).find({
198
+ where: { releaseGood: worksheet.releaseGood },
199
+ relations: [
200
+ 'orderPackages',
201
+ 'orderPackages.orderPackageItems',
202
+ 'orderPackages.orderPackageItems.orderProduct',
203
+ 'orderPackages.orderPackageItems.orderProduct.product',
204
+ 'orderPackages.orderPackageItems.orderProduct.productDetail'
205
+ ]
206
+ });
207
+ worksheet.releaseGood = Object.assign(Object.assign({}, worksheet.releaseGood), { orderProducts, orderPackages, orderConsignments });
208
+ let releaseGood = Object.assign(new sales_base_1.ReleaseGood(), worksheet.releaseGood);
209
+ let newReleaseGood;
210
+ // assign inventory if unassigned
211
+ if (!releaseGood.assignedInventory) {
212
+ worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet);
213
+ worksheet.worksheetDetails = worksheetDetails;
214
+ releaseGood.assignedInventory = true;
215
+ }
216
+ else {
217
+ worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED');
218
+ const targetInventories = worksheetDetails.map((wsd) => {
219
+ let targetInventory = wsd.targetInventory;
220
+ targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKING;
221
+ targetInventory.updater = this.user;
222
+ return targetInventory;
223
+ });
224
+ this.updateOrderTargets(targetInventories);
225
+ }
226
+ releaseGood.status = sales_base_1.ORDER_STATUS.PICKING;
227
+ releaseGood.updater = this.user;
228
+ this.updateRefOrder(releaseGood);
229
+ (0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEventsEnum.PickingStarted);
230
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, []);
231
+ // VAS will be activated after PICKING is completed
232
+ // try {
233
+ // const vasWorksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.VAS)
234
+ // if (vasWorksheet) {
235
+ // await this.activateVAS(vasWorksheet.name, vasWorksheet.worksheetDetails)
236
+ // }
237
+ // } catch (e) {}
238
+ const pendingSplitOIs = await this.trxMgr.getRepository(sales_base_1.OrderInventory).find({
239
+ where: { domain: this.domain, releaseGood, status: sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT }
240
+ });
241
+ if (pendingSplitOIs === null || pendingSplitOIs === void 0 ? void 0 : pendingSplitOIs.length) {
242
+ const ids = pendingSplitOIs.map((oi) => oi.id);
243
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(ids);
244
+ }
245
+ try {
246
+ // trigger SC pack order asynchronously
247
+ const orderSource = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.source;
248
+ switch (orderSource) {
249
+ //disable temporary to prevent duplicates call
250
+ case auth_base_1.ApplicationType.SELLERCRAFT:
251
+ // getManager().transaction(async txMgr => {
252
+ // const sellercraft: Sellercraft = await txMgr
253
+ // .getRepository(Sellercraft)
254
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
255
+ // if (sellercraft) {
256
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, this.domain, this.user)
257
+ // if (!releaseGood?.orderPackages?.length) {
258
+ // const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
259
+ // where: { releaseGood },
260
+ // relations: ['product', 'product.productDetails', 'productDetail']
261
+ // })
262
+ // // asynchronously pack order
263
+ // await sellercraftCtrl.packOrder(sellercraft, {
264
+ // ...releaseGood,
265
+ // orderProducts,
266
+ // domain: worksheet.domain
267
+ // })
268
+ // }
269
+ // }
270
+ // })
271
+ break;
272
+ case auth_base_1.ApplicationType.POWRUP:
273
+ await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
274
+ var _a;
275
+ const powrup = await txMgr.getRepository(integration_powrup_1.Powrup).findOne({ active: true, platform: 'POWRUP' });
276
+ if (powrup) {
277
+ const powrupCtrl = new sales_base_1.PowrupController();
278
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
279
+ const orderProducts = await txMgr.getRepository(sales_base_1.OrderProduct).find({
280
+ where: { releaseGood },
281
+ relations: ['product', 'productDetail']
282
+ });
283
+ // asynchronously pack order
284
+ newReleaseGood = await powrupCtrl.packOrder(powrup, Object.assign(Object.assign({}, releaseGood), { orderProducts }), worksheet.domain, this.user, txMgr);
285
+ }
286
+ }
287
+ });
288
+ break;
289
+ case auth_base_1.ApplicationType.WEBSPERT:
290
+ // Trigger Whole Order Process
291
+ sales_base_1.WebspertController.triggerOrderProcesses(releaseGood, this.domain, this.user);
292
+ break;
293
+ default:
294
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
295
+ let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
296
+ switch (mps) {
297
+ case true:
298
+ newReleaseGood = await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
299
+ break;
300
+ case false:
301
+ case undefined:
302
+ let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
303
+ let orderPackage = {
304
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
305
+ packageId: null,
306
+ trackingNo: null,
307
+ transporter: null,
308
+ airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null,
309
+ invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
310
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
311
+ releaseGood,
312
+ domain: releaseGood.domain,
313
+ bizplace: releaseGood.bizplace,
314
+ creator: this.user,
315
+ updater: this.user,
316
+ orderConsignment: orderConsignment
317
+ };
318
+ newReleaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
319
+ break;
320
+ }
321
+ }
322
+ break;
323
+ }
324
+ }
325
+ catch (error) {
326
+ env_1.logger.error(`picking-worksheet-controller[activatePicking]: ${error}`);
327
+ }
328
+ if (newReleaseGood) {
329
+ worksheet.releaseGood = newReleaseGood;
330
+ }
331
+ return worksheet;
332
+ }
333
+ async activateBulkPicking(worksheetNo) {
334
+ let worksheets = [];
335
+ try {
336
+ const worksheetRepo = this.trxMgr.getRepository(entities_1.Worksheet);
337
+ worksheets = await worksheetRepo
338
+ .createQueryBuilder('w')
339
+ .leftJoinAndSelect('w.domain', 'd')
340
+ .leftJoinAndSelect('w.bizplace', 'b')
341
+ .leftJoinAndSelect('w.worksheetDetails', 'wd')
342
+ .leftJoinAndSelect('w.releaseGood', 'rg')
343
+ .leftJoinAndSelect('rg.domain', 'rgd')
344
+ .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
345
+ .leftJoinAndSelect('rg.orderPackages', 'op')
346
+ .leftJoinAndSelect('op.orderPackageItems', 'opi')
347
+ .leftJoinAndSelect('opi.orderProduct', 'op2')
348
+ .leftJoinAndSelect('op2.product', 'p')
349
+ .leftJoinAndSelect('op2.productDetail', 'pd')
350
+ .leftJoinAndSelect('rg.orderConsignments', 'oc')
351
+ .leftJoinAndSelect('oc.orderPackages', 'ocop')
352
+ .leftJoinAndSelect('ocop.orderPackageItems', 'ocpi')
353
+ .leftJoinAndSelect('ocpi.orderProduct', 'ocp2')
354
+ .leftJoinAndSelect('ocp2.product', 'ocp')
355
+ .leftJoinAndSelect('ocp2.productDetail', 'ocpd')
356
+ .leftJoinAndSelect('rg.bizplace', 'rgb')
357
+ .leftJoinAndSelect('rgb.domain', 'rgbd')
358
+ .leftJoinAndSelect('b.domain', 'bd')
359
+ .leftJoinAndSelect('b.company', 'c')
360
+ .leftJoinAndSelect('c.domain', 'cd')
361
+ .leftJoinAndSelect('wd.targetInventory', 'ti')
362
+ .leftJoinAndSelect('ti.product', 'tp')
363
+ .where('w.name IN (:...worksheetNo)', { worksheetNo: worksheetNo })
364
+ .andWhere('w.status = :status', { status: constants_1.WORKSHEET_STATUS.DEACTIVATED })
365
+ .getMany();
366
+ if (worksheets.length > 50) {
367
+ throw new Error('Please select maximum 50 worksheets with status deactivated to proceed');
368
+ }
369
+ let groupWs = new Map();
370
+ for (const worksheet of worksheets) {
371
+ const bizplaceId = worksheet.bizplace.id;
372
+ const worksheetId = worksheet.id;
373
+ if (groupWs.has(bizplaceId)) {
374
+ groupWs.get(bizplaceId).push(worksheetId);
375
+ }
376
+ else {
377
+ groupWs.set(bizplaceId, [worksheetId]);
378
+ }
379
+ }
380
+ const groupedWsBiz = [...groupWs.entries()];
381
+ const updatedWs = await Promise.all(groupedWsBiz.map(async ([bizplaceId, worksheetIds]) => {
382
+ return await this.activateBulkWorksheets(bizplaceId, worksheetIds);
383
+ }));
384
+ worksheets = updatedWs.flat();
385
+ }
386
+ catch (error) {
387
+ throw error;
388
+ }
389
+ // finally {
390
+ // ActiveWorksheetPickingView.refreshView()
391
+ // }
392
+ return worksheets;
393
+ }
394
+ async activateBatchPicking(worksheetNo) {
395
+ let worksheet = await this.findActivatableWorksheet(worksheetNo, constants_1.WORKSHEET_TYPE.BATCH_PICKING, [
396
+ 'worksheetDetails',
397
+ 'worksheetDetails.targetProduct',
398
+ 'worksheetDetails.targetProduct.bizplace',
399
+ 'worksheetDetails.targetProduct.product',
400
+ 'worksheetDetails.targetProduct.productDetail',
401
+ 'worksheetDetails.targetProduct.releaseGood',
402
+ 'worksheetDetails.targetInventory',
403
+ 'worksheetDetails.targetInventory.releaseGood',
404
+ 'worksheetDetails.targetInventory.releaseGood.domain',
405
+ 'worksheetDetails.targetInventory.product',
406
+ 'bizplace',
407
+ 'bizplace.domain',
408
+ 'bizplace.company',
409
+ 'bizplace.company.domain'
410
+ ]);
411
+ let worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED');
412
+ if (worksheet.worksheetDetails.find(wsd => { var _a, _b; return ((_b = (_a = wsd.targetProduct) === null || _a === void 0 ? void 0 : _a.releaseGood) === null || _b === void 0 ? void 0 : _b.assignedInventory) == false; })) {
413
+ worksheetDetails = await this.assignInventoriesForUnassignedMergedOrder(worksheet);
414
+ delete worksheet.worksheetDetails;
415
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, []);
416
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete({ worksheet, status: 'DEACTIVATED' });
417
+ }
418
+ else {
419
+ const targetInventories = worksheetDetails.map((wsd) => {
420
+ let targetInventory = wsd.targetInventory;
421
+ targetInventory.status =
422
+ targetInventory.status != 'PENDING_CANCEL' ? sales_base_1.ORDER_INVENTORY_STATUS.PICKING : targetInventory.status;
423
+ targetInventory.updater = this.user;
424
+ return targetInventory;
425
+ });
426
+ this.updateOrderTargets(targetInventories);
427
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, []);
428
+ }
429
+ // retrieve order inventory
430
+ const pickingOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).find({
431
+ where: { domain: this.domain, refWorksheetId: worksheet.id, status: sales_base_1.ORDER_STATUS.PICKING },
432
+ relations: ['releaseGood']
433
+ });
434
+ const releaseGoodIds = pickingOrderInventory.reduce((data, order) => {
435
+ const id = order.releaseGood.id;
436
+ if (!data.includes(id)) {
437
+ data.push(id);
438
+ }
439
+ return data;
440
+ }, []);
441
+ let releaseGoods = await this.trxMgr.getRepository(sales_base_1.ReleaseGood).find({
442
+ where: { id: (0, typeorm_1.In)(releaseGoodIds) },
443
+ relations: [
444
+ 'domain',
445
+ 'lastMileDelivery',
446
+ 'bizplace',
447
+ 'bizplace.domain',
448
+ 'orderPackages',
449
+ 'orderPackages.orderPackageItems',
450
+ 'orderPackages.orderPackageItems.productDetail',
451
+ 'orderPackages.orderPackageItems.orderProduct',
452
+ 'orderPackages.orderPackageItems.orderProduct.product',
453
+ 'orderPackages.orderPackageItems.orderProduct.productDetail',
454
+ 'orderProducts',
455
+ 'orderProducts.productDetail',
456
+ 'orderProducts.product',
457
+ 'orderConsignments',
458
+ 'orderConsignments.orderPackages',
459
+ 'orderConsignments.orderPackages.orderPackageItems',
460
+ 'orderConsignments.orderPackages.orderPackageItems.orderProduct',
461
+ 'orderConsignments.orderPackages.orderPackageItems.orderProduct.product',
462
+ 'orderConsignments.orderPackages.orderPackageItems.orderProduct.productDetail'
463
+ ]
464
+ });
465
+ pickingOrderInventory.forEach(order => {
466
+ order.releaseGood = releaseGoods.find(rg => rg.id === order.releaseGood.id);
467
+ });
468
+ // let releaseGoodss: ReleaseGood[] = pickingOrderInventory.reduce((data, oi: OrderInventory) => {
469
+ // if (!data.find(x => x.id == oi.releaseGood.id)) {
470
+ // data.push(oi.releaseGood)
471
+ // }
472
+ // return data
473
+ // }, [])
474
+ // massage data and trigger SC pack order asynchronously
475
+ if (releaseGoods === null || releaseGoods === void 0 ? void 0 : releaseGoods.length) {
476
+ releaseGoods = await Promise.all(releaseGoods.map(async (releaseGood) => {
477
+ var _a, _b;
478
+ try {
479
+ const orderSource = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.source;
480
+ switch (orderSource) {
481
+ //temporary disable to prevent order-pack call twice
482
+ case auth_base_1.ApplicationType.SELLERCRAFT:
483
+ // getManager().transaction(async txMgr => {
484
+ // const sellercraft: Sellercraft = await txMgr
485
+ // .getRepository(Sellercraft)
486
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
487
+ // if (sellercraft) {
488
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(
489
+ // txMgr,
490
+ // this.domain,
491
+ // this.user
492
+ // )
493
+ // if (!releaseGood?.orderPackages?.length) {
494
+ // const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
495
+ // where: { releaseGood },
496
+ // relations: ['product', 'product.productDetails', 'productDetail']
497
+ // })
498
+ // // asynchronously pack order
499
+ // await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
500
+ // }
501
+ // }
502
+ // })
503
+ break;
504
+ case auth_base_1.ApplicationType.POWRUP:
505
+ await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
506
+ var _a;
507
+ const powrup = await txMgr.getRepository(integration_powrup_1.Powrup).findOne({ active: true });
508
+ if (powrup) {
509
+ const powrupCtrl = new sales_base_1.PowrupController(txMgr, this.domain, this.user);
510
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
511
+ const orderProducts = await txMgr.getRepository(sales_base_1.OrderProduct).find({
512
+ where: { releaseGood },
513
+ relations: ['product', 'productDetail']
514
+ });
515
+ // asynchronously pack order
516
+ await powrupCtrl.packOrder(powrup, Object.assign(Object.assign({}, releaseGood), { orderProducts }), this.domain, this.user, txMgr);
517
+ }
518
+ }
519
+ });
520
+ break;
521
+ case auth_base_1.ApplicationType.WEBSPERT:
522
+ // Trigger Whole Order Process
523
+ sales_base_1.WebspertController.triggerOrderProcesses(releaseGood, this.domain, this.user);
524
+ break;
525
+ default:
526
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
527
+ let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
528
+ switch (mps) {
529
+ case true:
530
+ await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
531
+ break;
532
+ case false:
533
+ case undefined:
534
+ let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
535
+ let orderPackage = {
536
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
537
+ packageId: null,
538
+ trackingNo: null,
539
+ transporter: null,
540
+ airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null,
541
+ invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
542
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
543
+ releaseGood,
544
+ domain: releaseGood.domain,
545
+ bizplace: releaseGood.bizplace,
546
+ creator: this.user,
547
+ updater: this.user,
548
+ orderConsignment: orderConsignment
549
+ };
550
+ await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
551
+ break;
552
+ }
553
+ }
554
+ break;
555
+ }
556
+ }
557
+ catch (error) {
558
+ env_1.logger.error(`picking-worksheet-controller[activateBatchPicking]: ${error}`);
559
+ }
560
+ return Object.assign(Object.assign({}, releaseGood), { status: releaseGood.status != 'PENDING_CANCEL' ? sales_base_1.ORDER_STATUS.PICKING : releaseGood.status, updater: this.user, assignedInventory: true });
561
+ }));
562
+ await Promise.all(releaseGoods.map(rg => this.trxMgr.getRepository(sales_base_1.ReleaseGood).update(rg.id, {
563
+ status: rg.status,
564
+ updater: this.user,
565
+ assignedInventory: true,
566
+ updatedAt: () => 'CURRENT_TIMESTAMP'
567
+ })));
568
+ }
569
+ for (const releaseGood of releaseGoods) {
570
+ (0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEventsEnum.PickingStarted);
571
+ }
572
+ return worksheet;
573
+ }
574
+ async assignPickingInventories(worksheetNo, batchId, productId, packingType, packingSize, worksheetDetails) {
575
+ var _a, _b;
576
+ // 1. Remove prev worksheet details if it's exists
577
+ const worksheet = await this.findWorksheetByNo(worksheetNo, [
578
+ 'bizplace',
579
+ 'releaseGood',
580
+ 'worksheetDetails'
581
+ ]);
582
+ const releaseGood = worksheet.releaseGood;
583
+ const bizplace = worksheet.bizplace;
584
+ const prevWorksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize);
585
+ // Delete order inventories
586
+ if (prevWorksheetDetails === null || prevWorksheetDetails === void 0 ? void 0 : prevWorksheetDetails.length) {
587
+ const worksheetDetailIds = prevWorksheetDetails.map((wsd) => wsd.id);
588
+ const prevTargetInventoryIds = prevWorksheetDetails.map((wsd) => wsd.targetInventory.id);
589
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetailIds);
590
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(prevTargetInventoryIds);
591
+ }
592
+ for (let worksheetDetail of worksheetDetails) {
593
+ if ((_b = (_a = worksheetDetail.targetInventory) === null || _a === void 0 ? void 0 : _a.inventory) === null || _b === void 0 ? void 0 : _b.id) {
594
+ worksheetDetail = await this.findWorksheetDetail(worksheetDetail, [
595
+ 'targetInventory',
596
+ 'targetInventory.inventory'
597
+ ]);
598
+ }
599
+ const targetInventory = worksheetDetail.targetInventory;
600
+ let inventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).findOne(targetInventory.inventory.id);
601
+ const product = await this.trxMgr.getRepository(product_base_1.Product).findOne(productId);
602
+ // Create order inventories
603
+ let newTargetInventory = Object.assign({}, targetInventory);
604
+ delete newTargetInventory.id;
605
+ newTargetInventory.domain = this.domain;
606
+ newTargetInventory.bizplace = bizplace;
607
+ newTargetInventory.name = sales_base_1.OrderNoGenerator.orderInventory();
608
+ newTargetInventory.releaseGood = releaseGood;
609
+ newTargetInventory.inventory = inventory;
610
+ newTargetInventory.batchId = batchId;
611
+ newTargetInventory.product = product;
612
+ newTargetInventory.packingType = packingType;
613
+ newTargetInventory.packingSize = packingSize;
614
+ newTargetInventory.creator = this.user;
615
+ newTargetInventory.updater = this.user;
616
+ newTargetInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(newTargetInventory);
617
+ // Update locked qty and uomValue of inventory
618
+ inventory.lockedQty = targetInventory.releaseQty + (inventory.lockedQty || 0);
619
+ inventory.lockedUomValue = targetInventory.releaseUomValue + (inventory.lockedUomValue || 0);
620
+ await this.updateInventory(inventory);
621
+ // Create worksheet details
622
+ await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PICKING, [newTargetInventory]);
623
+ }
624
+ }
625
+ async undoPickingAssigment(worksheetNo, batchId, productId, packingType, packingSize) {
626
+ const worksheet = await this.findWorksheetByNo(worksheetNo, [
627
+ 'worksheetDetails',
628
+ 'worksheetDetails.targetInventory',
629
+ 'worksheetDetails.targetInventory.inventory',
630
+ 'worksheetDetails.targetInventory.product',
631
+ 'worksheetDetails.targetInventory.orderProduct'
632
+ ]);
633
+ const worksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize, ['targetInventory', 'targetInventory.inventory', 'targetInventory.orderProduct']);
634
+ let worksheetDetailIds = [];
635
+ let targetInventoryIds = [];
636
+ for (const worksheetDetail of worksheetDetails) {
637
+ worksheetDetailIds.push(worksheetDetail.id);
638
+ const targetInventory = worksheetDetail.targetInventory;
639
+ targetInventoryIds.push(targetInventory.id);
640
+ let inventory = await this.trxMgr
641
+ .getRepository(warehouse_base_1.Inventory)
642
+ .findOne({ where: { id: worksheetDetail.targetInventory.inventory.id } });
643
+ inventory.lockedQty = inventory.lockedQty - targetInventory.releaseQty;
644
+ inventory.lockedUomValue = inventory.lockedUomValue - targetInventory.releaseUomValue;
645
+ await this.updateInventory(inventory);
646
+ await this.trxMgr
647
+ .getRepository(sales_base_1.OrderProduct)
648
+ .update({ id: targetInventory.orderProduct.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.PENDING_ASSIGN, updater: this.user });
649
+ }
650
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetailIds);
651
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventoryIds);
652
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).update({
653
+ refWorksheetId: worksheet.id,
654
+ batchId,
655
+ product: { id: productId },
656
+ packingType,
657
+ packingSize,
658
+ status: sales_base_1.ORDER_INVENTORY_STATUS.COMPLETE_SPLIT
659
+ }, { status: sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT, updater: this.user, updatedAt: new Date() });
660
+ }
661
+ async scanProductPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo, pickedQty = 1) {
662
+ try {
663
+ //find existing worksheet detail
664
+ let worksheetDetailFilters = [
665
+ { query: 'mawp."worksheetDetailName"', value: worksheetDetailName },
666
+ { query: 'mawp."domainId"', value: this.domain.id },
667
+ { query: 'mawp."inventoryCartonId"', value: cartonId }
668
+ // { query: 'mawp."gtin"', value: productBarcode }
669
+ ];
670
+ let worksheetDetailRaw = await this.trxMgr.query(`
671
+ select * from active_worksheet_picking_views mawp
672
+ where 1 = 1
673
+ and
674
+ ${worksheetDetailFilters
675
+ .map((data, idx) => {
676
+ return `${data.query} = $${idx + 1}`;
677
+ })
678
+ .join(' AND ')}
679
+ `, worksheetDetailFilters.map((data, idx) => {
680
+ return data.value;
681
+ }));
682
+ // find directly without going through the materialized view
683
+ if (worksheetDetailRaw.length < 1) {
684
+ worksheetDetailRaw = await this.trxMgr.query(`
685
+ select
686
+ wd.id AS "worksheetDetailId",
687
+ wd.name as "worksheetDetailName",
688
+ w.id as "worksheetId",
689
+ w.domain_id as "domainId",
690
+ op.id as "targetProductId",
691
+ oi.product_id as "productId",
692
+ oi.product_detail_id as "productDetailId",
693
+ op.uom_value as "uomValue",
694
+ pb.id as "productBarcodeId",
695
+ pb.gtin,
696
+ p.is_require_serial_number_scanning_outbound as "productIsRequireSerialNumberScanningOutbound",
697
+ oi.release_good_id as "releaseGoodId",
698
+ oi.id as "orderInventoryId",
699
+ oi.status as "orderInventoryStatus",
700
+ oi.bizplace_id as "bizplaceId",
701
+ i.id as "inventoryId",
702
+ i.carton_id as "inventoryCartonId",
703
+ i.status as "inventoryStatus",
704
+ ici.status as "inventoryCheckItemStatus",
705
+ rg.name as "releaseGoodName",
706
+ rg.ref_no as "refNo"
707
+ FROM worksheet_details wd
708
+ INNER JOIN worksheets w ON wd.worksheet_id = w.id
709
+ inner JOIN order_inventories oi ON oi.id = wd.target_inventory_id
710
+ inner JOIN order_products op ON op.id = oi.order_product_id
711
+ inner join inventories i on i.id = oi.inventory_id
712
+ inner join release_goods rg on rg.id = oi.release_good_id
713
+ left join inventory_check_items ici on ici.inventory_id = oi.inventory_id
714
+ inner join products p on p.id = oi.product_id
715
+ left join product_bundles pb2 on pb2.id = op.product_bundle_id
716
+ LEFT JOIN product_barcodes pb ON pb.product_detail_id = oi.product_detail_id
717
+ left join product_bundle_settings pbs on pbs.product_bundle_id = pb2.id and pbs.product_id = oi.product_id and pbs.product_detail_id = oi.product_detail_id
718
+ WHERE w.type::text = 'PICKING'::text AND w.status::text = 'EXECUTING'::text
719
+ and wd.name = $1 and w.domain_id = $2 and i.carton_id = $3
720
+ ORDER BY w.domain_id, w.bizplace_id, wd.id
721
+ `, [worksheetDetailName, this.domain.id, cartonId]);
722
+ }
723
+ //validation to check matching worksheet detail based on name
724
+ if (worksheetDetailRaw.length < 1)
725
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName));
726
+ let worksheetDetailInfos = worksheetDetailRaw[0];
727
+ let targetInventory = await this.trxMgr
728
+ .getRepository(sales_base_1.OrderInventory)
729
+ .findOne({ where: { id: worksheetDetailInfos.orderInventoryId } });
730
+ const inventory = await this.trxMgr
731
+ .getRepository(warehouse_base_1.Inventory)
732
+ .findOne({ where: { id: worksheetDetailInfos.inventoryId } });
733
+ let targetProduct = { id: worksheetDetailInfos.targetProductId };
734
+ let bizplace = { id: worksheetDetailInfos.bizplaceId };
735
+ const releaseGood = {
736
+ id: worksheetDetailInfos.releaseGoodId,
737
+ name: worksheetDetailInfos.releaseGoodName,
738
+ refNo: worksheetDetailInfos.refNo
739
+ };
740
+ let matchingProduct, pickedUomValue;
741
+ // // validation to prevent picking if the inventory is involved in cycle count
742
+ const inventoryCheckStatus = new Set([
743
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.PENDING,
744
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTING,
745
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTED,
746
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.NOT_TALLY,
747
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.MISSING,
748
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.ADDED
749
+ ]);
750
+ if (inventoryCheckStatus.has(worksheetDetailInfos.inventoryCheckItemStatus)) {
751
+ throw new Error(`Inventory currently involved in an ongoing cycle count. Please complete the cycle count to proceed with picking.`);
752
+ }
753
+ //validation to prevent duplicated picking
754
+ if (targetInventory.status != sales_base_1.ORDER_INVENTORY_STATUS.PICKING)
755
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `is done`));
756
+ // if (!productBarcodes.find(itm => itm.gtin == productBarcode) && product?.isRequireSerialNumberScanningOutbound) {
757
+ // throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))
758
+ // }
759
+ matchingProduct = worksheetDetailRaw.find(x => x.gtin === productBarcode);
760
+ if (matchingProduct) {
761
+ pickedUomValue = pickedQty * (matchingProduct.uomValue || 1);
762
+ }
763
+ else {
764
+ matchingProduct = await this.getDirectQty({ id: worksheetDetailInfos.productDetailId }, productBarcode, pickedQty);
765
+ //validate matching product details based on scanned barcode
766
+ if (!matchingProduct)
767
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
768
+ pickedQty = matchingProduct.qty;
769
+ pickedUomValue = matchingProduct.uomValue;
770
+ }
771
+ // //validation to prevent over release
772
+ if (!targetInventory)
773
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `inventory not assigned`));
774
+ // //validation to prevent over release
775
+ if (inventory.qty < 1 || pickedQty + ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.pickedQty) || 0) > targetInventory.releaseQty)
776
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
777
+ targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation);
778
+ // for required outbound serial number scanning
779
+ if (worksheetDetailInfos === null || worksheetDetailInfos === void 0 ? void 0 : worksheetDetailInfos.productIsRequireSerialNumberScanningOutbound) {
780
+ if (!serialNumber || serialNumber == '') {
781
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
782
+ }
783
+ let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
784
+ where: {
785
+ inventory: { id: worksheetDetailInfos.inventoryId },
786
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED, warehouse_base_1.INVENTORY_STATUS.PACKED]))
787
+ }
788
+ });
789
+ let foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).findOne({
790
+ where: { domain: this.domain, serialNumber: serialNumber, product: { id: worksheetDetailInfos.productId } }
791
+ });
792
+ if (foundSerialNumber) {
793
+ if (foundSerialNumber.inventoryId !== worksheetDetailInfos.inventoryId) {
794
+ throw new Error('Serial Number scanned is in another inventory');
795
+ }
796
+ if (foundSerialNumber.outboundOrderId) {
797
+ let releaseGood = await this.trxMgr
798
+ .getRepository(sales_base_1.ReleaseGood)
799
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } });
800
+ if (releaseGood) {
801
+ throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
802
+ }
803
+ }
804
+ foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
805
+ foundSerialNumber.updater = this.user;
806
+ foundSerialNumber.outboundOrderId = worksheetDetailInfos.releaseGoodId;
807
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
808
+ }
809
+ else {
810
+ if (totalInventoryItems >= inventory.qty) {
811
+ throw new Error('Insufficient inventory quantity to scan new serial number');
812
+ }
813
+ let inventoryItem = new warehouse_base_1.InventoryItem();
814
+ inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
815
+ inventoryItem.serialNumber = serialNumber;
816
+ inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
817
+ inventoryItem.outboundOrderId = worksheetDetailInfos.releaseGoodId;
818
+ inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
819
+ inventoryItem.product = { id: worksheetDetailInfos.productId };
820
+ inventoryItem.productDetail = { id: worksheetDetailInfos.productDetailId };
821
+ inventoryItem.inventory = { id: worksheetDetailInfos.inventoryId };
822
+ inventoryItem.domain = this.domain;
823
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
824
+ }
825
+ }
826
+ // for tote scanning
827
+ if (toteNo) {
828
+ await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
829
+ }
830
+ // temporarily override with separate logic to handle transaction to speed up function
831
+ // await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty)
832
+ const releaseQty = targetInventory.releaseQty;
833
+ targetInventory.pickedQty = ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.pickedQty) || 0) + pickedQty;
834
+ let updateOiObj = {
835
+ pickedQty: () => `"picked_qty" + ${pickedQty}`,
836
+ updatedAt: new Date(),
837
+ updater: this.user,
838
+ pickedBy: this.user.name,
839
+ pickedByUser: this.user,
840
+ pickedAt: new Date(),
841
+ status: () => `case when release_qty = "picked_qty" + ${pickedQty} then '${sales_base_1.ORDER_INVENTORY_STATUS.PICKED}' else status end`
842
+ };
843
+ if (targetInventory.binLocation) {
844
+ updateOiObj['binLocation'] = targetInventory.binLocation;
845
+ }
846
+ await this.trxMgr
847
+ .getRepository(sales_base_1.OrderInventory)
848
+ .createQueryBuilder()
849
+ .update(sales_base_1.OrderInventory)
850
+ .set(updateOiObj)
851
+ .where({ id: targetInventory.id })
852
+ .andWhere(`picked_qty + :pickedQty <= release_qty`, { pickedQty })
853
+ .execute();
854
+ if (targetInventory.pickedQty == releaseQty) {
855
+ (0, typeorm_1.getConnection)().transaction(async (tx) => {
856
+ try {
857
+ //update worksheet details only when line item picking complete
858
+ await tx
859
+ .getRepository(entities_1.WorksheetDetail)
860
+ .createQueryBuilder()
861
+ .update(entities_1.WorksheetDetail)
862
+ .set({
863
+ status: constants_1.WORKSHEET_STATUS.DONE,
864
+ updater: this.user,
865
+ updatedAt: new Date()
866
+ })
867
+ .where('id = :id', { id: worksheetDetailInfos.worksheetDetailId })
868
+ .execute();
869
+ let releaseUomValue = Math.trunc((pickedUomValue / pickedQty) * releaseQty * 1000) / 1000;
870
+ let updateInvObj = {
871
+ qty: () => `"qty" - ${releaseQty}`,
872
+ lockedQty: () => `"locked_qty" - ${releaseQty}`,
873
+ uomValue: () => `"uom_value" - ${releaseUomValue}`,
874
+ lockedUomValue: () => `"locked_uom_value" - ${releaseUomValue}`,
875
+ status: () => `case when "qty" - ${releaseQty} <= 0 then '${warehouse_base_1.INVENTORY_STATUS.TERMINATED}' else status end`,
876
+ updater: this.user,
877
+ updatedAt: new Date()
878
+ };
879
+ await tx
880
+ .getRepository(warehouse_base_1.Inventory)
881
+ .createQueryBuilder()
882
+ .update(warehouse_base_1.Inventory)
883
+ .set(updateInvObj)
884
+ .where('id = :id', { id: worksheetDetailInfos.inventoryId })
885
+ .returning(['qty'])
886
+ .execute();
887
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.PICKING, -releaseQty, -releaseUomValue, this.user, tx);
888
+ let inventoryItems = await tx
889
+ .getRepository(warehouse_base_1.InventoryItem)
890
+ .find({ where: { outboundOrderId: worksheetDetailInfos.releaseGoodId } });
891
+ if (inventoryItems.length > 0) {
892
+ inventoryItems.forEach((itm) => {
893
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKED;
894
+ itm.updater = this.user;
895
+ });
896
+ await tx.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
897
+ }
898
+ }
899
+ catch (error) {
900
+ throw error;
901
+ }
902
+ });
903
+ }
904
+ let worksheetDetail = await this.trxMgr
905
+ .getRepository(entities_1.WorksheetDetail)
906
+ .createQueryBuilder('wd')
907
+ .innerJoin('wd.targetInventory', 'oi')
908
+ .innerJoinAndSelect('oi.releaseGood', 'rg')
909
+ .where('wd.id = :id', { id: worksheetDetailInfos.worksheetDetailId })
910
+ .getOne();
911
+ return worksheetDetail;
912
+ }
913
+ catch (error) {
914
+ throw error;
915
+ }
916
+ }
917
+ async picking(worksheetDetailName, worksheetType, palletId, locationName, pickedQty, binLocation, serialNumber, toteNo) {
918
+ try {
919
+ let worksheetDetail = await this.findExecutableWorksheetDetailByName(worksheetDetailName, worksheetType, [
920
+ 'worksheet',
921
+ 'worksheet.bizplace',
922
+ 'targetInventory',
923
+ 'targetInventory.releaseGood',
924
+ 'targetInventory.orderProduct',
925
+ 'targetInventory.inventory',
926
+ 'targetInventory.inventory.location',
927
+ 'targetInventory.product',
928
+ 'targetInventory.productDetail'
929
+ ]);
930
+ const releaseGood = worksheetDetail.targetInventory.releaseGood;
931
+ let targetInventory = worksheetDetail.targetInventory;
932
+ const product = targetInventory.product;
933
+ const productDetail = targetInventory.productDetail;
934
+ let inventory = targetInventory.inventory;
935
+ let targetProduct = targetInventory.orderProduct;
936
+ let bizplace = worksheetDetail.worksheet.bizplace;
937
+ // validation to prevent picking if the inventory is involved in cycle count
938
+ let inventoryCheckItem = await this.trxMgr.getRepository(sales_base_1.InventoryCheckItem).findOne({
939
+ where: {
940
+ domain: this.domain,
941
+ inventory: inventory.id,
942
+ status: (0, typeorm_1.In)([
943
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.PENDING,
944
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTING,
945
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTED,
946
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.NOT_TALLY,
947
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.MISSING,
948
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.ADDED
949
+ ])
950
+ }
951
+ });
952
+ if (inventoryCheckItem) {
953
+ throw new Error(`Inventory currently involved in an ongoing cycle count. Please complete the cycle count to proceed with picking.`);
954
+ }
955
+ //validation to prevent duplicated picking
956
+ let oiValidate = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
957
+ where: { domain: this.domain, id: targetInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING }
958
+ });
959
+ if (!oiValidate)
960
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `is done`));
961
+ //validation to prevent over release
962
+ if (inventory.qty <= 0)
963
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
964
+ if (inventory.palletId !== palletId && !(product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound))
965
+ throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
966
+ if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
967
+ if (!serialNumber || serialNumber == '') {
968
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
969
+ }
970
+ let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
971
+ where: {
972
+ inventory,
973
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
974
+ }
975
+ });
976
+ let foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).findOne({
977
+ where: { domain: this.domain, serialNumber: serialNumber, productDetail },
978
+ relations: ['product', 'productDetail', 'inventory']
979
+ });
980
+ let scannedPalletIdInventory = await this.trxMgr
981
+ .getRepository(warehouse_base_1.Inventory)
982
+ .findOne({ where: { domain: this.domain, palletId }, relations: ['productDetail'] });
983
+ if (foundSerialNumber) {
984
+ if (foundSerialNumber.outboundOrderId) {
985
+ let releaseGood = await this.trxMgr
986
+ .getRepository(sales_base_1.ReleaseGood)
987
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } });
988
+ if (releaseGood) {
989
+ throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
990
+ }
991
+ }
992
+ foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
993
+ foundSerialNumber.updater = this.user;
994
+ foundSerialNumber.outboundOrderId = releaseGood.id;
995
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
996
+ }
997
+ else {
998
+ if (totalInventoryItems >= inventory.qty) {
999
+ throw new Error('Insufficient inventory quantity to scan new serial number');
1000
+ }
1001
+ let inventoryItem = new warehouse_base_1.InventoryItem();
1002
+ inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
1003
+ inventoryItem.serialNumber = serialNumber;
1004
+ inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
1005
+ inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
1006
+ inventoryItem.outboundOrderId = releaseGood.id;
1007
+ inventoryItem.product = product;
1008
+ inventoryItem.productDetail = productDetail;
1009
+ inventoryItem.inventory = scannedPalletIdInventory;
1010
+ inventoryItem.domain = this.domain;
1011
+ foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
1012
+ }
1013
+ if (inventory.palletId !== palletId) {
1014
+ let existingOrderInv = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
1015
+ where: {
1016
+ domain: this.domain,
1017
+ inventory: scannedPalletIdInventory,
1018
+ releaseGood: releaseGood
1019
+ }
1020
+ });
1021
+ if (existingOrderInv) {
1022
+ //if replacement order inventory already existed in worksheet detail
1023
+ await this.serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber);
1024
+ }
1025
+ else if (scannedPalletIdInventory.batchId == inventory.batchId &&
1026
+ scannedPalletIdInventory.productDetail.id == productDetail.id) {
1027
+ //if replacement order inventory does not exist
1028
+ await this.serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, productDetail, worksheetDetail, foundSerialNumber);
1029
+ }
1030
+ else {
1031
+ throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
1032
+ }
1033
+ }
1034
+ }
1035
+ targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation);
1036
+ if (toteNo) {
1037
+ await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
1038
+ }
1039
+ await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty);
1040
+ const fromLocation = targetInventory.inventory.location;
1041
+ if (locationName) {
1042
+ const toLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
1043
+ where: { domain: this.domain, name: locationName },
1044
+ relations: ['warehouse']
1045
+ });
1046
+ if (!toLocation)
1047
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName));
1048
+ if (fromLocation.id !== toLocation.id) {
1049
+ inventory.location = toLocation;
1050
+ inventory.warehouse = toLocation.warehouse;
1051
+ inventory.zone = toLocation.zone;
1052
+ inventory = await this.transactionInventory(inventory, releaseGood, 0, 0, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.RELOCATE);
1053
+ }
1054
+ }
1055
+ }
1056
+ catch (error) {
1057
+ throw error;
1058
+ }
1059
+ }
1060
+ async batchPicking(taskNo, worksheetType, palletId, locationName, binLocationName, releaseQty) {
1061
+ const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
1062
+ where: { domain: this.domain, taskNo, type: worksheetType, status: constants_1.WORKSHEET_STATUS.EXECUTING }
1063
+ });
1064
+ const foundInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
1065
+ where: { domain: this.domain, palletId }
1066
+ });
1067
+ const targetInventories = await this.trxMgr.getRepository(sales_base_1.OrderInventory).find({
1068
+ where: {
1069
+ domain: this.domain,
1070
+ refWorksheetId: worksheet.id,
1071
+ status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING,
1072
+ inventory: foundInventory
1073
+ },
1074
+ relations: ['inventory', 'inventory.location', 'releaseGood']
1075
+ });
1076
+ const targetInventoryId = targetInventories.map((oi) => oi.id);
1077
+ let worksheetDetails = await this.trxMgr.getRepository(entities_1.WorksheetDetail).find({
1078
+ where: {
1079
+ domain: this.domain,
1080
+ type: worksheetType,
1081
+ status: constants_1.WORKSHEET_STATUS.EXECUTING,
1082
+ targetInventory: (0, typeorm_1.In)(targetInventoryId)
1083
+ }
1084
+ });
1085
+ const sumOfReleaseQty = targetInventories
1086
+ .map((oi) => oi.releaseQty)
1087
+ .reduce((a, b) => a + b, 0);
1088
+ if (sumOfReleaseQty != releaseQty)
1089
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `insufficient picking quantity`));
1090
+ for (var i = 0; i < targetInventories.length; i++) {
1091
+ let targetInventory = targetInventories[i];
1092
+ let inventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
1093
+ where: { domain: this.domain, id: targetInventory.inventory.id }
1094
+ });
1095
+ // validation to prevent picking if the inventory is involved in cycle count
1096
+ let inventoryCheckItem = await this.trxMgr.getRepository(sales_base_1.InventoryCheckItem).findOne({
1097
+ where: {
1098
+ domain: this.domain,
1099
+ inventory: inventory.id,
1100
+ status: (0, typeorm_1.In)([
1101
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.PENDING,
1102
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTING,
1103
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTED,
1104
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.NOT_TALLY,
1105
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.MISSING,
1106
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.ADDED
1107
+ ])
1108
+ }
1109
+ });
1110
+ if (inventoryCheckItem) {
1111
+ throw new Error(`Inventory currently involved in an ongoing cycle count. Please complete the cycle count to proceed with picking.`);
1112
+ }
1113
+ const releaseGood = targetInventory.releaseGood;
1114
+ if (inventory.palletId !== palletId)
1115
+ throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
1116
+ const leftQty = inventory.qty - targetInventory.releaseQty;
1117
+ if (leftQty < 0) {
1118
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
1119
+ }
1120
+ if (binLocationName) {
1121
+ const binLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
1122
+ where: { domain: this.domain, name: binLocationName, type: warehouse_base_1.LOCATION_TYPE.BIN }
1123
+ });
1124
+ if (!binLocation)
1125
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `invalid bin location id`));
1126
+ targetInventory.binLocation = binLocation;
1127
+ }
1128
+ targetInventory.pickedQty = targetInventory.releaseQty;
1129
+ targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
1130
+ await this.updateOrderTargets([targetInventory]);
1131
+ let updateInvObj = {
1132
+ qty: () => `"qty" - ${targetInventory.releaseQty}`,
1133
+ lockedQty: () => `"locked_qty" - ${targetInventory.releaseQty}`,
1134
+ uomValue: () => `"uom_value" - ${targetInventory.releaseUomValue}`,
1135
+ lockedUomValue: () => `"locked_uom_value" - ${targetInventory.releaseUomValue}`,
1136
+ updater: this.user,
1137
+ updatedAt: new Date()
1138
+ };
1139
+ await this.trxMgr
1140
+ .getRepository(warehouse_base_1.Inventory)
1141
+ .createQueryBuilder()
1142
+ .update(warehouse_base_1.Inventory)
1143
+ .set(updateInvObj)
1144
+ .where('id = :id', { id: targetInventory.inventory.id })
1145
+ .returning(['qty'])
1146
+ .execute();
1147
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.PICKING, -targetInventory.releaseQty, -targetInventory.releaseUomValue, this.user, this.trxMgr);
1148
+ if (leftQty === 0) {
1149
+ inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
1150
+ }
1151
+ const fromLocation = targetInventory.inventory.location;
1152
+ if (locationName) {
1153
+ const toLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
1154
+ where: { domain: this.domain, name: locationName },
1155
+ relations: ['warehouse']
1156
+ });
1157
+ if (!toLocation)
1158
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName));
1159
+ if (fromLocation.id !== toLocation.id) {
1160
+ inventory.location = toLocation;
1161
+ inventory.warehouse = toLocation.warehouse;
1162
+ inventory.zone = toLocation.zone;
1163
+ await this.transactionInventory(inventory, releaseGood, 0, 0, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.RELOCATE);
1164
+ }
1165
+ }
1166
+ }
1167
+ worksheetDetails = worksheetDetails.map((worksheetDetail) => {
1168
+ return Object.assign(Object.assign({}, worksheetDetail), { status: constants_1.WORKSHEET_STATUS.DONE, updater: this.user });
1169
+ });
1170
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetails);
1171
+ }
1172
+ async scanProductBatchPicking(taskNo, worksheetType, cartonId, productBarcode, inventory, binLocationName, pickingQty) {
1173
+ try {
1174
+ console.time(`scanProductBatchPicking:${taskNo}`);
1175
+ const worksheet = await this.trxMgr
1176
+ .getRepository(entities_1.Worksheet)
1177
+ .createQueryBuilder('worksheet')
1178
+ .innerJoinAndSelect('worksheet.worksheetDetails', 'worksheetDetails')
1179
+ .innerJoinAndSelect('worksheetDetails.targetInventory', 'targetInventory')
1180
+ .innerJoinAndSelect('targetInventory.product', 'product')
1181
+ .leftJoinAndSelect('targetInventory.productDetail', 'productDetail')
1182
+ .leftJoinAndSelect('targetInventory.inventory', 'inventory')
1183
+ .leftJoinAndSelect('inventory.location', 'location')
1184
+ .leftJoinAndSelect('targetInventory.releaseGood', 'releaseGood')
1185
+ .where('worksheet.domain_id = :domainId', { domainId: this.domain.id })
1186
+ .andWhere('worksheet.task_no = :taskNo', { taskNo })
1187
+ .andWhere('worksheet.type = :type', { type: worksheetType })
1188
+ .andWhere('worksheet.status = :status', { status: constants_1.WORKSHEET_STATUS.EXECUTING })
1189
+ .getOne();
1190
+ const worksheetDetails = worksheet.worksheetDetails;
1191
+ const productDetail = worksheetDetails
1192
+ .map(wsd => wsd.targetInventory.productDetail)
1193
+ .find(productDetail => productDetail.id === inventory.productDetail.id);
1194
+ const product = productDetail.product;
1195
+ const batchId = inventory.batchId;
1196
+ let pickedQty = pickingQty ? pickingQty : 1;
1197
+ let matchingProduct;
1198
+ const targetInventories = worksheetDetails
1199
+ .map((wsd) => wsd.targetInventory)
1200
+ .filter((targetInventory) => targetInventory.batchId === batchId &&
1201
+ targetInventory.inventory.cartonId === cartonId &&
1202
+ targetInventory.productDetail.id === productDetail.id);
1203
+ matchingProduct = await this.getDirectQty(Object.assign(Object.assign({}, productDetail), { product }), productBarcode, pickedQty);
1204
+ //validate matching product details based on scanned barcode
1205
+ if (!matchingProduct)
1206
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
1207
+ pickedQty = matchingProduct.qty;
1208
+ const sumOfReleaseQty = parseFloat(targetInventories
1209
+ .map((oi) => oi.releaseQty)
1210
+ .reduce((a, b) => a + b, 0)
1211
+ .toFixed(3));
1212
+ const sumOfPickedQty = targetInventories.map((oi) => oi.pickedQty).reduce((a, b) => a + b, 0) + pickedQty;
1213
+ if (sumOfPickedQty > sumOfReleaseQty)
1214
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
1215
+ for (var i = 0; i < targetInventories.length; i++) {
1216
+ let targetInventory = targetInventories[i];
1217
+ let inventory = targetInventory.inventory;
1218
+ const targetReleaseQty = targetInventory.releaseQty;
1219
+ const targetPickedQty = targetInventory.pickedQty;
1220
+ const releaseGood = targetInventory.releaseGood;
1221
+ if (pickedQty <= 0)
1222
+ break;
1223
+ // validation to prevent picking if the inventory is involved in cycle count
1224
+ let inventoryCheckItem = await this.trxMgr.getRepository(sales_base_1.InventoryCheckItem).findOne({
1225
+ where: {
1226
+ domain: this.domain,
1227
+ inventory: inventory.id,
1228
+ status: (0, typeorm_1.In)([
1229
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.PENDING,
1230
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTING,
1231
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTED,
1232
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.NOT_TALLY,
1233
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.MISSING,
1234
+ sales_base_1.INVENTORY_CHECK_ITEM_STATUS.ADDED
1235
+ ])
1236
+ }
1237
+ });
1238
+ if (inventoryCheckItem) {
1239
+ throw new Error(`Inventory currently involved in an ongoing cycle count. Please complete the cycle count to proceed with picking.`);
1240
+ }
1241
+ if (targetInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.PICKING &&
1242
+ targetReleaseQty > targetPickedQty &&
1243
+ pickedQty > 0) {
1244
+ let remainingAssignedQty = Math.round((pickedQty - (targetReleaseQty - targetPickedQty)) * 1000) / 1000; // -1, 0, 1
1245
+ const gapQtyRemaining = Math.round((targetReleaseQty - targetPickedQty) * 1000) / 1000; // > 0
1246
+ if (binLocationName && !(targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.binLocation)) {
1247
+ const binLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
1248
+ where: { domain: this.domain, name: binLocationName, type: warehouse_base_1.LOCATION_TYPE.BIN }
1249
+ });
1250
+ if (!binLocation)
1251
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `invalid bin location id`));
1252
+ targetInventory.binLocation = binLocation;
1253
+ }
1254
+ // pickedQty = 1, gap = 5 || pickedQty = 12, gap = 5 || pickedQty = 5, gap = 5
1255
+ targetInventory.pickedQty += pickedQty > gapQtyRemaining ? gapQtyRemaining : pickedQty;
1256
+ remainingAssignedQty = remainingAssignedQty < 0 ? 0 : remainingAssignedQty;
1257
+ if (targetInventory.pickedQty == targetReleaseQty) {
1258
+ const leftQty = inventory.qty - targetInventory.releaseQty;
1259
+ if (leftQty < 0) {
1260
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
1261
+ }
1262
+ targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
1263
+ await this.updateOrderTargets([targetInventory]);
1264
+ let updateInvObj = {
1265
+ qty: () => `"qty" - ${targetInventory.releaseQty}`,
1266
+ lockedQty: () => `"locked_qty" - ${targetInventory.releaseQty}`,
1267
+ uomValue: () => `"uom_value" - ${targetInventory.releaseUomValue}`,
1268
+ lockedUomValue: () => `"locked_uom_value" - ${targetInventory.releaseUomValue}`,
1269
+ updater: this.user,
1270
+ updatedAt: new Date()
1271
+ };
1272
+ await this.trxMgr
1273
+ .getRepository(warehouse_base_1.Inventory)
1274
+ .createQueryBuilder()
1275
+ .update(warehouse_base_1.Inventory)
1276
+ .set(updateInvObj)
1277
+ .where('id = :id', { id: targetInventory.inventory.id })
1278
+ .returning(['qty'])
1279
+ .execute();
1280
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.PICKING, -targetInventory.releaseQty, -targetInventory.releaseUomValue, this.user, this.trxMgr);
1281
+ if (leftQty === 0) {
1282
+ inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
1283
+ }
1284
+ let worksheetDetail = worksheetDetails.find((wsd) => wsd.targetInventory.id === targetInventory.id);
1285
+ worksheetDetail.status = constants_1.WORKSHEET_STATUS.DONE;
1286
+ worksheetDetail.updater = this.user;
1287
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
1288
+ }
1289
+ else {
1290
+ await this.updateOrderTargets([targetInventory]);
1291
+ }
1292
+ pickedQty = Math.round((pickedQty - (targetReleaseQty - targetPickedQty)) * 1000) / 1000;
1293
+ }
1294
+ }
1295
+ }
1296
+ catch (error) {
1297
+ env_1.logger.error(`picking-worksheet-controller[scanProductBatchPicking]: ${error}`);
1298
+ throw new Error(error);
1299
+ }
1300
+ finally {
1301
+ console.timeEnd(`scanProductBatchPicking:${taskNo}`);
1302
+ }
1303
+ }
1304
+ async completePicking(releaseGood, worksheet, inventories) {
1305
+ const foundNotSealedOrderTote = await this.trxMgr
1306
+ .getRepository(sales_base_1.OrderTote)
1307
+ .findOne({ where: { releaseGood, closedDate: (0, typeorm_1.IsNull)() } });
1308
+ if (foundNotSealedOrderTote) {
1309
+ throw new Error('Please seal the tote(s) before completing');
1310
+ }
1311
+ //check if any inventories is obsolete
1312
+ if (!releaseGood.recall) {
1313
+ let foundObsoleteInventories = await (0, utils_1.isInventoryObsolete)(inventories);
1314
+ if ((foundObsoleteInventories === null || foundObsoleteInventories === void 0 ? void 0 : foundObsoleteInventories.length) > 0) {
1315
+ return foundObsoleteInventories;
1316
+ }
1317
+ }
1318
+ await this.checkRecordValidity(worksheet, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
1319
+ let inventoryItems = await this.trxMgr
1320
+ .getRepository(warehouse_base_1.InventoryItem)
1321
+ .find({ where: { outboundOrderId: releaseGood.id } });
1322
+ if (inventoryItems.length > 0) {
1323
+ inventoryItems.forEach((itm) => {
1324
+ itm.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
1325
+ itm.updater = this.user;
1326
+ });
1327
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
1328
+ }
1329
+ let orderVas = await this.trxMgr
1330
+ .getRepository(sales_base_1.OrderVas)
1331
+ .find({ where: { releaseGood: releaseGood.id } });
1332
+ let orderStatus;
1333
+ if (orderVas && orderVas.some(vas => vas.status === sales_base_1.ORDER_VAS_STATUS.PENDING_APPROVE)) {
1334
+ throw new Error('VAS Order is in PENDING APPROVE. Kindly approve the order to proceed.');
1335
+ }
1336
+ else {
1337
+ if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
1338
+ orderStatus = sales_base_1.ORDER_STATUS.READY_TO_PACK;
1339
+ }
1340
+ else if (orderVas.length > 0) {
1341
+ orderStatus = sales_base_1.ORDER_STATUS.VAS;
1342
+ }
1343
+ else {
1344
+ orderStatus = sales_base_1.ORDER_STATUS.LOADING;
1345
+ }
1346
+ }
1347
+ (0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEventsEnum.PickingCompleted);
1348
+ return await this.completeWorksheet(worksheet, orderStatus);
1349
+ }
1350
+ async completeBatchPicking(taskNo) {
1351
+ let worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
1352
+ where: {
1353
+ domain: this.domain,
1354
+ taskNo,
1355
+ type: constants_1.WORKSHEET_TYPE.BATCH_PICKING
1356
+ },
1357
+ relations: [
1358
+ 'bizplace',
1359
+ 'bizplace.domain',
1360
+ 'worksheetDetails',
1361
+ 'worksheetDetails.targetInventory',
1362
+ 'worksheetDetails.targetInventory.releaseGood',
1363
+ 'worksheetDetails.targetInventory.inventory'
1364
+ ]
1365
+ });
1366
+ this.checkRecordValidity(worksheet, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
1367
+ worksheet.status = constants_1.WORKSHEET_STATUS.DONE;
1368
+ worksheet.endedAt = new Date();
1369
+ worksheet.updater = this.user;
1370
+ const worksheetDetails = worksheet.worksheetDetails.filter(wsD => wsD.status != 'MISSING' && wsD.status != 'CANCELLED');
1371
+ worksheetDetails.forEach((wsd) => {
1372
+ wsd.status = constants_1.WORKSHEET_STATUS.DONE;
1373
+ wsd.updater = this.user;
1374
+ });
1375
+ const targetInventories = worksheetDetails.map((wsd) => {
1376
+ let targetInventory = wsd.targetInventory;
1377
+ targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED;
1378
+ targetInventory.updater = this.user;
1379
+ return targetInventory;
1380
+ });
1381
+ const inventories = targetInventories.map((ti) => ti.inventory);
1382
+ let isRecall;
1383
+ const releaseGoods = worksheetDetails.map((wsd) => {
1384
+ let releaseGood = wsd.targetInventory.releaseGood;
1385
+ //prevent order from updating status if its in pending cancel
1386
+ if (releaseGood.status == sales_base_1.ORDER_STATUS.PENDING_CANCEL) {
1387
+ return releaseGood;
1388
+ }
1389
+ let orderStatus;
1390
+ if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
1391
+ orderStatus = sales_base_1.ORDER_STATUS.READY_TO_PACK;
1392
+ }
1393
+ else {
1394
+ orderStatus = sales_base_1.ORDER_STATUS.READY_TO_SORT;
1395
+ }
1396
+ releaseGood.status = orderStatus;
1397
+ releaseGood.updater = this.user;
1398
+ if (releaseGood.recall) {
1399
+ isRecall = true;
1400
+ }
1401
+ return releaseGood;
1402
+ });
1403
+ //check if any inventories is obsolete
1404
+ if (!isRecall) {
1405
+ let foundObsoleteInventories = await (0, utils_1.isInventoryObsolete)(inventories);
1406
+ if ((foundObsoleteInventories === null || foundObsoleteInventories === void 0 ? void 0 : foundObsoleteInventories.length) > 0) {
1407
+ return foundObsoleteInventories;
1408
+ }
1409
+ }
1410
+ worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).save(worksheet);
1411
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetails);
1412
+ await this.updateOrderTargets(targetInventories);
1413
+ await this.trxMgr.getRepository(sales_base_1.ReleaseGood).save(releaseGoods);
1414
+ for (let releaseGood of releaseGoods) {
1415
+ releaseGood.domain = this.domain;
1416
+ releaseGood.bizplace = worksheet.bizplace;
1417
+ (0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEventsEnum.PickingCompleted);
1418
+ }
1419
+ return worksheet;
1420
+ }
1421
+ async extractMatchedWorksheetDetails(worksheetDetails, standardBatchId, standardProductId, standardPackingType, standardPackingSize, relations = ['targetInventory', 'targetInventory.product']) {
1422
+ var _a, _b, _c, _d;
1423
+ for (let wsd of worksheetDetails) {
1424
+ if (!((_a = wsd.targetInventory) === null || _a === void 0 ? void 0 : _a.batchId) || !((_c = (_b = wsd.targetInventory) === null || _b === void 0 ? void 0 : _b.product) === null || _c === void 0 ? void 0 : _c.id) || !((_d = wsd.targetInventory) === null || _d === void 0 ? void 0 : _d.packingType)) {
1425
+ wsd = await this.findWorksheetDetail(wsd, ['targetInventory', 'targetInventory.product']);
1426
+ }
1427
+ }
1428
+ worksheetDetails = worksheetDetails.filter((wsd) => wsd.targetInventory.batchId === standardBatchId &&
1429
+ wsd.targetInventory.product.id === standardProductId &&
1430
+ wsd.targetInventory.packingType === standardPackingType &&
1431
+ wsd.targetInventory.packingSize === standardPackingSize);
1432
+ for (let wsd of worksheetDetails) {
1433
+ wsd = await this.findWorksheetDetail(wsd, relations);
1434
+ }
1435
+ return worksheetDetails;
1436
+ }
1437
+ async checkAndSetBinPicking(orderInventory, binLocation) {
1438
+ // bin picking validation
1439
+ if (binLocation) {
1440
+ const foundBinLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
1441
+ where: { domain: this.domain, name: binLocation, type: warehouse_base_1.LOCATION_TYPE.BIN }
1442
+ });
1443
+ if (!foundBinLocation)
1444
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `invalid bin location id`));
1445
+ orderInventory.binLocation = foundBinLocation;
1446
+ }
1447
+ return orderInventory;
1448
+ }
1449
+ async updatePickingTransaction(releaseGood, orderInventory, worksheetDetail, inventory, pickedQty) {
1450
+ var _a;
1451
+ const releaseQty = orderInventory.releaseQty;
1452
+ orderInventory.pickedQty = ((orderInventory === null || orderInventory === void 0 ? void 0 : orderInventory.pickedQty) || 0) + pickedQty;
1453
+ if (orderInventory.pickedQty == releaseQty) {
1454
+ const leftQty = inventory.qty - releaseQty;
1455
+ if (leftQty < 0) {
1456
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
1457
+ }
1458
+ orderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
1459
+ orderInventory.pickedBy = (_a = this.user) === null || _a === void 0 ? void 0 : _a.name;
1460
+ orderInventory.pickedByUser = this.user;
1461
+ orderInventory.pickedAt = new Date();
1462
+ inventory.qty -= orderInventory.releaseQty;
1463
+ inventory.uomValue = Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100;
1464
+ inventory.lockedQty = inventory.lockedQty - orderInventory.releaseQty;
1465
+ inventory.lockedUomValue = Math.round((inventory.lockedUomValue - orderInventory.releaseUomValue) * 100) / 100;
1466
+ inventory = await this.transactionInventory(inventory, releaseGood, -orderInventory.releaseQty, -orderInventory.releaseUomValue, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.PICKING);
1467
+ worksheetDetail.status = constants_1.WORKSHEET_STATUS.DONE;
1468
+ worksheetDetail.updater = this.user;
1469
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
1470
+ let inventoryItems = await this.trxMgr
1471
+ .getRepository(warehouse_base_1.InventoryItem)
1472
+ .find({ where: { outboundOrderId: releaseGood.id } });
1473
+ if (inventoryItems.length > 0) {
1474
+ inventoryItems.forEach((itm) => {
1475
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKED;
1476
+ itm.updater = this.user;
1477
+ });
1478
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
1479
+ }
1480
+ if (leftQty === 0) {
1481
+ inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
1482
+ }
1483
+ }
1484
+ await this.updateOrderTargets([orderInventory]);
1485
+ return orderInventory;
1486
+ }
1487
+ async serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber) {
1488
+ try {
1489
+ //1. update replacement inventory, order inventory, old inventory, old order inventory quantity
1490
+ let newInventory = await this.trxMgr
1491
+ .getRepository(warehouse_base_1.Inventory)
1492
+ .findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.inventoryId } });
1493
+ let newOrderInventory = await this.trxMgr
1494
+ .getRepository(sales_base_1.OrderInventory)
1495
+ .findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.id } });
1496
+ let oldInventory = await this.trxMgr
1497
+ .getRepository(warehouse_base_1.Inventory)
1498
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
1499
+ let oldOrderInventory = await this.trxMgr
1500
+ .getRepository(sales_base_1.OrderInventory)
1501
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
1502
+ //if replacement inventory quantity insufficient
1503
+ if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
1504
+ newOrderInventory.releaseQty += newInventory.qty - newInventory.lockedQty;
1505
+ newOrderInventory.releaseUomValue += newInventory.uomValue - newInventory.lockedUomValue;
1506
+ oldOrderInventory.releaseQty -= newOrderInventory.releaseQty;
1507
+ oldOrderInventory.releaseUomValue -= newOrderInventory.releaseUomValue;
1508
+ oldInventory.lockedQty -= newOrderInventory.releaseQty;
1509
+ oldInventory.lockedUomValue -= newOrderInventory.releaseUomValue;
1510
+ newInventory.lockedQty = newInventory.qty;
1511
+ newInventory.lockedUomValue = newInventory.uomValue;
1512
+ }
1513
+ else {
1514
+ newOrderInventory.releaseQty += targetInventory.releaseQty - targetInventory.pickedQty;
1515
+ newOrderInventory.releaseUomValue +=
1516
+ newOrderInventory.releaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
1517
+ oldOrderInventory.releaseQty = targetInventory.pickedQty;
1518
+ oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
1519
+ oldOrderInventory.releaseUomValue =
1520
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
1521
+ oldInventory.lockedQty -= targetInventory.releaseQty - targetInventory.pickedQty;
1522
+ oldInventory.lockedUomValue =
1523
+ oldInventory.lockedQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
1524
+ newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
1525
+ newInventory.lockedUomValue =
1526
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
1527
+ }
1528
+ newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
1529
+ newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newOrderInventory), { status: warehouse_base_1.INVENTORY_STATUS.PICKING, pickedQty: existingOrderInv.pickedQty++, updater: this.user }));
1530
+ oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
1531
+ foundSerialNumber = await this.trxMgr
1532
+ .getRepository(warehouse_base_1.InventoryItem)
1533
+ .save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
1534
+ //2. update replacement worksheet detail
1535
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
1536
+ targetInventory: existingOrderInv
1537
+ }, {
1538
+ status: constants_1.WORKSHEET_STATUS.EXECUTING,
1539
+ updater: this.user
1540
+ });
1541
+ if (oldOrderInventory.releaseQty !== 0) {
1542
+ oldOrderInventory = await this.trxMgr
1543
+ .getRepository(sales_base_1.OrderInventory)
1544
+ .save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
1545
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
1546
+ name: worksheetDetail.name
1547
+ }, {
1548
+ status: constants_1.WORKSHEET_STATUS.DONE,
1549
+ updater: this.user
1550
+ });
1551
+ }
1552
+ else {
1553
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.ild);
1554
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
1555
+ }
1556
+ }
1557
+ catch (e) {
1558
+ env_1.logger.error(`picking-worksheet-controller[serialNumberReplacementForExistingOrderInv]: ${e}`);
1559
+ }
1560
+ }
1561
+ async serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, productDetail, worksheetDetail, foundSerialNumber) {
1562
+ try {
1563
+ //1. create new inventory, new order inventory, update old inventory, old order inventory quantity
1564
+ let newInventory = await this.trxMgr
1565
+ .getRepository(warehouse_base_1.Inventory)
1566
+ .findOne({ where: { id: scannedPalletIdInventory === null || scannedPalletIdInventory === void 0 ? void 0 : scannedPalletIdInventory.id } });
1567
+ let oldInventory = await this.trxMgr
1568
+ .getRepository(warehouse_base_1.Inventory)
1569
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
1570
+ let oldOrderInventory = await this.trxMgr
1571
+ .getRepository(sales_base_1.OrderInventory)
1572
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
1573
+ let newOrderInventoryReleaseQty = 0;
1574
+ let newOrderInventoryReleaseUomValue = 0;
1575
+ //if replacement inventory quantity insufficient
1576
+ if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
1577
+ newOrderInventoryReleaseQty = newInventory.qty - newInventory.lockedQty;
1578
+ newOrderInventoryReleaseUomValue = newInventory.uomValue - newInventory.lockedUomValue;
1579
+ oldOrderInventory.releaseQty -= newOrderInventoryReleaseQty;
1580
+ oldOrderInventory.releaseUomValue -= newOrderInventoryReleaseUomValue;
1581
+ oldInventory.lockedQty -= newOrderInventoryReleaseQty;
1582
+ oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
1583
+ newInventory.lockedQty = newInventory.qty;
1584
+ newInventory.lockedUomValue = newInventory.uomValue;
1585
+ }
1586
+ else {
1587
+ newOrderInventoryReleaseQty = targetInventory.releaseQty - targetInventory.pickedQty;
1588
+ newOrderInventoryReleaseUomValue =
1589
+ newOrderInventoryReleaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
1590
+ oldOrderInventory.releaseQty = targetInventory.pickedQty;
1591
+ oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
1592
+ oldOrderInventory.releaseUomValue =
1593
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
1594
+ oldInventory.lockedQty -= newOrderInventoryReleaseQty;
1595
+ oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
1596
+ newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
1597
+ newInventory.lockedUomValue =
1598
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
1599
+ }
1600
+ newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
1601
+ let newTargetInventory = ((_a) => {
1602
+ var { id } = _a, targetInventory = __rest(_a, ["id"]);
1603
+ return targetInventory;
1604
+ })(targetInventory);
1605
+ let newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newTargetInventory), { domain: this.domain, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood, releaseQty: newOrderInventoryReleaseQty, releaseUomValue: newOrderInventoryReleaseUomValue, pickedQty: 1, product,
1606
+ productDetail, inventory: scannedPalletIdInventory, creator: this.user, updater: this.user }));
1607
+ oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
1608
+ foundSerialNumber = await this.trxMgr
1609
+ .getRepository(warehouse_base_1.InventoryItem)
1610
+ .save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
1611
+ //3. create new worksheet detail
1612
+ let NewWorksheetDetail = ((_a) => {
1613
+ var { id } = _a, worksheetDetail = __rest(_a, ["id"]);
1614
+ return worksheetDetail;
1615
+ })(worksheetDetail);
1616
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(Object.assign(Object.assign({}, NewWorksheetDetail), { domain: this.domain, name: utils_1.WorksheetNoGenerator.pickingDetail(), targetInventory: newOrderInventory, status: constants_1.WORKSHEET_STATUS.EXECUTING, creator: this.user, updater: this.user }));
1617
+ //if old order inventory release quantity is 0 then delete
1618
+ if (oldOrderInventory.releaseQty !== 0) {
1619
+ oldOrderInventory = await this.trxMgr
1620
+ .getRepository(sales_base_1.OrderInventory)
1621
+ .save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
1622
+ //4. update old worksheet detail
1623
+ worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
1624
+ name: worksheetDetail.name
1625
+ }, {
1626
+ status: constants_1.WORKSHEET_STATUS.DONE,
1627
+ updater: this.user
1628
+ });
1629
+ }
1630
+ else {
1631
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.id);
1632
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
1633
+ }
1634
+ }
1635
+ catch (e) {
1636
+ env_1.logger.error(`picking-worksheet-controller[serialNumberReplacement]: ${e}`);
1637
+ }
1638
+ }
1639
+ async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
1640
+ //1. find tote
1641
+ let foundTote = await this.trxMgr
1642
+ .getRepository(warehouse_base_1.Tote)
1643
+ .findOne({ where: { bizplace, name: toteNo, deletedAt: (0, typeorm_1.IsNull)() } });
1644
+ if ((foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DAMAGED || (foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DISPATCHED) {
1645
+ foundTote = null;
1646
+ }
1647
+ //2. find order tote
1648
+ let foundOrderTote = await this.trxMgr
1649
+ .getRepository(sales_base_1.OrderTote)
1650
+ .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
1651
+ //if order tote not found the create one, if tote not found means it's tote box
1652
+ //create order tote item
1653
+ if (!foundOrderTote) {
1654
+ const orderTote = await this.trxMgr.getRepository(sales_base_1.OrderTote).save({
1655
+ name: toteNo,
1656
+ domain: this.domain,
1657
+ releaseGood,
1658
+ tote: foundTote ? foundTote : null,
1659
+ updater: this.user
1660
+ });
1661
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
1662
+ domain: this.domain,
1663
+ name: sales_base_1.OrderNoGenerator.orderToteItem(),
1664
+ orderProduct: targetProduct,
1665
+ orderInventory: targetInventory,
1666
+ orderTote,
1667
+ qty: pickedQty,
1668
+ updater: this.user
1669
+ });
1670
+ }
1671
+ else {
1672
+ if (foundOrderTote.closedDate) {
1673
+ throw new Error('Tote has been sealed, please try another tote!');
1674
+ }
1675
+ //if found order tote then check if order tote item exist
1676
+ const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOne({
1677
+ domain: this.domain,
1678
+ orderProduct: targetProduct,
1679
+ orderInventory: targetInventory,
1680
+ orderTote: foundOrderTote
1681
+ });
1682
+ //if not order tote item doesnt exist then create one
1683
+ if (!foundOrderToteItem) {
1684
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
1685
+ domain: this.domain,
1686
+ name: sales_base_1.OrderNoGenerator.orderToteItem(),
1687
+ orderProduct: targetProduct,
1688
+ orderInventory: targetInventory,
1689
+ orderTote: foundOrderTote,
1690
+ qty: pickedQty,
1691
+ updater: this.user
1692
+ });
1693
+ }
1694
+ else {
1695
+ //if found order tote item found then add the quantity
1696
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save(Object.assign(Object.assign({}, foundOrderToteItem), { qty: foundOrderToteItem.qty + pickedQty }));
1697
+ }
1698
+ }
1699
+ }
1700
+ async undoSerialNumberPicking(worksheetDetailName, inventoryItemId) {
1701
+ const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
1702
+ where: { name: worksheetDetailName, domain: this.domain, status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(constants_1.WORKSHEET_STATUS.DEACTIVATED)) },
1703
+ relations: [
1704
+ 'worksheet',
1705
+ 'worksheet.releaseGood',
1706
+ 'targetInventory',
1707
+ 'targetInventory.product',
1708
+ 'targetInventory.inventory'
1709
+ ]
1710
+ });
1711
+ let targetInventory = worksheetDetail.targetInventory;
1712
+ let releaseGood = worksheetDetail.worksheet.releaseGood;
1713
+ if (targetInventory.releaseQty == targetInventory.pickedQty &&
1714
+ targetInventory.status == sales_base_1.ORDER_INVENTORY_STATUS.PICKED) {
1715
+ targetInventory.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
1716
+ await this.trxMgr
1717
+ .getRepository(entities_1.WorksheetDetail)
1718
+ .update({ id: worksheetDetail.id }, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
1719
+ targetInventory.inventory.qty += targetInventory.releaseQty;
1720
+ targetInventory.inventory.uomValue =
1721
+ Math.round((targetInventory.inventory.uomValue + targetInventory.releaseUomValue) * 100) / 100;
1722
+ targetInventory.inventory.lockedQty = targetInventory.inventory.lockedQty + targetInventory.releaseQty;
1723
+ targetInventory.inventory.lockedUomValue =
1724
+ Math.round((targetInventory.inventory.lockedUomValue + targetInventory.releaseUomValue) * 100) / 100;
1725
+ await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(targetInventory.inventory);
1726
+ }
1727
+ let InventoryItems = await this.trxMgr
1728
+ .getRepository(warehouse_base_1.InventoryItem)
1729
+ .find({ where: { outboundOrderId: releaseGood.id } });
1730
+ let removeInventoryItem = await this.trxMgr
1731
+ .getRepository(warehouse_base_1.InventoryItem)
1732
+ .findOne({ where: { id: inventoryItemId } });
1733
+ if (InventoryItems.length > 0) {
1734
+ InventoryItems.forEach((itm) => {
1735
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
1736
+ itm.updater = this.user;
1737
+ });
1738
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(InventoryItems);
1739
+ }
1740
+ if (removeInventoryItem.source == warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND) {
1741
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).delete(removeInventoryItem.id);
1742
+ }
1743
+ else {
1744
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).update({
1745
+ id: inventoryItemId
1746
+ }, {
1747
+ status: warehouse_base_1.INVENTORY_STATUS.STORED,
1748
+ outboundOrderId: null,
1749
+ updater: this.user
1750
+ });
1751
+ }
1752
+ targetInventory.pickedQty--;
1753
+ targetInventory.updater = this.user;
1754
+ await this.updateOrderTargets([targetInventory]);
1755
+ }
1756
+ async sealTote(sealNo, toteNo, orderNo) {
1757
+ const checkDuplicateSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).findOne({
1758
+ where: {
1759
+ name: sealNo
1760
+ }
1761
+ });
1762
+ if (checkDuplicateSeal) {
1763
+ throw new Error('Seal has been scanned before');
1764
+ }
1765
+ const releaseGood = await this.trxMgr
1766
+ .getRepository(sales_base_1.ReleaseGood)
1767
+ .findOne({ where: { domain: this.domain, name: orderNo }, relations: ['bizplace', 'bizplace.domain'] });
1768
+ let sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
1769
+ where: {
1770
+ domain: releaseGood.bizplace.domain,
1771
+ name: 'minimum-seal-number'
1772
+ }
1773
+ });
1774
+ if (!sealNoSetting) {
1775
+ sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
1776
+ where: {
1777
+ domain: this.domain,
1778
+ name: 'minimum-seal-number'
1779
+ }
1780
+ });
1781
+ }
1782
+ const foundOrderTote = await this.trxMgr
1783
+ .getRepository(sales_base_1.OrderTote)
1784
+ .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
1785
+ if (!foundOrderTote) {
1786
+ throw new Error('Tote not scanned under this order');
1787
+ }
1788
+ let totalOrderToteItems = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).count({
1789
+ where: {
1790
+ orderTote: foundOrderTote
1791
+ }
1792
+ });
1793
+ if (totalOrderToteItems < 1) {
1794
+ throw new Error('Tote carton is empty');
1795
+ }
1796
+ const newToteOrderSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).save({
1797
+ domain: this.domain,
1798
+ name: sealNo,
1799
+ orderTote: foundOrderTote,
1800
+ updater: this.user
1801
+ });
1802
+ const totalSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).count({
1803
+ orderTote: foundOrderTote
1804
+ });
1805
+ if (totalSeal >= parseInt((sealNoSetting === null || sealNoSetting === void 0 ? void 0 : sealNoSetting.value) || 0)) {
1806
+ await this.trxMgr.getRepository(sales_base_1.OrderTote).save(Object.assign(Object.assign({}, foundOrderTote), { closedDate: new Date() }));
1807
+ }
1808
+ }
1809
+ async assignInventoriesForUnassignedOrder(worksheet, tx) {
1810
+ var _a, _b;
1811
+ const releaseGood = worksheet.releaseGood;
1812
+ const orderProducts = releaseGood.orderProducts;
1813
+ let finalOrderInventories = [];
1814
+ let newWorksheetDetails = [];
1815
+ const transaction = tx ? tx : this.trxMgr;
1816
+ const inventoryAssignmentSetting = await transaction
1817
+ .getRepository(setting_base_1.Setting)
1818
+ .findOne({ where: { domain: this.domain, name: 'rule-for-inventory-assignment' } });
1819
+ for (let op of orderProducts) {
1820
+ let locationSortingRules = [];
1821
+ if (inventoryAssignmentSetting) {
1822
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value);
1823
+ for (const key in locationSetting) {
1824
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true });
1825
+ }
1826
+ }
1827
+ let assignedOrderInventories = await sales_base_1.InventoryUtil.autoAssignInventoryForRelease(op, op.productDetail.product, op.productDetail, locationSortingRules, releaseGood.bizplace, this.domain, transaction, op.batchId);
1828
+ assignedOrderInventories = assignedOrderInventories.map(aoi => {
1829
+ delete aoi.id;
1830
+ return Object.assign(Object.assign({}, aoi), { orderProduct: op, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING, name: sales_base_1.OrderNoGenerator.orderInventory(), domain: this.domain, bizplace: { id: releaseGood.bizplace.id }, releaseGood });
1831
+ });
1832
+ finalOrderInventories.push(...assignedOrderInventories);
1833
+ await transaction
1834
+ .getRepository(sales_base_1.OrderProduct)
1835
+ .update({ id: op.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user });
1836
+ }
1837
+ for (let oi of finalOrderInventories) {
1838
+ // update inventory locked qty and uom value
1839
+ oi = await transaction.getRepository(sales_base_1.OrderInventory).save(Object.assign({}, oi));
1840
+ await transaction.getRepository(warehouse_base_1.Inventory).update(oi.inventory.id, {
1841
+ lockedQty: (((_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.lockedQty) || 0) + oi.releaseQty,
1842
+ lockedUomValue: (((_b = oi.inventory) === null || _b === void 0 ? void 0 : _b.lockedUomValue) || 0) + oi.releaseUomValue,
1843
+ updater: this.user
1844
+ });
1845
+ await transaction
1846
+ .getRepository(warehouse_base_1.ProductDetailStock)
1847
+ .createQueryBuilder()
1848
+ .update(warehouse_base_1.ProductDetailStock)
1849
+ .set({
1850
+ unassignedQty: () => `"unassigned_qty" - ${oi.releaseQty}`,
1851
+ unassignedUomValue: () => `"unassigned_uom_value" - ${oi.releaseUomValue}`
1852
+ })
1853
+ .where({ productDetail: oi.productDetail.id })
1854
+ .execute();
1855
+ const worksheetDetail = Object.assign(new entities_1.WorksheetDetail(), {
1856
+ domain: this.domain,
1857
+ bizplace: { id: releaseGood.bizplace.id },
1858
+ worksheet,
1859
+ name: utils_1.WorksheetNoGenerator.pickingDetail(),
1860
+ seq: 0,
1861
+ targetInventory: oi,
1862
+ targetProduct: oi.orderProduct,
1863
+ type: constants_1.WORKSHEET_TYPE.PICKING,
1864
+ status: constants_1.WORKSHEET_STATUS.DEACTIVATED,
1865
+ creator: this.user,
1866
+ updater: this.user
1867
+ });
1868
+ newWorksheetDetails.push(worksheetDetail);
1869
+ }
1870
+ newWorksheetDetails = await transaction.getRepository(entities_1.WorksheetDetail).save(newWorksheetDetails);
1871
+ return newWorksheetDetails;
1872
+ }
1873
+ async assignInventoriesForUnassignedMergedOrder(worksheet) {
1874
+ //const releaseGood = worksheet.releaseGood
1875
+ const orderProducts = worksheet.worksheetDetails
1876
+ .filter(itm => itm.targetProduct.releaseGood.assignedInventory == false)
1877
+ .map(wsd => wsd.targetProduct);
1878
+ const releaseGoodIds = [...new Set(orderProducts.map(op => op.releaseGood.id))];
1879
+ let newWorksheetDetails = [];
1880
+ const inventoryAssignmentSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
1881
+ where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
1882
+ });
1883
+ for (let i = 0; i < orderProducts.length; i++) {
1884
+ let pInventoryList = (0, utils_1.inventoriesByStrategy)(Object.assign(Object.assign({}, orderProducts[i]), { worksheetId: worksheet.id, bizplaceId: worksheet.bizplace.id, locationSortingRules: inventoryAssignmentSetting ? JSON.parse(inventoryAssignmentSetting.value) : false, pickingStrategy: orderProducts[i].product.pickingStrategy }), this.domain, this.trxMgr);
1885
+ let idx = 0;
1886
+ let [inventoryList] = await Promise.all([pInventoryList]);
1887
+ let { releaseQty, releaseUomValue } = orderProducts[i];
1888
+ while (releaseQty > 0 && idx < inventoryList.items.length) {
1889
+ let targetInventory = await this.trxMgr
1890
+ .getRepository(warehouse_base_1.Inventory)
1891
+ .findOne({ where: { id: inventoryList.items[idx].id } });
1892
+ let inventoryAvailableQty = targetInventory.qty - ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.lockedQty) || 0);
1893
+ let inventoryAvailableUomValue = targetInventory.uomValue - ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.lockedUomValue) || 0);
1894
+ if (inventoryAvailableQty > 0) {
1895
+ let allocatedQty = 0, allocatedUomValue = 0;
1896
+ if (inventoryAvailableQty < releaseQty) {
1897
+ idx = idx + 1;
1898
+ allocatedQty = inventoryAvailableQty;
1899
+ allocatedUomValue = inventoryAvailableUomValue;
1900
+ }
1901
+ else {
1902
+ allocatedQty = releaseQty;
1903
+ allocatedUomValue = releaseUomValue;
1904
+ }
1905
+ releaseQty = releaseQty - allocatedQty;
1906
+ releaseUomValue = releaseUomValue - allocatedUomValue;
1907
+ //// Update inventory locked quantity
1908
+ await this.trxMgr
1909
+ .getRepository(warehouse_base_1.Inventory)
1910
+ .createQueryBuilder('inv')
1911
+ .update(warehouse_base_1.Inventory)
1912
+ .set({
1913
+ lockedUomValue: () => `COALESCE(locked_uom_value,0) + ${allocatedUomValue}`,
1914
+ lockedQty: () => `COALESCE(locked_qty,0) + ${allocatedQty}`
1915
+ })
1916
+ .where('id = :id', { id: targetInventory.id })
1917
+ .execute();
1918
+ // update product detail stock deduct unassigned qty and unassigned uom value
1919
+ await this.trxMgr
1920
+ .getRepository(warehouse_base_1.ProductDetailStock)
1921
+ .createQueryBuilder()
1922
+ .update(warehouse_base_1.ProductDetailStock)
1923
+ .set({
1924
+ unassignedQty: () => `"unassigned_qty" - ${allocatedQty}`,
1925
+ unassignedUomValue: () => `"unassigned_uom_value" - ${allocatedUomValue}`
1926
+ })
1927
+ .where({ productDetail: orderProducts[i].productDetail.id })
1928
+ .execute();
1929
+ // update order product status to ASSIGNED
1930
+ await this.trxMgr
1931
+ .getRepository(sales_base_1.OrderProduct)
1932
+ .update({ id: orderProducts[i].id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user });
1933
+ // Create new order inventory with status -> READY_TO_PICK, type -> RELEASE_OF_GOODS
1934
+ let newTargetInventory = new sales_base_1.OrderInventory();
1935
+ newTargetInventory = {
1936
+ domain: this.domain,
1937
+ bizplace: orderProducts[i].bizplace,
1938
+ name: sales_base_1.OrderNoGenerator.orderInventory(),
1939
+ releaseGood: orderProducts[i].releaseGood,
1940
+ batchId: targetInventory.batchId,
1941
+ status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING,
1942
+ type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS,
1943
+ refWorksheetId: worksheet.id,
1944
+ product: orderProducts[i].product,
1945
+ productDetail: orderProducts[i].productDetail,
1946
+ packingType: orderProducts[i].packingType,
1947
+ packingSize: parseFloat(orderProducts[i].packingSize),
1948
+ creator: this.user,
1949
+ inventory: targetInventory,
1950
+ releaseQty: allocatedQty,
1951
+ releaseUomValue: allocatedUomValue,
1952
+ uom: orderProducts[i].uom,
1953
+ orderProduct: orderProducts[i]
1954
+ };
1955
+ newTargetInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(newTargetInventory);
1956
+ if (idx == 0) {
1957
+ let updatedWorksheetDetail = Object.assign(Object.assign({}, worksheet.worksheetDetails[i]), { targetInventory: newTargetInventory, worksheet, bizplace: worksheet.bizplace, domain: this.domain, updater: this.user, creator: this.user });
1958
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).update(worksheet.worksheetDetails[i].id, {
1959
+ targetInventory: newTargetInventory,
1960
+ worksheet,
1961
+ bizplace: worksheet.bizplace,
1962
+ domain: this.domain,
1963
+ updater: this.user,
1964
+ creator: this.user
1965
+ });
1966
+ newWorksheetDetails.push(updatedWorksheetDetail);
1967
+ }
1968
+ else {
1969
+ let newWorksheetDetail = Object.assign(Object.assign({}, worksheet.worksheetDetails[i]), { name: utils_1.WorksheetNoGenerator.batchPickingDetail(), targetInventory: newTargetInventory, worksheet, bizplace: worksheet.bizplace, domain: this.domain, updater: this.user, creator: this.user });
1970
+ delete newWorksheetDetail.id;
1971
+ newWorksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(newWorksheetDetail);
1972
+ newWorksheetDetails.push(newWorksheetDetail);
1973
+ }
1974
+ }
1975
+ else {
1976
+ idx = idx + 1;
1977
+ }
1978
+ }
1979
+ await this.trxMgr.getRepository(sales_base_1.ReleaseGood).update(releaseGoodIds, { assignedInventory: true });
1980
+ }
1981
+ return newWorksheetDetails;
1982
+ }
1983
+ async activateBulkWorksheets(bizplaceId, worksheetIds) {
1984
+ var _a, _b;
1985
+ const updatedWs = [];
1986
+ try {
1987
+ for (const worksheetId of worksheetIds) {
1988
+ try {
1989
+ let worksheet;
1990
+ let releaseGood;
1991
+ let newReleaseGood;
1992
+ let domain;
1993
+ await (0, typeorm_1.getManager)().transaction(async (tx) => {
1994
+ var _a;
1995
+ const worksheetRepo = tx.getRepository(entities_1.Worksheet);
1996
+ worksheet = await worksheetRepo.findOne({
1997
+ where: { id: worksheetId, bizplace: bizplaceId },
1998
+ relations: [
1999
+ 'domain',
2000
+ 'bizplace',
2001
+ 'bizplace.company',
2002
+ 'bizplace.company.domain',
2003
+ 'releaseGood',
2004
+ 'releaseGood.bizplace',
2005
+ 'releaseGood.domain',
2006
+ 'releaseGood.lastMileDelivery',
2007
+ 'releaseGood.bizplace.domain',
2008
+ 'worksheetDetails',
2009
+ 'worksheetDetails.targetInventory',
2010
+ 'worksheetDetails.targetInventory.product'
2011
+ ]
2012
+ });
2013
+ let worksheetDetails;
2014
+ let orderProducts = await tx.getRepository(sales_base_1.OrderProduct).find({
2015
+ where: { releaseGood: worksheet.releaseGood },
2016
+ relations: [
2017
+ 'product',
2018
+ 'productDetail',
2019
+ 'productBundle',
2020
+ 'productBundle.productBundleSettings',
2021
+ 'productBundle.productBundleSettings.productDetail',
2022
+ 'productDetail.product'
2023
+ ]
2024
+ });
2025
+ let orderPackages = await tx.getRepository(sales_base_1.OrderPackage).find({
2026
+ where: { releaseGood: worksheet.releaseGood },
2027
+ relations: [
2028
+ 'orderPackageItems',
2029
+ 'orderPackageItems.productDetail',
2030
+ 'orderPackageItems.orderProduct',
2031
+ 'orderPackageItems.orderProduct.product',
2032
+ 'orderPackageItems.orderProduct.product.productDetails'
2033
+ ]
2034
+ });
2035
+ let orderConsignments = await tx.getRepository(sales_base_1.OrderConsignment).find({
2036
+ where: { releaseGood: worksheet.releaseGood },
2037
+ relations: [
2038
+ 'orderPackages',
2039
+ 'orderPackages.orderPackageItems',
2040
+ 'orderPackages.orderPackageItems.orderProduct',
2041
+ 'orderPackages.orderPackageItems.orderProduct.product',
2042
+ 'orderPackages.orderPackageItems.orderProduct.product.productDetails'
2043
+ ]
2044
+ });
2045
+ worksheet.releaseGood = Object.assign(Object.assign({}, worksheet.releaseGood), { orderProducts, orderPackages, orderConsignments });
2046
+ if (worksheet.type === constants_1.WORKSHEET_TYPE.PICKING) {
2047
+ if (((_a = worksheet.releaseGood) === null || _a === void 0 ? void 0 : _a.assignedInventory) == false) {
2048
+ worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet, tx);
2049
+ worksheet.worksheetDetails = worksheetDetails;
2050
+ worksheet.releaseGood.assignedInventory = true;
2051
+ }
2052
+ else {
2053
+ worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED');
2054
+ const targetInventoryIds = worksheetDetails.map((wsd) => wsd.targetInventory.id);
2055
+ await tx.getRepository(sales_base_1.OrderInventory).update({ id: (0, typeorm_1.In)(targetInventoryIds) }, {
2056
+ status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING,
2057
+ updater: this.user
2058
+ });
2059
+ }
2060
+ await tx.getRepository(sales_base_1.ReleaseGood).update({ id: worksheet.releaseGood.id }, {
2061
+ status: sales_base_1.ORDER_STATUS.PICKING,
2062
+ updater: this.user,
2063
+ assignedInventory: true
2064
+ });
2065
+ }
2066
+ else {
2067
+ worksheetDetails = worksheet.worksheetDetails;
2068
+ }
2069
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [], tx);
2070
+ releaseGood = worksheet.releaseGood;
2071
+ domain = worksheet.domain;
2072
+ //updatedWs.push(worksheet)
2073
+ });
2074
+ const orderSource = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.source;
2075
+ switch (orderSource) {
2076
+ //disable temporary to prevent duplicates call
2077
+ case auth_base_1.ApplicationType.SELLERCRAFT:
2078
+ // getManager().transaction(async txMgr => {
2079
+ // const sellercraft: Sellercraft = await txMgr
2080
+ // .getRepository(Sellercraft)
2081
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
2082
+ // if (sellercraft) {
2083
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(
2084
+ // txMgr,
2085
+ // this.domain,
2086
+ // this.user
2087
+ // )
2088
+ // if (!releaseGood?.orderPackages?.length) {
2089
+ // const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
2090
+ // where: { releaseGood },
2091
+ // relations: ['product', 'product.productDetails', 'productDetail']
2092
+ // })
2093
+ // // asynchronously pack order
2094
+ // await sellercraftCtrl.packOrder(sellercraft, {
2095
+ // ...releaseGood,
2096
+ // orderProducts,
2097
+ // domain: domain
2098
+ // })
2099
+ // }
2100
+ // }
2101
+ // })
2102
+ break;
2103
+ case auth_base_1.ApplicationType.POWRUP:
2104
+ await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
2105
+ var _a;
2106
+ const powrup = await txMgr.getRepository(integration_powrup_1.Powrup).findOne({ active: true, platform: 'POWRUP' });
2107
+ if (powrup) {
2108
+ const powrupCtrl = new sales_base_1.PowrupController();
2109
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
2110
+ const orderProducts = await txMgr.getRepository(sales_base_1.OrderProduct).find({
2111
+ where: { releaseGood },
2112
+ relations: ['product', 'productDetail']
2113
+ });
2114
+ // asynchronously pack order
2115
+ newReleaseGood = await powrupCtrl.packOrder(powrup, Object.assign(Object.assign({}, releaseGood), { orderProducts }), domain, this.user, txMgr);
2116
+ }
2117
+ }
2118
+ });
2119
+ break;
2120
+ case auth_base_1.ApplicationType.WEBSPERT:
2121
+ // Trigger Whole Order Process
2122
+ sales_base_1.WebspertController.triggerOrderProcesses(releaseGood, this.domain, this.user);
2123
+ break;
2124
+ case auth_base_1.ApplicationType.MMS:
2125
+ break;
2126
+ default:
2127
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length)) {
2128
+ let mps = (_b = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lastMileDelivery) === null || _b === void 0 ? void 0 : _b.mps;
2129
+ switch (mps) {
2130
+ case true:
2131
+ newReleaseGood = await splitOrderConsignment(this.trxMgr, releaseGood, this.user, this.domain);
2132
+ break;
2133
+ case false:
2134
+ case undefined:
2135
+ let orderConsignment = await createOrderConsignment(this.trxMgr, {}, releaseGood, this.user);
2136
+ let orderPackage = {
2137
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
2138
+ packageId: null,
2139
+ trackingNo: null,
2140
+ transporter: null,
2141
+ airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null,
2142
+ invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
2143
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2144
+ releaseGood,
2145
+ domain: releaseGood.domain,
2146
+ bizplace: releaseGood.bizplace,
2147
+ creator: this.user,
2148
+ updater: this.user,
2149
+ orderConsignment: orderConsignment
2150
+ };
2151
+ newReleaseGood = await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage);
2152
+ break;
2153
+ }
2154
+ }
2155
+ break;
2156
+ }
2157
+ worksheet.releaseGood = newReleaseGood ? newReleaseGood : releaseGood;
2158
+ updatedWs.push(worksheet);
2159
+ }
2160
+ catch (e) {
2161
+ env_1.logger.error(`picking-worksheet-controller[activateBulkWorksheets]: ( WorksheetId: ${worksheetId}, Error: ${e})`);
2162
+ }
2163
+ }
2164
+ }
2165
+ catch (e) {
2166
+ console.log(e);
2167
+ }
2168
+ return updatedWs;
2169
+ }
2170
+ }
2171
+ exports.PickingWorksheetController = PickingWorksheetController;
2172
+ async function createOrderPackageAndItems(tx, releaseGood, orderPackage) {
2173
+ try {
2174
+ let savedOrderPackage = await tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
2175
+ const orderPackageItems = releaseGood.orderProducts
2176
+ .map(op => {
2177
+ if (op.product) {
2178
+ return {
2179
+ id: (0, uuid_1.v4)(),
2180
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2181
+ orderProduct: op,
2182
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2183
+ releaseQty: op.releaseQty,
2184
+ orderPackage: savedOrderPackage,
2185
+ domain: releaseGood.domain,
2186
+ bizplace: releaseGood.bizplace,
2187
+ creator: releaseGood.creator,
2188
+ updater: releaseGood.updater,
2189
+ productDetail: op.productDetail
2190
+ };
2191
+ }
2192
+ else {
2193
+ let productBundle = op.productBundle;
2194
+ return productBundle.productBundleSettings.map(pbs => ({
2195
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2196
+ orderProduct: op,
2197
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2198
+ releaseQty: op.releaseQty * pbs.bundleQty,
2199
+ orderPackage: savedOrderPackage,
2200
+ domain: releaseGood.domain,
2201
+ bizplace: releaseGood.bizplace,
2202
+ creator: releaseGood.creator,
2203
+ updater: releaseGood.updater,
2204
+ productDetail: pbs.productDetail
2205
+ }));
2206
+ }
2207
+ })
2208
+ .flat();
2209
+ await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
2210
+ orderPackage.orderPackageItems = orderPackageItems;
2211
+ releaseGood.orderPackages = [orderPackage];
2212
+ return releaseGood;
2213
+ }
2214
+ catch (e) {
2215
+ env_1.logger.error(`error:${e}`);
2216
+ }
2217
+ }
2218
+ exports.createOrderPackageAndItems = createOrderPackageAndItems;
2219
+ async function splitOrderConsignment(tx, releaseGood, user, domain) {
2220
+ try {
2221
+ let currentConsignment = { id: (0, uuid_1.v4)(), totalWeight: 0, orderPackages: [] };
2222
+ let totalConsignments = [];
2223
+ let currOrderProducts = [];
2224
+ let totalConsignmentWeight = 0;
2225
+ let orderProducts = releaseGood.orderProducts;
2226
+ let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight;
2227
+ //sort product according to packingType
2228
+ let sortOrderProducts = await sortingProduct(orderProducts);
2229
+ //initialise new orderConsignment created
2230
+ const createdNewConsignment = () => ({
2231
+ id: (0, uuid_1.v4)(),
2232
+ totalWeight: 0,
2233
+ orderPackages: []
2234
+ });
2235
+ //push orderPackage & packageItems into consigment
2236
+ const createPackageConsignment = (consignment, packageWeight, releaseGood, orderProduct, releaseQty, user) => {
2237
+ consignment.totalWeight += packageWeight;
2238
+ currentConsignment.orderPackages.push({
2239
+ id: (0, uuid_1.v4)(),
2240
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
2241
+ packageId: null,
2242
+ trackingNo: null,
2243
+ transporter: null,
2244
+ airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null,
2245
+ invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
2246
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2247
+ releaseGood,
2248
+ domain: releaseGood.domain,
2249
+ bizplace: releaseGood.bizplace,
2250
+ creator: user,
2251
+ updater: user,
2252
+ orderPackageItems: [
2253
+ {
2254
+ id: (0, uuid_1.v4)(),
2255
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2256
+ releaseQty: releaseQty,
2257
+ orderProduct: orderProduct,
2258
+ domain: releaseGood.domain,
2259
+ bizplace: releaseGood.bizplace,
2260
+ creator: releaseGood.creator,
2261
+ updater: releaseGood.updater,
2262
+ productDetail: orderProduct.productDetail
2263
+ }
2264
+ ]
2265
+ });
2266
+ };
2267
+ const createPackage = op => {
2268
+ let releaseQty = op.productDetail.packingType.toLowerCase() === 'carton' ? 1 : op.releaseQty;
2269
+ let packageWeight = op.productDetail.packingType.toLowerCase() === 'carton'
2270
+ ? op.productDetail.grossWeight
2271
+ : op.productDetail.grossWeight * releaseQty;
2272
+ const isCarton = op.productDetail.packingType.toLowerCase() === 'carton';
2273
+ totalConsignmentWeight += packageWeight;
2274
+ const requiresNewConsignment = totalConsignmentWeight >= maxConsignmentWeight;
2275
+ if (isCarton || op.releaseQty > 1) {
2276
+ if (requiresNewConsignment) {
2277
+ //push the current consignment to create new consignment
2278
+ totalConsignments.push(currentConsignment);
2279
+ //Initialise the totalConsignment weight to the new data
2280
+ totalConsignmentWeight = packageWeight + 0;
2281
+ currentConsignment = createdNewConsignment();
2282
+ }
2283
+ createPackageConsignment(currentConsignment, packageWeight, releaseGood, op, releaseQty, user);
2284
+ }
2285
+ else {
2286
+ currOrderProducts.push(op);
2287
+ }
2288
+ };
2289
+ sortOrderProducts.forEach(item => {
2290
+ if (item.packingType.toLowerCase() === 'carton') {
2291
+ for (let i = 0; i < item.releaseQty; i++) {
2292
+ createPackage(item);
2293
+ }
2294
+ }
2295
+ else {
2296
+ createPackage(item);
2297
+ }
2298
+ });
2299
+ // Add any remaining items to the last orderPackage
2300
+ if (currOrderProducts.length > 0) {
2301
+ let availableConsignment;
2302
+ for (let i = 0; i < currOrderProducts.length; i++) {
2303
+ let op = currOrderProducts[i];
2304
+ let releaseQty = op.releaseQty;
2305
+ let currProductWeight = op.productDetail.grossWeight * op.releaseQty;
2306
+ let lastOrderPackage = currentConsignment.orderPackages[currentConsignment.orderPackages.length - 1];
2307
+ //push the product into last current consignment orderPackage
2308
+ if (currentConsignment.totalWeight + currProductWeight < maxConsignmentWeight) {
2309
+ if (lastOrderPackage) {
2310
+ lastOrderPackage.orderPackageItems.push({
2311
+ id: (0, uuid_1.v4)(),
2312
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2313
+ releaseQty: op.releaseQty,
2314
+ orderProduct: op,
2315
+ domain: releaseGood.domain,
2316
+ bizplace: releaseGood.bizplace,
2317
+ creator: releaseGood.creator,
2318
+ updater: releaseGood.updater,
2319
+ productDetail: op.productDetail
2320
+ });
2321
+ }
2322
+ else {
2323
+ await createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user);
2324
+ }
2325
+ }
2326
+ else {
2327
+ //push the currentConsignment into list of all the consignments
2328
+ if (!totalConsignments.some(tc => tc.id === currentConsignment.id)) {
2329
+ totalConsignments.push(currentConsignment);
2330
+ }
2331
+ //find one order consignment to include the product
2332
+ availableConsignment = totalConsignments.find(tc => {
2333
+ tc.totalWeight += currProductWeight < maxConsignmentWeight;
2334
+ });
2335
+ if (availableConsignment) {
2336
+ let lastOrderPackage = availableConsignment.orderPackages[currentConsignment.orderPackages.length - 1];
2337
+ lastOrderPackage.orderPackageItems.push({
2338
+ id: (0, uuid_1.v4)(),
2339
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
2340
+ releaseQty: op.releaseQty,
2341
+ orderProducts: op,
2342
+ domain: releaseGood.domain,
2343
+ bizplace: releaseGood.bizplace,
2344
+ creator: releaseGood.creator,
2345
+ updater: releaseGood.updater,
2346
+ productDetail: op.productDetail
2347
+ });
2348
+ //update the totalConsignment data
2349
+ totalConsignments = totalConsignments.map(tc => {
2350
+ tc.id === availableConsignment.id ? availableConsignment : tc;
2351
+ });
2352
+ }
2353
+ else {
2354
+ //create new consignment if no consignment available
2355
+ currentConsignment = createdNewConsignment();
2356
+ createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user);
2357
+ totalConsignments.push(currentConsignment);
2358
+ }
2359
+ }
2360
+ }
2361
+ }
2362
+ //totalConsignments.length < 1 ? totalConsignments.push(currentConsignment) : totalConsignments
2363
+ const existingConsignment = totalConsignments.find(tc => tc.id === currentConsignment.id);
2364
+ if (!existingConsignment) {
2365
+ totalConsignments.push(currentConsignment);
2366
+ }
2367
+ let orderConsignment = totalConsignments;
2368
+ let newReleaseGood = await createConsignmentWithMultipackage(tx, orderConsignment, releaseGood, user, domain);
2369
+ return newReleaseGood;
2370
+ }
2371
+ catch (e) {
2372
+ env_1.logger.error(`[lmd-create-consignment-notes]: ${e} `);
2373
+ }
2374
+ }
2375
+ exports.splitOrderConsignment = splitOrderConsignment;
2376
+ async function createOrderConsignment(tx, orderCons, releaseGood, user) {
2377
+ var _a;
2378
+ try {
2379
+ let orderConsignment = {
2380
+ id: (0, uuid_1.v4)(),
2381
+ name: sales_base_1.OrderNoGenerator.orderConsignment(),
2382
+ noOfPackages: ((_a = orderCons === null || orderCons === void 0 ? void 0 : orderCons.orderPackages) === null || _a === void 0 ? void 0 : _a.length) ? orderCons.orderPackages.length : 1,
2383
+ domain: releaseGood.domain,
2384
+ bizplace: releaseGood.bizplace,
2385
+ releaseGood: releaseGood,
2386
+ orderPackages: [],
2387
+ creator: user,
2388
+ updater: user
2389
+ };
2390
+ orderConsignment = await tx.getRepository(sales_base_1.OrderConsignment).save(orderConsignment);
2391
+ return orderConsignment;
2392
+ }
2393
+ catch (e) {
2394
+ env_1.logger.error(`[lmd-create-order-consignment]: ${e} `);
2395
+ }
2396
+ }
2397
+ exports.createOrderConsignment = createOrderConsignment;
2398
+ async function createConsignmentPackage(tx, orderPackageData, releaseGood, user, orderConsignment) {
2399
+ try {
2400
+ const orderPackage = {
2401
+ id: (0, uuid_1.v4)(),
2402
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
2403
+ packageId: null,
2404
+ trackingNo: null,
2405
+ transporter: null,
2406
+ airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null,
2407
+ invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice,
2408
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2409
+ releaseGood,
2410
+ domain: releaseGood.domain,
2411
+ bizplace: releaseGood.bizplace,
2412
+ creator: user,
2413
+ updater: user,
2414
+ orderConsignment
2415
+ };
2416
+ return tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
2417
+ }
2418
+ catch (e) {
2419
+ env_1.logger.error(`[lmd-create-order-package]: ${e} `);
2420
+ }
2421
+ }
2422
+ exports.createConsignmentPackage = createConsignmentPackage;
2423
+ async function createConsignmentPackageItem(tx, orderPackageItemsData, savedOrderPackage, releaseGood) {
2424
+ try {
2425
+ const orderPackageItems = orderPackageItemsData.map(opi => ({
2426
+ id: opi.id,
2427
+ name: opi.name,
2428
+ orderProduct: opi.orderProduct,
2429
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
2430
+ releaseQty: opi.releaseQty,
2431
+ orderPackage: savedOrderPackage,
2432
+ domain: releaseGood.domain,
2433
+ bizplace: releaseGood.bizplace,
2434
+ creator: releaseGood.creator,
2435
+ updater: releaseGood.updater,
2436
+ productDetail: opi.productDetail
2437
+ }));
2438
+ await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
2439
+ return orderPackageItems;
2440
+ }
2441
+ catch (e) {
2442
+ env_1.logger.error(`[lmd-create-order-package]: ${e} `);
2443
+ }
2444
+ }
2445
+ exports.createConsignmentPackageItem = createConsignmentPackageItem;
2446
+ async function createConsignmentWithMultipackage(tx, orderConsList, releaseGood, user, domain) {
2447
+ try {
2448
+ let newOrderPackages = [];
2449
+ let newOrderConsignments = [];
2450
+ for (const orderCons of orderConsList) {
2451
+ const savedOrderConsignment = await createOrderConsignment(tx, orderCons, releaseGood, user);
2452
+ for (const currentPackage of orderCons.orderPackages) {
2453
+ const savedOrderPackage = await createConsignmentPackage(tx, currentPackage, releaseGood, user, savedOrderConsignment);
2454
+ const orderPackageItems = await createConsignmentPackageItem(tx, currentPackage.orderPackageItems, savedOrderPackage, releaseGood);
2455
+ savedOrderPackage.orderPackageItems = orderPackageItems;
2456
+ savedOrderConsignment.orderPackages.push(savedOrderPackage);
2457
+ newOrderPackages.push(savedOrderPackage);
2458
+ }
2459
+ newOrderConsignments.push(savedOrderConsignment);
2460
+ }
2461
+ releaseGood.orderConsignments = newOrderConsignments;
2462
+ releaseGood.orderPackages = newOrderPackages;
2463
+ return releaseGood;
2464
+ }
2465
+ catch (error) {
2466
+ console.error('Error creating consignment with multiple packages:', error);
2467
+ throw error;
2468
+ }
2469
+ }
2470
+ exports.createConsignmentWithMultipackage = createConsignmentWithMultipackage;
2471
+ async function sortingProduct(orderProducts) {
2472
+ try {
2473
+ orderProducts.sort((a, b) => {
2474
+ if (a.product.packingType !== b.product.packingType) {
2475
+ return a.product.packingType < b.product.packingType ? -1 : 1;
2476
+ }
2477
+ if (a.product.sku !== b.product.sku) {
2478
+ return a.product.sku < b.product.sku ? -1 : 1;
2479
+ }
2480
+ return 0;
2481
+ });
2482
+ return orderProducts;
2483
+ }
2484
+ catch (e) {
2485
+ env_1.logger.error(`[lmd-sort-product]: ${e} `);
2486
+ }
2487
+ }
2488
+ exports.sortingProduct = sortingProduct;
2489
+ //# sourceMappingURL=picking-worksheet-controller.js.map