@things-factory/worksheet-base 5.0.13 → 6.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -18,7 +18,7 @@ const interfaces_1 = require("./interfaces");
18
18
  */
19
19
  async function getWorksheetDetailByName(trxMgr, domain, name) {
20
20
  const worksheetDetail = await trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
21
- where: { domain, name },
21
+ where: { domain: { id: domain.id }, name },
22
22
  relations: [
23
23
  'bizplace',
24
24
  'targetVas',
@@ -54,7 +54,7 @@ exports.getWorksheetDetailByName = getWorksheetDetailByName;
54
54
  async function updateRelatedOrderVas(trxMgr, domain, bizplace, wsd, targetVas, operationGuide, user) {
55
55
  const worksheet = wsd.worksheet;
56
56
  const relatedWSDs = await trxMgr.getRepository(entities_1.WorksheetDetail).find({
57
- where: { domain, bizplace, worksheet },
57
+ where: { domain: { id: domain.id }, bizplace: { id: bizplace.id }, worksheet: { id: worksheet.id } },
58
58
  relations: ['targetVas', 'targetVas.vas']
59
59
  });
60
60
  const relatedOVs = relatedWSDs
@@ -116,7 +116,13 @@ async function getRemainInventoryAmount(trxMgr, refOrder, domain, bizplace, orig
116
116
  if (refOrder instanceof sales_base_1.ReleaseGood) {
117
117
  // Find loading order inventory to figure out uomValue
118
118
  const orderInv = await trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
119
- where: { domain, bizplace, inventory: originInv, releaseGood: refOrder, type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS }
119
+ where: {
120
+ domain: { id: domain.id },
121
+ bizplace,
122
+ inventory: originInv,
123
+ releaseGood: refOrder,
124
+ type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS
125
+ }
120
126
  });
121
127
  remainQty = orderInv.releaseQty - reducedQty;
122
128
  remainUomValue = orderInv.releaseUomValue - reducedUomValue;
@@ -185,7 +191,13 @@ async function temporaryGetRemainInventoryAmount(trxMgr, refOrder, domain, bizpl
185
191
  if (refOrder instanceof sales_base_1.ReleaseGood) {
186
192
  // Find loading order inventory to figure out uomValue
187
193
  const orderInv = await trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
188
- where: { domain, bizplace, inventory: originInv, releaseGood: refOrder, type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS }
194
+ where: {
195
+ domain: { id: domain.id },
196
+ bizplace,
197
+ inventory: originInv,
198
+ releaseGood: refOrder,
199
+ type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS
200
+ }
189
201
  });
190
202
  remainUomValue = orderInv.releaseUomValue - reducedUomValue;
191
203
  remainUnitQty = orderInv.releaseQty * packingSize - reducedUnitQty;
@@ -203,7 +215,12 @@ async function updateOriginInventories(trxMgr, domain, bizplace, user, refOrder,
203
215
  const inventories = [];
204
216
  for (let inv of repackedFroms) {
205
217
  let foundInventory = await trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
206
- where: { domain, bizplace, palletId: inv.fromPalletId, status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED)) }
218
+ where: {
219
+ domain: { id: domain.id },
220
+ bizplace,
221
+ palletId: inv.fromPalletId,
222
+ status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
223
+ }
207
224
  });
208
225
  if (foundInventory) {
209
226
  let repackedPkgQty = 0;
@@ -232,7 +249,7 @@ exports.updateOriginInventories = updateOriginInventories;
232
249
  //// @farishelmi What is the difference between upsertInventory vs temporaryUpsertInventory? If it is repeated function, kindly remove one of them.
233
250
  async function temporaryUpsertInventory(trxMgr, domain, bizplace, user, originInv, refOrder, palletId, locationName, packingType, addedQty, addedUomValue, transactionType, stdAmount, packingUnit) {
234
251
  const location = await trxMgr.getRepository(warehouse_base_1.Location).findOne({
235
- where: { domain, name: locationName },
252
+ where: { domain: { id: domain.id }, name: locationName },
236
253
  relations: ['warehouse']
237
254
  });
238
255
  if (!location)
@@ -241,7 +258,7 @@ async function temporaryUpsertInventory(trxMgr, domain, bizplace, user, originIn
241
258
  const zone = location.zone;
242
259
  let inv = await trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
243
260
  where: {
244
- domain,
261
+ domain: { id: domain.id },
245
262
  bizplace,
246
263
  palletId,
247
264
  batchId: originInv.batchId,
@@ -265,7 +282,7 @@ async function temporaryUpsertInventory(trxMgr, domain, bizplace, user, originIn
265
282
  inv = await trxMgr.getRepository(warehouse_base_1.Inventory).save(inv);
266
283
  // Check whether the pallet is resuable or not
267
284
  const pallet = await trxMgr.getRepository(warehouse_base_1.Pallet).findOne({
268
- where: { domain, name: palletId, inventory: (0, typeorm_1.IsNull)() }
285
+ where: { domain: { id: domain.id }, name: palletId, inventory: (0, typeorm_1.IsNull)() }
269
286
  });
270
287
  // If it's exists => it's reusable pallet and need to update it's inventory field
271
288
  if (pallet) {
@@ -294,7 +311,7 @@ exports.temporaryUpsertInventory = temporaryUpsertInventory;
294
311
  async function temporaryDeductProductAmount(trxMgr, domain, bizplace, user, refOrder, originInv, reducedQty, reducedUomValue, transactionType, originalQty, originalUomValue, currentUnitQty, currentUomValue) {
295
312
  if (refOrder instanceof sales_base_1.ReleaseGood) {
296
313
  const loadingWS = await trxMgr.getRepository(entities_1.Worksheet).findOne({
297
- where: { domain, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
314
+ where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
298
315
  relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
299
316
  });
300
317
  if (!loadingWS)
@@ -383,7 +400,7 @@ async function assignInventory(trxMgr, domain, bizplace, user, wsd, refOrder, ta
383
400
  // Case 1. When the VAS Order comes with Arrival Notice
384
401
  inventory = await trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
385
402
  where: {
386
- domain,
403
+ domain: { id: domain.id },
387
404
  bizplace,
388
405
  palletId,
389
406
  status: (0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.UNLOADED, warehouse_base_1.INVENTORY_STATUS.PUTTING_AWAY]),
@@ -404,7 +421,7 @@ async function assignInventory(trxMgr, domain, bizplace, user, wsd, refOrder, ta
404
421
  // In this case, every available inventories are picked by picking worksheet.
405
422
  // So target inventories should be found by relation with order inventory which has PICKED status
406
423
  let pickedOrdInv = await trxMgr.getRepository(sales_base_1.OrderInventory).find({
407
- where: { domain, bizplace, releaseGood: refOrder, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED },
424
+ where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED },
408
425
  relations: ['inventory']
409
426
  });
410
427
  pickedOrdInv = pickedOrdInv.find((oi) => oi.inventory.palletId === palletId);
@@ -441,7 +458,8 @@ async function dismissInventory(trxMgr, wsd, targetVas, palletChanges, palletId)
441
458
  // If there's no more item assigned with current from pallet id
442
459
  if (!palletChanges.find((rf) => rf.fromPalletId === palletId)) {
443
460
  targetVas.inventory = null;
444
- const worksheet = await trxMgr.getRepository(entities_1.Worksheet).findOne(wsd.worksheet.id, {
461
+ const worksheet = await trxMgr.getRepository(entities_1.Worksheet).findOne({
462
+ where: { id: wsd.worksheet.id },
445
463
  relations: [
446
464
  'worksheetDetails',
447
465
  'worksheetDetails.targetVas',
@@ -493,7 +511,7 @@ async function addNewVasTask(targetVas, currentOrderQty, currentOrderUomValue, d
493
511
  exports.addNewVasTask = addNewVasTask;
494
512
  async function upsertInventory(trxMgr, domain, bizplace, user, originInv, refOrder, palletId, locationName, packingType, addedQty, addedUomValue, transactionType, stdAmount, packingUnit) {
495
513
  const location = await trxMgr.getRepository(warehouse_base_1.Location).findOne({
496
- where: { domain, name: locationName },
514
+ where: { domain: { id: domain.id }, name: locationName },
497
515
  relations: ['warehouse']
498
516
  });
499
517
  if (!location)
@@ -502,7 +520,7 @@ async function upsertInventory(trxMgr, domain, bizplace, user, originInv, refOrd
502
520
  const zone = location.zone;
503
521
  let inv = await trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
504
522
  where: {
505
- domain,
523
+ domain: { id: domain.id },
506
524
  bizplace,
507
525
  palletId,
508
526
  batchId: originInv.batchId,
@@ -527,7 +545,7 @@ async function upsertInventory(trxMgr, domain, bizplace, user, originInv, refOrd
527
545
  inv = await trxMgr.getRepository(warehouse_base_1.Inventory).save(inv);
528
546
  // Check whether the pallet is resuable or not
529
547
  const pallet = await trxMgr.getRepository(warehouse_base_1.Pallet).findOne({
530
- where: { domain, name: palletId, inventory: (0, typeorm_1.IsNull)() }
548
+ where: { domain: { id: domain.id }, name: palletId, inventory: (0, typeorm_1.IsNull)() }
531
549
  });
532
550
  // If it's exists => it's reusable pallet and need to update it's inventory field
533
551
  if (pallet) {
@@ -555,7 +573,7 @@ exports.upsertInventory = upsertInventory;
555
573
  async function deductProductAmount(trxMgr, domain, bizplace, user, refOrder, originInv, reducedQty, reducedUomValue, transactionType, originalQty, originalUomValue, currentUnitQty, currentUomValue) {
556
574
  if (refOrder instanceof sales_base_1.ReleaseGood) {
557
575
  const loadingWS = await trxMgr.getRepository(entities_1.Worksheet).findOne({
558
- where: { domain, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
576
+ where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
559
577
  relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
560
578
  });
561
579
  if (!loadingWS)
@@ -633,7 +651,7 @@ async function deductProductAmount(trxMgr, domain, bizplace, user, refOrder, ori
633
651
  exports.deductProductAmount = deductProductAmount;
634
652
  async function createPutawayWorksheet(trxMgr, domain, bizplace, user, refOrder, originInv, changedInv) {
635
653
  const putawayWS = await trxMgr.getRepository(entities_1.Worksheet).findOne({
636
- where: { domain, bizplace, arrivalNotice: refOrder, type: constants_1.WORKSHEET_TYPE.PUTAWAY },
654
+ where: { domain: { id: domain.id }, bizplace, arrivalNotice: refOrder, type: constants_1.WORKSHEET_TYPE.PUTAWAY },
637
655
  relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
638
656
  });
639
657
  if (!putawayWS) {
@@ -669,7 +687,7 @@ async function createLoadingWorksheet(trxMgr, domain, bizplace, user, refOrder,
669
687
  const changedQty = changedInv.qty;
670
688
  const changedUomValue = changedInv.uomValue;
671
689
  const loadingWS = await trxMgr.getRepository(entities_1.Worksheet).findOne({
672
- where: { domain, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
690
+ where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: constants_1.WORKSHEET_TYPE.LOADING },
673
691
  relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
674
692
  });
675
693
  if (!loadingWS) {
@@ -1 +1 @@
1
- {"version":3,"file":"common-utils.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, Equal, In, IsNull, Not } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n ArrivalNotice,\n ORDER_INVENTORY_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator,\n OrderVas,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport {\n Inventory,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryNoGenerator,\n Location,\n Pallet,\n Warehouse\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../../../../utils'\nimport {\n OperationGuideInterface,\n PackingUnits,\n PalletChangesInterface,\n RefOrderType,\n TemporaryPalletChangesInterface\n} from './interfaces'\n\n/**\n * @description Find worksheet detail by name\n * this function will include every relations with worksheet detail for processing VAS\n *\n * @param {EntityManager} trxMgr\n * @param {Domain} domain\n * @param {String} name\n */\nexport async function getWorksheetDetailByName(\n trxMgr: EntityManager,\n domain: Domain,\n name: string\n): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain, name },\n relations: [\n 'bizplace',\n 'targetVas',\n 'targetVas.inventory',\n 'targetVas.inventory.product',\n 'targetVas.vas',\n 'targetVas.arrivalNotice',\n 'targetVas.releaseGood',\n 'targetVas.shippingOrder',\n 'targetVas.vasOrder',\n 'targetVas.targetProduct',\n 'worksheet'\n ]\n })\n if (!worksheetDetail) throw new Error(`Couldn't find target worksheet detail`)\n if (!worksheetDetail.targetVas)\n throw new Error(`Couldn't find any related target vas, using current worksheet detail`)\n return worksheetDetail\n}\n\n/**\n * @description Update every related order vas to share same operationGuide data\n *\n * @param {EntityManager} trxMgr\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {WorksheetDetail} wsd\n * @param {OrderVas} targetVas\n * @param {OperationGuideInterface<T>} operationGuide\n * @param {User} user\n */\nexport async function updateRelatedOrderVas<T>(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n wsd: WorksheetDetail,\n targetVas: OrderVas,\n operationGuide: OperationGuideInterface<T>,\n user: User\n): Promise<OrderVas> {\n const worksheet: Worksheet = wsd.worksheet\n const relatedWSDs: WorksheetDetail[] = await trxMgr.getRepository(WorksheetDetail).find({\n where: { domain, bizplace, worksheet },\n relations: ['targetVas', 'targetVas.vas']\n })\n\n const relatedOVs: OrderVas[] = relatedWSDs\n .map((wsd: WorksheetDetail) => wsd.targetVas)\n .filter((ov: OrderVas) => ov.set === targetVas.set && ov.vas.id === targetVas.vas.id)\n .map((ov: OrderVas) => {\n return {\n ...ov,\n operationGuide: JSON.stringify(operationGuide),\n updater: user\n }\n })\n\n await trxMgr.getRepository(OrderVas).save(relatedOVs)\n}\n\n/**\n * @description Return current amount of pallet\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport function getCurrentAmount(\n palletChanges: PalletChangesInterface[],\n palletId: string\n): { qty: number; uomValue: number } {\n return palletChanges\n .filter((pc: PalletChangesInterface) => pc.toPalletId === palletId)\n .reduce(\n (currentAmount: { qty: number; uomValue: number }, pc: PalletChangesInterface) => {\n return {\n qty: currentAmount.qty + pc.reducedQty,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n },\n { qty: 0, uomValue: 0 }\n )\n}\n\n/**\n * @description Return reduced amount of pallet\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport function getReducedAmount(\n palletChanges: PalletChangesInterface[],\n palletId: string\n): { reducedQty: number; reducedUomValue: number } {\n return palletChanges\n .filter((pc: PalletChangesInterface) => pc.fromPalletId === palletId)\n .reduce(\n (reducedAmount: { reducedQty: number; reducedUomValue: number }, pc: PalletChangesInterface) => {\n return {\n reducedQty: reducedAmount.reducedQty + pc.reducedQty || 0,\n reducedUomValue: reducedAmount.reducedUomValue + pc.reducedUomValue || 0\n }\n },\n { reducedQty: 0, reducedUomValue: 0 }\n )\n}\n\n/**\n * @description Get remain qty of inventory or order inventory (For release good case)\n *\n * @param {EntityManager} trxMgr\n * @param {ArrivalNotice | ReleaseGood | VasOrder} refOrder\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {Inventory} originInv\n * @param {RepackedInvInfo[]} repackedInvs\n * @param {String} palletId\n */\nexport async function getRemainInventoryAmount(\n trxMgr: EntityManager,\n refOrder: RefOrderType,\n domain: Domain,\n bizplace: Bizplace,\n originInv: Inventory,\n palletChanges: PalletChangesInterface[],\n palletId: string\n): Promise<{ remainQty: number; remainUomValue: number }> {\n let remainQty: number = 0\n let remainUomValue: number = 0\n const { reducedQty, reducedUomValue } = getReducedAmount(palletChanges, palletId)\n if (refOrder instanceof ReleaseGood) {\n // Find loading order inventory to figure out uomValue\n const orderInv: OrderInventory = await trxMgr.getRepository(OrderInventory).findOne({\n where: { domain, bizplace, inventory: originInv, releaseGood: refOrder, type: ORDER_TYPES.RELEASE_OF_GOODS }\n })\n\n remainQty = orderInv.releaseQty - reducedQty\n remainUomValue = orderInv.releaseUomValue - reducedUomValue\n } else {\n remainQty = originInv.qty - reducedQty\n remainUomValue = originInv.uomValue - reducedUomValue\n }\n\n if (remainQty <= 0 || remainUomValue <= 0) throw new Error(`There's no more remaining product on the pallet`)\n return { remainQty, remainUomValue }\n}\n\n/** REMARK\n * @farishelmi created temporary function @temporaryGetReducedAmount and\n * @temporaryGetRemainInventoryAmount specifically for @Repackaging\n * - because in repackaging we need to calculate based on unit qty of a product\n * - eg: Carton of 12 Cokes repack into Boxes of 6 Cokes\n * - this function should be merged with its origin once the logic in other vas is updated\n * */\n\nexport function temporaryGetCurrentAmount(\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string,\n packingUnit: string,\n stdAmount: number\n): { qty: number; uomValue: number } {\n return palletChanges\n .filter((pc: TemporaryPalletChangesInterface) => pc.toPalletId === palletId)\n .reduce(\n (currentAmount: { qty: number; uomValue: number }, pc: TemporaryPalletChangesInterface) => {\n if (packingUnit == PackingUnits.QTY) {\n return {\n qty: currentAmount.qty + pc.reducedUnitQty / stdAmount,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n } else if (packingUnit == PackingUnits.UOM) {\n return {\n qty: currentAmount.qty + pc.reducedQty,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n } else {\n return { qty: 0, uomValue: 0 }\n }\n },\n { qty: 0, uomValue: 0 }\n )\n}\n\n/**\n * @description need to consider unit amount because we have packingSize for each packingType\n * @param palletChanges\n * @param palletId\n * @returns reducedUomValue: used for packingUnit == UOM\n * @returns reducedUnitQty: used for packingUnit == QTY\n */\nexport function temporaryGetReducedAmount(\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string\n): { reducedUomValue: number; reducedUnitQty: number } {\n return palletChanges\n .filter((pc: TemporaryPalletChangesInterface) => pc.fromPalletId === palletId)\n .reduce(\n (\n reducedAmount: {\n reducedUomValue: number\n reducedUnitQty: number\n },\n pc: TemporaryPalletChangesInterface\n ) => {\n return {\n reducedUomValue: reducedAmount.reducedUomValue + pc.reducedUomValue || 0,\n reducedUnitQty: reducedAmount.reducedUnitQty + pc.reducedUnitQty || 0\n }\n },\n { reducedUomValue: 0, reducedUnitQty: 0 }\n )\n}\n\nexport async function temporaryGetRemainInventoryAmount(\n trxMgr: EntityManager,\n refOrder: RefOrderType,\n domain: Domain,\n bizplace: Bizplace,\n originInv: Inventory,\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string\n): Promise<{ remainUomValue: number; remainUnitQty: number }> {\n let remainUomValue: number = 0\n let remainUnitQty: number = 0\n\n const packingSize: number = originInv.packingSize\n const { reducedUomValue, reducedUnitQty } = temporaryGetReducedAmount(palletChanges, palletId)\n if (refOrder instanceof ReleaseGood) {\n // Find loading order inventory to figure out uomValue\n const orderInv: OrderInventory = await trxMgr.getRepository(OrderInventory).findOne({\n where: { domain, bizplace, inventory: originInv, releaseGood: refOrder, type: ORDER_TYPES.RELEASE_OF_GOODS }\n })\n\n remainUomValue = orderInv.releaseUomValue - reducedUomValue\n remainUnitQty = orderInv.releaseQty * packingSize - reducedUnitQty\n } else {\n remainUomValue = originInv.uomValue - reducedUomValue\n remainUnitQty = originInv.qty * packingSize - reducedUnitQty\n }\n\n if (remainUomValue <= 0 || remainUnitQty <= 0) throw new Error(`There's no more remaining product on the pallet`)\n return { remainUomValue, remainUnitQty }\n}\n\nexport async function updateOriginInventories(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n repackedFroms: Partial<TemporaryPalletChangesInterface[]>,\n packingUnit: string,\n transactionType: string\n): Promise<Inventory[]> {\n const inventories: Inventory[] = []\n\n for (let inv of repackedFroms) {\n let foundInventory: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: { domain, bizplace, palletId: inv.fromPalletId, status: Not(Equal(INVENTORY_STATUS.TERMINATED)) }\n })\n\n if (foundInventory) {\n let repackedPkgQty: number = 0\n let repackedPkgUomValue: number = 0\n\n switch (packingUnit) {\n case PackingUnits.QTY:\n repackedPkgQty = inv.reducedUnitQty / inv.packingSize\n repackedPkgUomValue = inv.reducedUomValue // it should be called reducedUomValue instead. sbb dh kira smua dgn packingsize\n break\n\n case PackingUnits.UOM:\n // repackedPkgQty = inv.reducedQty / inv.packingSize\n // repackedPkgUomValue = rf.reducedUomValue\n break\n }\n\n foundInventory = await trxMgr.getRepository(Inventory).save({\n ...foundInventory,\n qty: repackedPkgQty,\n uomValue: repackedPkgUomValue,\n creator: user,\n updater: user\n })\n\n await generateInventoryHistory(\n foundInventory,\n refOrder,\n transactionType,\n repackedPkgQty,\n repackedPkgUomValue,\n user,\n trxMgr\n )\n\n inventories.push(foundInventory)\n } else {\n throw new Error(`${inv.fromPalletId} is not exist in inventory. Hence, qty cannot be updated.`)\n }\n }\n\n return inventories\n}\n\n//// @farishelmi What is the difference between upsertInventory vs temporaryUpsertInventory? If it is repeated function, kindly remove one of them.\nexport async function temporaryUpsertInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n originInv: Inventory,\n refOrder: RefOrderType,\n palletId: string,\n locationName: string,\n packingType: string,\n addedQty: number,\n addedUomValue: number,\n transactionType: string,\n stdAmount?: number,\n packingUnit?: string\n): Promise<Inventory> {\n const location: Location = await trxMgr.getRepository(Location).findOne({\n where: { domain, name: locationName },\n relations: ['warehouse']\n })\n if (!location) throw new Error(`Location is not found by (${locationName})`)\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n let inv: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain,\n bizplace,\n palletId,\n batchId: originInv.batchId,\n product: originInv.product,\n packingType,\n packingSize: stdAmount,\n refOrderId: originInv.refOrderId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n },\n relations: ['product', 'refInventory']\n })\n\n // Create new inventory\n if (!inv) {\n let newInventory: Inventory = new Inventory()\n\n inv = {\n ...newInventory,\n domain,\n bizplace,\n palletId,\n name: InventoryNoGenerator.inventoryName(),\n packingType,\n qty: addedQty,\n weight: 0,\n uomValue: addedUomValue,\n lockedQty: 0,\n lockedUomValue: 0,\n packingSize: packingUnit == PackingUnits.QTY ? stdAmount : 1,\n warehouse,\n location,\n zone,\n creator: user,\n updater: user\n }\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n\n // Check whether the pallet is resuable or not\n const pallet: Pallet = await trxMgr.getRepository(Pallet).findOne({\n where: { domain, name: palletId, inventory: IsNull() }\n })\n // If it's exists => it's reusable pallet and need to update it's inventory field\n if (pallet) {\n pallet.inventory = inv\n pallet.updater = user\n await trxMgr.getRepository(Pallet).save(pallet)\n }\n } else {\n // Update inventory\n inv.qty += addedQty\n inv.uomValue += addedUomValue\n inv.warehouse = warehouse\n inv.location = location\n inv.zone = location.zone\n inv.updater = user\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n }\n\n // Create inventory history\n await generateInventoryHistory(inv, refOrder, transactionType, addedQty, addedUomValue, user, trxMgr)\n\n return inv\n}\n\n//// @farishelmi What is the difference between deductProductAmount vs temporaryDeductProductAmount? If it is repeated function, kindly remove one of them.\nexport async function temporaryDeductProductAmount(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n originInv: Inventory,\n reducedQty: number,\n reducedUomValue: number,\n transactionType: string,\n originalQty?: number,\n originalUomValue?: number,\n currentUnitQty?: number,\n currentUomValue?: number\n) {\n if (refOrder instanceof ReleaseGood) {\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS)\n throw new Error(\n `Picking process is not finished yet. Please complete picking first before complete Repalletizing`\n )\n\n let orderInv: OrderInventory = loadingWS.worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .find((oi: OrderInventory) => oi.inventory.id === originInv.id)\n if (!orderInv) {\n throw new Error(`Failed to find order inventory (Pallet ID: ${originInv.palletId})`)\n }\n\n orderInv.releaseQty -= reducedQty\n orderInv.releaseUomValue -= reducedUomValue\n orderInv.updater = user\n\n await trxMgr.getRepository(OrderInventory).save(orderInv)\n } else {\n // currentUnitQty > 0 only belongs to PackingUnits.QTY\n if (currentUnitQty > 0) {\n const unitUomValue: number = originInv.uomValue / originInv.qty\n\n reducedQty = Math.floor((originalQty * originInv.packingSize - currentUnitQty) / originInv.packingSize)\n reducedUomValue = unitUomValue * reducedQty\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n // minus 1 because remain unit qty only exist if the unitQty < 1\n if (originInv.qty - 1 == 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv.qty = 0\n originInv.uomValue = 0\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -1, -unitUomValue, user, trxMgr)\n\n const newQty: number = currentUnitQty\n const newUomValue: number = (unitUomValue / originInv.packingSize) * newQty\n\n originInv.qty = newQty\n originInv.uomValue = newUomValue\n originInv.packingSize = 1\n originInv.status = INVENTORY_STATUS.STORED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, newQty, newUomValue, user, trxMgr)\n }\n\n // currentUnitUomValue > 0 only belongs to PackingUnits.QTY\n } else if (currentUomValue > 0) {\n reducedUomValue = Math.round((originalUomValue - currentUomValue + Number.EPSILON) * 100) / 100\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n } else {\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n originInv.status = originInv.qty > 0 ? INVENTORY_STATUS.STORED : INVENTORY_STATUS.TERMINATED\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n if (originInv.qty <= 0 || originInv.uomValue <= 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n }\n }\n }\n\n return originInv\n}\n\n/**\n * @description Assign inventory to targetVas\n * When Vas order comes together with Arrival Notice or Release Good\n * The vas worksheet is activated automatically by to complete unloading/picking worksheet.\n * As a result user can't activate it manually, which means no assignment for every specific vas tasks.\n * For this case inventory should be assigned while processing the VAS Order.\n */\nexport async function assignInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n wsd: WorksheetDetail,\n refOrder: ArrivalNotice | ReleaseGood,\n targetVas: OrderVas,\n palletId: string\n): Promise<OrderVas> {\n let inventory: Inventory\n\n if (refOrder instanceof ArrivalNotice) {\n // Case 1. When the VAS Order comes with Arrival Notice\n inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain,\n bizplace,\n palletId,\n status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.PUTTING_AWAY]),\n refOrderId: refOrder.id\n }\n })\n if (!inventory) throw new Error(`Counldn't find unloaded inventory by pallet ID: (${palletId})`)\n\n // Check current inventory has enough qty of product to complete this target vas.\n if (targetVas.qty > inventory.qty) {\n // If it doesn't have enough, Need to create new worksheet detail and target vas without inventory assignment\n // So the user can proceed it with another inventory\n targetVas = await addNewVasTask(targetVas, inventory.qty, inventory.uomValue, domain, bizplace, user, trxMgr, wsd)\n }\n } else if (refOrder instanceof ReleaseGood) {\n // Case 2. When the VAS Order comes with Release Good\n // In this case, every available inventories are picked by picking worksheet.\n // So target inventories should be found by relation with order inventory which has PICKED status\n let pickedOrdInv: OrderInventory = await trxMgr.getRepository(OrderInventory).find({\n where: { domain, bizplace, releaseGood: refOrder, status: ORDER_INVENTORY_STATUS.PICKED },\n relations: ['inventory']\n })\n pickedOrdInv = pickedOrdInv.find((oi: OrderInventory) => oi.inventory.palletId === palletId)\n inventory = pickedOrdInv?.inventory\n if (!inventory) throw new Error(`Couldn't find picked inventory by pallet ID: ${palletId}`)\n\n // Check current target inventory (picked inventory) has enough qty of product to complete this target vas.\n // And available qty of products also restriced by picking. (Because customer requests do some vas for Release Order)\n if (targetVas.qty > pickedOrdInv.releaseQty) {\n // If it doesn't have enough, Need to create new worksheet detail and target vas without inventory assignment\n // So the user can proceed it with another inventory\n targetVas = await addNewVasTask(\n targetVas,\n pickedOrdInv.releaseQty,\n pickedOrdInv.releaseUomValue,\n domain,\n bizplace,\n user,\n trxMgr,\n wsd\n )\n }\n } else {\n throw new Error(`Reference Order (${refOrder.name}) is not expected.`)\n }\n\n targetVas.inventory = inventory\n targetVas.updater = user\n return await trxMgr.getRepository(OrderVas).save(targetVas)\n}\n\n/**\n * Dismiss assigne inventory when user click undo to remove\n * proceed pallet for relabel, repack, repack\n *\n * @param {EntityManager} trxMgr\n * @param {WorksheetDetail} wsd\n * @param {OrderVas} targetVas\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport async function dismissInventory(\n trxMgr: EntityManager,\n wsd: WorksheetDetail,\n targetVas: OrderVas,\n palletChanges: PalletChangesInterface[],\n palletId: string\n) {\n // If there's no more item assigned with current from pallet id\n if (!palletChanges.find((rf: PalletChangesInterface) => rf.fromPalletId === palletId)) {\n targetVas.inventory = null\n const worksheet: Worksheet = await trxMgr.getRepository(Worksheet).findOne(wsd.worksheet.id, {\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetVas',\n 'worksheetDetails.targetVas.vas',\n 'worksheetDetails.targetVas.inventory'\n ]\n })\n\n const nonFinishedWSD: WorksheetDetail = worksheet.worksheetDetails.find(\n (otherWSD: WorksheetDetail) =>\n otherWSD.id !== wsd.id &&\n otherWSD.targetVas.set === wsd.targetVas.set &&\n otherWSD.targetVas.vas.id === wsd.targetVas.vas.id &&\n otherWSD.status !== WORKSHEET_STATUS.DONE\n )\n\n if (nonFinishedWSD) {\n // If there non finished same VAS, delete undo target record (worksheet detail & order vas)\n // Add qty and uomValue for non finished vas task\n await trxMgr.getRepository(WorksheetDetail).delete(wsd.id)\n await trxMgr.getRepository(OrderVas).delete(targetVas.id)\n\n nonFinishedWSD.targetVas.qty += targetVas.qty\n nonFinishedWSD.targetVas.uomValue += targetVas.uomValue\n await trxMgr.getRepository(OrderVas).save(nonFinishedWSD.targetVas)\n } else {\n // If there no non finished same VAS, dismiss inventory for the record\n targetVas.inventory = null\n await trxMgr.getRepository(OrderVas).save(wsd.targetVas)\n }\n }\n}\n\n/**\n * @description Create nw VAS Worksheet Detail & Order Vas\n * Without inventory assignment\n */\nexport async function addNewVasTask(\n targetVas: OrderVas,\n currentOrderQty: number,\n currentOrderUomValue: number,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n trxMgr: EntityManager,\n wsd: WorksheetDetail\n): Promise<OrderVas> {\n // Create new order vas & worksheet detail\n const copiedTargetVas: OrderVas = Object.assign({}, targetVas)\n delete copiedTargetVas.id\n\n let newTargetVas: OrderVas = {\n ...copiedTargetVas,\n domain,\n bizplace,\n name: OrderNoGenerator.orderVas(),\n qty: targetVas.qty - currentOrderQty,\n uomValue: targetVas.uomValue - currentOrderUomValue,\n creator: user,\n updater: user\n }\n newTargetVas = await trxMgr.getRepository(OrderVas).save(newTargetVas)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, wsd)\n delete copiedWSD.id\n\n const newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n name: WorksheetNoGenerator.vasDetail(),\n seq: wsd.seq++,\n targetVas: newTargetVas,\n creator: user,\n updater: user\n }\n await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n\n targetVas.qty = currentOrderQty\n targetVas.uomValue = currentOrderUomValue\n return targetVas\n}\n\nexport async function upsertInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n originInv: Inventory,\n refOrder: RefOrderType,\n palletId: string,\n locationName: string,\n packingType: string,\n addedQty: number,\n addedUomValue: number,\n transactionType: string,\n stdAmount?: number,\n packingUnit?: string\n): Promise<Inventory> {\n const location: Location = await trxMgr.getRepository(Location).findOne({\n where: { domain, name: locationName },\n relations: ['warehouse']\n })\n if (!location) throw new Error(`Location is not found by (${locationName})`)\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n let inv: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain,\n bizplace,\n palletId,\n batchId: originInv.batchId,\n product: originInv.product,\n packingType,\n packingSize: stdAmount,\n refOrderId: originInv.refOrderId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n },\n relations: ['product', 'refInventory']\n })\n\n // Create new inventory\n if (!inv) {\n const copiedInv: Inventory = Object.assign({}, originInv)\n delete copiedInv.id\n\n inv = {\n ...copiedInv,\n domain,\n bizplace,\n palletId,\n name: InventoryNoGenerator.inventoryName(),\n packingType,\n qty: addedQty,\n weight: 0,\n uomValue: addedUomValue,\n lockedQty: 0,\n lockedUomValue: 0,\n packingSize: packingUnit == PackingUnits.QTY ? stdAmount : 1,\n warehouse,\n location,\n zone,\n creator: user,\n updater: user\n }\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n\n // Check whether the pallet is resuable or not\n const pallet: Pallet = await trxMgr.getRepository(Pallet).findOne({\n where: { domain, name: palletId, inventory: IsNull() }\n })\n // If it's exists => it's reusable pallet and need to update it's inventory field\n if (pallet) {\n pallet.inventory = inv\n pallet.updater = user\n await trxMgr.getRepository(Pallet).save(pallet)\n }\n } else {\n // Update inventory\n inv.qty += addedQty\n inv.uomValue += addedUomValue\n inv.warehouse = warehouse\n inv.location = location\n inv.zone = location.zone\n inv.updater = user\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n }\n\n // Create inventory history\n await generateInventoryHistory(inv, refOrder, transactionType, addedQty, addedUomValue, user, trxMgr)\n\n return inv\n}\n\nexport async function deductProductAmount(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n originInv: Inventory,\n reducedQty: number,\n reducedUomValue: number,\n transactionType: string,\n originalQty?: number,\n originalUomValue?: number,\n currentUnitQty?: number,\n currentUomValue?: number\n) {\n if (refOrder instanceof ReleaseGood) {\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS)\n throw new Error(\n `Picking process is not finished yet. Please complete picking first before complete Repalletizing`\n )\n\n const orderInv: OrderInventory = loadingWS.worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .find((oi: OrderInventory) => oi.inventory.id === originInv.id)\n if (!orderInv) {\n throw new Error(`Failed to find order inventory (Pallet ID: ${originInv.palletId})`)\n }\n\n orderInv.releaseQty -= reducedQty\n orderInv.releaseUomValue -= reducedUomValue\n orderInv.updater = user\n\n await trxMgr.getRepository(OrderInventory).save(orderInv)\n } else {\n // currentUnitQty > 0 only belongs to PackingUnits.QTY\n if (currentUnitQty > 0) {\n const unitUomValue: number = originInv.uomValue / originInv.qty\n\n reducedQty = Math.floor((originalQty * originInv.packingSize - currentUnitQty) / originInv.packingSize)\n reducedUomValue = unitUomValue * reducedQty\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n // minus 1 because remain unit qty only exist if the unitQty < 1\n if (originInv.qty - 1 == 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv.qty = 0\n originInv.uomValue = 0\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -1, -unitUomValue, user, trxMgr)\n\n const newQty: number = currentUnitQty\n const newUomValue: number = (unitUomValue / originInv.packingSize) * newQty\n\n originInv.qty = newQty\n originInv.uomValue = newUomValue\n originInv.packingSize = 1\n originInv.status = INVENTORY_STATUS.STORED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, newQty, newUomValue, user, trxMgr)\n }\n\n // currentUnitUomValue > 0 only belongs to PackingUnits.UOM\n } else if (currentUomValue > 0) {\n reducedUomValue = Math.round((originalUomValue - currentUomValue + Number.EPSILON) * 100) / 100\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n } else {\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n originInv.status = originInv.qty > 0 ? INVENTORY_STATUS.STORED : INVENTORY_STATUS.TERMINATED\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n if (originInv.qty <= 0 || originInv.uomValue <= 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n }\n }\n }\n\n return originInv\n}\n\nexport async function createPutawayWorksheet(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: ArrivalNotice,\n originInv: Inventory,\n changedInv: Inventory\n): Promise<void> {\n const putawayWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain, bizplace, arrivalNotice: refOrder, type: WORKSHEET_TYPE.PUTAWAY },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!putawayWS) {\n throw new Error(\n `Unloading process is not finished yet. Please complete unloading first before complete Repalletizing`\n )\n }\n const putawayWSDs: WorksheetDetail[] = putawayWS.worksheetDetails\n\n const originalWSD: WorksheetDetail = putawayWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === originInv.id\n )\n const originOrdInv: OrderInventory = originalWSD.targetInventory\n const sameTargetWSD: WorksheetDetail = putawayWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === changedInv.id\n )\n\n if (!sameTargetWSD) {\n // Create new order inventory\n const copiedOrdInv: OrderInventory = Object.assign({}, originOrdInv)\n delete copiedOrdInv.id\n\n let newOrdInv: OrderInventory = {\n ...copiedOrdInv,\n domain,\n bizplace,\n name: OrderNoGenerator.orderInventory(),\n type: ORDER_TYPES.ARRIVAL_NOTICE,\n arrivalNotice: refOrder,\n inventory: changedInv,\n creator: user,\n updater: user\n }\n newOrdInv = await trxMgr.getRepository(OrderInventory).save(newOrdInv)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, originalWSD)\n delete copiedWSD.id\n\n let newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n worksheet: putawayWS,\n name: WorksheetNoGenerator.putawayDetail(),\n targetInventory: newOrdInv,\n type: WORKSHEET_TYPE.PUTAWAY,\n creator: user,\n updater: user\n }\n newWSD = await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n }\n\n // Update origin order inventory\n if (originInv.status === INVENTORY_STATUS.TERMINATED) {\n await trxMgr.getRepository(WorksheetDetail).delete(originalWSD.id)\n\n originOrdInv.status = ORDER_INVENTORY_STATUS.DONE\n originOrdInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(originOrdInv)\n }\n}\n\nexport async function createLoadingWorksheet(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: ReleaseGood,\n originInv: OrderInventory,\n changedInv: Inventory\n): Promise<void> {\n const changedQty: number = changedInv.qty\n const changedUomValue: number = changedInv.uomValue\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS) {\n throw new Error(`Picking process is not finished yet. Please complete picking first before complete Repalletizing`)\n }\n\n const loadingWSDs: WorksheetDetail[] = loadingWS.worksheetDetails\n\n const originalWSD: WorksheetDetail = loadingWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === originInv.id\n )\n const originOrdInv: OrderInventory = originalWSD.targetInventory\n const sameTargetWSD: WorksheetDetail = loadingWSDs.find((wsd: WorksheetDetail) => {\n const targetOI: OrderInventory = wsd.targetInventory\n const targetInv: Inventory = targetOI.inventory\n const targetUnitUomValue: number = targetOI.releaseUomValue / targetOI.releaseQty\n const changeUnitUomValue: number = changedUomValue / changedQty\n\n if (\n targetInv.palletId === changedInv.palletId &&\n targetInv.batchId === changedInv.batchId &&\n targetInv.packingType === changedInv.packingType &&\n targetUnitUomValue === changeUnitUomValue\n ) {\n return wsd\n }\n })\n\n if (!sameTargetWSD) {\n // Create new order inventory\n const copiedOrderInv: OrderInventory = Object.assign({}, originOrdInv)\n delete copiedOrderInv.id\n\n let newOrdInv: OrderInventory = await trxMgr.getRepository(OrderInventory).save({\n ...copiedOrderInv,\n domain,\n bizplace,\n releaseQty: changedQty,\n releaseUomValue: changedUomValue,\n name: OrderNoGenerator.orderInventory(),\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n releaseGood: refOrder,\n inventory: changedInv,\n creator: user,\n updater: user\n })\n newOrdInv = await trxMgr.getRepository(OrderInventory).save(newOrdInv)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, originalWSD)\n delete copiedWSD.id\n\n let newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n worksheet: loadingWS,\n name: WorksheetNoGenerator.loadingDetail(),\n targetInventory: newOrdInv,\n type: WORKSHEET_TYPE.LOADING,\n creator: user,\n updater: user\n }\n await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n } else {\n let sameTargetInv: OrderInventory = sameTargetWSD.targetInventory\n sameTargetInv.releaseQty += changedQty\n sameTargetInv.releaseUomValue += changedUomValue\n sameTargetInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(sameTargetInv)\n }\n\n // Update inventory to PICKED inventory\n changedInv = await trxMgr.getRepository(Inventory).save({\n ...changedInv,\n qty: changedInv.qty - changedQty,\n uomValue: changedInv.uomValue - changedUomValue,\n updater: user\n })\n\n // Generate PICKING inventory history\n await generateInventoryHistory(\n changedInv,\n refOrder,\n INVENTORY_TRANSACTION_TYPE.PICKING,\n -changedQty,\n -changedUomValue,\n user,\n trxMgr\n )\n\n // Generate TERMINATED inventory history\n await generateInventoryHistory(changedInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n\n // Delete worksheet detail & order inventory\n // If order inventory doesn't have release qty any more\n if (originOrdInv.releaseQty <= 0) {\n await trxMgr.getRepository(WorksheetDetail).delete(originalWSD.id)\n originInv.status = ORDER_INVENTORY_STATUS.DONE\n originInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(originInv)\n }\n}\n"]}
1
+ {"version":3,"file":"common-utils.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, Equal, In, IsNull, Not } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n ArrivalNotice,\n ORDER_INVENTORY_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator,\n OrderVas,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport {\n Inventory,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryNoGenerator,\n Location,\n Pallet,\n Warehouse\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../../../../utils'\nimport {\n OperationGuideInterface,\n PackingUnits,\n PalletChangesInterface,\n RefOrderType,\n TemporaryPalletChangesInterface\n} from './interfaces'\n\n/**\n * @description Find worksheet detail by name\n * this function will include every relations with worksheet detail for processing VAS\n *\n * @param {EntityManager} trxMgr\n * @param {Domain} domain\n * @param {String} name\n */\nexport async function getWorksheetDetailByName(\n trxMgr: EntityManager,\n domain: Domain,\n name: string\n): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain: { id: domain.id }, name },\n relations: [\n 'bizplace',\n 'targetVas',\n 'targetVas.inventory',\n 'targetVas.inventory.product',\n 'targetVas.vas',\n 'targetVas.arrivalNotice',\n 'targetVas.releaseGood',\n 'targetVas.shippingOrder',\n 'targetVas.vasOrder',\n 'targetVas.targetProduct',\n 'worksheet'\n ]\n })\n if (!worksheetDetail) throw new Error(`Couldn't find target worksheet detail`)\n if (!worksheetDetail.targetVas)\n throw new Error(`Couldn't find any related target vas, using current worksheet detail`)\n return worksheetDetail\n}\n\n/**\n * @description Update every related order vas to share same operationGuide data\n *\n * @param {EntityManager} trxMgr\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {WorksheetDetail} wsd\n * @param {OrderVas} targetVas\n * @param {OperationGuideInterface<T>} operationGuide\n * @param {User} user\n */\nexport async function updateRelatedOrderVas<T>(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n wsd: WorksheetDetail,\n targetVas: OrderVas,\n operationGuide: OperationGuideInterface<T>,\n user: User\n): Promise<OrderVas> {\n const worksheet: Worksheet = wsd.worksheet\n const relatedWSDs: WorksheetDetail[] = await trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: { id: domain.id }, bizplace: { id: bizplace.id }, worksheet: { id: worksheet.id } },\n relations: ['targetVas', 'targetVas.vas']\n })\n\n const relatedOVs: OrderVas[] = relatedWSDs\n .map((wsd: WorksheetDetail) => wsd.targetVas)\n .filter((ov: OrderVas) => ov.set === targetVas.set && ov.vas.id === targetVas.vas.id)\n .map((ov: OrderVas) => {\n return {\n ...ov,\n operationGuide: JSON.stringify(operationGuide),\n updater: user\n }\n })\n\n await trxMgr.getRepository(OrderVas).save(relatedOVs)\n}\n\n/**\n * @description Return current amount of pallet\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport function getCurrentAmount(\n palletChanges: PalletChangesInterface[],\n palletId: string\n): { qty: number; uomValue: number } {\n return palletChanges\n .filter((pc: PalletChangesInterface) => pc.toPalletId === palletId)\n .reduce(\n (currentAmount: { qty: number; uomValue: number }, pc: PalletChangesInterface) => {\n return {\n qty: currentAmount.qty + pc.reducedQty,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n },\n { qty: 0, uomValue: 0 }\n )\n}\n\n/**\n * @description Return reduced amount of pallet\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport function getReducedAmount(\n palletChanges: PalletChangesInterface[],\n palletId: string\n): { reducedQty: number; reducedUomValue: number } {\n return palletChanges\n .filter((pc: PalletChangesInterface) => pc.fromPalletId === palletId)\n .reduce(\n (reducedAmount: { reducedQty: number; reducedUomValue: number }, pc: PalletChangesInterface) => {\n return {\n reducedQty: reducedAmount.reducedQty + pc.reducedQty || 0,\n reducedUomValue: reducedAmount.reducedUomValue + pc.reducedUomValue || 0\n }\n },\n { reducedQty: 0, reducedUomValue: 0 }\n )\n}\n\n/**\n * @description Get remain qty of inventory or order inventory (For release good case)\n *\n * @param {EntityManager} trxMgr\n * @param {ArrivalNotice | ReleaseGood | VasOrder} refOrder\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {Inventory} originInv\n * @param {RepackedInvInfo[]} repackedInvs\n * @param {String} palletId\n */\nexport async function getRemainInventoryAmount(\n trxMgr: EntityManager,\n refOrder: RefOrderType,\n domain: Domain,\n bizplace: Bizplace,\n originInv: Inventory,\n palletChanges: PalletChangesInterface[],\n palletId: string\n): Promise<{ remainQty: number; remainUomValue: number }> {\n let remainQty: number = 0\n let remainUomValue: number = 0\n const { reducedQty, reducedUomValue } = getReducedAmount(palletChanges, palletId)\n if (refOrder instanceof ReleaseGood) {\n // Find loading order inventory to figure out uomValue\n const orderInv: OrderInventory = await trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n inventory: originInv,\n releaseGood: refOrder,\n type: ORDER_TYPES.RELEASE_OF_GOODS\n }\n })\n\n remainQty = orderInv.releaseQty - reducedQty\n remainUomValue = orderInv.releaseUomValue - reducedUomValue\n } else {\n remainQty = originInv.qty - reducedQty\n remainUomValue = originInv.uomValue - reducedUomValue\n }\n\n if (remainQty <= 0 || remainUomValue <= 0) throw new Error(`There's no more remaining product on the pallet`)\n return { remainQty, remainUomValue }\n}\n\n/** REMARK\n * @farishelmi created temporary function @temporaryGetReducedAmount and\n * @temporaryGetRemainInventoryAmount specifically for @Repackaging\n * - because in repackaging we need to calculate based on unit qty of a product\n * - eg: Carton of 12 Cokes repack into Boxes of 6 Cokes\n * - this function should be merged with its origin once the logic in other vas is updated\n * */\n\nexport function temporaryGetCurrentAmount(\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string,\n packingUnit: string,\n stdAmount: number\n): { qty: number; uomValue: number } {\n return palletChanges\n .filter((pc: TemporaryPalletChangesInterface) => pc.toPalletId === palletId)\n .reduce(\n (currentAmount: { qty: number; uomValue: number }, pc: TemporaryPalletChangesInterface) => {\n if (packingUnit == PackingUnits.QTY) {\n return {\n qty: currentAmount.qty + pc.reducedUnitQty / stdAmount,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n } else if (packingUnit == PackingUnits.UOM) {\n return {\n qty: currentAmount.qty + pc.reducedQty,\n uomValue: currentAmount.uomValue + pc.reducedUomValue\n }\n } else {\n return { qty: 0, uomValue: 0 }\n }\n },\n { qty: 0, uomValue: 0 }\n )\n}\n\n/**\n * @description need to consider unit amount because we have packingSize for each packingType\n * @param palletChanges\n * @param palletId\n * @returns reducedUomValue: used for packingUnit == UOM\n * @returns reducedUnitQty: used for packingUnit == QTY\n */\nexport function temporaryGetReducedAmount(\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string\n): { reducedUomValue: number; reducedUnitQty: number } {\n return palletChanges\n .filter((pc: TemporaryPalletChangesInterface) => pc.fromPalletId === palletId)\n .reduce(\n (\n reducedAmount: {\n reducedUomValue: number\n reducedUnitQty: number\n },\n pc: TemporaryPalletChangesInterface\n ) => {\n return {\n reducedUomValue: reducedAmount.reducedUomValue + pc.reducedUomValue || 0,\n reducedUnitQty: reducedAmount.reducedUnitQty + pc.reducedUnitQty || 0\n }\n },\n { reducedUomValue: 0, reducedUnitQty: 0 }\n )\n}\n\nexport async function temporaryGetRemainInventoryAmount(\n trxMgr: EntityManager,\n refOrder: RefOrderType,\n domain: Domain,\n bizplace: Bizplace,\n originInv: Inventory,\n palletChanges: TemporaryPalletChangesInterface[],\n palletId: string\n): Promise<{ remainUomValue: number; remainUnitQty: number }> {\n let remainUomValue: number = 0\n let remainUnitQty: number = 0\n\n const packingSize: number = originInv.packingSize\n const { reducedUomValue, reducedUnitQty } = temporaryGetReducedAmount(palletChanges, palletId)\n if (refOrder instanceof ReleaseGood) {\n // Find loading order inventory to figure out uomValue\n const orderInv: OrderInventory = await trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n inventory: originInv,\n releaseGood: refOrder,\n type: ORDER_TYPES.RELEASE_OF_GOODS\n }\n })\n\n remainUomValue = orderInv.releaseUomValue - reducedUomValue\n remainUnitQty = orderInv.releaseQty * packingSize - reducedUnitQty\n } else {\n remainUomValue = originInv.uomValue - reducedUomValue\n remainUnitQty = originInv.qty * packingSize - reducedUnitQty\n }\n\n if (remainUomValue <= 0 || remainUnitQty <= 0) throw new Error(`There's no more remaining product on the pallet`)\n return { remainUomValue, remainUnitQty }\n}\n\nexport async function updateOriginInventories(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n repackedFroms: Partial<TemporaryPalletChangesInterface[]>,\n packingUnit: string,\n transactionType: string\n): Promise<Inventory[]> {\n const inventories: Inventory[] = []\n\n for (let inv of repackedFroms) {\n let foundInventory: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n palletId: inv.fromPalletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n }\n })\n\n if (foundInventory) {\n let repackedPkgQty: number = 0\n let repackedPkgUomValue: number = 0\n\n switch (packingUnit) {\n case PackingUnits.QTY:\n repackedPkgQty = inv.reducedUnitQty / inv.packingSize\n repackedPkgUomValue = inv.reducedUomValue // it should be called reducedUomValue instead. sbb dh kira smua dgn packingsize\n break\n\n case PackingUnits.UOM:\n // repackedPkgQty = inv.reducedQty / inv.packingSize\n // repackedPkgUomValue = rf.reducedUomValue\n break\n }\n\n foundInventory = await trxMgr.getRepository(Inventory).save({\n ...foundInventory,\n qty: repackedPkgQty,\n uomValue: repackedPkgUomValue,\n creator: user,\n updater: user\n })\n\n await generateInventoryHistory(\n foundInventory,\n refOrder,\n transactionType,\n repackedPkgQty,\n repackedPkgUomValue,\n user,\n trxMgr\n )\n\n inventories.push(foundInventory)\n } else {\n throw new Error(`${inv.fromPalletId} is not exist in inventory. Hence, qty cannot be updated.`)\n }\n }\n\n return inventories\n}\n\n//// @farishelmi What is the difference between upsertInventory vs temporaryUpsertInventory? If it is repeated function, kindly remove one of them.\nexport async function temporaryUpsertInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n originInv: Inventory,\n refOrder: RefOrderType,\n palletId: string,\n locationName: string,\n packingType: string,\n addedQty: number,\n addedUomValue: number,\n transactionType: string,\n stdAmount?: number,\n packingUnit?: string\n): Promise<Inventory> {\n const location: Location = await trxMgr.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: locationName },\n relations: ['warehouse']\n })\n if (!location) throw new Error(`Location is not found by (${locationName})`)\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n let inv: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n palletId,\n batchId: originInv.batchId,\n product: originInv.product,\n packingType,\n packingSize: stdAmount,\n refOrderId: originInv.refOrderId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n },\n relations: ['product', 'refInventory']\n })\n\n // Create new inventory\n if (!inv) {\n let newInventory: Inventory = new Inventory()\n\n inv = {\n ...newInventory,\n domain,\n bizplace,\n palletId,\n name: InventoryNoGenerator.inventoryName(),\n packingType,\n qty: addedQty,\n weight: 0,\n uomValue: addedUomValue,\n lockedQty: 0,\n lockedUomValue: 0,\n packingSize: packingUnit == PackingUnits.QTY ? stdAmount : 1,\n warehouse,\n location,\n zone,\n creator: user,\n updater: user\n }\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n\n // Check whether the pallet is resuable or not\n const pallet: Pallet = await trxMgr.getRepository(Pallet).findOne({\n where: { domain: { id: domain.id }, name: palletId, inventory: IsNull() }\n })\n // If it's exists => it's reusable pallet and need to update it's inventory field\n if (pallet) {\n pallet.inventory = inv\n pallet.updater = user\n await trxMgr.getRepository(Pallet).save(pallet)\n }\n } else {\n // Update inventory\n inv.qty += addedQty\n inv.uomValue += addedUomValue\n inv.warehouse = warehouse\n inv.location = location\n inv.zone = location.zone\n inv.updater = user\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n }\n\n // Create inventory history\n await generateInventoryHistory(inv, refOrder, transactionType, addedQty, addedUomValue, user, trxMgr)\n\n return inv\n}\n\n//// @farishelmi What is the difference between deductProductAmount vs temporaryDeductProductAmount? If it is repeated function, kindly remove one of them.\nexport async function temporaryDeductProductAmount(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n originInv: Inventory,\n reducedQty: number,\n reducedUomValue: number,\n transactionType: string,\n originalQty?: number,\n originalUomValue?: number,\n currentUnitQty?: number,\n currentUomValue?: number\n) {\n if (refOrder instanceof ReleaseGood) {\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS)\n throw new Error(\n `Picking process is not finished yet. Please complete picking first before complete Repalletizing`\n )\n\n let orderInv: OrderInventory = loadingWS.worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .find((oi: OrderInventory) => oi.inventory.id === originInv.id)\n if (!orderInv) {\n throw new Error(`Failed to find order inventory (Pallet ID: ${originInv.palletId})`)\n }\n\n orderInv.releaseQty -= reducedQty\n orderInv.releaseUomValue -= reducedUomValue\n orderInv.updater = user\n\n await trxMgr.getRepository(OrderInventory).save(orderInv)\n } else {\n // currentUnitQty > 0 only belongs to PackingUnits.QTY\n if (currentUnitQty > 0) {\n const unitUomValue: number = originInv.uomValue / originInv.qty\n\n reducedQty = Math.floor((originalQty * originInv.packingSize - currentUnitQty) / originInv.packingSize)\n reducedUomValue = unitUomValue * reducedQty\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n // minus 1 because remain unit qty only exist if the unitQty < 1\n if (originInv.qty - 1 == 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv.qty = 0\n originInv.uomValue = 0\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -1, -unitUomValue, user, trxMgr)\n\n const newQty: number = currentUnitQty\n const newUomValue: number = (unitUomValue / originInv.packingSize) * newQty\n\n originInv.qty = newQty\n originInv.uomValue = newUomValue\n originInv.packingSize = 1\n originInv.status = INVENTORY_STATUS.STORED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, newQty, newUomValue, user, trxMgr)\n }\n\n // currentUnitUomValue > 0 only belongs to PackingUnits.QTY\n } else if (currentUomValue > 0) {\n reducedUomValue = Math.round((originalUomValue - currentUomValue + Number.EPSILON) * 100) / 100\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n } else {\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= originalQty\n originInv.lockedUomValue -= originalUomValue\n originInv.updater = user\n originInv.status = originInv.qty > 0 ? INVENTORY_STATUS.STORED : INVENTORY_STATUS.TERMINATED\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n if (originInv.qty <= 0 || originInv.uomValue <= 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n }\n }\n }\n\n return originInv\n}\n\n/**\n * @description Assign inventory to targetVas\n * When Vas order comes together with Arrival Notice or Release Good\n * The vas worksheet is activated automatically by to complete unloading/picking worksheet.\n * As a result user can't activate it manually, which means no assignment for every specific vas tasks.\n * For this case inventory should be assigned while processing the VAS Order.\n */\nexport async function assignInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n wsd: WorksheetDetail,\n refOrder: ArrivalNotice | ReleaseGood,\n targetVas: OrderVas,\n palletId: string\n): Promise<OrderVas> {\n let inventory: Inventory\n\n if (refOrder instanceof ArrivalNotice) {\n // Case 1. When the VAS Order comes with Arrival Notice\n inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n palletId,\n status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.PUTTING_AWAY]),\n refOrderId: refOrder.id\n }\n })\n if (!inventory) throw new Error(`Counldn't find unloaded inventory by pallet ID: (${palletId})`)\n\n // Check current inventory has enough qty of product to complete this target vas.\n if (targetVas.qty > inventory.qty) {\n // If it doesn't have enough, Need to create new worksheet detail and target vas without inventory assignment\n // So the user can proceed it with another inventory\n targetVas = await addNewVasTask(targetVas, inventory.qty, inventory.uomValue, domain, bizplace, user, trxMgr, wsd)\n }\n } else if (refOrder instanceof ReleaseGood) {\n // Case 2. When the VAS Order comes with Release Good\n // In this case, every available inventories are picked by picking worksheet.\n // So target inventories should be found by relation with order inventory which has PICKED status\n let pickedOrdInv: OrderInventory = await trxMgr.getRepository(OrderInventory).find({\n where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, status: ORDER_INVENTORY_STATUS.PICKED },\n relations: ['inventory']\n })\n pickedOrdInv = pickedOrdInv.find((oi: OrderInventory) => oi.inventory.palletId === palletId)\n inventory = pickedOrdInv?.inventory\n if (!inventory) throw new Error(`Couldn't find picked inventory by pallet ID: ${palletId}`)\n\n // Check current target inventory (picked inventory) has enough qty of product to complete this target vas.\n // And available qty of products also restriced by picking. (Because customer requests do some vas for Release Order)\n if (targetVas.qty > pickedOrdInv.releaseQty) {\n // If it doesn't have enough, Need to create new worksheet detail and target vas without inventory assignment\n // So the user can proceed it with another inventory\n targetVas = await addNewVasTask(\n targetVas,\n pickedOrdInv.releaseQty,\n pickedOrdInv.releaseUomValue,\n domain,\n bizplace,\n user,\n trxMgr,\n wsd\n )\n }\n } else {\n throw new Error(`Reference Order (${refOrder.name}) is not expected.`)\n }\n\n targetVas.inventory = inventory\n targetVas.updater = user\n return await trxMgr.getRepository(OrderVas).save(targetVas)\n}\n\n/**\n * Dismiss assigne inventory when user click undo to remove\n * proceed pallet for relabel, repack, repack\n *\n * @param {EntityManager} trxMgr\n * @param {WorksheetDetail} wsd\n * @param {OrderVas} targetVas\n * @param {PalletChangesInterface[]} palletChanges\n * @param {String} palletId\n */\nexport async function dismissInventory(\n trxMgr: EntityManager,\n wsd: WorksheetDetail,\n targetVas: OrderVas,\n palletChanges: PalletChangesInterface[],\n palletId: string\n) {\n // If there's no more item assigned with current from pallet id\n if (!palletChanges.find((rf: PalletChangesInterface) => rf.fromPalletId === palletId)) {\n targetVas.inventory = null\n const worksheet: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { id: wsd.worksheet.id },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetVas',\n 'worksheetDetails.targetVas.vas',\n 'worksheetDetails.targetVas.inventory'\n ]\n })\n\n const nonFinishedWSD: WorksheetDetail = worksheet.worksheetDetails.find(\n (otherWSD: WorksheetDetail) =>\n otherWSD.id !== wsd.id &&\n otherWSD.targetVas.set === wsd.targetVas.set &&\n otherWSD.targetVas.vas.id === wsd.targetVas.vas.id &&\n otherWSD.status !== WORKSHEET_STATUS.DONE\n )\n\n if (nonFinishedWSD) {\n // If there non finished same VAS, delete undo target record (worksheet detail & order vas)\n // Add qty and uomValue for non finished vas task\n await trxMgr.getRepository(WorksheetDetail).delete(wsd.id)\n await trxMgr.getRepository(OrderVas).delete(targetVas.id)\n\n nonFinishedWSD.targetVas.qty += targetVas.qty\n nonFinishedWSD.targetVas.uomValue += targetVas.uomValue\n await trxMgr.getRepository(OrderVas).save(nonFinishedWSD.targetVas)\n } else {\n // If there no non finished same VAS, dismiss inventory for the record\n targetVas.inventory = null\n await trxMgr.getRepository(OrderVas).save(wsd.targetVas)\n }\n }\n}\n\n/**\n * @description Create nw VAS Worksheet Detail & Order Vas\n * Without inventory assignment\n */\nexport async function addNewVasTask(\n targetVas: OrderVas,\n currentOrderQty: number,\n currentOrderUomValue: number,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n trxMgr: EntityManager,\n wsd: WorksheetDetail\n): Promise<OrderVas> {\n // Create new order vas & worksheet detail\n const copiedTargetVas: OrderVas = Object.assign({}, targetVas)\n delete copiedTargetVas.id\n\n let newTargetVas: OrderVas = {\n ...copiedTargetVas,\n domain,\n bizplace,\n name: OrderNoGenerator.orderVas(),\n qty: targetVas.qty - currentOrderQty,\n uomValue: targetVas.uomValue - currentOrderUomValue,\n creator: user,\n updater: user\n }\n newTargetVas = await trxMgr.getRepository(OrderVas).save(newTargetVas)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, wsd)\n delete copiedWSD.id\n\n const newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n name: WorksheetNoGenerator.vasDetail(),\n seq: wsd.seq++,\n targetVas: newTargetVas,\n creator: user,\n updater: user\n }\n await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n\n targetVas.qty = currentOrderQty\n targetVas.uomValue = currentOrderUomValue\n return targetVas\n}\n\nexport async function upsertInventory(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n originInv: Inventory,\n refOrder: RefOrderType,\n palletId: string,\n locationName: string,\n packingType: string,\n addedQty: number,\n addedUomValue: number,\n transactionType: string,\n stdAmount?: number,\n packingUnit?: string\n): Promise<Inventory> {\n const location: Location = await trxMgr.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: locationName },\n relations: ['warehouse']\n })\n if (!location) throw new Error(`Location is not found by (${locationName})`)\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n let inv: Inventory = await trxMgr.getRepository(Inventory).findOne({\n where: {\n domain: { id: domain.id },\n bizplace,\n palletId,\n batchId: originInv.batchId,\n product: originInv.product,\n packingType,\n packingSize: stdAmount,\n refOrderId: originInv.refOrderId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n },\n relations: ['product', 'refInventory']\n })\n\n // Create new inventory\n if (!inv) {\n const copiedInv: Inventory = Object.assign({}, originInv)\n delete copiedInv.id\n\n inv = {\n ...copiedInv,\n domain,\n bizplace,\n palletId,\n name: InventoryNoGenerator.inventoryName(),\n packingType,\n qty: addedQty,\n weight: 0,\n uomValue: addedUomValue,\n lockedQty: 0,\n lockedUomValue: 0,\n packingSize: packingUnit == PackingUnits.QTY ? stdAmount : 1,\n warehouse,\n location,\n zone,\n creator: user,\n updater: user\n }\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n\n // Check whether the pallet is resuable or not\n const pallet: Pallet = await trxMgr.getRepository(Pallet).findOne({\n where: { domain: { id: domain.id }, name: palletId, inventory: IsNull() }\n })\n // If it's exists => it's reusable pallet and need to update it's inventory field\n if (pallet) {\n pallet.inventory = inv\n pallet.updater = user\n await trxMgr.getRepository(Pallet).save(pallet)\n }\n } else {\n // Update inventory\n inv.qty += addedQty\n inv.uomValue += addedUomValue\n inv.warehouse = warehouse\n inv.location = location\n inv.zone = location.zone\n inv.updater = user\n\n // Save changed inventory\n inv = await trxMgr.getRepository(Inventory).save(inv)\n }\n\n // Create inventory history\n await generateInventoryHistory(inv, refOrder, transactionType, addedQty, addedUomValue, user, trxMgr)\n\n return inv\n}\n\nexport async function deductProductAmount(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: RefOrderType,\n originInv: Inventory,\n reducedQty: number,\n reducedUomValue: number,\n transactionType: string,\n originalQty?: number,\n originalUomValue?: number,\n currentUnitQty?: number,\n currentUomValue?: number\n) {\n if (refOrder instanceof ReleaseGood) {\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS)\n throw new Error(\n `Picking process is not finished yet. Please complete picking first before complete Repalletizing`\n )\n\n const orderInv: OrderInventory = loadingWS.worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .find((oi: OrderInventory) => oi.inventory.id === originInv.id)\n if (!orderInv) {\n throw new Error(`Failed to find order inventory (Pallet ID: ${originInv.palletId})`)\n }\n\n orderInv.releaseQty -= reducedQty\n orderInv.releaseUomValue -= reducedUomValue\n orderInv.updater = user\n\n await trxMgr.getRepository(OrderInventory).save(orderInv)\n } else {\n // currentUnitQty > 0 only belongs to PackingUnits.QTY\n if (currentUnitQty > 0) {\n const unitUomValue: number = originInv.uomValue / originInv.qty\n\n reducedQty = Math.floor((originalQty * originInv.packingSize - currentUnitQty) / originInv.packingSize)\n reducedUomValue = unitUomValue * reducedQty\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n // minus 1 because remain unit qty only exist if the unitQty < 1\n if (originInv.qty - 1 == 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv.qty = 0\n originInv.uomValue = 0\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -1, -unitUomValue, user, trxMgr)\n\n const newQty: number = currentUnitQty\n const newUomValue: number = (unitUomValue / originInv.packingSize) * newQty\n\n originInv.qty = newQty\n originInv.uomValue = newUomValue\n originInv.packingSize = 1\n originInv.status = INVENTORY_STATUS.STORED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, newQty, newUomValue, user, trxMgr)\n }\n\n // currentUnitUomValue > 0 only belongs to PackingUnits.UOM\n } else if (currentUomValue > 0) {\n reducedUomValue = Math.round((originalUomValue - currentUomValue + Number.EPSILON) * 100) / 100\n\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n } else {\n originInv.qty -= reducedQty\n originInv.uomValue -= reducedUomValue\n originInv.lockedQty -= reducedQty\n originInv.lockedUomValue -= reducedUomValue\n originInv.updater = user\n originInv.status = originInv.qty > 0 ? INVENTORY_STATUS.STORED : INVENTORY_STATUS.TERMINATED\n\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, transactionType, -reducedQty, -reducedUomValue, user, trxMgr)\n\n if (originInv.qty <= 0 || originInv.uomValue <= 0) {\n originInv.status = INVENTORY_STATUS.TERMINATED\n originInv = await trxMgr.getRepository(Inventory).save(originInv)\n await generateInventoryHistory(originInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n }\n }\n }\n\n return originInv\n}\n\nexport async function createPutawayWorksheet(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: ArrivalNotice,\n originInv: Inventory,\n changedInv: Inventory\n): Promise<void> {\n const putawayWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: domain.id }, bizplace, arrivalNotice: refOrder, type: WORKSHEET_TYPE.PUTAWAY },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!putawayWS) {\n throw new Error(\n `Unloading process is not finished yet. Please complete unloading first before complete Repalletizing`\n )\n }\n const putawayWSDs: WorksheetDetail[] = putawayWS.worksheetDetails\n\n const originalWSD: WorksheetDetail = putawayWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === originInv.id\n )\n const originOrdInv: OrderInventory = originalWSD.targetInventory\n const sameTargetWSD: WorksheetDetail = putawayWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === changedInv.id\n )\n\n if (!sameTargetWSD) {\n // Create new order inventory\n const copiedOrdInv: OrderInventory = Object.assign({}, originOrdInv)\n delete copiedOrdInv.id\n\n let newOrdInv: OrderInventory = {\n ...copiedOrdInv,\n domain,\n bizplace,\n name: OrderNoGenerator.orderInventory(),\n type: ORDER_TYPES.ARRIVAL_NOTICE,\n arrivalNotice: refOrder,\n inventory: changedInv,\n creator: user,\n updater: user\n }\n newOrdInv = await trxMgr.getRepository(OrderInventory).save(newOrdInv)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, originalWSD)\n delete copiedWSD.id\n\n let newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n worksheet: putawayWS,\n name: WorksheetNoGenerator.putawayDetail(),\n targetInventory: newOrdInv,\n type: WORKSHEET_TYPE.PUTAWAY,\n creator: user,\n updater: user\n }\n newWSD = await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n }\n\n // Update origin order inventory\n if (originInv.status === INVENTORY_STATUS.TERMINATED) {\n await trxMgr.getRepository(WorksheetDetail).delete(originalWSD.id)\n\n originOrdInv.status = ORDER_INVENTORY_STATUS.DONE\n originOrdInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(originOrdInv)\n }\n}\n\nexport async function createLoadingWorksheet(\n trxMgr: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n user: User,\n refOrder: ReleaseGood,\n originInv: OrderInventory,\n changedInv: Inventory\n): Promise<void> {\n const changedQty: number = changedInv.qty\n const changedUomValue: number = changedInv.uomValue\n const loadingWS: Worksheet = await trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: domain.id }, bizplace, releaseGood: refOrder, type: WORKSHEET_TYPE.LOADING },\n relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']\n })\n\n if (!loadingWS) {\n throw new Error(`Picking process is not finished yet. Please complete picking first before complete Repalletizing`)\n }\n\n const loadingWSDs: WorksheetDetail[] = loadingWS.worksheetDetails\n\n const originalWSD: WorksheetDetail = loadingWSDs.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.id === originInv.id\n )\n const originOrdInv: OrderInventory = originalWSD.targetInventory\n const sameTargetWSD: WorksheetDetail = loadingWSDs.find((wsd: WorksheetDetail) => {\n const targetOI: OrderInventory = wsd.targetInventory\n const targetInv: Inventory = targetOI.inventory\n const targetUnitUomValue: number = targetOI.releaseUomValue / targetOI.releaseQty\n const changeUnitUomValue: number = changedUomValue / changedQty\n\n if (\n targetInv.palletId === changedInv.palletId &&\n targetInv.batchId === changedInv.batchId &&\n targetInv.packingType === changedInv.packingType &&\n targetUnitUomValue === changeUnitUomValue\n ) {\n return wsd\n }\n })\n\n if (!sameTargetWSD) {\n // Create new order inventory\n const copiedOrderInv: OrderInventory = Object.assign({}, originOrdInv)\n delete copiedOrderInv.id\n\n let newOrdInv: OrderInventory = await trxMgr.getRepository(OrderInventory).save({\n ...copiedOrderInv,\n domain,\n bizplace,\n releaseQty: changedQty,\n releaseUomValue: changedUomValue,\n name: OrderNoGenerator.orderInventory(),\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n releaseGood: refOrder,\n inventory: changedInv,\n creator: user,\n updater: user\n })\n newOrdInv = await trxMgr.getRepository(OrderInventory).save(newOrdInv)\n\n const copiedWSD: WorksheetDetail = Object.assign({}, originalWSD)\n delete copiedWSD.id\n\n let newWSD: WorksheetDetail = {\n ...copiedWSD,\n domain,\n bizplace,\n worksheet: loadingWS,\n name: WorksheetNoGenerator.loadingDetail(),\n targetInventory: newOrdInv,\n type: WORKSHEET_TYPE.LOADING,\n creator: user,\n updater: user\n }\n await trxMgr.getRepository(WorksheetDetail).save(newWSD)\n } else {\n let sameTargetInv: OrderInventory = sameTargetWSD.targetInventory\n sameTargetInv.releaseQty += changedQty\n sameTargetInv.releaseUomValue += changedUomValue\n sameTargetInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(sameTargetInv)\n }\n\n // Update inventory to PICKED inventory\n changedInv = await trxMgr.getRepository(Inventory).save({\n ...changedInv,\n qty: changedInv.qty - changedQty,\n uomValue: changedInv.uomValue - changedUomValue,\n updater: user\n })\n\n // Generate PICKING inventory history\n await generateInventoryHistory(\n changedInv,\n refOrder,\n INVENTORY_TRANSACTION_TYPE.PICKING,\n -changedQty,\n -changedUomValue,\n user,\n trxMgr\n )\n\n // Generate TERMINATED inventory history\n await generateInventoryHistory(changedInv, refOrder, INVENTORY_TRANSACTION_TYPE.TERMINATED, 0, 0, user, trxMgr)\n\n // Delete worksheet detail & order inventory\n // If order inventory doesn't have release qty any more\n if (originOrdInv.releaseQty <= 0) {\n await trxMgr.getRepository(WorksheetDetail).delete(originalWSD.id)\n originInv.status = ORDER_INVENTORY_STATUS.DONE\n originInv.updater = user\n await trxMgr.getRepository(OrderInventory).save(originInv)\n }\n}\n"]}
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.checkRelabelable = exports.checkRelabelableResolver = void 0;
4
+ const typeorm_1 = require("typeorm");
4
5
  const biz_base_1 = require("@things-factory/biz-base");
5
6
  const product_base_1 = require("@things-factory/product-base");
6
7
  const warehouse_base_1 = require("@things-factory/warehouse-base");
7
- const typeorm_1 = require("typeorm");
8
8
  exports.checkRelabelableResolver = {
9
9
  async checkRelabelable(_, { batchId, productId, packingType, unitUomValue }, context) {
10
10
  const { tx, domain, user } = context.state;
11
11
  const bizplace = await (0, biz_base_1.getMyBizplace)(user);
12
12
  const product = await tx.getRepository(product_base_1.Product).findOne({
13
- where: { domain, bizplace, id: productId }
13
+ where: { domain: { id: domain.id }, bizplace, id: productId }
14
14
  });
15
15
  if (!product)
16
16
  throw new Error(`Couldn't find product by ID (${productId})`);
@@ -61,7 +61,14 @@ async function checkRelabelable(tx, domain, bizplace, batchId, product, packingT
61
61
  // The condition is same batch id same product same packing type
62
62
  // If there's *NO* duplicated inventory the target inventory for this vas can be executed
63
63
  const duplicatedInvCnt = await tx.getRepository(warehouse_base_1.Inventory).count({
64
- where: { domain, bizplace, batchId, product, packingType, status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED)) }
64
+ where: {
65
+ domain: { id: domain.id },
66
+ bizplace,
67
+ batchId,
68
+ product,
69
+ packingType,
70
+ status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
71
+ }
65
72
  });
66
73
  if (!duplicatedInvCnt)
67
74
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"check-relabelable.js","sourceRoot":"","sources":["../../../../../../server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts"],"names":[],"mappings":";;;AACA,uDAAkE;AAClE,+DAAsD;AAEtD,mEAA4E;AAC5E,qCAAmD;AAEtC,QAAA,wBAAwB,GAAG;IACtC,KAAK,CAAC,gBAAgB,CACpB,CAAO,EACP,EACE,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACsE,EACpF,OAAY;QAEZ,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAC7F,MAAM,QAAQ,GAAa,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAA;QACpD,MAAM,OAAO,GAAY,MAAM,EAAE,CAAC,aAAa,CAAC,sBAAO,CAAC,CAAC,OAAO,CAAC;YAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE;SAC3C,CAAC,CAAA;QACF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,GAAG,CAAC,CAAA;QAE3E,OAAO,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAClG,CAAC;CACF,CAAA;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,gBAAgB,CACpC,EAAiB,EACjB,MAAc,EACd,QAAkB,EAClB,OAAe,EACf,OAAgB,EAChB,WAAmB,EACnB,YAAoB;IAEpB,sCAAsC;IACtC,8EAA8E;IAC9E,sFAAsF;IACtF,MAAM,eAAe,GAAW,MAAM,EAAE;SACrC,aAAa,CAAC,0BAAS,CAAC;SACxB,kBAAkB,CAAC,KAAK,CAAC;SACzB,KAAK,CAAC,2BAA2B,CAAC;SAClC,QAAQ,CAAC,+BAA+B,CAAC;SACzC,QAAQ,CAAC,yBAAyB,CAAC;SACnC,QAAQ,CAAC,6BAA6B,CAAC;SACvC,QAAQ,CAAC,iCAAiC,CAAC;SAC3C,QAAQ,CAAC,uBAAuB,CAAC;SACjC,QAAQ,CAAC,2CAA2C,CAAC;SACrD,aAAa,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW;QACX,MAAM,EAAE,iCAAgB,CAAC,UAAU;QACnC,YAAY;KACb,CAAC;SACD,QAAQ,EAAE,CAAA;IAEb,IAAI,eAAe;QAAE,OAAO,IAAI,CAAA;IAEhC,wCAAwC;IACxC,gEAAgE;IAChE,yFAAyF;IACzF,MAAM,gBAAgB,GAAW,MAAM,EAAE,CAAC,aAAa,CAAC,0BAAS,CAAC,CAAC,KAAK,CAAC;QACvE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAA,aAAG,EAAC,IAAA,eAAK,EAAC,iCAAgB,CAAC,UAAU,CAAC,CAAC,EAAE;KAC5G,CAAC,CAAA;IACF,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAElC,OAAO,KAAK,CAAA;AACd,CAAC;AA5CD,4CA4CC","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace, getMyBizplace } from '@things-factory/biz-base'\nimport { Product } from '@things-factory/product-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'\nimport { EntityManager, Equal, Not } from 'typeorm'\n\nexport const checkRelabelableResolver = {\n async checkRelabelable(\n _: void,\n {\n batchId,\n productId,\n packingType,\n unitUomValue\n }: { batchId: string; productId: string; packingType: string; unitUomValue: number },\n context: any\n ): Promise<boolean> {\n const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state\n const bizplace: Bizplace = await getMyBizplace(user)\n const product: Product = await tx.getRepository(Product).findOne({\n where: { domain, bizplace, id: productId }\n })\n if (!product) throw new Error(`Couldn't find product by ID (${productId})`)\n\n return await checkRelabelable(tx, domain, bizplace, batchId, product, packingType, unitUomValue)\n }\n}\n\n/**\n * @description Try to find whether current inventory information can be accepted for relabeling.\n * The inventory should be exactly same with one of stored inventory\n * or\n * The inventory should be totally different with every single inventories stored.\n *\n * @param {EntityManager} tx\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {String} batchId\n * @param {Product} product\n * @param {String} packingType\n * @param {Number} unitUomValue\n */\nexport async function checkRelabelable(\n tx: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n batchId: string,\n product: Product,\n packingType: string,\n unitUomValue: number\n): Promise<boolean> {\n // Try to find out identical inventory\n // The condition is same batch id same product same packing type same uomValue\n // If there *IS* identical inventory the target inventory for this vas can be executed\n const identicalInvCnt: number = await tx\n .getRepository(Inventory)\n .createQueryBuilder('inv')\n .where('inv.domain_id = :domainId')\n .andWhere('inv.bizplace_id = :bizplaceId')\n .andWhere('inv.batch_id = :batchId')\n .andWhere('inv.product_id = :productId')\n .andWhere('inv.packing_type = :packingType')\n .andWhere('inv.status != :status')\n .andWhere('(inv.uom_value / inv.qty) = :unitUomValue')\n .setParameters({\n domainId: domain.id,\n bizplaceId: bizplace.id,\n batchId,\n productId: product.id,\n packingType,\n status: INVENTORY_STATUS.TERMINATED,\n unitUomValue\n })\n .getCount()\n\n if (identicalInvCnt) return true\n\n // Try to find out duplicated invenetory\n // The condition is same batch id same product same packing type\n // If there's *NO* duplicated inventory the target inventory for this vas can be executed\n const duplicatedInvCnt: number = await tx.getRepository(Inventory).count({\n where: { domain, bizplace, batchId, product, packingType, status: Not(Equal(INVENTORY_STATUS.TERMINATED)) }\n })\n if (!duplicatedInvCnt) return true\n\n return false\n}\n"]}
1
+ {"version":3,"file":"check-relabelable.js","sourceRoot":"","sources":["../../../../../../server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAEnD,uDAAkE;AAClE,+DAAsD;AAEtD,mEAA4E;AAE/D,QAAA,wBAAwB,GAAG;IACtC,KAAK,CAAC,gBAAgB,CACpB,CAAO,EACP,EACE,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACsE,EACpF,OAAY;QAEZ,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,QAAQ,GAAa,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAA;QACpD,MAAM,OAAO,GAAY,MAAM,EAAE,CAAC,aAAa,CAAC,sBAAO,CAAC,CAAC,OAAO,CAAC;YAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE;SAC9D,CAAC,CAAA;QACF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,GAAG,CAAC,CAAA;QAE3E,OAAO,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAClG,CAAC;CACF,CAAA;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,gBAAgB,CACpC,EAAiB,EACjB,MAAc,EACd,QAAkB,EAClB,OAAe,EACf,OAAgB,EAChB,WAAmB,EACnB,YAAoB;IAEpB,sCAAsC;IACtC,8EAA8E;IAC9E,sFAAsF;IACtF,MAAM,eAAe,GAAW,MAAM,EAAE;SACrC,aAAa,CAAC,0BAAS,CAAC;SACxB,kBAAkB,CAAC,KAAK,CAAC;SACzB,KAAK,CAAC,2BAA2B,CAAC;SAClC,QAAQ,CAAC,+BAA+B,CAAC;SACzC,QAAQ,CAAC,yBAAyB,CAAC;SACnC,QAAQ,CAAC,6BAA6B,CAAC;SACvC,QAAQ,CAAC,iCAAiC,CAAC;SAC3C,QAAQ,CAAC,uBAAuB,CAAC;SACjC,QAAQ,CAAC,2CAA2C,CAAC;SACrD,aAAa,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW;QACX,MAAM,EAAE,iCAAgB,CAAC,UAAU;QACnC,YAAY;KACb,CAAC;SACD,QAAQ,EAAE,CAAA;IAEb,IAAI,eAAe;QAAE,OAAO,IAAI,CAAA;IAEhC,wCAAwC;IACxC,gEAAgE;IAChE,yFAAyF;IACzF,MAAM,gBAAgB,GAAW,MAAM,EAAE,CAAC,aAAa,CAAC,0BAAS,CAAC,CAAC,KAAK,CAAC;QACvE,KAAK,EAAE;YACL,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,QAAQ;YACR,OAAO;YACP,OAAO;YACP,WAAW;YACX,MAAM,EAAE,IAAA,aAAG,EAAC,IAAA,eAAK,EAAC,iCAAgB,CAAC,UAAU,CAAC,CAAC;SAChD;KACF,CAAC,CAAA;IACF,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAElC,OAAO,KAAK,CAAA;AACd,CAAC;AAnDD,4CAmDC","sourcesContent":["import { EntityManager, Equal, Not } from 'typeorm'\n\nimport { Bizplace, getMyBizplace } from '@things-factory/biz-base'\nimport { Product } from '@things-factory/product-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'\n\nexport const checkRelabelableResolver = {\n async checkRelabelable(\n _: void,\n {\n batchId,\n productId,\n packingType,\n unitUomValue\n }: { batchId: string; productId: string; packingType: string; unitUomValue: number },\n context: any\n ): Promise<boolean> {\n const { tx, domain, user } = context.state\n const bizplace: Bizplace = await getMyBizplace(user)\n const product: Product = await tx.getRepository(Product).findOne({\n where: { domain: { id: domain.id }, bizplace, id: productId }\n })\n if (!product) throw new Error(`Couldn't find product by ID (${productId})`)\n\n return await checkRelabelable(tx, domain, bizplace, batchId, product, packingType, unitUomValue)\n }\n}\n\n/**\n * @description Try to find whether current inventory information can be accepted for relabeling.\n * The inventory should be exactly same with one of stored inventory\n * or\n * The inventory should be totally different with every single inventories stored.\n *\n * @param {EntityManager} tx\n * @param {Domain} domain\n * @param {Bizplace} bizplace\n * @param {String} batchId\n * @param {Product} product\n * @param {String} packingType\n * @param {Number} unitUomValue\n */\nexport async function checkRelabelable(\n tx: EntityManager,\n domain: Domain,\n bizplace: Bizplace,\n batchId: string,\n product: Product,\n packingType: string,\n unitUomValue: number\n): Promise<boolean> {\n // Try to find out identical inventory\n // The condition is same batch id same product same packing type same uomValue\n // If there *IS* identical inventory the target inventory for this vas can be executed\n const identicalInvCnt: number = await tx\n .getRepository(Inventory)\n .createQueryBuilder('inv')\n .where('inv.domain_id = :domainId')\n .andWhere('inv.bizplace_id = :bizplaceId')\n .andWhere('inv.batch_id = :batchId')\n .andWhere('inv.product_id = :productId')\n .andWhere('inv.packing_type = :packingType')\n .andWhere('inv.status != :status')\n .andWhere('(inv.uom_value / inv.qty) = :unitUomValue')\n .setParameters({\n domainId: domain.id,\n bizplaceId: bizplace.id,\n batchId,\n productId: product.id,\n packingType,\n status: INVENTORY_STATUS.TERMINATED,\n unitUomValue\n })\n .getCount()\n\n if (identicalInvCnt) return true\n\n // Try to find out duplicated invenetory\n // The condition is same batch id same product same packing type\n // If there's *NO* duplicated inventory the target inventory for this vas can be executed\n const duplicatedInvCnt: number = await tx.getRepository(Inventory).count({\n where: {\n domain: { id: domain.id },\n bizplace,\n batchId,\n product,\n packingType,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n }\n })\n if (!duplicatedInvCnt) return true\n\n return false\n}\n"]}
@@ -6,7 +6,8 @@ const sales_base_1 = require("@things-factory/sales-base");
6
6
  const warehouse_base_1 = require("@things-factory/warehouse-base");
7
7
  const common_utils_1 = require("../common-utils");
8
8
  async function completeRelabeling(trxMgr, orderVas, user) {
9
- orderVas = await trxMgr.getRepository(sales_base_1.OrderVas).findOne(orderVas.id, {
9
+ orderVas = await trxMgr.getRepository(sales_base_1.OrderVas).findOne({
10
+ where: { id: orderVas.id },
10
11
  relations: ['domain', 'bizplace', 'inventory', 'inventory.product', 'arrivalNotice', 'releaseGood', 'vasOrder']
11
12
  });
12
13
  const domain = orderVas.domain;
@@ -22,7 +23,7 @@ async function completeRelabeling(trxMgr, orderVas, user) {
22
23
  if (toBatchId)
23
24
  copiedInv.batchId = toBatchId;
24
25
  if (toProduct)
25
- copiedInv.product = await trxMgr.getRepository(product_base_1.Product).findOne(toProduct.id);
26
+ copiedInv.product = await trxMgr.getRepository(product_base_1.Product).findOneBy({ id: toProduct.id });
26
27
  copiedInv.refInventory = originInv;
27
28
  for (const palletChange of palletChanges) {
28
29
  const newInventory = await (0, common_utils_1.upsertInventory)(trxMgr, domain, bizplace, user, copiedInv, refOrder, palletChange.toPalletId, palletChange.locationName, copiedInv.packingType, palletChange.reducedQty, palletChange.reducedUomValue, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.RELABELING);