@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
@@ -4,7 +4,6 @@ exports.WorksheetController = exports.OrderTargetFields = exports.ReferenceOrder
4
4
  const typeorm_1 = require("typeorm");
5
5
  const auth_base_1 = require("@things-factory/auth-base");
6
6
  const biz_base_1 = require("@things-factory/biz-base");
7
- const notification_1 = require("@things-factory/notification");
8
7
  const sales_base_1 = require("@things-factory/sales-base");
9
8
  const warehouse_base_1 = require("@things-factory/warehouse-base");
10
9
  const constants_1 = require("../constants");
@@ -121,7 +120,7 @@ class WorksheetController {
121
120
  async findWorksheet(condition, relations = ['worksheetDetails']) {
122
121
  condition = this.tidyConditions(condition);
123
122
  const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
124
- where: Object.assign({ domain: this.domain }, condition),
123
+ where: Object.assign({ domain: { id: this.domain.id } }, condition),
125
124
  relations
126
125
  });
127
126
  if (!worksheet)
@@ -136,7 +135,7 @@ class WorksheetController {
136
135
  * ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])
137
136
  */
138
137
  async findWorksheetById(id, relations = ['worksheetDetails']) {
139
- const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne(id, { relations });
138
+ const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({ where: { id }, relations });
140
139
  if (!worksheet)
141
140
  throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id));
142
141
  return worksheet;
@@ -150,7 +149,7 @@ class WorksheetController {
150
149
  */
151
150
  async findWorksheetByNo(worksheetNo, relations = ['worksheetDetails']) {
152
151
  const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
153
- where: { domain: this.domain, name: worksheetNo },
152
+ where: { domain: { id: this.domain.id }, name: worksheetNo },
154
153
  relations
155
154
  });
156
155
  if (!worksheet)
@@ -189,10 +188,10 @@ class WorksheetController {
189
188
  const bizplace = refOrder.bizplace;
190
189
  const condition = {
191
190
  where: {
192
- bizplace,
193
- domain: this.domain,
191
+ bizplace: { id: bizplace.id },
192
+ domain: { id: this.domain.id },
194
193
  type,
195
- [refOrderField]: refOrder
194
+ [refOrderField]: { id: refOrder.id }
196
195
  },
197
196
  relations
198
197
  };
@@ -235,7 +234,7 @@ class WorksheetController {
235
234
  async findWorksheetDetail(condition, relations) {
236
235
  condition = this.tidyConditions(condition);
237
236
  const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
238
- where: Object.assign({ domain: this.domain }, condition),
237
+ where: Object.assign({ domain: { id: this.domain.id } }, condition),
239
238
  relations
240
239
  });
241
240
  if (!worksheetDetail)
@@ -250,7 +249,7 @@ class WorksheetController {
250
249
  */
251
250
  async findWorksheetDetailByName(worksheetDetailName, relations) {
252
251
  const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
253
- where: { domain: this.domain, name: worksheetDetailName },
252
+ where: { domain: { id: this.domain.id }, name: worksheetDetailName },
254
253
  relations
255
254
  });
256
255
  if (!worksheetDetail)
@@ -259,7 +258,7 @@ class WorksheetController {
259
258
  }
260
259
  async findWorksheetDetailByNames(worksheetDetailNames, relations) {
261
260
  const worksheetDetails = await this.trxMgr.getRepository(entities_1.WorksheetDetail).find({
262
- where: { domain: this.domain, name: (0, typeorm_1.In)(worksheetDetailNames) },
261
+ where: { domain: { id: this.domain.id }, name: (0, typeorm_1.In)(worksheetDetailNames) },
263
262
  relations
264
263
  });
265
264
  if (!(worksheetDetails === null || worksheetDetails === void 0 ? void 0 : worksheetDetails.length))
@@ -342,7 +341,7 @@ class WorksheetController {
342
341
  * @description
343
342
  * Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)
344
343
  */
345
- async updateRefOrder(refOrder, entitySchema) {
344
+ async updateRefOrder(refOrder, entitySchema, currentStatus) {
346
345
  var _a;
347
346
  if (!entitySchema) {
348
347
  if (refOrder instanceof sales_base_1.ArrivalNotice) {
@@ -365,6 +364,19 @@ class WorksheetController {
365
364
  throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS);
366
365
  if (!((_a = refOrder.updater) === null || _a === void 0 ? void 0 : _a.id))
367
366
  refOrder = this.setStamp(refOrder);
367
+ if (currentStatus && entitySchema == sales_base_1.ReleaseGood) {
368
+ let res = await (0, typeorm_1.getRepository)(entitySchema).query(`
369
+ update release_goods
370
+ set status = $1
371
+ where id = $2
372
+ and status = $3
373
+ returning id
374
+ `, [refOrder.status, refOrder.id, currentStatus]);
375
+ if (res[1] == 0) {
376
+ this.trxMgr.queryRunner.rollbackTransaction();
377
+ throw new Error('Worksheet has already been created');
378
+ }
379
+ }
368
380
  return await this.trxMgr.getRepository(entitySchema).save(refOrder);
369
381
  }
370
382
  /**
@@ -599,10 +611,13 @@ class WorksheetController {
599
611
  */
600
612
  async notifyToUsers(users, message) {
601
613
  const receivers = users.map(user => user.id);
602
- await (0, notification_1.sendNotification)({
603
- receivers,
604
- message
605
- });
614
+ /**
615
+ * @notes Temporary off sendNotification due to suspect of causing wms down
616
+ */
617
+ // await sendNotification({
618
+ // receivers,
619
+ // message
620
+ // })
606
621
  }
607
622
  /**
608
623
  * @summary Notify to office admin
@@ -650,7 +665,8 @@ class WorksheetController {
650
665
  worksheet.returnOrder ||
651
666
  null;
652
667
  if (!refOrder) {
653
- const wsWithRefOrd = await this.trxMgr.getRepository(entities_1.Worksheet).findOne(worksheet.id, {
668
+ const wsWithRefOrd = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
669
+ where: { id: worksheet.id },
654
670
  relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']
655
671
  });
656
672
  refOrder =
@@ -673,7 +689,7 @@ class WorksheetController {
673
689
  */
674
690
  async extractMultipleRefOrderFromWorksheet(worksheet) {
675
691
  const wsdWithRefOrd = await this.trxMgr.getRepository(entities_1.WorksheetDetail).find({
676
- where: { domain: this.domain, worksheet },
692
+ where: { domain: { id: this.domain.id }, worksheet: { id: worksheet.id } },
677
693
  relations: ['targetInventory', 'targetInventory.releaseGood']
678
694
  });
679
695
  let refOrder = wsdWithRefOrd.map((ord) => ord.targetInventory.releaseGood);
@@ -687,8 +703,8 @@ class WorksheetController {
687
703
  * If there's positive result it will throw an error cause pallet is duplicated
688
704
  */
689
705
  async checkPalletDuplication(palletId) {
690
- const duplicatedPalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).count({
691
- domain: this.domain,
706
+ const duplicatedPalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).countBy({
707
+ domain: { id: this.domain.id },
692
708
  palletId,
693
709
  status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
694
710
  });
@@ -696,7 +712,7 @@ class WorksheetController {
696
712
  throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId));
697
713
  const duplicatedReusablePalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Pallet).count({
698
714
  where: {
699
- domain: this.domain,
715
+ domain: { id: this.domain.id },
700
716
  name: palletId
701
717
  }
702
718
  });
@@ -709,8 +725,8 @@ class WorksheetController {
709
725
  * If there's positive result it will throw an error cause carton is duplicated
710
726
  */
711
727
  async checkCartonDuplication(cartonId, orderId) {
712
- const duplicatedCartonCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).count({
713
- domain: this.domain,
728
+ const duplicatedCartonCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).countBy({
729
+ domain: { id: this.domain.id },
714
730
  cartonId,
715
731
  refOrderId: (0, typeorm_1.Not)((0, typeorm_1.Equal)(orderId)),
716
732
  status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
@@ -724,9 +740,9 @@ class WorksheetController {
724
740
  * If there's positive result it will throw an error cause serial number is duplicated
725
741
  */
726
742
  async checkSerialNumberDuplication(serialNumber, product) {
727
- const duplicatedSerialNumberCnt = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
728
- domain: this.domain,
729
- product,
743
+ const duplicatedSerialNumberCnt = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).countBy({
744
+ domain: { id: this.domain.id },
745
+ product: { id: product.id },
730
746
  serialNumber,
731
747
  status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.DELETED))
732
748
  });
@@ -777,6 +793,40 @@ class WorksheetController {
777
793
  }
778
794
  return childQty;
779
795
  }
796
+ async getDirectQty(productDetail, productBarcode, qty) {
797
+ try {
798
+ console.time('getDirectQty');
799
+ let results = await this.trxMgr.query(`
800
+ WITH RECURSIVE cte as (
801
+ select * from (
802
+ select pd.product_id as "productId", id, pd.packing_size as "packingSize",
803
+ pd.packing_type as "packingType", pd.uom as "uom", (pd.uom_value * $2::float) as "uomValue", $2::float as "qty", pd.gtin
804
+ from product_details pd
805
+ where pd.id = $1
806
+ ) as dt
807
+ union all
808
+ select pd.product_id as "productId", pd.id, pd.packing_size as "packingSize",
809
+ pd.packing_type as "packingType", pd.uom,
810
+ dt1.qty * pd.packing_size * pd.uom_value as "uomValue", dt1.qty * pd.packing_size as "qty", pd.gtin
811
+ from product_details pd
812
+ inner join cte dt1 on dt1.id = pd.child_product_detail_id
813
+ where pd.deleted_at is null
814
+ )
815
+ select * from cte where gtin = $3
816
+ `, [
817
+ productDetail.id,
818
+ qty,
819
+ productBarcode
820
+ ]);
821
+ if (results.length <= 0)
822
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
823
+ console.timeEnd('getDirectQty');
824
+ return results[0];
825
+ }
826
+ catch (error) {
827
+ throw error;
828
+ }
829
+ }
780
830
  /**
781
831
  * @summary Check for product child qty at any scanned level
782
832
  * @description It will check every level of product detail by comparing scanned level and GAN registered level.
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet-controller.js","sourceRoot":"","sources":["../../server/controllers/worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, EntitySchema, Equal, FindOneOptions, In, Not } from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Bizplace, getDomainUsers } from '@things-factory/biz-base'\nimport { sendNotification } from '@things-factory/notification'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_VAS_STATUS,\n OrderInventory,\n OrderProduct,\n OrderVas,\n ReleaseGood,\n ReturnOrder,\n VasOrder\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS, InventoryItem, Pallet } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'\nimport { Worksheet, WorksheetDetail } from '../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../utils'\n\nexport type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder\nexport type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas\n\nexport enum ReferenceOrderFields {\n ArrivalNotice = 'arrivalNotice',\n ReleaseGood = 'releaseGood',\n VasOrder = 'vasOrder',\n InventoryCheck = 'inventoryCheck',\n ReturnOrder = 'returnOrder'\n}\n\nexport enum OrderTargetFields {\n OrderProduct = 'targetProduct',\n OrderInventory = 'targetInventory',\n OrderVas = 'targetVas'\n}\n\nexport interface BasicInterface {\n domain: Domain\n user: User\n}\n\nexport type NotificationMsgInterface = {\n title: string\n body: string\n url: string\n data: any\n}\n\nexport class WorksheetController {\n public readonly ERROR_MSG = {\n FIND: {\n NO_RESULT: (condition: any) => `There's no results matched with condition ${condition}`,\n NO_CHILD_RESULT: (condition: any) => `There's no child result matched with condition ${condition}`,\n NOT_MATCH: (source: any, target: any) => `Unable to find matching ${target} using ${source}`\n },\n ORDER_ITEM: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Current item with ${condition} (${condition2}) not belong to this order`,\n EXCESS_QTY: (condition: any, condition2: any, condition3: any) =>\n `Excess qty is scanned for item ${condition}, ${condition2} (${condition3})`\n },\n PRODUCT: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Order packing type and packing size not match with product master, ${condition} (${condition2})`,\n BARCODE_NOT_EXIST: (condition: any, condition2: any, condition3: any) =>\n `Product barcode - ${condition} with ${condition2} ${condition3}, not exist in master data.`\n },\n CREATE: {\n ID_EXISTS: 'Target has ID already',\n EMPTY_CREATOR: 'Cannot create without creator',\n EMPTY_UPDATER: 'Cannot create without updater'\n },\n UPDATE: {\n ID_NOT_EXISTS: `Target doesn't have ID`,\n EMPTY_UPDATER: 'Cannot update without updater'\n },\n VALIDITY: {\n UNEXPECTED_FIELD_VALUE: (field: string, expectedValue: any, actualValue: any) =>\n `Expected ${field} value is ${expectedValue} but got ${actualValue}`,\n DUPLICATED: (field: string, value: any) => `There is duplicated ${field} value (${value})`,\n CANT_PROCEED_STEP_BY: (step: string, reason: string) => `Can't proceed to ${step} because ${reason}`\n }\n }\n\n private readonly ROLE_NAMES: Record<string, string> = {\n OFFICE_ADMIN: 'Office Admin'\n }\n\n protected trxMgr: EntityManager\n protected domain: Domain\n protected user: User\n\n constructor(trxMgr: EntityManager, domain: Domain, user: User) {\n this.trxMgr = trxMgr\n this.domain = domain\n this.user = user\n }\n\n private getRefOrderField(refOrder: ReferenceOrderType): string {\n if (refOrder instanceof ArrivalNotice) {\n return ReferenceOrderFields.ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n return ReferenceOrderFields.ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n return ReferenceOrderFields.VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n return ReferenceOrderFields.InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n return ReferenceOrderFields.ReturnOrder\n } else {\n throw new Error(\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder)\n )\n }\n }\n\n private getOrderTargetField(orderTarget: OrderTargetTypes): string {\n if (orderTarget instanceof OrderProduct) {\n return OrderTargetFields.OrderProduct\n } else if (orderTarget instanceof OrderInventory) {\n return OrderTargetFields.OrderInventory\n } else if (orderTarget instanceof OrderVas) {\n return OrderTargetFields.OrderVas\n } else {\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('orderTarget', 'One of order target type', orderTarget)\n }\n }\n\n /**\n * @summary Find reference order (ArrivalNotice, ReleaseGood, VasOrder, etc...)\n * @description\n * Find and return reference order with its relations based on passed condition & reltaions\n */\n async findRefOrder(\n entitySchema: EntitySchema,\n condition: Partial<ReferenceOrderType>,\n relations?: string[]\n ): Promise<ReferenceOrderType> {\n condition = this.tidyConditions(condition)\n let findOption: FindOneOptions = { where: condition }\n if (relations?.length > 0) findOption.relations = relations\n\n const refOrder: ReferenceOrderType = await this.trxMgr.getRepository(entitySchema).findOne(findOption)\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(findOption))\n\n return refOrder\n }\n\n /**\n * @summary find worksheet by passed condition\n * @description find worksheey based on passed condition\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheet(condition, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheet(condition: Record<string, any>, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n condition = this.tidyConditions(condition)\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n ...condition\n },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on passed ID\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetById(id: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(id, { relations })\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByNo(worksheetNo: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { domain: this.domain, name: worksheetNo },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetNo))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params.\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByRefOrder(\n refOrder: ReferenceOrderType,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const refOrderField: string = this.getRefOrderField(refOrder)\n if (!refOrder.bizplace?.id) {\n switch (refOrderField) {\n case ReferenceOrderFields.ArrivalNotice:\n refOrder = await this.findRefOrder(ArrivalNotice, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReleaseGood:\n refOrder = await this.findRefOrder(ReleaseGood, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.VasOrder:\n refOrder = await this.findRefOrder(VasOrder, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.InventoryCheck:\n refOrder = await this.findRefOrder(InventoryCheck, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReturnOrder:\n refOrder = await this.findRefOrder(ReturnOrder, refOrder, ['bizplace'])\n break\n }\n }\n\n const bizplace: Bizplace = refOrder.bizplace\n const condition: FindOneOptions = {\n where: {\n bizplace,\n domain: this.domain,\n type,\n [refOrderField]: refOrder\n },\n relations\n }\n\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(condition)\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(type))\n\n return worksheet\n }\n\n /**\n * @summary Find activatable worksheet by worksheet no and type\n * @description Find worksheet by passed worksheet no\n * and check validity by passed type and status (DEACTIVATED)\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findActivatableWorksheet(worksheetNo, type, ['arrivalNotice])\n */\n async findActivatableWorksheet(\n worksheetNo: string,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findWorksheetByNo(worksheetNo, relations)\n this.checkRecordValidity(worksheet, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheet\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findActivatableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed condition\n * @description find worksheet detail based on passed condition\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetail(condition: Record<string, any>, relations?: string[]): Promise<WorksheetDetail> {\n condition = this.tidyConditions(condition)\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n domain: this.domain,\n ...condition\n },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed worksheet detail name\n * @description find worksheey based on passed name of worksheet detail\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetailByName(worksheetDetailName: string, relations?: string[]): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain: this.domain, name: worksheetDetailName },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))\n return worksheetDetail\n }\n\n async findWorksheetDetailByNames(worksheetDetailNames: [string], relations?: string[]): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: this.domain, name: In(worksheetDetailNames) },\n relations\n })\n\n if (!worksheetDetails?.length) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailNames.toString()))\n return worksheetDetails\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findExecutableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n\n return worksheetDetail\n }\n\n async findExecutableWorksheetDetailByNames(\n worksheetDetailNames: [string],\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailNames, relations)\n worksheetDetails.map(worksheetDetail => {\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n })\n\n return worksheetDetails\n }\n\n /**\n * @summary Creating worksheet\n * @description creating worksheet by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheet(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n */\n async createWorksheet(\n refOrder: ReferenceOrderType,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n let refOrderType: string = await this.getRefOrderField(refOrder)\n const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)\n\n let existingWorksheet: Worksheet\n try {\n existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)\n } catch (e) {}\n\n if (existingWorksheet)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n `create ${type.toLocaleLowerCase()} worksheet`,\n 'existing worksheet is found'\n )\n )\n\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n [refOrderType]: refOrder,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n async createBatchWorksheet(\n taskNo: string,\n bizplace: Bizplace,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n taskNo,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n /**\n * @summary Creating worksheet details\n * @description creating worksheet details by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheetDetails(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n *\n */\n async createWorksheetDetails(\n worksheet: Worksheet,\n type: string,\n orderTargets: OrderTargetTypes[],\n additionalProps: Partial<WorksheetDetail> = {}\n ): Promise<WorksheetDetail[]> {\n if (!worksheet.bizplace?.id) {\n worksheet = await this.findWorksheetById(worksheet.id, ['bizplace'])\n }\n const bizplace: Bizplace = worksheet.bizplace\n\n const worksheetDetails: Partial<WorksheetDetail>[] = orderTargets.map((orderTarget: OrderTargetTypes) => {\n const orderTargetField: string = this.getOrderTargetField(orderTarget)\n return {\n domain: this.domain,\n bizplace,\n worksheet,\n name: WorksheetNoGenerator.generate(type, true),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n [orderTargetField]: orderTarget,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n })\n\n if (worksheetDetails.some((wsd: Partial<WorksheetDetail>) => wsd.id))\n throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n }\n\n /**\n * @summary Update reference order (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n * @description\n * Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n */\n async updateRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n if (!refOrder.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n if (!refOrder.updater?.id) refOrder = this.setStamp(refOrder)\n\n return await this.trxMgr.getRepository(entitySchema).save(refOrder)\n }\n\n /**\n * @summary Update order targets (OrderProduct, OrderInventory, OrderVas)\n * @description\n * Update order targets like (OrderProduct, OrderInventory, OrderVas)\n */\n async updateOrderTargets(orderTargets: OrderTargetTypes[], entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (orderTargets[0] instanceof OrderProduct) {\n entitySchema = OrderProduct\n } else if (orderTargets[0] instanceof OrderInventory) {\n entitySchema = OrderInventory\n } else if (orderTargets[0] instanceof OrderVas) {\n entitySchema = OrderVas\n }\n }\n\n if (orderTargets.some((orderTarget: any) => !orderTarget.id)) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n if (!orderTarget.updater?.id) orderTarget = this.setStamp(orderTarget)\n })\n\n return await this.trxMgr.getRepository(entitySchema).save(orderTargets)\n }\n\n /**\n * @summary generate worksheet and worksheet details\n * @description It will generate worksheet and worksheet details in onetime\n * Step 1. Call createWorksheet to create worksheet\n * The status of worksheet will be DEACTIVATED by default\n * You can change it through passing additionalProps\n * Step 2. Update status of order targets\n * Beacuse its status can be different based on type of worksheet\n * Step 3. Call createWorksheetDetails to create worksheet details\n * Step 4. Call updateRefOrder to change status of reference order\n */\n async generateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createWorksheet(refOrder, worksheetType, additionalProps)\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n // @chernhaoee I think the naming of this function is not proper. Seems like it should be something like \"updateLoadingWorksheet\" since the logic targets only Loading Order Target\n async updateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n worksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string\n ): Promise<Worksheet> {\n let newOrderTarget = []\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n for (let orderTarget of orderTargets) {\n try {\n await this.findWorksheetDetail({\n targetInventory: orderTarget.id,\n type: WORKSHEET_TYPE.LOADING\n })\n } catch (e) {\n newOrderTarget.push(orderTarget)\n }\n }\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, newOrderTarget)\n\n // find worksheet details that doesnt exist based on order inventory\n //worksheet.worksheetDetails = await this.findWorksheetDetail(worksheet.id)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n async generateBatchWorksheet(\n worksheetType: string,\n batchPickingWorksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createBatchWorksheet(\n batchPickingWorksheet.taskNo,\n batchPickingWorksheet.bizplace,\n worksheetType,\n additionalProps\n )\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n return worksheet\n }\n\n /**\n * @summary Activate worksheet\n * @description It will activate passed worksheet\n * Every passed worksheet and worksheet details should have value on its id field\n * Because this function has logic to update worksheet and worksheet details\n * Step 1. Check whether every passed worksheet and worksheet details has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Change worksheet details properly and update it\n */\n async activateWorksheet(\n worksheet: Worksheet,\n worksheetDetails: WorksheetDetail[],\n changedWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n if (!worksheet.id || worksheetDetails.some((wsd: WorksheetDetail) => !wsd.id)) {\n throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n }\n\n worksheet.status = WORKSHEET_STATUS.EXECUTING\n worksheet.startedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n worksheetDetails = this.renewWorksheetDetails(worksheetDetails, changedWorksheetDetails, 'name', {\n status: WORKSHEET_STATUS.EXECUTING,\n updater: this.user\n })\n worksheet.worksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n return worksheet\n }\n\n /**\n * @summary Complete worksheet\n * @description It will activate passed worksheet\n * Passed worksheet should have value on its id field\n * Because this function has logic to update worksheet\n * Step 1. Check whether passed worksheet has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Renew worksheet with relations which is needed to complete worksheet\n * Step 4. Change order targets properly and update it based on type of worksheet\n * Step 5. If passed updatedRefOrderStatus has value it update reference order status\n */\n async completeWorksheet(worksheet: Worksheet, updatedRefOrderStatus?: string): Promise<Worksheet> {\n if (!worksheet.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\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 const worksheetType: string = worksheet.type\n worksheet = await this.findWorksheet(worksheet, [\n 'worksheetDetails',\n 'worksheetDetails.targetProduct',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetVas'\n ])\n\n let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n\n worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .forEach((wsd: WorksheetDetail) => {\n wsd.status = WORKSHEET_STATUS.DONE\n wsd.updater = this.user\n })\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n if (worksheetType === WORKSHEET_TYPE.UNLOADING) {\n let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetProduct: OrderProduct = wsd.targetProduct\n targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED\n targetProduct.updater = this.user\n return targetProduct\n })\n\n await this.updateOrderTargets(targetProducts)\n } else if (worksheetType === WORKSHEET_TYPE.VAS) {\n let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetVAS: OrderVas = wsd.targetVas\n targetVAS.status = ORDER_VAS_STATUS.TERMINATED\n targetVAS.updater = this.user\n return targetVAS\n })\n\n await this.updateOrderTargets(targetVASs)\n } else if (\n worksheetType === WORKSHEET_TYPE.PUTAWAY ||\n worksheetType === WORKSHEET_TYPE.PICKING ||\n worksheetType === WORKSHEET_TYPE.PACKING ||\n worksheetType === WORKSHEET_TYPE.LOADING ||\n worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||\n worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN\n ) {\n let targetInventories: OrderInventory[] = worksheet.worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n return targetInventory\n })\n\n await this.updateOrderTargets(targetInventories)\n }\n\n if (updatedRefOrderStatus) {\n const refOrder: ReferenceOrderType = await this.extractRefOrderFromWorksheet(worksheet)\n refOrder.status = updatedRefOrderStatus\n refOrder.updater = this.user\n await this.updateRefOrder(refOrder)\n }\n\n return worksheet\n }\n\n /**\n * @summary Renew worksheet details by changed worksheet details\n * @description When you want to merge changed worksheet detail list into original worksheet detail list\n * you can use this function\n * it will loop through whole passed original worksheet details and find out matched changed one by value of 'ID' or its 'name'\n * Because of this, every passed origin worksheet details and changed worksheet details should have one of those values\n */\n renewWorksheetDetails(\n originWSDs: WorksheetDetail[],\n changedWSDs: Partial<WorksheetDetail>[],\n identifier: string,\n additionalProps: Partial<WorksheetDetail> = {}\n ): WorksheetDetail[] {\n if (\n originWSDs.some((wsd: WorksheetDetail) => !wsd[identifier]) ||\n changedWSDs.some((wsd: Partial<WorksheetDetail>) => !wsd[identifier])\n ) {\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n 'renew worksheet details',\n `some passed parameter doesn't have identifier (${identifier})`\n )\n )\n }\n\n return originWSDs.map((originWSD: WorksheetDetail) => {\n const changedWSD: Partial<WorksheetDetail> = this.findMatchedWSD(originWSD[identifier], changedWSDs)\n\n return {\n ...originWSD,\n ...changedWSD,\n ...additionalProps\n }\n })\n }\n\n /**\n * @summary Find out matched worksheet detail by identifier\n * @description Find out matched worksheet detail by identifier\n * identifier can be 'ID' or 'name' of worksheet detail\n */\n findMatchedWSD(identifier: string, candidates: any[]): any {\n return candidates.find(\n (candidate: Partial<WorksheetDetail>) => candidate.id === identifier || candidate.name === identifier\n )\n }\n\n /**\n * @summary Valitiy checker\n * @description It will try to check whether passed record has same properties with passed conditions\n * Basically it will check equality of value\n * If you want to check advanced validation you can pass function to customize the logic of validation\n * Passed function will be call with actual value of record as parameter\n */\n checkRecordValidity(record: Record<string, any>, conditions: Record<string, any>): void {\n for (let field in conditions) {\n let isValid: boolean = false\n if (typeof conditions[field] === 'function') {\n isValid = conditions[field](record[field])\n } else {\n isValid = conditions[field] === record[field]\n }\n\n if (!isValid)\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(field, conditions[field], record[field]))\n }\n }\n\n /**\n * @summary Notify to passed users\n * @description Passed notification message will be sent to passed users\n */\n async notifyToUsers(users: User[], message: NotificationMsgInterface): Promise<void> {\n const receivers: any[] = users.map(user => user.id)\n await sendNotification({\n receivers,\n message\n })\n }\n\n /**\n * @summary Notify to office admin\n * @description Passed notification message will be sent to office admin of current domain\n * default role name is defiend as ROLE_NAME.OFFICE_ADMIn by default\n * You can change role name by passing roleName as parameter\n */\n async notifyToOfficeAdmin(message: NotificationMsgInterface, roleName?: string): Promise<void> {\n const users: User[] = await this.trxMgr\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where('role.name = :roleName', { roleName: roleName || this.ROLE_NAMES.OFFICE_ADMIN })\n .andWhere('role.domain_id = :domainId', { domainId: this.domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary Notify to customer of passed bizplace\n * @description Passed notification message will be sent to customer of passed bizplace\n */\n async notifyToCustomer(bizplace: Bizplace, message: NotificationMsgInterface): Promise<void> {\n const users: any[] = await getDomainUsers(bizplace, this.trxMgr)\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary extract out referenc order from given worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n let refOrder: ReferenceOrderType =\n worksheet.arrivalNotice ||\n worksheet.releaseGood ||\n worksheet.vasOrder ||\n worksheet.inventoryCheck ||\n worksheet.returnOrder ||\n null\n if (!refOrder) {\n const wsWithRefOrd: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(worksheet.id, {\n relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']\n })\n\n refOrder =\n wsWithRefOrd.arrivalNotice ||\n wsWithRefOrd.releaseGood ||\n wsWithRefOrd.vasOrder ||\n wsWithRefOrd.inventoryCheck ||\n wsWithRefOrd.returnOrder ||\n null\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n }\n\n return refOrder\n }\n\n /**\n * @summary extract out reference orders from given merged order worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractMultipleRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n const wsdWithRefOrd: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: this.domain, worksheet },\n relations: ['targetInventory', 'targetInventory.releaseGood']\n })\n\n let refOrder: ReferenceOrderType[] = wsdWithRefOrd.map((ord: WorksheetDetail) => ord.targetInventory.releaseGood)\n\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n\n return refOrder\n }\n\n /**\n * @summary Check whether passed pallet is existing alreay\n * @description It will try to count inventories which has same domain and same pallet Id and not terminated one\n * If there's positive result it will throw an error cause pallet is duplicated\n */\n async checkPalletDuplication(palletId: string): Promise<void> {\n const duplicatedPalletCnt: number = await this.trxMgr.getRepository(Inventory).count({\n domain: this.domain,\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n\n const duplicatedReusablePalletCnt: number = await this.trxMgr.getRepository(Pallet).count({\n where: {\n domain: this.domain,\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n }\n\n /**\n * @summary Check whether passed carton is existing alreay\n * @description It will try to count inventories which has same domain and same carton Id and not terminated one\n * If there's positive result it will throw an error cause carton is duplicated\n */\n async checkCartonDuplication(cartonId: string, orderId: string): Promise<void> {\n const duplicatedCartonCnt: number = await this.trxMgr.getRepository(Inventory).count({\n domain: this.domain,\n cartonId,\n refOrderId: Not(Equal(orderId)),\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedCartonCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Carton ID', cartonId))\n }\n\n /**\n * @summary Check whether passed serial number is existing already\n * @description It will try to count inventories which has same domain and same serial number and and not terminated one\n * If there's positive result it will throw an error cause serial number is duplicated\n */\n async checkSerialNumberDuplication(serialNumber: string, product: Product): Promise<void> {\n const duplicatedSerialNumberCnt: number = await this.trxMgr.getRepository(InventoryItem).count({\n domain: this.domain,\n product,\n serialNumber,\n status: Not(Equal(INVENTORY_STATUS.DELETED))\n })\n\n if (duplicatedSerialNumberCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Serial Number', serialNumber))\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildQty(\n productDetails: ProductDetail[],\n productBarcode: string,\n orderProductDetail: ProductDetail\n ): Promise<number> {\n const scannedProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let childQty: number\n let currentProductDetail: ProductDetail\n\n if (hasChildRelation) {\n hasMatchingChild = Boolean(orderProductDetail.id === scannedProductDetail.childProductDetail.id)\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === scannedProductDetail.childProductDetail.id\n )\n if (!currentProductDetail)\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('inner pack', `GTIN (${productBarcode})`))\n childQty = scannedProductDetail.packingSize\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (hasMatchingChild) {\n childQty = scannedProductDetail.packingSize\n } else {\n while (hasChildRelation && !hasMatchingChild) {\n hasChildRelation = Boolean(currentProductDetail?.childProductDetail)\n\n if (hasChildRelation)\n hasMatchingChild = Boolean(orderProductDetail.id === currentProductDetail.childProductDetail.id)\n\n if (hasMatchingChild) {\n childQty = currentProductDetail.packingSize * childQty\n } else if (!hasMatchingChild && hasChildRelation) {\n childQty = currentProductDetail.packingSize * childQty\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentProductDetail.childProductDetail.id\n )\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n }\n }\n\n return childQty\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildPackingSize(\n productDetails: ProductDetail[],\n defaultProductDetail: ProductDetail,\n unmatchingProductDetail: ProductDetail\n ): Promise<number> {\n let hasChildRelation: boolean = Boolean(unmatchingProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let packingSize: number = 1\n let currentChildProductDetail: ProductDetail\n\n if (hasChildRelation) {\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === unmatchingProductDetail.childProductDetail.id\n )\n\n if (!currentChildProductDetail) {\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('packing type', `GTIN (${unmatchingProductDetail.gtin})`))\n }\n\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n if (hasMatchingChild) {\n packingSize = unmatchingProductDetail.packingSize\n } else {\n packingSize = unmatchingProductDetail.packingSize * packingSize\n }\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_CHILD_RESULT(`${unmatchingProductDetail.gtin}`))\n }\n\n while (hasChildRelation && !hasMatchingChild) {\n if (hasMatchingChild) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n } else if (!hasMatchingChild && hasChildRelation) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentChildProductDetail.childProductDetail.id\n )\n\n hasChildRelation = Boolean(currentChildProductDetail?.childProductDetail)\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(unmatchingProductDetail.gtin))\n }\n }\n\n return packingSize\n }\n\n async createInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\n async updateInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n if (!inventory.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Partial<Inventory>,\n referencOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = await this.updateInventory(inventory)\n } else {\n inventory = await this.createInventory(inventory)\n }\n\n await generateInventoryHistory(\n inventory,\n referencOrder,\n transactionType,\n changedQty,\n changedWeight,\n this.user,\n this.trxMgr\n )\n\n return inventory\n }\n\n /**\n * @summary set common stamp like domain, creator, updater\n * @description Set common stamp to passed record\n * If it doesn't have id it will handle it as creating one\n * If it has id it will handle it as updating one\n */\n setStamp(record: Record<string, any>): Record<string, any> {\n if (!record.domain) record.domain = this.domain\n if (!record.id && !record.creator) record.creator = this.user\n if (!record.updater) record.updater = this.user\n\n return record\n }\n\n /**\n * @summary Extract bizplace from reference order\n * @description It will find reference order with bizplace and return only bizplace to extract it out\n */\n async extractBizplaceFromRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<Bizplace> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n const { bizplace }: { bizplace: Bizplace } = await this.findRefOrder(entitySchema, refOrder, ['bizplace'])\n return bizplace\n }\n\n tidyConditions(record: Record<string, any>): Record<string, any> {\n if ('id' in record) {\n return { id: record.id }\n } else {\n Object.keys(record).forEach((key: string) => {\n if (record[key] === null || record[key] instanceof Date || Array.isArray(record[key])) delete record[key]\n })\n }\n\n return record\n }\n}\n"]}
1
+ {"version":3,"file":"worksheet-controller.js","sourceRoot":"","sources":["../../server/controllers/worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, EntitySchema, Equal, FindOneOptions, In, Not, getRepository } from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Bizplace, getDomainUsers } from '@things-factory/biz-base'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_VAS_STATUS,\n OrderInventory,\n OrderProduct,\n OrderVas,\n ReleaseGood,\n ReturnOrder,\n VasOrder\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS, InventoryItem, Pallet } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'\nimport { Worksheet, WorksheetDetail } from '../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../utils'\n\nexport type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder\nexport type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas\n\nexport enum ReferenceOrderFields {\n ArrivalNotice = 'arrivalNotice',\n ReleaseGood = 'releaseGood',\n VasOrder = 'vasOrder',\n InventoryCheck = 'inventoryCheck',\n ReturnOrder = 'returnOrder'\n}\n\nexport enum OrderTargetFields {\n OrderProduct = 'targetProduct',\n OrderInventory = 'targetInventory',\n OrderVas = 'targetVas'\n}\n\nexport interface BasicInterface {\n domain: Domain\n user: User\n}\n\nexport type NotificationMsgInterface = {\n title: string\n body: string\n url: string\n data: any\n}\n\nexport class WorksheetController {\n public readonly ERROR_MSG = {\n FIND: {\n NO_RESULT: (condition: any) => `There's no results matched with condition ${condition}`,\n NO_CHILD_RESULT: (condition: any) => `There's no child result matched with condition ${condition}`,\n NOT_MATCH: (source: any, target: any) => `Unable to find matching ${target} using ${source}`\n },\n ORDER_ITEM: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Current item with ${condition} (${condition2}) not belong to this order`,\n EXCESS_QTY: (condition: any, condition2: any, condition3: any) =>\n `Excess qty is scanned for item ${condition}, ${condition2} (${condition3})`\n },\n PRODUCT: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Order packing type and packing size not match with product master, ${condition} (${condition2})`,\n BARCODE_NOT_EXIST: (condition: any, condition2: any, condition3: any) =>\n `Product barcode - ${condition} with ${condition2} ${condition3}, not exist in master data.`\n },\n CREATE: {\n ID_EXISTS: 'Target has ID already',\n EMPTY_CREATOR: 'Cannot create without creator',\n EMPTY_UPDATER: 'Cannot create without updater'\n },\n UPDATE: {\n ID_NOT_EXISTS: `Target doesn't have ID`,\n EMPTY_UPDATER: 'Cannot update without updater'\n },\n VALIDITY: {\n UNEXPECTED_FIELD_VALUE: (field: string, expectedValue: any, actualValue: any) =>\n `Expected ${field} value is ${expectedValue} but got ${actualValue}`,\n DUPLICATED: (field: string, value: any) => `There is duplicated ${field} value (${value})`,\n CANT_PROCEED_STEP_BY: (step: string, reason: string) => `Can't proceed to ${step} because ${reason}`\n }\n }\n\n private readonly ROLE_NAMES: Record<string, string> = {\n OFFICE_ADMIN: 'Office Admin'\n }\n\n protected trxMgr: EntityManager\n protected domain: Domain\n protected user: User\n\n constructor(trxMgr: EntityManager, domain: Domain, user: User) {\n this.trxMgr = trxMgr\n this.domain = domain\n this.user = user\n }\n\n private getRefOrderField(refOrder: ReferenceOrderType): string {\n if (refOrder instanceof ArrivalNotice) {\n return ReferenceOrderFields.ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n return ReferenceOrderFields.ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n return ReferenceOrderFields.VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n return ReferenceOrderFields.InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n return ReferenceOrderFields.ReturnOrder\n } else {\n throw new Error(\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder)\n )\n }\n }\n\n private getOrderTargetField(orderTarget: OrderTargetTypes): string {\n if (orderTarget instanceof OrderProduct) {\n return OrderTargetFields.OrderProduct\n } else if (orderTarget instanceof OrderInventory) {\n return OrderTargetFields.OrderInventory\n } else if (orderTarget instanceof OrderVas) {\n return OrderTargetFields.OrderVas\n } else {\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('orderTarget', 'One of order target type', orderTarget)\n }\n }\n\n /**\n * @summary Find reference order (ArrivalNotice, ReleaseGood, VasOrder, etc...)\n * @description\n * Find and return reference order with its relations based on passed condition & reltaions\n */\n async findRefOrder(\n entitySchema: EntitySchema,\n condition: Partial<ReferenceOrderType>,\n relations?: string[]\n ): Promise<ReferenceOrderType> {\n condition = this.tidyConditions(condition)\n let findOption: FindOneOptions = { where: condition }\n if (relations?.length > 0) findOption.relations = relations\n\n const refOrder: ReferenceOrderType = await this.trxMgr.getRepository(entitySchema).findOne(findOption)\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(findOption))\n\n return refOrder\n }\n\n /**\n * @summary find worksheet by passed condition\n * @description find worksheey based on passed condition\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheet(condition, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheet(condition: Record<string, any>, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n condition = this.tidyConditions(condition)\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: { id: this.domain.id },\n ...condition\n },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on passed ID\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetById(id: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({ where: { id }, relations })\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByNo(worksheetNo: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetNo },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetNo))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params.\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByRefOrder(\n refOrder: ReferenceOrderType,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const refOrderField: string = this.getRefOrderField(refOrder)\n if (!refOrder.bizplace?.id) {\n switch (refOrderField) {\n case ReferenceOrderFields.ArrivalNotice:\n refOrder = await this.findRefOrder(ArrivalNotice, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReleaseGood:\n refOrder = await this.findRefOrder(ReleaseGood, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.VasOrder:\n refOrder = await this.findRefOrder(VasOrder, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.InventoryCheck:\n refOrder = await this.findRefOrder(InventoryCheck, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReturnOrder:\n refOrder = await this.findRefOrder(ReturnOrder, refOrder, ['bizplace'])\n break\n }\n }\n\n const bizplace: Bizplace = refOrder.bizplace\n const condition: FindOneOptions = {\n where: {\n bizplace: { id: bizplace.id },\n domain: { id: this.domain.id },\n type,\n [refOrderField]: { id: refOrder.id }\n },\n relations\n }\n\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(condition)\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(type))\n\n return worksheet\n }\n\n /**\n * @summary Find activatable worksheet by worksheet no and type\n * @description Find worksheet by passed worksheet no\n * and check validity by passed type and status (DEACTIVATED)\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findActivatableWorksheet(worksheetNo, type, ['arrivalNotice])\n */\n async findActivatableWorksheet(\n worksheetNo: string,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findWorksheetByNo(worksheetNo, relations)\n this.checkRecordValidity(worksheet, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheet\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findActivatableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed condition\n * @description find worksheet detail based on passed condition\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetail(condition: Record<string, any>, relations?: string[]): Promise<WorksheetDetail> {\n condition = this.tidyConditions(condition)\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n domain: { id: this.domain.id },\n ...condition\n },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed worksheet detail name\n * @description find worksheey based on passed name of worksheet detail\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetailByName(worksheetDetailName: string, relations?: string[]): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetailName },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))\n return worksheetDetail\n }\n\n async findWorksheetDetailByNames(worksheetDetailNames: [string], relations?: string[]): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: { id: this.domain.id }, name: In(worksheetDetailNames) },\n relations\n })\n\n if (!worksheetDetails?.length) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailNames.toString()))\n return worksheetDetails\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findExecutableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n\n return worksheetDetail\n }\n\n async findExecutableWorksheetDetailByNames(\n worksheetDetailNames: [string],\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailNames, relations)\n worksheetDetails.map(worksheetDetail => {\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n })\n\n return worksheetDetails\n }\n\n /**\n * @summary Creating worksheet\n * @description creating worksheet by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheet(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n */\n async createWorksheet(\n refOrder: ReferenceOrderType,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n let refOrderType: string = await this.getRefOrderField(refOrder)\n const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)\n\n let existingWorksheet: Worksheet\n try {\n existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)\n } catch (e) { }\n\n if (existingWorksheet)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n `create ${type.toLocaleLowerCase()} worksheet`,\n 'existing worksheet is found'\n )\n )\n\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n [refOrderType]: refOrder,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n async createBatchWorksheet(\n taskNo: string,\n bizplace: Bizplace,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n taskNo,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n /**\n * @summary Creating worksheet details\n * @description creating worksheet details by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheetDetails(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n *\n */\n async createWorksheetDetails(\n worksheet: Worksheet,\n type: string,\n orderTargets: OrderTargetTypes[],\n additionalProps: Partial<WorksheetDetail> = {}\n ): Promise<WorksheetDetail[]> {\n if (!worksheet.bizplace?.id) {\n worksheet = await this.findWorksheetById(worksheet.id, ['bizplace'])\n }\n const bizplace: Bizplace = worksheet.bizplace\n\n const worksheetDetails: Partial<WorksheetDetail>[] = orderTargets.map((orderTarget: OrderTargetTypes) => {\n const orderTargetField: string = this.getOrderTargetField(orderTarget)\n return {\n domain: this.domain,\n bizplace,\n worksheet,\n name: WorksheetNoGenerator.generate(type, true),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n [orderTargetField]: orderTarget,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n })\n\n if (worksheetDetails.some((wsd: Partial<WorksheetDetail>) => wsd.id))\n throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n }\n\n /**\n * @summary Update reference order (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n * @description\n * Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n */\n async updateRefOrder(\n refOrder: ReferenceOrderType,\n entitySchema?: EntitySchema,\n currentStatus?: string\n ): Promise<any> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n if (!refOrder.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n if (!refOrder.updater?.id) refOrder = this.setStamp(refOrder)\n\n if (currentStatus && entitySchema == ReleaseGood) {\n\n let res = await getRepository(entitySchema).query(\n `\n update release_goods\n set status = $1\n where id = $2\n and status = $3\n returning id\n `,\n [refOrder.status, refOrder.id, currentStatus]\n )\n\n if (res[1] == 0) {\n this.trxMgr.queryRunner.rollbackTransaction()\n throw new Error('Worksheet has already been created')\n }\n }\n\n return await this.trxMgr.getRepository(entitySchema).save(refOrder)\n }\n\n /**\n * @summary Update order targets (OrderProduct, OrderInventory, OrderVas)\n * @description\n * Update order targets like (OrderProduct, OrderInventory, OrderVas)\n */\n async updateOrderTargets(orderTargets: OrderTargetTypes[], entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (orderTargets[0] instanceof OrderProduct) {\n entitySchema = OrderProduct\n } else if (orderTargets[0] instanceof OrderInventory) {\n entitySchema = OrderInventory\n } else if (orderTargets[0] instanceof OrderVas) {\n entitySchema = OrderVas\n }\n }\n\n if (orderTargets.some((orderTarget: any) => !orderTarget.id)) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n if (!orderTarget.updater?.id) orderTarget = this.setStamp(orderTarget)\n })\n\n return await this.trxMgr.getRepository(entitySchema).save(orderTargets)\n }\n\n /**\n * @summary generate worksheet and worksheet details\n * @description It will generate worksheet and worksheet details in onetime\n * Step 1. Call createWorksheet to create worksheet\n * The status of worksheet will be DEACTIVATED by default\n * You can change it through passing additionalProps\n * Step 2. Update status of order targets\n * Beacuse its status can be different based on type of worksheet\n * Step 3. Call createWorksheetDetails to create worksheet details\n * Step 4. Call updateRefOrder to change status of reference order\n */\n async generateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createWorksheet(refOrder, worksheetType, additionalProps)\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n // @chernhaoee I think the naming of this function is not proper. Seems like it should be something like \"updateLoadingWorksheet\" since the logic targets only Loading Order Target\n async updateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n worksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string\n ): Promise<Worksheet> {\n let newOrderTarget = []\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n for (let orderTarget of orderTargets) {\n try {\n await this.findWorksheetDetail({\n targetInventory: orderTarget.id,\n type: WORKSHEET_TYPE.LOADING\n })\n } catch (e) {\n newOrderTarget.push(orderTarget)\n }\n }\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, newOrderTarget)\n\n // find worksheet details that doesnt exist based on order inventory\n //worksheet.worksheetDetails = await this.findWorksheetDetail(worksheet.id)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n async generateBatchWorksheet(\n worksheetType: string,\n batchPickingWorksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createBatchWorksheet(\n batchPickingWorksheet.taskNo,\n batchPickingWorksheet.bizplace,\n worksheetType,\n additionalProps\n )\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n return worksheet\n }\n\n /**\n * @summary Activate worksheet\n * @description It will activate passed worksheet\n * Every passed worksheet and worksheet details should have value on its id field\n * Because this function has logic to update worksheet and worksheet details\n * Step 1. Check whether every passed worksheet and worksheet details has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Change worksheet details properly and update it\n */\n async activateWorksheet(\n worksheet: Worksheet,\n worksheetDetails: WorksheetDetail[],\n changedWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n if (!worksheet.id || worksheetDetails.some((wsd: WorksheetDetail) => !wsd.id)) {\n throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n }\n\n worksheet.status = WORKSHEET_STATUS.EXECUTING\n worksheet.startedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n worksheetDetails = this.renewWorksheetDetails(worksheetDetails, changedWorksheetDetails, 'name', {\n status: WORKSHEET_STATUS.EXECUTING,\n updater: this.user\n })\n worksheet.worksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n return worksheet\n }\n\n /**\n * @summary Complete worksheet\n * @description It will activate passed worksheet\n * Passed worksheet should have value on its id field\n * Because this function has logic to update worksheet\n * Step 1. Check whether passed worksheet has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Renew worksheet with relations which is needed to complete worksheet\n * Step 4. Change order targets properly and update it based on type of worksheet\n * Step 5. If passed updatedRefOrderStatus has value it update reference order status\n */\n async completeWorksheet(worksheet: Worksheet, updatedRefOrderStatus?: string): Promise<Worksheet> {\n if (!worksheet.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\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 const worksheetType: string = worksheet.type\n worksheet = await this.findWorksheet(worksheet, [\n 'worksheetDetails',\n 'worksheetDetails.targetProduct',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetVas'\n ])\n\n let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n\n worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .forEach((wsd: WorksheetDetail) => {\n wsd.status = WORKSHEET_STATUS.DONE\n wsd.updater = this.user\n })\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n if (worksheetType === WORKSHEET_TYPE.UNLOADING) {\n let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetProduct: OrderProduct = wsd.targetProduct\n targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED\n targetProduct.updater = this.user\n return targetProduct\n })\n\n await this.updateOrderTargets(targetProducts)\n } else if (worksheetType === WORKSHEET_TYPE.VAS) {\n let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetVAS: OrderVas = wsd.targetVas\n targetVAS.status = ORDER_VAS_STATUS.TERMINATED\n targetVAS.updater = this.user\n return targetVAS\n })\n\n await this.updateOrderTargets(targetVASs)\n } else if (\n worksheetType === WORKSHEET_TYPE.PUTAWAY ||\n worksheetType === WORKSHEET_TYPE.PICKING ||\n worksheetType === WORKSHEET_TYPE.PACKING ||\n worksheetType === WORKSHEET_TYPE.LOADING ||\n worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||\n worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN\n ) {\n let targetInventories: OrderInventory[] = worksheet.worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n return targetInventory\n })\n\n await this.updateOrderTargets(targetInventories)\n }\n\n if (updatedRefOrderStatus) {\n const refOrder: ReferenceOrderType = await this.extractRefOrderFromWorksheet(worksheet)\n refOrder.status = updatedRefOrderStatus\n refOrder.updater = this.user\n await this.updateRefOrder(refOrder)\n }\n\n return worksheet\n }\n\n /**\n * @summary Renew worksheet details by changed worksheet details\n * @description When you want to merge changed worksheet detail list into original worksheet detail list\n * you can use this function\n * it will loop through whole passed original worksheet details and find out matched changed one by value of 'ID' or its 'name'\n * Because of this, every passed origin worksheet details and changed worksheet details should have one of those values\n */\n renewWorksheetDetails(\n originWSDs: WorksheetDetail[],\n changedWSDs: Partial<WorksheetDetail>[],\n identifier: string,\n additionalProps: Partial<WorksheetDetail> = {}\n ): WorksheetDetail[] {\n if (\n originWSDs.some((wsd: WorksheetDetail) => !wsd[identifier]) ||\n changedWSDs.some((wsd: Partial<WorksheetDetail>) => !wsd[identifier])\n ) {\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n 'renew worksheet details',\n `some passed parameter doesn't have identifier (${identifier})`\n )\n )\n }\n\n return originWSDs.map((originWSD: WorksheetDetail) => {\n const changedWSD: Partial<WorksheetDetail> = this.findMatchedWSD(originWSD[identifier], changedWSDs)\n\n return {\n ...originWSD,\n ...changedWSD,\n ...additionalProps\n }\n })\n }\n\n /**\n * @summary Find out matched worksheet detail by identifier\n * @description Find out matched worksheet detail by identifier\n * identifier can be 'ID' or 'name' of worksheet detail\n */\n findMatchedWSD(identifier: string, candidates: any[]): any {\n return candidates.find(\n (candidate: Partial<WorksheetDetail>) => candidate.id === identifier || candidate.name === identifier\n )\n }\n\n /**\n * @summary Valitiy checker\n * @description It will try to check whether passed record has same properties with passed conditions\n * Basically it will check equality of value\n * If you want to check advanced validation you can pass function to customize the logic of validation\n * Passed function will be call with actual value of record as parameter\n */\n checkRecordValidity(record: Record<string, any>, conditions: Record<string, any>): void {\n for (let field in conditions) {\n let isValid: boolean = false\n if (typeof conditions[field] === 'function') {\n isValid = conditions[field](record[field])\n } else {\n isValid = conditions[field] === record[field]\n }\n\n if (!isValid)\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(field, conditions[field], record[field]))\n }\n }\n\n /**\n * @summary Notify to passed users\n * @description Passed notification message will be sent to passed users\n */\n async notifyToUsers(users: User[], message: NotificationMsgInterface): Promise<void> {\n const receivers: any[] = users.map(user => user.id)\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message\n // })\n }\n\n /**\n * @summary Notify to office admin\n * @description Passed notification message will be sent to office admin of current domain\n * default role name is defiend as ROLE_NAME.OFFICE_ADMIn by default\n * You can change role name by passing roleName as parameter\n */\n async notifyToOfficeAdmin(message: NotificationMsgInterface, roleName?: string): Promise<void> {\n const users: User[] = await this.trxMgr\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where('role.name = :roleName', { roleName: roleName || this.ROLE_NAMES.OFFICE_ADMIN })\n .andWhere('role.domain_id = :domainId', { domainId: this.domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary Notify to customer of passed bizplace\n * @description Passed notification message will be sent to customer of passed bizplace\n */\n async notifyToCustomer(bizplace: Bizplace, message: NotificationMsgInterface): Promise<void> {\n const users: any[] = await getDomainUsers(bizplace, this.trxMgr)\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary extract out referenc order from given worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n let refOrder: ReferenceOrderType =\n worksheet.arrivalNotice ||\n worksheet.releaseGood ||\n worksheet.vasOrder ||\n worksheet.inventoryCheck ||\n worksheet.returnOrder ||\n null\n if (!refOrder) {\n const wsWithRefOrd: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { id: worksheet.id },\n relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']\n })\n\n refOrder =\n wsWithRefOrd.arrivalNotice ||\n wsWithRefOrd.releaseGood ||\n wsWithRefOrd.vasOrder ||\n wsWithRefOrd.inventoryCheck ||\n wsWithRefOrd.returnOrder ||\n null\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n }\n\n return refOrder\n }\n\n /**\n * @summary extract out reference orders from given merged order worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractMultipleRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n const wsdWithRefOrd: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: { id: this.domain.id }, worksheet: { id: worksheet.id } },\n relations: ['targetInventory', 'targetInventory.releaseGood']\n })\n\n let refOrder: ReferenceOrderType[] = wsdWithRefOrd.map((ord: WorksheetDetail) => ord.targetInventory.releaseGood)\n\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n\n return refOrder\n }\n\n /**\n * @summary Check whether passed pallet is existing alreay\n * @description It will try to count inventories which has same domain and same pallet Id and not terminated one\n * If there's positive result it will throw an error cause pallet is duplicated\n */\n async checkPalletDuplication(palletId: string): Promise<void> {\n const duplicatedPalletCnt: number = await this.trxMgr.getRepository(Inventory).countBy({\n domain: { id: this.domain.id },\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n\n const duplicatedReusablePalletCnt: number = await this.trxMgr.getRepository(Pallet).count({\n where: {\n domain: { id: this.domain.id },\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n }\n\n /**\n * @summary Check whether passed carton is existing alreay\n * @description It will try to count inventories which has same domain and same carton Id and not terminated one\n * If there's positive result it will throw an error cause carton is duplicated\n */\n async checkCartonDuplication(cartonId: string, orderId: string): Promise<void> {\n const duplicatedCartonCnt: number = await this.trxMgr.getRepository(Inventory).countBy({\n domain: { id: this.domain.id },\n cartonId,\n refOrderId: Not(Equal(orderId)),\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedCartonCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Carton ID', cartonId))\n }\n\n /**\n * @summary Check whether passed serial number is existing already\n * @description It will try to count inventories which has same domain and same serial number and and not terminated one\n * If there's positive result it will throw an error cause serial number is duplicated\n */\n async checkSerialNumberDuplication(serialNumber: string, product: Product): Promise<void> {\n const duplicatedSerialNumberCnt: number = await this.trxMgr.getRepository(InventoryItem).countBy({\n domain: { id: this.domain.id },\n product: { id: product.id },\n serialNumber,\n status: Not(Equal(INVENTORY_STATUS.DELETED))\n })\n\n if (duplicatedSerialNumberCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Serial Number', serialNumber))\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildQty(\n productDetails: ProductDetail[],\n productBarcode: string,\n orderProductDetail: ProductDetail\n ): Promise<number> {\n const scannedProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let childQty: number\n let currentProductDetail: ProductDetail\n\n if (hasChildRelation) {\n hasMatchingChild = Boolean(orderProductDetail.id === scannedProductDetail.childProductDetail.id)\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === scannedProductDetail.childProductDetail.id\n )\n if (!currentProductDetail)\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('inner pack', `GTIN (${productBarcode})`))\n childQty = scannedProductDetail.packingSize\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (hasMatchingChild) {\n childQty = scannedProductDetail.packingSize\n } else {\n while (hasChildRelation && !hasMatchingChild) {\n hasChildRelation = Boolean(currentProductDetail?.childProductDetail)\n\n if (hasChildRelation)\n hasMatchingChild = Boolean(orderProductDetail.id === currentProductDetail.childProductDetail.id)\n\n if (hasMatchingChild) {\n childQty = currentProductDetail.packingSize * childQty\n } else if (!hasMatchingChild && hasChildRelation) {\n childQty = currentProductDetail.packingSize * childQty\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentProductDetail.childProductDetail.id\n )\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n }\n }\n\n return childQty\n }\n\n public async getDirectQty(\n productDetail: ProductDetail,\n productBarcode: string,\n qty: number\n ): Promise<any> {\n try {\n console.time('getDirectQty')\n let results = await this.trxMgr.query(`\n WITH RECURSIVE cte as (\n select * from (\n select pd.product_id as \"productId\", id, pd.packing_size as \"packingSize\",\n pd.packing_type as \"packingType\", pd.uom as \"uom\", (pd.uom_value * $2::float) as \"uomValue\", $2::float as \"qty\", pd.gtin \n from product_details pd \n where pd.id = $1\n ) as dt\n union all\n select pd.product_id as \"productId\", pd.id, pd.packing_size as \"packingSize\",\n pd.packing_type as \"packingType\", pd.uom,\n dt1.qty * pd.packing_size * pd.uom_value as \"uomValue\", dt1.qty * pd.packing_size as \"qty\", pd.gtin\n from product_details pd\n inner join cte dt1 on dt1.id = pd.child_product_detail_id \n where pd.deleted_at is null\n )\n select * from cte where gtin = $3\n `, [\n productDetail.id,\n qty,\n productBarcode\n ])\n\n if (results.length <= 0)\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n\n console.timeEnd('getDirectQty')\n return results[0]\n } catch (error) {\n throw error\n }\n }\n\n\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildPackingSize(\n productDetails: ProductDetail[],\n defaultProductDetail: ProductDetail,\n unmatchingProductDetail: ProductDetail\n ): Promise<number> {\n let hasChildRelation: boolean = Boolean(unmatchingProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let packingSize: number = 1\n let currentChildProductDetail: ProductDetail\n\n if (hasChildRelation) {\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === unmatchingProductDetail.childProductDetail.id\n )\n\n if (!currentChildProductDetail) {\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('packing type', `GTIN (${unmatchingProductDetail.gtin})`))\n }\n\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n if (hasMatchingChild) {\n packingSize = unmatchingProductDetail.packingSize\n } else {\n packingSize = unmatchingProductDetail.packingSize * packingSize\n }\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_CHILD_RESULT(`${unmatchingProductDetail.gtin}`))\n }\n\n while (hasChildRelation && !hasMatchingChild) {\n if (hasMatchingChild) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n } else if (!hasMatchingChild && hasChildRelation) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentChildProductDetail.childProductDetail.id\n )\n\n hasChildRelation = Boolean(currentChildProductDetail?.childProductDetail)\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(unmatchingProductDetail.gtin))\n }\n }\n\n return packingSize\n }\n\n async createInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\n async updateInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n if (!inventory.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Partial<Inventory>,\n referencOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = await this.updateInventory(inventory)\n } else {\n inventory = await this.createInventory(inventory)\n }\n\n await generateInventoryHistory(\n inventory,\n referencOrder,\n transactionType,\n changedQty,\n changedWeight,\n this.user,\n this.trxMgr\n )\n\n return inventory\n }\n\n /**\n * @summary set common stamp like domain, creator, updater\n * @description Set common stamp to passed record\n * If it doesn't have id it will handle it as creating one\n * If it has id it will handle it as updating one\n */\n setStamp(record: Record<string, any>): Record<string, any> {\n if (!record.domain) record.domain = this.domain\n if (!record.id && !record.creator) record.creator = this.user\n if (!record.updater) record.updater = this.user\n\n return record\n }\n\n /**\n * @summary Extract bizplace from reference order\n * @description It will find reference order with bizplace and return only bizplace to extract it out\n */\n async extractBizplaceFromRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<Bizplace> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n const { bizplace }: { bizplace: Bizplace } = await this.findRefOrder(entitySchema, refOrder, ['bizplace'])\n return bizplace\n }\n\n tidyConditions(record: Record<string, any>): Record<string, any> {\n if ('id' in record) {\n return { id: record.id }\n } else {\n Object.keys(record).forEach((key: string) => {\n if (record[key] === null || record[key] instanceof Date || Array.isArray(record[key])) delete record[key]\n })\n }\n\n return record\n }\n}\n"]}
@@ -157,7 +157,8 @@ WarehouseBizplaceOnhandInventory = tslib_1.__decorate([
157
157
  AS src
158
158
  inner join domains d on d.id = src."domainId"
159
159
  inner join bizplaces b on b.id = src."bizplaceId"
160
- where src."remainQty" > 0
160
+ where src."remainQty" >= 0
161
+ and src."qty" > 0
161
162
  order by src."domainId"
162
163
  `
163
164
  })
@@ -1 +1 @@
1
- {"version":3,"file":"warehouse-bizplace-onhand-inventory.js","sourceRoot":"","sources":["../../server/entities/warehouse-bizplace-onhand-inventory.ts"],"names":[],"mappings":";;;;AAAA,qCAAgD;AA8GhD,IAAa,gCAAgC,GAA7C,MAAa,gCAAgC;CAoC5C,CAAA;AAlCC;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;sEACO;AAGpB;IADC,IAAA,oBAAU,GAAE;;kEACG;AAGhB;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;6DACF;AAGX;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;yEACU;AAGvB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;wEACS;AAGtB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAnCN,gCAAgC;IA5G5C,IAAA,oBAAU,EAAC;QACV,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwGX;KACF,CAAC;GAEW,gCAAgC,CAoC5C;AApCY,4EAAgC","sourcesContent":["import { ViewColumn, ViewEntity } from 'typeorm'\n\n@ViewEntity({\n expression: ` \n select d.name as \"domainName\", b.name as \"bizplaceName\", src.* from (\n WITH oi as (\n select\n oi.domain_id,\n oi.bizplace_id,\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.domain_id,\n oi.bizplace_id,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n ) \n -- SINGLE ITEM INVENTORY QUERY\n select\n i.domain_id as \"domainId\",\n i.bizplace_id as \"bizplaceId\",\n i.packing_type as \"packingType\",\n i.packing_size as \"packingSize\",\n i.uom,\n i.product_id as \"productId\",\n null as \"productBundleId\",\n COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) AS \"remainQty\",\n COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)), 0) AS \"remainUomValue\",\n COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS \"qty\",\n COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS \"uomValue\",\n 'SINGLE' AS \"groupType\"\n FROM inventories i\n INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')\n LEFT JOIN oi ON i.batch_id = oi.batch_id AND i.product_id = oi.product_id AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n WHERE i.status = 'STORED'\n GROUP by\n i.domain_id,\n i.bizplace_id,\n i.product_id,\n i.packing_type,\n i.packing_size,\n i.uom\n union all\n -- BUNDLE ITEM INVENTORY QUERY\n SELECT \n pbs.domain_id as \"domainId\",\n pbs.bizplace_id as \"bizplaceId\",\n pb.packing_type as \"packingType\", \n pb.packing_size as \"packingSize\",\n 'UNIT' AS \"uom\", \n null as \"productId\",\n pb.id AS \"productBundleId\",\n COALESCE(MIN(FLOOR(pbs.\"availableQty\")),0) AS \"remainQty\", \n COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0) AS \"remainUomValue\",\n COALESCE(MIN(FLOOR(pbs.\"qty\")), 0::double precision) AS \"qty\",\n COALESCE(MIN(FLOOR(pbs.\"uomValue\")), 0::double precision) AS \"uomValue\",\n 'BUNDLE' AS \"groupType\"\n FROM product_bundles pb\n INNER JOIN (\n SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\",\n (sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"qty\",\n (sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"uomValue\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED'\n INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE') \n LEFT JOIN oi ON oi.product_id = i.product_id\n GROUP by\n i.domain_id, \n i.bizplace_id,\n pbs.product_id, \n pbs.product_bundle_id\n ) pbs ON pbs.product_bundle_id = pb.id\n GROUP BY \n pbs.domain_id,\n pbs.bizplace_id,\n pb.packing_type, \n pb.packing_size, \n pb.name, \n pb.sku, \n pb.id\n )\n AS src \n inner join domains d on d.id = src.\"domainId\"\n inner join bizplaces b on b.id = src.\"bizplaceId\"\n where src.\"remainQty\" > 0\n order by src.\"domainId\"\n `\n})\n\nexport class WarehouseBizplaceOnhandInventory {\n @ViewColumn()\n domainName: string\n\n @ViewColumn()\n bizplaceName: string\n\n @ViewColumn()\n domainId: string\n\n @ViewColumn()\n bizplaceId: string\n\n @ViewColumn()\n packingType: string\n\n @ViewColumn()\n packingSize: number\n\n @ViewColumn()\n uom: string\n\n @ViewColumn()\n productId: string\n\n @ViewColumn()\n productBundleId: string\n\n @ViewColumn()\n remainQty: number\n\n @ViewColumn()\n remainUomValue: number\n\n @ViewColumn()\n groupType: string\n}\n"]}
1
+ {"version":3,"file":"warehouse-bizplace-onhand-inventory.js","sourceRoot":"","sources":["../../server/entities/warehouse-bizplace-onhand-inventory.ts"],"names":[],"mappings":";;;;AAAA,qCAAgD;AA+GhD,IAAa,gCAAgC,GAA7C,MAAa,gCAAgC;CAoC5C,CAAA;AAlCC;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;sEACO;AAGpB;IADC,IAAA,oBAAU,GAAE;;kEACG;AAGhB;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;6DACF;AAGX;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;yEACU;AAGvB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;wEACS;AAGtB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAnCN,gCAAgC;IA7G5C,IAAA,oBAAU,EAAC;QACV,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGX;KACF,CAAC;GAEW,gCAAgC,CAoC5C;AApCY,4EAAgC","sourcesContent":["import { ViewColumn, ViewEntity } from 'typeorm'\n\n@ViewEntity({\n expression: ` \n select d.name as \"domainName\", b.name as \"bizplaceName\", src.* from (\n WITH oi as (\n select\n oi.domain_id,\n oi.bizplace_id,\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.domain_id,\n oi.bizplace_id,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n ) \n -- SINGLE ITEM INVENTORY QUERY\n select\n i.domain_id as \"domainId\",\n i.bizplace_id as \"bizplaceId\",\n i.packing_type as \"packingType\",\n i.packing_size as \"packingSize\",\n i.uom,\n i.product_id as \"productId\",\n null as \"productBundleId\",\n COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) AS \"remainQty\",\n COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)), 0) AS \"remainUomValue\",\n COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS \"qty\",\n COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS \"uomValue\",\n 'SINGLE' AS \"groupType\"\n FROM inventories i\n INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')\n LEFT JOIN oi ON i.batch_id = oi.batch_id AND i.product_id = oi.product_id AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n WHERE i.status = 'STORED'\n GROUP by\n i.domain_id,\n i.bizplace_id,\n i.product_id,\n i.packing_type,\n i.packing_size,\n i.uom\n union all\n -- BUNDLE ITEM INVENTORY QUERY\n SELECT \n pbs.domain_id as \"domainId\",\n pbs.bizplace_id as \"bizplaceId\",\n pb.packing_type as \"packingType\", \n pb.packing_size as \"packingSize\",\n 'UNIT' AS \"uom\", \n null as \"productId\",\n pb.id AS \"productBundleId\",\n COALESCE(MIN(FLOOR(pbs.\"availableQty\")),0) AS \"remainQty\", \n COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0) AS \"remainUomValue\",\n COALESCE(MIN(FLOOR(pbs.\"qty\")), 0::double precision) AS \"qty\",\n COALESCE(MIN(FLOOR(pbs.\"uomValue\")), 0::double precision) AS \"uomValue\",\n 'BUNDLE' AS \"groupType\"\n FROM product_bundles pb\n INNER JOIN (\n SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\",\n (sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"qty\",\n (sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"uomValue\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED'\n INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE') \n LEFT JOIN oi ON oi.product_id = i.product_id\n GROUP by\n i.domain_id, \n i.bizplace_id,\n pbs.product_id, \n pbs.product_bundle_id\n ) pbs ON pbs.product_bundle_id = pb.id\n GROUP BY \n pbs.domain_id,\n pbs.bizplace_id,\n pb.packing_type, \n pb.packing_size, \n pb.name, \n pb.sku, \n pb.id\n )\n AS src \n inner join domains d on d.id = src.\"domainId\"\n inner join bizplaces b on b.id = src.\"bizplaceId\"\n where src.\"remainQty\" >= 0\n and src.\"qty\" > 0\n order by src.\"domainId\"\n `\n})\n\nexport class WarehouseBizplaceOnhandInventory {\n @ViewColumn()\n domainName: string\n\n @ViewColumn()\n bizplaceName: string\n\n @ViewColumn()\n domainId: string\n\n @ViewColumn()\n bizplaceId: string\n\n @ViewColumn()\n packingType: string\n\n @ViewColumn()\n packingSize: number\n\n @ViewColumn()\n uom: string\n\n @ViewColumn()\n productId: string\n\n @ViewColumn()\n productBundleId: string\n\n @ViewColumn()\n remainQty: number\n\n @ViewColumn()\n remainUomValue: number\n\n @ViewColumn()\n groupType: string\n}\n"]}