@things-factory/worksheet-base 5.0.12 → 6.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/dist-server/controllers/ecommerce/sellercraft-controller.js +225 -191
  2. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  3. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js +2 -2
  4. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +28 -17
  6. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +1 -1
  8. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/packing-worksheet-controller.js +17 -3
  10. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/picking-worksheet-controller.js +221 -144
  12. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/returning-worksheet-controller.js +16 -0
  14. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +8 -8
  16. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/render-elccl-grn.js +21 -16
  18. package/dist-server/controllers/render-elccl-grn.js.map +1 -1
  19. package/dist-server/controllers/render-fm-grn.js +43 -26
  20. package/dist-server/controllers/render-fm-grn.js.map +1 -1
  21. package/dist-server/controllers/render-grn.js +42 -28
  22. package/dist-server/controllers/render-grn.js.map +1 -1
  23. package/dist-server/controllers/render-invoices.js +4 -5
  24. package/dist-server/controllers/render-invoices.js.map +1 -1
  25. package/dist-server/controllers/render-job-sheet.js +19 -19
  26. package/dist-server/controllers/render-job-sheet.js.map +1 -1
  27. package/dist-server/controllers/render-kimeda-grn.js +38 -23
  28. package/dist-server/controllers/render-kimeda-grn.js.map +1 -1
  29. package/dist-server/controllers/render-manifest.js +8 -9
  30. package/dist-server/controllers/render-manifest.js.map +1 -1
  31. package/dist-server/controllers/render-manual-do.js +15 -15
  32. package/dist-server/controllers/render-manual-do.js.map +1 -1
  33. package/dist-server/controllers/render-orientage-do.js +74 -28
  34. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  35. package/dist-server/controllers/render-orientage-grn.js +25 -15
  36. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  37. package/dist-server/controllers/render-po.js +28 -19
  38. package/dist-server/controllers/render-po.js.map +1 -1
  39. package/dist-server/controllers/render-ro-do.js +139 -105
  40. package/dist-server/controllers/render-ro-do.js.map +1 -1
  41. package/dist-server/controllers/render-seebuu-grn.js +29 -19
  42. package/dist-server/controllers/render-seebuu-grn.js.map +1 -1
  43. package/dist-server/controllers/vas/vas-worksheet-controller.js +5 -5
  44. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  45. package/dist-server/controllers/worksheet-controller.js +75 -25
  46. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  47. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +2 -1
  48. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
  49. package/dist-server/entities/worksheet-detail.js +14 -12
  50. package/dist-server/entities/worksheet-detail.js.map +1 -1
  51. package/dist-server/entities/worksheet-movement.js +1 -2
  52. package/dist-server/entities/worksheet-movement.js.map +1 -1
  53. package/dist-server/entities/worksheet.js +13 -13
  54. package/dist-server/entities/worksheet.js.map +1 -1
  55. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js +1 -1
  56. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js.map +1 -1
  57. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +6 -6
  58. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  59. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -1
  61. package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js +6 -5
  62. package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js.map +1 -1
  63. package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js +8 -8
  64. package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js.map +1 -1
  65. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +82 -80
  66. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
  67. package/dist-server/graphql/resolvers/worksheet/create-worksheet.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js +5 -4
  69. package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js.map +1 -1
  70. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +5 -5
  71. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js +5 -4
  73. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js +1 -1
  75. package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js +83 -52
  77. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js.map +1 -1
  78. package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js +169 -0
  79. package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js.map +1 -0
  80. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js +67 -0
  81. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js.map +1 -0
  82. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +1 -34
  83. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  84. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.js.map +1 -1
  85. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +70 -0
  86. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
  87. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +34 -3
  88. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
  89. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js +4 -4
  90. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js.map +1 -1
  91. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js.map +1 -1
  92. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
  93. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
  94. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.js.map +1 -1
  95. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.js.map +1 -1
  96. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.js.map +1 -1
  97. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +14 -10
  98. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  99. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js +1 -1
  100. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js.map +1 -1
  101. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js +1 -1
  102. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js.map +1 -1
  103. package/dist-server/graphql/resolvers/worksheet/having-vas.js +7 -7
  104. package/dist-server/graphql/resolvers/worksheet/having-vas.js.map +1 -1
  105. package/dist-server/graphql/resolvers/worksheet/index.js +5 -3
  106. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  107. package/dist-server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.js.map +1 -1
  108. package/dist-server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.js.map +1 -1
  109. package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.js.map +1 -1
  110. package/dist-server/graphql/resolvers/worksheet/inspecting/complete-inspection.js.map +1 -1
  111. package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting.js.map +1 -1
  112. package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-pallet.js.map +1 -1
  113. package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection.js.map +1 -1
  114. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +18 -9
  115. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  116. package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js +6 -5
  117. package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js.map +1 -1
  118. package/dist-server/graphql/resolvers/worksheet/loading/activate-loading.js.map +1 -1
  119. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +14 -14
  120. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  121. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  122. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -1
  123. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +11 -10
  124. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  125. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js +5 -4
  126. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js.map +1 -1
  127. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +3 -4
  128. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
  129. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +2 -2
  130. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
  131. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +1 -1
  132. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  133. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +16 -11
  134. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  135. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -1
  136. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +96 -22
  137. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  138. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +5 -5
  139. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
  140. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +93 -81
  141. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
  142. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +0 -19
  143. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
  144. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +1 -1
  145. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  146. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js.map +1 -1
  147. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +11 -5
  148. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  149. package/dist-server/graphql/resolvers/worksheet/picking/batch-picking.js.map +1 -1
  150. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +10 -4
  151. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  152. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +34 -38
  153. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  154. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +46 -35
  155. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  156. package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js +7 -2
  157. package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js.map +1 -1
  158. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +33 -16
  159. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
  160. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  161. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js +4 -4
  162. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js.map +1 -1
  163. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +5 -8
  164. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  165. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -1
  166. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js.map +1 -1
  167. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -1
  168. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +6 -5
  169. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  170. package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js +10 -8
  171. package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js.map +1 -1
  172. package/dist-server/graphql/resolvers/worksheet/putaway/activate-putaway.js.map +1 -1
  173. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +4 -3
  174. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  175. package/dist-server/graphql/resolvers/worksheet/putaway/putaway.js.map +1 -1
  176. package/dist-server/graphql/resolvers/worksheet/putaway/undo-putaway.js.map +1 -1
  177. package/dist-server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.js.map +1 -1
  178. package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js +2 -1
  179. package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js.map +1 -1
  180. package/dist-server/graphql/resolvers/worksheet/putaway-return/putaway-return.js.map +1 -1
  181. package/dist-server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.js.map +1 -1
  182. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +3 -3
  183. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
  184. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +3 -3
  185. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
  186. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js +16 -11
  187. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js.map +1 -1
  188. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +139 -149
  189. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
  190. package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js +1 -1
  191. package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js.map +1 -1
  192. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js +2 -2
  193. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js.map +1 -1
  194. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -3
  195. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
  196. package/dist-server/graphql/resolvers/worksheet/returning/activate-return.js.map +1 -1
  197. package/dist-server/graphql/resolvers/worksheet/returning/complete-return.js.map +1 -1
  198. package/dist-server/graphql/resolvers/worksheet/returning/returning.js.map +1 -1
  199. package/dist-server/graphql/resolvers/worksheet/sorting/activate-sorting.js.map +1 -1
  200. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  201. package/dist-server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.js.map +1 -1
  202. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  203. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  204. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +4 -4
  205. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  206. package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -1
  207. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js +8 -7
  208. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js.map +1 -1
  209. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +9 -8
  210. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  211. package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js +4 -2
  212. package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js.map +1 -1
  213. package/dist-server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.js.map +1 -1
  214. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js.map +1 -1
  215. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +6 -2
  216. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  217. package/dist-server/graphql/resolvers/worksheet/unloading/scan-product-unload.js.map +1 -1
  218. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -1
  219. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -1
  220. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
  221. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
  222. package/dist-server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.js.map +1 -1
  223. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.js.map +1 -1
  224. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js +7 -3
  225. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js.map +1 -1
  226. package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js +3 -3
  227. package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js.map +1 -1
  228. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +5 -5
  229. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  230. package/dist-server/graphql/resolvers/worksheet/update-worksheet.js +1 -1
  231. package/dist-server/graphql/resolvers/worksheet/update-worksheet.js.map +1 -1
  232. package/dist-server/graphql/resolvers/worksheet/vas/activate-vas.js.map +1 -1
  233. package/dist-server/graphql/resolvers/worksheet/vas/assign-vas-inventories.js.map +1 -1
  234. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -1
  235. package/dist-server/graphql/resolvers/worksheet/vas/execute-vas.js.map +1 -1
  236. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas-inventory.js.map +1 -1
  237. package/dist-server/graphql/resolvers/worksheet/vas/undo-vas.js.map +1 -1
  238. package/dist-server/graphql/resolvers/worksheet/vas-candidates.js +13 -12
  239. package/dist-server/graphql/resolvers/worksheet/vas-candidates.js.map +1 -1
  240. package/dist-server/graphql/resolvers/worksheet/vas-inventories.js +7 -6
  241. package/dist-server/graphql/resolvers/worksheet/vas-inventories.js.map +1 -1
  242. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +36 -18
  243. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
  244. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js +10 -3
  245. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js.map +1 -1
  246. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js +3 -2
  247. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js.map +1 -1
  248. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js +11 -3
  249. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js.map +1 -1
  250. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.js.map +1 -1
  251. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js +3 -2
  252. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js.map +1 -1
  253. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js +2 -2
  254. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js.map +1 -1
  255. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js +1 -1
  256. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js.map +1 -1
  257. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js +2 -1
  258. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js.map +1 -1
  259. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js +3 -3
  260. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js.map +1 -1
  261. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.js.map +1 -1
  262. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js +2 -1
  263. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js.map +1 -1
  264. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js +7 -7
  265. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js.map +1 -1
  266. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +11 -10
  267. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -1
  268. package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js +7 -4
  269. package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js.map +1 -1
  270. package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js +5 -5
  271. package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js.map +1 -1
  272. package/dist-server/graphql/resolvers/worksheet/worksheet.js +72 -42
  273. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  274. package/dist-server/graphql/resolvers/worksheet/worksheets.js +42 -17
  275. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  276. package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js +3 -3
  277. package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js.map +1 -1
  278. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +1 -1
  279. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -1
  280. package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js +1 -1
  281. package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js.map +1 -1
  282. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -10
  283. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  284. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +7 -5
  285. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  286. package/dist-server/graphql/resolvers/worksheet-detail/generate-carton-id.js.map +1 -1
  287. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +3 -3
  288. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
  289. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +5 -2
  290. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  291. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +1 -1
  292. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  293. package/dist-server/graphql/resolvers/worksheet-detail/index.js +2 -1
  294. package/dist-server/graphql/resolvers/worksheet-detail/index.js.map +1 -1
  295. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +81 -0
  296. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
  297. package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js +2 -2
  298. package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js.map +1 -1
  299. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +2 -2
  300. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -1
  301. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js +1 -1
  302. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js.map +1 -1
  303. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js +2 -2
  304. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js.map +1 -1
  305. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +1 -1
  306. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
  307. package/dist-server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.js.map +1 -1
  308. package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js +1 -1
  309. package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js.map +1 -1
  310. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js +1 -1
  311. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js.map +1 -1
  312. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js +1 -1
  313. package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js.map +1 -1
  314. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
  315. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
  316. package/dist-server/graphql/types/worksheet/delivery-order-info.js +3 -0
  317. package/dist-server/graphql/types/worksheet/delivery-order-info.js.map +1 -1
  318. package/dist-server/graphql/types/worksheet/delivery-order-ro.js +18 -0
  319. package/dist-server/graphql/types/worksheet/delivery-order-ro.js.map +1 -0
  320. package/dist-server/graphql/types/worksheet/index.js +26 -15
  321. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  322. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
  323. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
  324. package/dist-server/graphql/types/worksheet/sellercraft-document.js +11 -0
  325. package/dist-server/graphql/types/worksheet/sellercraft-document.js.map +1 -0
  326. package/dist-server/graphql/types/worksheet-detail/index.js +10 -0
  327. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  328. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +1 -0
  329. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  330. package/dist-server/tsconfig.tsbuildinfo +1 -1
  331. package/dist-server/utils/inventory-util.js +26 -20
  332. package/dist-server/utils/inventory-util.js.map +1 -1
  333. package/dist-server/utils/worksheet-util.js +8 -6
  334. package/dist-server/utils/worksheet-util.js.map +1 -1
  335. package/package.json +17 -17
  336. package/server/controllers/ecommerce/sellercraft-controller.ts +282 -223
  337. package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +9 -17
  338. package/server/controllers/inbound/unloading-worksheet-controller.ts +55 -66
  339. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +1 -1
  340. package/server/controllers/outbound/packing-worksheet-controller.ts +25 -4
  341. package/server/controllers/outbound/picking-worksheet-controller.ts +292 -172
  342. package/server/controllers/outbound/returning-worksheet-controller.ts +23 -0
  343. package/server/controllers/outbound/sorting-worksheet-controller.ts +20 -20
  344. package/server/controllers/render-elccl-grn.ts +16 -11
  345. package/server/controllers/render-fm-grn.ts +32 -14
  346. package/server/controllers/render-grn.ts +31 -16
  347. package/server/controllers/render-invoices.ts +3 -3
  348. package/server/controllers/render-job-sheet.ts +13 -11
  349. package/server/controllers/render-kimeda-grn.ts +28 -13
  350. package/server/controllers/render-manifest.ts +25 -24
  351. package/server/controllers/render-manual-do.ts +9 -10
  352. package/server/controllers/render-orientage-do.ts +79 -30
  353. package/server/controllers/render-orientage-grn.ts +30 -20
  354. package/server/controllers/render-po.ts +31 -20
  355. package/server/controllers/render-ro-do.ts +151 -124
  356. package/server/controllers/render-seebuu-grn.ts +21 -11
  357. package/server/controllers/vas/vas-worksheet-controller.ts +19 -20
  358. package/server/controllers/worksheet-controller.ts +97 -27
  359. package/server/entities/warehouse-bizplace-onhand-inventory.ts +2 -1
  360. package/server/entities/worksheet-detail.ts +9 -0
  361. package/server/graphql/resolvers/pallet/pallet-outbound.ts +5 -8
  362. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +8 -6
  363. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +4 -11
  364. package/server/graphql/resolvers/worksheet/check-inventory-release.ts +8 -7
  365. package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +10 -8
  366. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +112 -138
  367. package/server/graphql/resolvers/worksheet/create-worksheet.ts +6 -8
  368. package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +8 -7
  369. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +7 -7
  370. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +6 -6
  371. package/server/graphql/resolvers/worksheet/delete-worksheet.ts +5 -3
  372. package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +87 -53
  373. package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +190 -0
  374. package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
  375. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +5 -45
  376. package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +5 -5
  377. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
  378. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +45 -5
  379. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +11 -10
  380. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +1 -1
  381. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +7 -14
  382. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +10 -4
  383. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +10 -4
  384. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +5 -3
  385. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +25 -29
  386. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +6 -4
  387. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +6 -4
  388. package/server/graphql/resolvers/worksheet/having-vas.ts +10 -8
  389. package/server/graphql/resolvers/worksheet/index.ts +7 -3
  390. package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +5 -3
  391. package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +4 -2
  392. package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +5 -3
  393. package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +5 -3
  394. package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +9 -3
  395. package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +16 -4
  396. package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +5 -3
  397. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +34 -17
  398. package/server/graphql/resolvers/worksheet/loaded-inventories.ts +7 -6
  399. package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +5 -3
  400. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +16 -16
  401. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -3
  402. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +5 -3
  403. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +11 -11
  404. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +6 -6
  405. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +14 -13
  406. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +4 -4
  407. package/server/graphql/resolvers/worksheet/packing/packing.ts +3 -3
  408. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +21 -17
  409. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +2 -2
  410. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +102 -24
  411. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +10 -8
  412. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +107 -97
  413. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +3 -30
  414. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +3 -3
  415. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +23 -4
  416. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +25 -17
  417. package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +4 -2
  418. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +15 -6
  419. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +37 -42
  420. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +52 -42
  421. package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +15 -6
  422. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +49 -35
  423. package/server/graphql/resolvers/worksheet/picking/picking.ts +4 -2
  424. package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +11 -6
  425. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +10 -35
  426. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +2 -2
  427. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +9 -3
  428. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +2 -2
  429. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +11 -11
  430. package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +13 -13
  431. package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +5 -3
  432. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +6 -5
  433. package/server/graphql/resolvers/worksheet/putaway/putaway.ts +5 -3
  434. package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +5 -3
  435. package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +5 -3
  436. package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +13 -6
  437. package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +5 -3
  438. package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +5 -3
  439. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +4 -6
  440. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +4 -6
  441. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +20 -19
  442. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +154 -220
  443. package/server/graphql/resolvers/worksheet/relocate-pallet.ts +6 -4
  444. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +3 -7
  445. package/server/graphql/resolvers/worksheet/return-worksheet.ts +4 -6
  446. package/server/graphql/resolvers/worksheet/returning/activate-return.ts +5 -3
  447. package/server/graphql/resolvers/worksheet/returning/complete-return.ts +5 -3
  448. package/server/graphql/resolvers/worksheet/returning/returning.ts +5 -3
  449. package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +5 -3
  450. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +7 -5
  451. package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +5 -3
  452. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +9 -3
  453. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +9 -3
  454. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -5
  455. package/server/graphql/resolvers/worksheet/transfer.ts +10 -12
  456. package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +13 -7
  457. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +9 -9
  458. package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +9 -5
  459. package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +5 -3
  460. package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +5 -3
  461. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +8 -4
  462. package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +5 -3
  463. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +2 -2
  464. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +2 -2
  465. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +2 -2
  466. package/server/graphql/resolvers/worksheet/unloading/unload.ts +7 -7
  467. package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +5 -3
  468. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +5 -3
  469. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +9 -5
  470. package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +4 -6
  471. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +5 -7
  472. package/server/graphql/resolvers/worksheet/update-worksheet.ts +5 -5
  473. package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +5 -3
  474. package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +5 -3
  475. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +5 -3
  476. package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +5 -3
  477. package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +5 -3
  478. package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +5 -3
  479. package/server/graphql/resolvers/worksheet/vas-candidates.ts +20 -17
  480. package/server/graphql/resolvers/worksheet/vas-inventories.ts +9 -7
  481. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +36 -18
  482. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +12 -5
  483. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +6 -3
  484. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +14 -6
  485. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +5 -7
  486. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +3 -2
  487. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +8 -5
  488. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +6 -16
  489. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +5 -2
  490. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +10 -8
  491. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +3 -5
  492. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +6 -6
  493. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +10 -13
  494. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +13 -11
  495. package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +13 -8
  496. package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +7 -5
  497. package/server/graphql/resolvers/worksheet/worksheet.ts +86 -32
  498. package/server/graphql/resolvers/worksheet/worksheets.ts +60 -19
  499. package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +7 -8
  500. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +4 -6
  501. package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +5 -6
  502. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +13 -19
  503. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +19 -27
  504. package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +2 -4
  505. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +6 -6
  506. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +7 -4
  507. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +3 -3
  508. package/server/graphql/resolvers/worksheet-detail/index.ts +3 -1
  509. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +164 -0
  510. package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +8 -7
  511. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +6 -7
  512. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +5 -5
  513. package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +6 -7
  514. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +4 -3
  515. package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +3 -2
  516. package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +2 -4
  517. package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +3 -6
  518. package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +4 -4
  519. package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
  520. package/server/graphql/types/worksheet/delivery-order-info.ts +3 -0
  521. package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
  522. package/server/graphql/types/worksheet/index.ts +49 -38
  523. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  524. package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
  525. package/server/graphql/types/worksheet-detail/index.ts +10 -0
  526. package/server/graphql/types/worksheet-detail/inventory-detail.ts +1 -0
  527. package/server/utils/inventory-util.ts +20 -14
  528. package/server/utils/worksheet-util.ts +10 -6
  529. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js +0 -25
  530. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js.map +0 -1
  531. package/dist-server/graphql/types/worksheet/airwaybill.js +0 -11
  532. package/dist-server/graphql/types/worksheet/airwaybill.js.map +0 -1
  533. package/server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts +0 -30
  534. package/server/graphql/types/worksheet/airwaybill.ts +0 -7
@@ -49,12 +49,20 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
49
49
  const releaseGood = worksheet.releaseGood;
50
50
  let targetInventory = worksheetDetail.targetInventory;
51
51
  let inventory = targetInventory.inventory;
52
+ let location = inventory.location;
52
53
  const originLocation = inventory.location;
53
54
  const originPalletId = inventory.palletId;
54
55
  const toLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
55
56
  where: { domain: this.domain, name: toLocationName },
56
57
  relations: ['warehouse']
57
58
  });
59
+ if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
60
+ if (![warehouse_base_1.LOCATION_TYPE.QUARANTINE, warehouse_base_1.LOCATION_TYPE.RESERVE].some(l => {
61
+ return l === toLocation.type;
62
+ })) {
63
+ throw new Error('Location should be assigned only to Quarantine or Reserve Zone');
64
+ }
65
+ }
58
66
  if (!toLocation)
59
67
  throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName));
60
68
  const isPalletDiff = originPalletId !== palletId;
@@ -96,6 +104,7 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
96
104
  const releaseGood = worksheet.releaseGood;
97
105
  let targetInventory = worksheetDetail.targetInventory;
98
106
  let inventory = targetInventory.inventory;
107
+ let invLocation = inventory.location;
99
108
  if (inventory.cartonId !== cartonId) {
100
109
  throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId));
101
110
  }
@@ -113,6 +122,13 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
113
122
  },
114
123
  relations: ['warehouse']
115
124
  });
125
+ if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
126
+ if (![warehouse_base_1.LOCATION_TYPE.QUARANTINE, warehouse_base_1.LOCATION_TYPE.RESERVE].some(l => {
127
+ return l === location.type;
128
+ })) {
129
+ throw new Error('Location should be assigned only to Quarantine or Reserve Zone');
130
+ }
131
+ }
116
132
  if (!location)
117
133
  throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName));
118
134
  const warehouse = location.warehouse;
@@ -1 +1 @@
1
- {"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: this.domain, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: this.domain, name: toLocationName },\n relations: ['warehouse']\n })\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: this.domain,\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
1
+ {"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: this.domain, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let location: Location = inventory.location\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: this.domain, name: toLocationName },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === toLocation.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let invLocation: Location = inventory.location\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: this.domain,\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === location.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SortingWorksheetController = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
- const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
6
- const warehouse_base_1 = require("@things-factory/warehouse-base");
7
5
  const sales_base_1 = require("@things-factory/sales-base");
8
- const entities_1 = require("../../entities");
6
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
9
7
  const constants_1 = require("../../constants");
8
+ const entities_1 = require("../../entities");
9
+ const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
10
10
  class SortingWorksheetController extends vas_worksheet_controller_1.VasWorksheetController {
11
11
  async generateSortingWorksheet(batchPickingWorksheet, targetInventories) {
12
12
  const worksheet = await this.generateBatchWorksheet(constants_1.WORKSHEET_TYPE.SORTING, batchPickingWorksheet, targetInventories, sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_SORT);
@@ -386,11 +386,11 @@ class SortingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
386
386
  throw new Error('Tote has been sealed, please try another tote!');
387
387
  }
388
388
  //if found order tote then check if order tote item exist
389
- const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOne({
390
- domain: this.domain,
391
- orderProduct: targetProduct,
392
- orderInventory: targetInventory,
393
- orderTote: foundOrderTote
389
+ const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOneBy({
390
+ domain: { id: this.domain.id },
391
+ orderProduct: { id: targetProduct.id },
392
+ orderInventory: { id: targetInventory.id },
393
+ orderTote: { id: foundOrderTote.id }
394
394
  });
395
395
  //if not order tote item doesnt exist then create one
396
396
  if (!foundOrderToteItem) {
@@ -1 +1 @@
1
- {"version":3,"file":"sorting-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/sorting-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { IsNull, In } from 'typeorm'\n\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n Inventory,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n INVENTORY_STATUS,\n InventoryNoGenerator,\n INVENTORY_ITEM_SOURCE,\n Tote,\n TOTE_STATUS\n} from '@things-factory/warehouse-base'\nimport {\n ReleaseGood,\n OrderInventory,\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n OrderTote,\n OrderToteItem,\n OrderNoGenerator\n} from '@things-factory/sales-base'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { temporaryGetRemainInventoryAmount } from 'server/graphql/resolvers/worksheet/vas-transactions/common-utils'\n\nexport class SortingWorksheetController extends VasWorksheetController {\n async generateSortingWorksheet(\n batchPickingWorksheet: Worksheet,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.generateBatchWorksheet(\n WORKSHEET_TYPE.SORTING,\n batchPickingWorksheet,\n targetInventories,\n ORDER_INVENTORY_STATUS.READY_TO_SORT\n )\n\n return worksheet\n }\n\n async activateSorting(worksheetNo: string, sortingWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.SORTING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.READY_TO_SORT)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.SORTING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n let releaseGoods: ReleaseGood[] = worksheet.worksheetDetails.map(\n (wsd: WorksheetDetail) => wsd.targetInventory.releaseGood\n )\n releaseGoods = [...new Map(releaseGoods.map(item => [item.id, item])).values()]\n releaseGoods.forEach((releaseGood: ReleaseGood) => {\n releaseGood.status = ORDER_STATUS.SORTING\n })\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)\n }\n\n async scanProductSorting(\n taskNo: string,\n releaseGoodNo: string,\n productBarcode: string,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo)\n\n if (productBarcode) {\n let productDetails: ProductDetail[] = []\n orderInventories.map((oi: OrderInventory) => {\n const foundPDs: ProductDetail[] = oi.inventory && oi.inventory.product && oi.inventory.product.productDetails\n foundPDs.map(productDetail => {\n productDetails.push(productDetail)\n })\n })\n\n const matchingProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n if (!matchingProductDetail) throw new Error('Unable to find product barcode.')\n const packingType: string = matchingProductDetail.packingType\n const packingSize: number = matchingProductDetail.packingSize\n if (!matchingProductDetail)\n throw new Error(this.ERROR_MSG.PRODUCT.BARCODE_NOT_EXIST(productBarcode, packingType, packingSize))\n\n let matchingOIs: OrderInventory[] = orderInventories.filter(\n (oi: OrderInventory) =>\n oi.packingType === packingType &&\n oi.packingSize === packingSize &&\n oi.product?.id === matchingProductDetail.product?.id\n )\n\n let sortedQty: number = 1\n\n if (!matchingOIs?.length) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.NO_MATCHING_RESULT(packingType, packingSize))\n } else {\n await Promise.all(\n matchingOIs.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = inventory.product\n\n if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {\n // Serial Number scanning for batch picking\n if (matchingOI?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty\n sortedQty -= 1\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.SORTED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else if (matchingOI?.sortedQty > releaseQty) {\n const product: Product = matchingOI.inventory.product\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n 1,\n releaseGood,\n matchingOI.bizplace\n )\n }\n }\n })\n )\n }\n }\n }\n\n async sortingProduct(\n taskNo: string,\n releaseGoodNo: string,\n productId: string,\n sortingQty: number,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo && oi.product.id === productId)\n\n if (!orderInventories?.length) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productId))\n } else {\n await Promise.all(\n orderInventories.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = matchingOI.inventory.product\n const packingType: string = matchingOI.packingType\n const packingSize: number = matchingOI.packingSize\n\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: this.domain, serialNumber: serialNumber, product },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n sortingQty,\n releaseGood,\n matchingOI.bizplace\n )\n }\n\n if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n matchingOI.sortedQty += sortingQty\n } else {\n matchingOI.sortedQty = releaseQty\n }\n\n sortingQty -= releaseQty\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n } else if (matchingOI?.sortedQty > releaseQty) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n }\n })\n )\n }\n }\n\n async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {\n try {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.SORTING\n },\n ['bizplace', 'orderInventories']\n )\n\n if (!releaseGood) {\n throw new Error('Order is already sorted')\n }\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood, closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n releaseGood.status = ORDER_STATUS.READY_TO_LOAD\n releaseGood.updater = this.user\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n return releaseGood\n } catch (e) {\n throw e\n }\n }\n\n async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const allTaskCompleted: boolean = worksheetDetails.every(wsd => wsd.status === WORKSHEET_STATUS.DONE)\n\n if (!allTaskCompleted)\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('complete worksheet', 'few incompleted line items'))\n\n worksheet.status = WORKSHEET_STATUS.DONE\n worksheet.endedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n return worksheet\n }\n\n private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {\n //1. find tote\n let foundTote: Tote = await this.trxMgr\n .getRepository(Tote)\n .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })\n\n if (foundTote?.status == TOTE_STATUS.DAMAGED) {\n throw new Error('Tote is damaged')\n }\n\n if (foundTote?.status == TOTE_STATUS.DISPATCHED) {\n throw new Error('Tote is dispatched')\n }\n\n //2. find order tote\n let foundOrderTote: OrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })\n\n //if order tote not found the create one, if tote not found means it's tote box\n //create order tote item\n if (!foundOrderTote) {\n const orderTote = await this.trxMgr.getRepository(OrderTote).save({\n name: toteNo,\n domain: this.domain,\n releaseGood,\n tote: foundTote ? foundTote : null,\n updater: this.user\n })\n\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n if (foundOrderTote.closedDate) {\n throw new Error('Tote has been sealed, please try another tote!')\n }\n\n //if found order tote then check if order tote item exist\n const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({\n domain: this.domain,\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote\n })\n\n //if not order tote item doesnt exist then create one\n if (!foundOrderToteItem) {\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n //if found order tote item found then add the quantity\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n ...foundOrderToteItem,\n qty: foundOrderToteItem.qty + pickedQty\n })\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sorting-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/sorting-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { In, IsNull } from 'typeorm'\n\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderTote,\n OrderToteItem,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_ITEM_SOURCE,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n InventoryNoGenerator,\n Tote,\n TOTE_STATUS\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class SortingWorksheetController extends VasWorksheetController {\n async generateSortingWorksheet(\n batchPickingWorksheet: Worksheet,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.generateBatchWorksheet(\n WORKSHEET_TYPE.SORTING,\n batchPickingWorksheet,\n targetInventories,\n ORDER_INVENTORY_STATUS.READY_TO_SORT\n )\n\n return worksheet\n }\n\n async activateSorting(worksheetNo: string, sortingWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.SORTING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.READY_TO_SORT)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.SORTING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n let releaseGoods: ReleaseGood[] = worksheet.worksheetDetails.map(\n (wsd: WorksheetDetail) => wsd.targetInventory.releaseGood\n )\n releaseGoods = [...new Map(releaseGoods.map(item => [item.id, item])).values()]\n releaseGoods.forEach((releaseGood: ReleaseGood) => {\n releaseGood.status = ORDER_STATUS.SORTING\n })\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)\n }\n\n async scanProductSorting(\n taskNo: string,\n releaseGoodNo: string,\n productBarcode: string,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo)\n\n if (productBarcode) {\n let productDetails: ProductDetail[] = []\n orderInventories.map((oi: OrderInventory) => {\n const foundPDs: ProductDetail[] = oi.inventory && oi.inventory.product && oi.inventory.product.productDetails\n foundPDs.map(productDetail => {\n productDetails.push(productDetail)\n })\n })\n\n const matchingProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n if (!matchingProductDetail) throw new Error('Unable to find product barcode.')\n const packingType: string = matchingProductDetail.packingType\n const packingSize: number = matchingProductDetail.packingSize\n if (!matchingProductDetail)\n throw new Error(this.ERROR_MSG.PRODUCT.BARCODE_NOT_EXIST(productBarcode, packingType, packingSize))\n\n let matchingOIs: OrderInventory[] = orderInventories.filter(\n (oi: OrderInventory) =>\n oi.packingType === packingType &&\n oi.packingSize === packingSize &&\n oi.product?.id === matchingProductDetail.product?.id\n )\n\n let sortedQty: number = 1\n\n if (!matchingOIs?.length) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.NO_MATCHING_RESULT(packingType, packingSize))\n } else {\n await Promise.all(\n matchingOIs.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = inventory.product\n\n if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {\n // Serial Number scanning for batch picking\n if (matchingOI?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty\n sortedQty -= 1\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.SORTED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else if (matchingOI?.sortedQty > releaseQty) {\n const product: Product = matchingOI.inventory.product\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n 1,\n releaseGood,\n matchingOI.bizplace\n )\n }\n }\n })\n )\n }\n }\n }\n\n async sortingProduct(\n taskNo: string,\n releaseGoodNo: string,\n productId: string,\n sortingQty: number,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo && oi.product.id === productId)\n\n if (!orderInventories?.length) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productId))\n } else {\n await Promise.all(\n orderInventories.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = matchingOI.inventory.product\n const packingType: string = matchingOI.packingType\n const packingSize: number = matchingOI.packingSize\n\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: this.domain, serialNumber: serialNumber, product },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n sortingQty,\n releaseGood,\n matchingOI.bizplace\n )\n }\n\n if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n matchingOI.sortedQty += sortingQty\n } else {\n matchingOI.sortedQty = releaseQty\n }\n\n sortingQty -= releaseQty\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n } else if (matchingOI?.sortedQty > releaseQty) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n }\n })\n )\n }\n }\n\n async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {\n try {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.SORTING\n },\n ['bizplace', 'orderInventories']\n )\n\n if (!releaseGood) {\n throw new Error('Order is already sorted')\n }\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood, closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n releaseGood.status = ORDER_STATUS.READY_TO_LOAD\n releaseGood.updater = this.user\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n return releaseGood\n } catch (e) {\n throw e\n }\n }\n\n async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const allTaskCompleted: boolean = worksheetDetails.every(wsd => wsd.status === WORKSHEET_STATUS.DONE)\n\n if (!allTaskCompleted)\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('complete worksheet', 'few incompleted line items'))\n\n worksheet.status = WORKSHEET_STATUS.DONE\n worksheet.endedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n return worksheet\n }\n\n private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {\n //1. find tote\n let foundTote: Tote = await this.trxMgr\n .getRepository(Tote)\n .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })\n\n if (foundTote?.status == TOTE_STATUS.DAMAGED) {\n throw new Error('Tote is damaged')\n }\n\n if (foundTote?.status == TOTE_STATUS.DISPATCHED) {\n throw new Error('Tote is dispatched')\n }\n\n //2. find order tote\n let foundOrderTote: OrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })\n\n //if order tote not found the create one, if tote not found means it's tote box\n //create order tote item\n if (!foundOrderTote) {\n const orderTote = await this.trxMgr.getRepository(OrderTote).save({\n name: toteNo,\n domain: this.domain,\n releaseGood,\n tote: foundTote ? foundTote : null,\n updater: this.user\n })\n\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n if (foundOrderTote.closedDate) {\n throw new Error('Tote has been sealed, please try another tote!')\n }\n\n //if found order tote then check if order tote item exist\n const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOneBy({\n domain: { id: this.domain.id },\n orderProduct: { id: targetProduct.id },\n orderInventory: { id: targetInventory.id },\n orderTote: { id: foundOrderTote.id }\n })\n\n //if not order tote item doesnt exist then create one\n if (!foundOrderToteItem) {\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n //if found order tote item found then add the quantity\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n ...foundOrderToteItem,\n qty: foundOrderToteItem.qty + pickedQty\n })\n }\n }\n }\n}\n"]}
@@ -16,12 +16,12 @@ const datetime_util_1 = require("../utils/datetime-util");
16
16
  const REPORT_API_URL = env_1.config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html');
17
17
  async function renderElcclGRN({ grnNo }, context) {
18
18
  // 1. find domain
19
- const domain = await (0, typeorm_1.getRepository)(shell_1.Domain).findOne({
19
+ const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOne({
20
20
  where: { id: context.state.domain.id }
21
21
  });
22
22
  // 2. find grn
23
- const foundGRN = await (0, typeorm_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
24
- where: { domain, name: grnNo },
23
+ const foundGRN = await (0, shell_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
24
+ where: { domain: { id: domain.id }, name: grnNo },
25
25
  relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']
26
26
  });
27
27
  // 3. find GAN
@@ -30,39 +30,44 @@ async function renderElcclGRN({ grnNo }, context) {
30
30
  // 4. find customer bizplace
31
31
  const partnerBiz = foundGRN.bizplace;
32
32
  // 5. find domain contact point
33
- const foundCP = await (0, typeorm_1.getRepository)(biz_base_1.ContactPoint).findOne({
34
- where: { domain, bizplace: partnerBiz }
33
+ const foundCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
34
+ where: { domain: { id: domain.id }, bizplace: partnerBiz }
35
35
  });
36
36
  // 6. find unloading worksheet
37
- const foundWS = await (0, typeorm_1.getRepository)(entities_1.Worksheet).findOne({
38
- where: { domain, arrivalNotice: foundGAN, type: sales_base_1.ORDER_PRODUCT_STATUS.UNLOADING, status: sales_base_1.ORDER_STATUS.DONE },
37
+ const foundWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
38
+ where: {
39
+ domain: { id: domain.id },
40
+ arrivalNotice: foundGAN,
41
+ type: sales_base_1.ORDER_PRODUCT_STATUS.UNLOADING,
42
+ status: sales_base_1.ORDER_STATUS.DONE
43
+ },
39
44
  relations: ['worksheetDetails']
40
45
  });
41
46
  // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({
42
- // where: { domain, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
47
+ // where: { domain: { id: domain.id }, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
43
48
  // relations: ['product']
44
49
  // })
45
50
  // 7. find grn template based on category
46
- const foundTemplate = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
47
- where: { domain, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
51
+ const foundTemplate = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
52
+ where: { domain: { id: domain.id }, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
48
53
  });
49
54
  // 8. find grn logo
50
- const foundLogo = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
55
+ const foundLogo = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
51
56
  where: {
52
- domain,
57
+ domain: { id: domain.id },
53
58
  category: constants_1.TEMPLATE_TYPE.LOGO
54
59
  }
55
60
  });
56
61
  // 9. find signature
57
- const foundSignature = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
62
+ const foundSignature = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
58
63
  where: {
59
- domain,
64
+ domain: { id: domain.id },
60
65
  category: constants_1.TEMPLATE_TYPE.SIGNATURE
61
66
  }
62
67
  });
63
- const foundCop = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
68
+ const foundCop = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
64
69
  where: {
65
- domain,
70
+ domain: { id: domain.id },
66
71
  category: constants_1.TEMPLATE_TYPE.COP
67
72
  }
68
73
  });
@@ -1 +1 @@
1
- {"version":3,"file":"render-elccl-grn.js","sourceRoot":"","sources":["../../server/controllers/render-elccl-grn.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { EntityManager, getManager, getRepository } from 'typeorm'\n\nimport { Attachment, STORAGE } from '@things-factory/attachment-base'\nimport { Bizplace, ContactPoint } from '@things-factory/biz-base'\nimport { config } from '@things-factory/env'\nimport { ArrivalNotice, GoodsReceivalNote, ORDER_PRODUCT_STATUS, ORDER_STATUS } from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\n\nimport { TEMPLATE_TYPE, TRANSACTION_TYPE } from '../constants'\nimport { Worksheet } from '../entities'\nimport { DateTimeConverter } from '../utils/datetime-util'\n\nconst REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')\n\nexport async function renderElcclGRN({ grnNo }, context: any) {\n // 1. find domain\n const domain: Domain = await getRepository(Domain).findOne({\n where: { id: context.state.domain.id }\n })\n\n // 2. find grn\n const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({\n where: { domain, name: grnNo },\n relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']\n })\n\n // 3. find GAN\n const foundGAN: ArrivalNotice = foundGRN.arrivalNotice\n const ownRefNo = foundGAN.refNo\n\n // 4. find customer bizplace\n const partnerBiz: Bizplace = foundGRN.bizplace\n\n // 5. find domain contact point\n const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({\n where: { domain, bizplace: partnerBiz }\n })\n\n // 6. find unloading worksheet\n const foundWS: Worksheet = await getRepository(Worksheet).findOne({\n where: { domain, arrivalNotice: foundGAN, type: ORDER_PRODUCT_STATUS.UNLOADING, status: ORDER_STATUS.DONE },\n relations: ['worksheetDetails']\n })\n\n // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({\n // where: { domain, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },\n // relations: ['product']\n // })\n\n // 7. find grn template based on category\n const foundTemplate: Attachment = await getRepository(Attachment).findOne({\n where: { domain, category: TEMPLATE_TYPE.GRN_TEMPLATE }\n })\n\n // 8. find grn logo\n const foundLogo: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.LOGO\n }\n })\n\n // 9. find signature\n const foundSignature: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.SIGNATURE\n }\n })\n\n const foundCop: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.COP\n }\n })\n\n const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')\n\n let logo = null\n if (foundLogo?.path) {\n logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))\n }\n\n let signature = null\n if (foundSignature?.path) {\n signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))\n }\n\n let cop = null\n if (foundCop?.path) {\n cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))\n }\n\n let invItems: any\n\n await getManager().transaction(async (trxMgr: EntityManager) => {\n await trxMgr.query(\n `\n create temp table tmp on commit drop as(\n select invh.*, invh2.ref_order_id as release_order_id, invh2.qty as release_qty, invh.qty as inbound_qty, \n invh.qty + invh2.qty as remaining_qty, invh2.uom_value as release_uom_value, invh.uom_value as inbound_uom_value, \n invh.uom_value + invh2.uom_value as remaining_uom_value\n from reduced_inventory_histories invh \n left join reduced_inventory_histories invh2 on \n invh2.domain_id = invh.domain_id and \n invh2.pallet_id = invh.pallet_id and \n invh2.seq = invh.seq + 1 and \n invh2.transaction_type='PICKING'\n where invh.ref_order_id is not null and invh.ref_order_id::uuid = $1 and invh.transaction_type = $2\n )\n `,\n [foundGAN.id, TRANSACTION_TYPE.UNLOADING]\n )\n\n await trxMgr.query(\n `\n create temp table tmp2 on commit drop as(\n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, inbound_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n inbound_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty > 0 or release_qty is null\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, remaining_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n remaining_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty < 0 and remaining_qty > 0\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, -release_qty as loose_amt, release_uom_value,inbound_uom_value,remaining_uom_value, \n -release_uom_value as loose_wgt, '[C/D]' as cross_dock, inventory_id\n from tmp where release_qty < 0\n )\n `\n )\n\n await trxMgr.query(\n `\n create temp table tmp3 on commit drop as (\n select main.*, concat(p2.name, ' (', p2.description, ')') as product_name, plt.name as pallet_name,\n case when main.reusable_pallet_id notnull then concat(main.qty, ' ', main.packing_type, '(S) ', plt.name) else concat(main.pallet, ' PALLET(S)')\n end as remarks,\n row_number() over (\n partition by p2.name, main.packing_type\n order by p2.name, reusable_pallet_id desc, cross_dock desc\n ) as sort\n from (\n select product_id, reusable_pallet_id, packing_type, cross_dock, sum(qty) as ori_qty, sum(loose_amt) as qty, sum(coalesce(release_qty, 0)) as release_qty, \n sum(loose_wgt) as uom_value, count(distinct pallet_id) as pallet\n from tmp2 \n group by cross_dock, reusable_pallet_id, product_id, packing_type\n ) as main\n inner join products p2 on p2.id = main.product_id\n left join pallets plt on plt.id = main.reusable_pallet_id\n order by product_name, sort, remarks\n )\n `\n )\n\n invItems = await trxMgr.query(\n `\n select product_name, qty, uom_value, concat(remarks, ' ', cross_dock) as remarks, 0 as rank from (\n select product_name, sum(qty) as qty, sum(uom_value) as uom_value, string_agg(remarks,' ' order by product_name, sort, remarks) as remarks, cross_dock\n from tmp3 group by product_name, cross_dock\n ) as foo\n union \n select vas.name as product_name, qty, 0 as uom_value, remark as remarks, 1 as rank \n from order_vass ov \n inner join vass vas on vas.id = ov.vas_id \n where arrival_notice_id = $1 and vas.type = 'MATERIALS'\n order by rank, product_name, remarks\n `,\n [foundGAN.id]\n )\n })\n\n const data = {\n logo_url: logo,\n sign_url: signature,\n cop_url: cop,\n customer_biz: partnerBiz.company.name,\n customer_address: partnerBiz.address,\n company_domain: partnerBiz.company.name,\n company_phone: foundCP.phone,\n company_email: foundCP.email,\n company_brn: partnerBiz.company.description,\n company_address: partnerBiz.company.address,\n order_no: foundGRN.name,\n unload_date: DateTimeConverter.date(foundWS.endedAt),\n ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,\n received_date: DateTimeConverter.date(foundWS.endedAt),\n truck_no: foundGAN.truckNo || '',\n container_no: foundGAN?.containerNo ? foundGAN.containerNo : foundGAN.deliveryOrderNo,\n product_list: invItems.map((item, idx) => {\n return {\n list_no: idx + 1,\n product_name: item.product_name,\n product_type: item.packing_type,\n product_batch: item.batch_id,\n product_qty: item.qty,\n product_uom_value: Math.round(item.uom_value * 100) / 100,\n pallet_qty: item.pallet_count,\n remark: item.remarks\n }\n })\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(data))\n\n const response = await fetch(REPORT_API_URL, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n}\n"]}
1
+ {"version":3,"file":"render-elccl-grn.js","sourceRoot":"","sources":["../../server/controllers/render-elccl-grn.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { EntityManager, getManager } from 'typeorm'\n\nimport { Attachment, STORAGE } from '@things-factory/attachment-base'\nimport { Bizplace, ContactPoint } from '@things-factory/biz-base'\nimport { config } from '@things-factory/env'\nimport { ArrivalNotice, GoodsReceivalNote, ORDER_PRODUCT_STATUS, ORDER_STATUS } from '@things-factory/sales-base'\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { TEMPLATE_TYPE, TRANSACTION_TYPE } from '../constants'\nimport { Worksheet } from '../entities'\nimport { DateTimeConverter } from '../utils/datetime-util'\n\nconst REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')\n\nexport async function renderElcclGRN({ grnNo }, context: ResolverContext) {\n // 1. find domain\n const domain: Domain = await getRepository(Domain).findOne({\n where: { id: context.state.domain.id }\n })\n\n // 2. find grn\n const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({\n where: { domain: { id: domain.id }, name: grnNo },\n relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']\n })\n\n // 3. find GAN\n const foundGAN: ArrivalNotice = foundGRN.arrivalNotice\n const ownRefNo = foundGAN.refNo\n\n // 4. find customer bizplace\n const partnerBiz: Bizplace = foundGRN.bizplace\n\n // 5. find domain contact point\n const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({\n where: { domain: { id: domain.id }, bizplace: partnerBiz }\n })\n\n // 6. find unloading worksheet\n const foundWS: Worksheet = await getRepository(Worksheet).findOne({\n where: {\n domain: { id: domain.id },\n arrivalNotice: foundGAN,\n type: ORDER_PRODUCT_STATUS.UNLOADING,\n status: ORDER_STATUS.DONE\n },\n relations: ['worksheetDetails']\n })\n\n // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({\n // where: { domain: { id: domain.id }, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },\n // relations: ['product']\n // })\n\n // 7. find grn template based on category\n const foundTemplate: Attachment = await getRepository(Attachment).findOne({\n where: { domain: { id: domain.id }, category: TEMPLATE_TYPE.GRN_TEMPLATE }\n })\n\n // 8. find grn logo\n const foundLogo: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.LOGO\n }\n })\n\n // 9. find signature\n const foundSignature: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.SIGNATURE\n }\n })\n\n const foundCop: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.COP\n }\n })\n\n const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')\n\n let logo = null\n if (foundLogo?.path) {\n logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))\n }\n\n let signature = null\n if (foundSignature?.path) {\n signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))\n }\n\n let cop = null\n if (foundCop?.path) {\n cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))\n }\n\n let invItems: any\n\n await getManager().transaction(async (trxMgr: EntityManager) => {\n await trxMgr.query(\n `\n create temp table tmp on commit drop as(\n select invh.*, invh2.ref_order_id as release_order_id, invh2.qty as release_qty, invh.qty as inbound_qty, \n invh.qty + invh2.qty as remaining_qty, invh2.uom_value as release_uom_value, invh.uom_value as inbound_uom_value, \n invh.uom_value + invh2.uom_value as remaining_uom_value\n from reduced_inventory_histories invh \n left join reduced_inventory_histories invh2 on \n invh2.domain_id = invh.domain_id and \n invh2.pallet_id = invh.pallet_id and \n invh2.seq = invh.seq + 1 and \n invh2.transaction_type='PICKING'\n where invh.ref_order_id is not null and invh.ref_order_id::uuid = $1 and invh.transaction_type = $2\n )\n `,\n [foundGAN.id, TRANSACTION_TYPE.UNLOADING]\n )\n\n await trxMgr.query(\n `\n create temp table tmp2 on commit drop as(\n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, inbound_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n inbound_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty > 0 or release_qty is null\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, remaining_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n remaining_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty < 0 and remaining_qty > 0\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, -release_qty as loose_amt, release_uom_value,inbound_uom_value,remaining_uom_value, \n -release_uom_value as loose_wgt, '[C/D]' as cross_dock, inventory_id\n from tmp where release_qty < 0\n )\n `\n )\n\n await trxMgr.query(\n `\n create temp table tmp3 on commit drop as (\n select main.*, concat(p2.name, ' (', p2.description, ')') as product_name, plt.name as pallet_name,\n case when main.reusable_pallet_id notnull then concat(main.qty, ' ', main.packing_type, '(S) ', plt.name) else concat(main.pallet, ' PALLET(S)')\n end as remarks,\n row_number() over (\n partition by p2.name, main.packing_type\n order by p2.name, reusable_pallet_id desc, cross_dock desc\n ) as sort\n from (\n select product_id, reusable_pallet_id, packing_type, cross_dock, sum(qty) as ori_qty, sum(loose_amt) as qty, sum(coalesce(release_qty, 0)) as release_qty, \n sum(loose_wgt) as uom_value, count(distinct pallet_id) as pallet\n from tmp2 \n group by cross_dock, reusable_pallet_id, product_id, packing_type\n ) as main\n inner join products p2 on p2.id = main.product_id\n left join pallets plt on plt.id = main.reusable_pallet_id\n order by product_name, sort, remarks\n )\n `\n )\n\n invItems = await trxMgr.query(\n `\n select product_name, qty, uom_value, concat(remarks, ' ', cross_dock) as remarks, 0 as rank from (\n select product_name, sum(qty) as qty, sum(uom_value) as uom_value, string_agg(remarks,' ' order by product_name, sort, remarks) as remarks, cross_dock\n from tmp3 group by product_name, cross_dock\n ) as foo\n union \n select vas.name as product_name, qty, 0 as uom_value, remark as remarks, 1 as rank \n from order_vass ov \n inner join vass vas on vas.id = ov.vas_id \n where arrival_notice_id = $1 and vas.type = 'MATERIALS'\n order by rank, product_name, remarks\n `,\n [foundGAN.id]\n )\n })\n\n const data = {\n logo_url: logo,\n sign_url: signature,\n cop_url: cop,\n customer_biz: partnerBiz.company.name,\n customer_address: partnerBiz.address,\n company_domain: partnerBiz.company.name,\n company_phone: foundCP.phone,\n company_email: foundCP.email,\n company_brn: partnerBiz.company.description,\n company_address: partnerBiz.company.address,\n order_no: foundGRN.name,\n unload_date: DateTimeConverter.date(foundWS.endedAt),\n ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,\n received_date: DateTimeConverter.date(foundWS.endedAt),\n truck_no: foundGAN.truckNo || '',\n container_no: foundGAN?.containerNo ? foundGAN.containerNo : foundGAN.deliveryOrderNo,\n product_list: invItems.map((item, idx) => {\n return {\n list_no: idx + 1,\n product_name: item.product_name,\n product_type: item.packing_type,\n product_batch: item.batch_id,\n product_qty: item.qty,\n product_uom_value: Math.round(item.uom_value * 100) / 100,\n pallet_qty: item.pallet_count,\n remark: item.remarks\n }\n })\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(data))\n\n const response = await fetch(REPORT_API_URL, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n}\n"]}
@@ -19,30 +19,30 @@ const datetime_util_1 = require("../utils/datetime-util");
19
19
  const REPORT_API_URL = env_1.config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html');
20
20
  async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
21
21
  // 1. find domain
22
- const domain = await (0, typeorm_1.getRepository)(shell_1.Domain).findOne({
22
+ const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOne({
23
23
  where: { id: context.state.domain.id }
24
24
  });
25
25
  // 2. find grn
26
- const foundGRN = await (0, typeorm_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
27
- where: { domain, name: grnNo },
26
+ const foundGRN = await (0, shell_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
27
+ where: { domain: { id: domain.id }, name: grnNo },
28
28
  relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'arrivalNotice']
29
29
  });
30
30
  // 3. find GAN
31
31
  const foundGAN = foundGRN.arrivalNotice;
32
32
  const ownRefNo = foundGAN.refNo;
33
- const foundInventoryItem = await (0, typeorm_1.getRepository)(warehouse_base_1.InventoryItem).query(`select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`);
33
+ const foundInventoryItem = await (0, shell_1.getRepository)(warehouse_base_1.InventoryItem).query(`select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`);
34
34
  // 4. find customer bizplace
35
35
  const partnerBiz = foundGRN.bizplace;
36
- const partnerDomain = await (0, typeorm_1.getRepository)(auth_base_1.Partner).findOne({
36
+ const partnerDomain = await (0, shell_1.getRepository)(auth_base_1.Partner).findOne({
37
37
  where: { partnerDomain: partnerBiz.domain, domain },
38
38
  relations: ['domain']
39
39
  });
40
40
  const domainOwner = partnerDomain.domain;
41
- const domainBizplace = await (0, typeorm_1.getRepository)(biz_base_1.Bizplace).findOne({
41
+ const domainBizplace = await (0, shell_1.getRepository)(biz_base_1.Bizplace).findOne({
42
42
  where: { domain: domainOwner },
43
43
  relations: ['company']
44
44
  });
45
- const qbReducedInventory = (0, typeorm_1.getRepository)(warehouse_base_1.ReducedInventoryHistory)
45
+ const qbReducedInventory = (0, shell_1.getRepository)(warehouse_base_1.ReducedInventoryHistory)
46
46
  .createQueryBuilder('ivh')
47
47
  .select('product_id', 'productId')
48
48
  .addSelect('batch_id', 'batchId')
@@ -65,48 +65,63 @@ async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
65
65
  .addGroupBy('expiration_date')
66
66
  .getRawMany();
67
67
  // 5. find domain contact point
68
- const foundCP = await (0, typeorm_1.getRepository)(biz_base_1.ContactPoint).findOne({
69
- where: { domain, bizplace: domainBizplace }
68
+ const foundCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
69
+ where: { domain: { id: domain.id }, bizplace: domainBizplace }
70
70
  });
71
71
  // 5. find domain contact point
72
- const foundPartnerCP = await (0, typeorm_1.getRepository)(biz_base_1.ContactPoint).findOne({
73
- where: { domain, bizplace: partnerBiz }
72
+ const foundPartnerCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
73
+ where: { domain: { id: domain.id }, bizplace: partnerBiz }
74
74
  });
75
75
  // 6. find unloading worksheet
76
- const foundWS = await (0, typeorm_1.getRepository)(entities_1.Worksheet).findOne({
77
- where: { domain, arrivalNotice: foundGAN, type: constants_1.WORKSHEET_TYPE.UNLOADING, status: sales_base_1.ORDER_STATUS.DONE },
76
+ const foundWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
77
+ where: {
78
+ domain: { id: domain.id },
79
+ arrivalNotice: foundGAN,
80
+ type: constants_1.WORKSHEET_TYPE.UNLOADING,
81
+ status: sales_base_1.ORDER_STATUS.DONE
82
+ },
78
83
  relations: ['worksheetDetails', 'updater']
79
84
  });
80
85
  // find putaway worksheet
81
- const foundPutawayWS = await (0, typeorm_1.getRepository)(entities_1.Worksheet).findOne({
82
- where: { domain, arrivalNotice: foundGAN, type: constants_1.WORKSHEET_TYPE.PUTAWAY, status: sales_base_1.ORDER_STATUS.DONE },
86
+ const foundPutawayWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
87
+ where: {
88
+ domain: { id: domain.id },
89
+ arrivalNotice: foundGAN,
90
+ type: constants_1.WORKSHEET_TYPE.PUTAWAY,
91
+ status: sales_base_1.ORDER_STATUS.DONE
92
+ },
83
93
  relations: ['worksheetDetails', 'updater']
84
94
  });
85
- const targetProducts = await (0, typeorm_1.getRepository)(sales_base_1.OrderProduct).find({
86
- where: { domain, arrivalNotice: foundGAN, actualPalletQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()), actualPackQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) },
95
+ const targetProducts = await (0, shell_1.getRepository)(sales_base_1.OrderProduct).find({
96
+ where: {
97
+ domain: { id: domain.id },
98
+ arrivalNotice: foundGAN,
99
+ actualPalletQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()),
100
+ actualPackQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)())
101
+ },
87
102
  relations: ['product']
88
103
  });
89
104
  // 7. find grn template based on category
90
- const foundTemplate = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
91
- where: { domain, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
105
+ const foundTemplate = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
106
+ where: { domain: { id: domain.id }, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
92
107
  });
93
108
  // 8. find grn logo
94
- const foundLogo = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
109
+ const foundLogo = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
95
110
  where: {
96
- domain,
111
+ domain: { id: domain.id },
97
112
  category: constants_1.TEMPLATE_TYPE.LOGO
98
113
  }
99
114
  });
100
115
  // 9. find signature
101
- const foundSignature = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
116
+ const foundSignature = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
102
117
  where: {
103
- domain,
118
+ domain: { id: domain.id },
104
119
  category: constants_1.TEMPLATE_TYPE.SIGNATURE
105
120
  }
106
121
  });
107
- const foundCop = await (0, typeorm_1.getRepository)(attachment_base_1.Attachment).findOne({
122
+ const foundCop = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
108
123
  where: {
109
- domain,
124
+ domain: { id: domain.id },
110
125
  category: constants_1.TEMPLATE_TYPE.COP
111
126
  }
112
127
  });
@@ -203,7 +218,9 @@ async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
203
218
  product_uom: `${unloadInvHistory.uom || item.uom}`,
204
219
  product_gross_weight: item.product.grossWeight || null,
205
220
  unit_price: item.unitPrice || null,
206
- expiry_date: unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != '' ? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0] : '',
221
+ expiry_date: unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != ''
222
+ ? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0]
223
+ : '',
207
224
  manufacture_date: item.manufactureDate,
208
225
  reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
209
226
  remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')