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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +2 -0
  2. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  3. package/dist-server/graphql/resolvers/worksheet/vas-candidates.d.ts +2 -0
  4. package/dist-server/tsconfig.tsbuildinfo +1 -1
  5. package/dist-server/utils/inventory-util.d.ts +2 -0
  6. package/package.json +17 -17
  7. package/server/constants/index.ts +5 -0
  8. package/server/constants/rule-type.ts +4 -0
  9. package/server/constants/target-type.ts +6 -0
  10. package/server/constants/template.ts +12 -0
  11. package/server/constants/transaction-type.ts +9 -0
  12. package/server/constants/worksheet.ts +38 -0
  13. package/server/controllers/ecommerce/ecommerce-controller.ts +209 -0
  14. package/server/controllers/ecommerce/index.ts +2 -0
  15. package/server/controllers/ecommerce/sellercraft-controller.ts +358 -0
  16. package/server/controllers/inbound/index.ts +4 -0
  17. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +450 -0
  18. package/server/controllers/inbound/putaway-worksheet-controller.ts +454 -0
  19. package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +291 -0
  20. package/server/controllers/inbound/unloading-worksheet-controller.ts +1400 -0
  21. package/server/controllers/index.ts +21 -0
  22. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +537 -0
  23. package/server/controllers/inspect/index.ts +1 -0
  24. package/server/controllers/outbound/index.ts +5 -0
  25. package/server/controllers/outbound/loading-worksheet-controller.ts +377 -0
  26. package/server/controllers/outbound/packing-worksheet-controller.ts +449 -0
  27. package/server/controllers/outbound/picking-worksheet-controller.ts +1769 -0
  28. package/server/controllers/outbound/returning-worksheet-controller.ts +254 -0
  29. package/server/controllers/outbound/sorting-worksheet-controller.ts +554 -0
  30. package/server/controllers/render-elccl-grn.ts +228 -0
  31. package/server/controllers/render-fm-grn.ts +287 -0
  32. package/server/controllers/render-grn.ts +285 -0
  33. package/server/controllers/render-invoices.ts +201 -0
  34. package/server/controllers/render-job-sheet.ts +208 -0
  35. package/server/controllers/render-kimeda-grn.ts +185 -0
  36. package/server/controllers/render-manifest.ts +76 -0
  37. package/server/controllers/render-manual-do.ts +227 -0
  38. package/server/controllers/render-orientage-do.ts +376 -0
  39. package/server/controllers/render-orientage-grn.ts +191 -0
  40. package/server/controllers/render-po.ts +182 -0
  41. package/server/controllers/render-ro-do.ts +404 -0
  42. package/server/controllers/render-seebuu-grn.ts +208 -0
  43. package/server/controllers/vas/index.ts +1 -0
  44. package/server/controllers/vas/vas-worksheet-controller.ts +848 -0
  45. package/server/controllers/worksheet-controller.ts +1267 -0
  46. package/server/entities/index.ts +8 -0
  47. package/server/entities/warehouse-bizplace-onhand-inventory.ts +148 -0
  48. package/server/entities/worksheet-detail.ts +106 -0
  49. package/server/entities/worksheet-movement.ts +34 -0
  50. package/server/entities/worksheet.ts +100 -0
  51. package/server/graphql/index.ts +7 -0
  52. package/server/graphql/resolvers/index.ts +8 -0
  53. package/server/graphql/resolvers/pallet/index.ts +7 -0
  54. package/server/graphql/resolvers/pallet/pallet-outbound.ts +92 -0
  55. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +137 -0
  56. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +20 -0
  57. package/server/graphql/resolvers/worksheet/check-inventory-release.ts +37 -0
  58. package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +63 -0
  59. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +213 -0
  60. package/server/graphql/resolvers/worksheet/create-worksheet.ts +21 -0
  61. package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +173 -0
  62. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +211 -0
  63. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +79 -0
  64. package/server/graphql/resolvers/worksheet/delete-worksheet.ts +21 -0
  65. package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +104 -0
  66. package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +191 -0
  67. package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
  68. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +36 -0
  69. package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +29 -0
  70. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
  71. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +100 -0
  72. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +26 -0
  73. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +51 -0
  74. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +17 -0
  75. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +69 -0
  76. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +65 -0
  77. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +54 -0
  78. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +114 -0
  79. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +45 -0
  80. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +35 -0
  81. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +23 -0
  82. package/server/graphql/resolvers/worksheet/having-vas.ts +45 -0
  83. package/server/graphql/resolvers/worksheet/index.ts +142 -0
  84. package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +24 -0
  85. package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +49 -0
  86. package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +18 -0
  87. package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +41 -0
  88. package/server/graphql/resolvers/worksheet/inspecting/index.ts +17 -0
  89. package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +30 -0
  90. package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +46 -0
  91. package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +23 -0
  92. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +150 -0
  93. package/server/graphql/resolvers/worksheet/loaded-inventories.ts +40 -0
  94. package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +73 -0
  95. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +165 -0
  96. package/server/graphql/resolvers/worksheet/loading/index.ts +11 -0
  97. package/server/graphql/resolvers/worksheet/loading/loading.ts +46 -0
  98. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +25 -0
  99. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +150 -0
  100. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +34 -0
  101. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +69 -0
  102. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +102 -0
  103. package/server/graphql/resolvers/worksheet/packing/index.ts +13 -0
  104. package/server/graphql/resolvers/worksheet/packing/packing.ts +59 -0
  105. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +70 -0
  106. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  107. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +378 -0
  108. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +142 -0
  109. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +234 -0
  110. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +40 -0
  111. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +98 -0
  112. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +50 -0
  113. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +44 -0
  114. package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +32 -0
  115. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +137 -0
  116. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +282 -0
  117. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +121 -0
  118. package/server/graphql/resolvers/worksheet/picking/index.ts +31 -0
  119. package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +35 -0
  120. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +96 -0
  121. package/server/graphql/resolvers/worksheet/picking/picking.ts +55 -0
  122. package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +52 -0
  123. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +25 -0
  124. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  125. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +31 -0
  126. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  127. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +147 -0
  128. package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +242 -0
  129. package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +51 -0
  130. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +105 -0
  131. package/server/graphql/resolvers/worksheet/putaway/index.ts +11 -0
  132. package/server/graphql/resolvers/worksheet/putaway/putaway.ts +26 -0
  133. package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +25 -0
  134. package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +55 -0
  135. package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +38 -0
  136. package/server/graphql/resolvers/worksheet/putaway-return/index.ts +11 -0
  137. package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +30 -0
  138. package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +29 -0
  139. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +83 -0
  140. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +82 -0
  141. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +133 -0
  142. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +186 -0
  143. package/server/graphql/resolvers/worksheet/relocate-pallet.ts +67 -0
  144. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +127 -0
  145. package/server/graphql/resolvers/worksheet/return-worksheet.ts +70 -0
  146. package/server/graphql/resolvers/worksheet/returning/activate-return.ts +24 -0
  147. package/server/graphql/resolvers/worksheet/returning/complete-return.ts +39 -0
  148. package/server/graphql/resolvers/worksheet/returning/index.ts +9 -0
  149. package/server/graphql/resolvers/worksheet/returning/returning.ts +26 -0
  150. package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +25 -0
  151. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +40 -0
  152. package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +23 -0
  153. package/server/graphql/resolvers/worksheet/sorting/index.ts +13 -0
  154. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +31 -0
  155. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +32 -0
  156. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +87 -0
  157. package/server/graphql/resolvers/worksheet/transfer.ts +176 -0
  158. package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +54 -0
  159. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +78 -0
  160. package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +56 -0
  161. package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +25 -0
  162. package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +25 -0
  163. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +76 -0
  164. package/server/graphql/resolvers/worksheet/unloading/index.ts +21 -0
  165. package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +26 -0
  166. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  167. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  168. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +25 -0
  169. package/server/graphql/resolvers/worksheet/unloading/unload.ts +26 -0
  170. package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +28 -0
  171. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +29 -0
  172. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +91 -0
  173. package/server/graphql/resolvers/worksheet/unloading-return/index.ts +9 -0
  174. package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +75 -0
  175. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +98 -0
  176. package/server/graphql/resolvers/worksheet/update-worksheet.ts +25 -0
  177. package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +25 -0
  178. package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +25 -0
  179. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +72 -0
  180. package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +31 -0
  181. package/server/graphql/resolvers/worksheet/vas/index.ts +15 -0
  182. package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +24 -0
  183. package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +24 -0
  184. package/server/graphql/resolvers/worksheet/vas-candidates.ts +177 -0
  185. package/server/graphql/resolvers/worksheet/vas-inventories.ts +41 -0
  186. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +1182 -0
  187. package/server/graphql/resolvers/worksheet/vas-transactions/index.ts +5 -0
  188. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +56 -0
  189. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.ts +20 -0
  190. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +27 -0
  191. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.ts +14 -0
  192. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.ts +14 -0
  193. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +96 -0
  194. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +93 -0
  195. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.ts +4 -0
  196. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +105 -0
  197. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +40 -0
  198. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +236 -0
  199. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.ts +3 -0
  200. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +402 -0
  201. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +166 -0
  202. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +116 -0
  203. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.ts +3 -0
  204. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +167 -0
  205. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +74 -0
  206. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +20 -0
  207. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.ts +2 -0
  208. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +164 -0
  209. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +110 -0
  210. package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +43 -0
  211. package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +46 -0
  212. package/server/graphql/resolvers/worksheet/worksheet.ts +330 -0
  213. package/server/graphql/resolvers/worksheet/worksheets.ts +493 -0
  214. package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +22 -0
  215. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +38 -0
  216. package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +18 -0
  217. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +206 -0
  218. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +165 -0
  219. package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +26 -0
  220. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +94 -0
  221. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +259 -0
  222. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +142 -0
  223. package/server/graphql/resolvers/worksheet-detail/index.ts +34 -0
  224. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +165 -0
  225. package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +39 -0
  226. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +19 -0
  227. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +56 -0
  228. package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +21 -0
  229. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +17 -0
  230. package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +12 -0
  231. package/server/graphql/resolvers/worksheet-movement/index.ts +17 -0
  232. package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +15 -0
  233. package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +10 -0
  234. package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +14 -0
  235. package/server/graphql/types/index.ts +15 -0
  236. package/server/graphql/types/pallet/index.ts +12 -0
  237. package/server/graphql/types/pallet/pallet.ts +7 -0
  238. package/server/graphql/types/worksheet/arrival-notice-worksheet.ts +8 -0
  239. package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
  240. package/server/graphql/types/worksheet/contact-point-info.ts +12 -0
  241. package/server/graphql/types/worksheet/cycle-count-worksheet.ts +16 -0
  242. package/server/graphql/types/worksheet/delivery-info.ts +11 -0
  243. package/server/graphql/types/worksheet/delivery-order-info.ts +25 -0
  244. package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
  245. package/server/graphql/types/worksheet/delivery-worksheet.ts +7 -0
  246. package/server/graphql/types/worksheet/executing-worksheet.ts +8 -0
  247. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  248. package/server/graphql/types/worksheet/goods-delivery-note.ts +8 -0
  249. package/server/graphql/types/worksheet/index.ts +750 -0
  250. package/server/graphql/types/worksheet/inventory-check-worksheet.ts +7 -0
  251. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +9 -0
  252. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  253. package/server/graphql/types/worksheet/my-picking-assignment-status.ts +9 -0
  254. package/server/graphql/types/worksheet/new-worksheet.ts +10 -0
  255. package/server/graphql/types/worksheet/picking-assignment-status.ts +9 -0
  256. package/server/graphql/types/worksheet/product-approval.ts +11 -0
  257. package/server/graphql/types/worksheet/release-good-worksheet.ts +8 -0
  258. package/server/graphql/types/worksheet/return-order-worksheet.ts +8 -0
  259. package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
  260. package/server/graphql/types/worksheet/vas-order-worksheet.ts +7 -0
  261. package/server/graphql/types/worksheet/vas-worksheet.ts +8 -0
  262. package/server/graphql/types/worksheet/worksheet-detail-info.ts +68 -0
  263. package/server/graphql/types/worksheet/worksheet-info.ts +33 -0
  264. package/server/graphql/types/worksheet/worksheet-list.ts +8 -0
  265. package/server/graphql/types/worksheet/worksheet-patch.ts +19 -0
  266. package/server/graphql/types/worksheet/worksheet-with-pagination.ts +9 -0
  267. package/server/graphql/types/worksheet/worksheet.ts +34 -0
  268. package/server/graphql/types/worksheet-detail/index.ts +81 -0
  269. package/server/graphql/types/worksheet-detail/inventory-detail.ts +39 -0
  270. package/server/graphql/types/worksheet-detail/new-worksheet-detail.ts +20 -0
  271. package/server/graphql/types/worksheet-detail/pallet-info.ts +8 -0
  272. package/server/graphql/types/worksheet-detail/worksheet-detail-list.ts +8 -0
  273. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +28 -0
  274. package/server/graphql/types/worksheet-detail/worksheet-detail.ts +29 -0
  275. package/server/graphql/types/worksheet-movement/index.ts +30 -0
  276. package/server/graphql/types/worksheet-movement/new-worksheet-movement.ts +8 -0
  277. package/server/graphql/types/worksheet-movement/worksheet-movement-list.ts +8 -0
  278. package/server/graphql/types/worksheet-movement/worksheet-movement-patch.ts +8 -0
  279. package/server/graphql/types/worksheet-movement/worksheet-movement.ts +10 -0
  280. package/server/index.ts +14 -0
  281. package/server/middlewares/index.ts +3 -0
  282. package/server/migrations/index.ts +9 -0
  283. package/server/routes.ts +80 -0
  284. package/server/utils/datetime-util.ts +54 -0
  285. package/server/utils/index.ts +4 -0
  286. package/server/utils/inventory-util.ts +390 -0
  287. package/server/utils/worksheet-no-generator.ts +206 -0
  288. package/server/utils/worksheet-util.ts +85 -0
@@ -0,0 +1,150 @@
1
+ import { Brackets, OrderByCondition, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { getPermittedBizplaceIds } from '@things-factory/biz-base'
4
+ import { ORDER_INVENTORY_STATUS } from '@things-factory/sales-base'
5
+ import { buildCondition, buildQuery, getRepository } from '@things-factory/shell'
6
+ import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
7
+
8
+ export const inventoriesByPalletResolver = {
9
+ async inventoriesByPallet(_: any, { filters, pagination, sortings, locationSortingRules }, context: ResolverContext) {
10
+ const { domain, user } = context.state
11
+ const params = { filters, pagination }
12
+ let permittedBizplaceIds: string[] = await getPermittedBizplaceIds(domain, user)
13
+ const productFilters = params.filters.filter(x => x.name == 'productName')
14
+ const recallFilters = params.filters.find(x => x.name === 'recall')
15
+ const skipLockCheckFilters = params.filters.find(x => x.name === 'skipLockCheck')
16
+ let skipLockCheck: Boolean =
17
+ skipLockCheckFilters && skipLockCheckFilters?.value ? skipLockCheckFilters?.value : false
18
+ const productFilterColumns = ['sku', 'brandSku', 'name', 'description', 'brand', 'subBrand']
19
+ params.filters = params.filters.filter(x => x.name != 'productName')
20
+
21
+ if (!params.filters.find((filter: any) => filter.name === 'bizplace')) {
22
+ params.filters.push({
23
+ name: 'bizplace',
24
+ operator: 'in',
25
+ value: permittedBizplaceIds,
26
+ relation: true
27
+ })
28
+ } else {
29
+ permittedBizplaceIds = params.filters.find(filter => filter.name === 'bizplace').value
30
+ params.filters.find(filter => filter.name === 'bizplace').relation = true
31
+ }
32
+
33
+ const locationFilters = params.filters.find(x => x.name == 'locationName')
34
+ params.filters = params.filters.filter(x => x.name != 'locationName')
35
+
36
+ const qb: SelectQueryBuilder<Inventory> = getRepository(Inventory).createQueryBuilder('iv')
37
+ buildQuery(qb, params, context)
38
+
39
+ qb.leftJoinAndSelect('iv.domain', 'domain')
40
+ .leftJoinAndSelect('iv.bizplace', 'bizplace')
41
+ .leftJoinAndSelect('iv.product', 'product')
42
+ .leftJoinAndSelect('iv.warehouse', 'warehouse')
43
+ .leftJoinAndSelect('iv.location', 'location')
44
+ .leftJoinAndSelect('iv.creator', 'creator')
45
+ .leftJoinAndSelect('iv.updater', 'updater')
46
+ .andWhere('iv.qty > 0')
47
+ .andWhere(
48
+ `location.type ${recallFilters?.value === true ? '' : 'NOT'} IN ('${LOCATION_TYPE.QUARANTINE}', '${
49
+ LOCATION_TYPE.RESERVE
50
+ }')`
51
+ )
52
+ .andWhere(
53
+ `(iv.batch_id, product.name, iv.packing_type, product.brand) NOT IN (
54
+ SELECT
55
+ oi.batch_id, p2.name, oi.packing_type, p2.brand
56
+ FROM
57
+ order_inventories oi
58
+ LEFT JOIN
59
+ products p2
60
+ ON
61
+ oi.product_id = p2.id
62
+ WHERE
63
+ oi.status = '${ORDER_INVENTORY_STATUS.PENDING_SPLIT}'
64
+ AND oi.bizplace_id IN (:...permittedBizplaceIds)
65
+ AND oi.domain_id = (:domainId)
66
+ )`,
67
+ { permittedBizplaceIds, domainId: domain.id }
68
+ )
69
+
70
+ if (!skipLockCheck) {
71
+ qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0')
72
+ qb.andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0')
73
+ }
74
+
75
+ if (locationFilters) {
76
+ qb.andWhere(`location.name ilike '${locationFilters.value}'`)
77
+ }
78
+
79
+ if (sortings?.length !== 0) {
80
+ const arrChildSortData = ['productName', 'productSKU']
81
+
82
+ const remapChildSortData = ['name', 'sku']
83
+ const sort: OrderByCondition = (sortings || []).reduce(
84
+ (acc, sort, idx) => ({
85
+ ...acc,
86
+ [arrChildSortData.indexOf(sort.name) >= 0 ? 'product' + '.' + remapChildSortData[idx] : 'iv.' + sort.name]:
87
+ sort.desc ? 'DESC' : 'ASC'
88
+ }),
89
+ {}
90
+ )
91
+ qb.orderBy(sort)
92
+ }
93
+
94
+ if (locationSortingRules?.length > 0) {
95
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }) => {
96
+ qb.addOrderBy(`location.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
97
+ })
98
+ } else {
99
+ qb.addOrderBy('location.name', 'DESC')
100
+ }
101
+
102
+ if (productFilters && productFilters.length > 0) {
103
+ let productInfo = productFilters[0]
104
+ qb.andWhere(
105
+ new Brackets(qb2 => {
106
+ productFilterColumns.forEach(filter => {
107
+ const condition = buildCondition(
108
+ 'product',
109
+ filter,
110
+ 'i_like',
111
+ productInfo.value,
112
+ false,
113
+ Object.keys(qb.getParameters()).length
114
+ )
115
+
116
+ qb2.orWhere(condition.clause, condition.parameters)
117
+ })
118
+ })
119
+ )
120
+ }
121
+ let [items, total] = await qb.getManyAndCount()
122
+
123
+ items = await Promise.all(
124
+ items.map(async (item: Inventory) => {
125
+ const { remainQty, remainUomValue } = await getRemainAmount(item)
126
+
127
+ return {
128
+ ...item,
129
+ remainQty,
130
+ remainUomValue,
131
+ remainUomValueWithUom: remainUomValue + ' ' + item.uom,
132
+ // product: item.product,
133
+ productName: item.product.name,
134
+ productSKU: item.product.sku,
135
+ productBrand: item.product.brand,
136
+ productId: item.product.id
137
+ }
138
+ })
139
+ )
140
+
141
+ return { items, total }
142
+ }
143
+ }
144
+
145
+ async function getRemainAmount(inventory: Inventory): Promise<{ remainQty: number; remainUomValue: number }> {
146
+ return {
147
+ remainQty: inventory.qty - (inventory.lockedQty || 0),
148
+ remainUomValue: inventory.uomValue - (inventory.lockedUomValue || 0)
149
+ }
150
+ }
@@ -0,0 +1,40 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { DeliveryOrder, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
4
+ import { getRepository } from '@things-factory/shell'
5
+
6
+ export const loadedInventories = {
7
+ async loadedInventories(_: any, { releaseGoodNo }, context: ResolverContext) {
8
+ const { domain } = context.state
9
+ const foundRO: ReleaseGood = await getRepository(ReleaseGood).findOne({
10
+ where: {
11
+ domain: { id: domain.id },
12
+ name: releaseGoodNo,
13
+ status: ORDER_STATUS.LOADING
14
+ },
15
+ relations: ['bizplace']
16
+ })
17
+ if (!foundRO) throw new Error('Release order is not found')
18
+
19
+ const deliveryOrders: DeliveryOrder[] = await getRepository(DeliveryOrder).find({
20
+ where: { releaseGood: { id: foundRO.id } }
21
+ })
22
+
23
+ if (deliveryOrders?.length) {
24
+ return await getRepository(OrderInventory).find({
25
+ where: {
26
+ deliveryOrder: { id: In(deliveryOrders.map((deliveryOrder: DeliveryOrder) => deliveryOrder.id)) }
27
+ },
28
+ relations: [
29
+ 'inventory',
30
+ 'inventory.product',
31
+ 'deliveryOrder',
32
+ 'deliveryOrder.transportDriver',
33
+ 'deliveryOrder.transportVehicle'
34
+ ]
35
+ })
36
+ } else {
37
+ return []
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,73 @@
1
+ import { EntityManager, Equal, Not } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
7
+ import { LoadingWorksheetController } from '../../../../controllers'
8
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
9
+
10
+ export const activateLoadingResolver = {
11
+ async activateLoading(_: any, { worksheetNo, loadingWorksheetDetails }, context: ResolverContext) {
12
+ const { tx, domain, user } = context.state
13
+ const foundWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
14
+ where: {
15
+ domain: { id: domain.id },
16
+ name: worksheetNo,
17
+ status: WORKSHEET_STATUS.DEACTIVATED,
18
+ type: WORKSHEET_TYPE.LOADING
19
+ },
20
+ relations: ['bizplace', 'releaseGood', 'worksheetDetails', 'worksheetDetails.targetInventory']
21
+ })
22
+
23
+ if (!foundWorksheet) throw new Error(`Worksheet doesn't exists`)
24
+
25
+ const relatedPickingWorksheetCnt: number = await tx.getRepository(Worksheet).count({
26
+ where: {
27
+ domain: { id: domain.id },
28
+ releaseGood: { id: foundWorksheet.releaseGood.id },
29
+ type: WORKSHEET_TYPE.PICKING,
30
+ status: Not(Equal(WORKSHEET_STATUS.DONE))
31
+ }
32
+ })
33
+
34
+ const relatedWorksheetCnt: number = await tx.getRepository(Worksheet).count({
35
+ where: {
36
+ domain: { id: domain.id },
37
+ releaseGood: { id: foundWorksheet.releaseGood.id },
38
+ type: WORKSHEET_TYPE.VAS,
39
+ status: Not(Equal(WORKSHEET_STATUS.DONE))
40
+ }
41
+ })
42
+
43
+ let errMsg = []
44
+
45
+ // Stop to activate loading worksheet with Exception
46
+ // This resolver is being called from client side not from other resolver.
47
+ // So if there's a related worksheet, it should throw an Error to inform user about non-finished order.
48
+ if (relatedPickingWorksheetCnt) {
49
+ errMsg.push(`Picking Worksheet with RO: ${foundWorksheet.releaseGood.name} is still under processing.`)
50
+ }
51
+
52
+ if (relatedWorksheetCnt) {
53
+ errMsg.push(`Related VAS order with RO: ${foundWorksheet.releaseGood.name} is still under processing.`)
54
+ }
55
+
56
+ if (errMsg.length > 0) {
57
+ throw errMsg.join('')
58
+ }
59
+
60
+ return await activateLoading(tx, domain, user, worksheetNo, loadingWorksheetDetails)
61
+ }
62
+ }
63
+
64
+ export async function activateLoading(
65
+ tx: EntityManager,
66
+ domain: Domain,
67
+ user: User,
68
+ worksheetNo: string,
69
+ loadingWorksheetDetails: Partial<WorksheetDetail>[]
70
+ ): Promise<Worksheet> {
71
+ const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
72
+ return await worksheetController.activateLoading(worksheetNo, loadingWorksheetDetails)
73
+ }
@@ -0,0 +1,165 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
+ import { Bizplace, Company } from '@things-factory/biz-base'
5
+ import { FulfillmentCenter } from '@things-factory/integration-fulfillment'
6
+ import { Sftp, SftpAPI } from '@things-factory/integration-sftp'
7
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
8
+ import { Domain } from '@things-factory/shell'
9
+ import { InventoryItem } from '@things-factory/warehouse-base'
10
+
11
+ import { WORKSHEET_TYPE } from '../../../../constants'
12
+ import { LoadingWorksheetController, ReturningWorksheetController } from '../../../../controllers'
13
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
14
+
15
+ export const completeLoadingResolver = {
16
+ async completeLoading(_: any, { releaseGoodNo }, context: ResolverContext) {
17
+ const { tx, domain, user } = context.state
18
+ await completeLoading(tx, domain, user, releaseGoodNo)
19
+ }
20
+ }
21
+
22
+ export async function completeLoading(
23
+ tx: EntityManager,
24
+ domain: Domain,
25
+ user: User,
26
+ releaseGoodNo: string
27
+ ): Promise<void> {
28
+ const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
29
+ //@ts-ignore
30
+ const releaseGood: ReleaseGood = await worksheetController.findRefOrder(
31
+ //@ts-ignore
32
+ ReleaseGood,
33
+ {
34
+ domain: { id: domain.id },
35
+ name: releaseGoodNo,
36
+ status: ORDER_STATUS.LOADING
37
+ },
38
+ ['bizplace', 'bizplace.domain']
39
+ )
40
+ const worksheet: Worksheet = await worksheetController.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.LOADING, [
41
+ 'worksheetDetails',
42
+ 'worksheetDetails.targetInventory',
43
+ 'worksheetDetails.targetInventory.product'
44
+ ])
45
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
46
+ const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
47
+ const remainInventories: OrderInventory[] = targetInventories.filter(
48
+ (targetInventory: OrderInventory) => targetInventory.status === ORDER_INVENTORY_STATUS.LOADING
49
+ )
50
+
51
+ // Search Warehouse Company Domain
52
+ const warehouseCompanyBizplace: Bizplace = await tx
53
+ .getRepository(Bizplace)
54
+ .findOne({ where: { domain: { id: domain.id } }, relations: ['company'] })
55
+
56
+ const warehouseCompany: Company = warehouseCompanyBizplace.company
57
+ const warehouseBizplaces: Bizplace[] = await tx
58
+ .getRepository(Bizplace)
59
+ .find({ where: { company: { id: warehouseCompany.id } }, relations: ['domain'] })
60
+ const warehouseCompanyBizplaces: Bizplace[] = warehouseBizplaces.filter(biz => biz.domain.extType == 'company')
61
+ const warehouseCompanyDomain: Domain = warehouseCompanyBizplaces[0].domain
62
+
63
+ const orderSource: string = releaseGood.source
64
+ switch (orderSource) {
65
+ case ApplicationType.SFTP:
66
+ const customerDomain: Domain = releaseGood.bizplace.domain
67
+ const fulfillmentCenter: FulfillmentCenter = await tx
68
+ .getRepository(FulfillmentCenter)
69
+ .findOneBy({ domain: { id: warehouseCompanyDomain.id }, centerId: domain.subdomain, status: 'active' })
70
+
71
+ if (fulfillmentCenter) {
72
+ let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOneBy({
73
+ //@ts-ignore
74
+ where: {
75
+ domain: { id: customerDomain.id },
76
+ status: 'ACTIVE',
77
+ fulfillmentCenter: { id: fulfillmentCenter.id }
78
+ }
79
+ })
80
+ if (customerAvailableSftp) {
81
+ const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
82
+
83
+ let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
84
+ where: { domain: { id: domain.id }, outboundOrderId: releaseGood.id }
85
+ })
86
+
87
+ // if (responseFileTypes.enableShipment) {
88
+ // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
89
+ // releaseGood,
90
+ // orderInventories: targetInventories,
91
+ // sftp: customerAvailableSftp
92
+ // })
93
+ // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
94
+ // }
95
+
96
+ if (responseFileTypes.enableSerialNumber) {
97
+ let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
98
+ releaseGood,
99
+ inventoryItems,
100
+ sftp: customerAvailableSftp
101
+ })
102
+ customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
103
+ }
104
+ }
105
+ }
106
+ break
107
+
108
+ default:
109
+ break
110
+ }
111
+
112
+ // const customerDomain: Domain = releaseGood.bizplace.domain
113
+ // const fulfillmentCenter: FulfillmentCenter = await tx
114
+ // .getRepository(FulfillmentCenter)
115
+ // .findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
116
+
117
+ // if (fulfillmentCenter) {
118
+ // let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
119
+ // where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
120
+ // })
121
+ // if (customerAvailableSftp) {
122
+ // const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
123
+
124
+ // let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
125
+ // where: { domain, outboundOrderId: releaseGood.id }
126
+ // })
127
+
128
+ // // if (responseFileTypes.enableShipment) {
129
+ // // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
130
+ // // releaseGood,
131
+ // // orderInventories: targetInventories,
132
+ // // sftp: customerAvailableSftp
133
+ // // })
134
+ // // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
135
+ // // }
136
+
137
+ // if (responseFileTypes.enableSerialNumber) {
138
+ // let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
139
+ // releaseGood,
140
+ // inventoryItems,
141
+ // sftp: customerAvailableSftp
142
+ // })
143
+ // customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
144
+ // }
145
+ // }
146
+ // }
147
+
148
+ await worksheetController.completeLoading(releaseGoodNo)
149
+
150
+ if (remainInventories.length) {
151
+ await createReturnWorksheet(tx, domain, user, releaseGoodNo, remainInventories)
152
+ }
153
+ }
154
+
155
+ // Generating worksheet for returning process
156
+ export async function createReturnWorksheet(
157
+ tx: EntityManager,
158
+ domain: Domain,
159
+ user: User,
160
+ releaseGoodNo: string,
161
+ orderInventories: OrderInventory[]
162
+ ): Promise<Worksheet> {
163
+ const worksheetController: ReturningWorksheetController = new ReturningWorksheetController(tx, domain, user)
164
+ return await worksheetController.generateReturningWorksheet(releaseGoodNo, orderInventories)
165
+ }
@@ -0,0 +1,11 @@
1
+ import { activateLoadingResolver } from './activate-loading'
2
+ import { loadingResolver } from './loading'
3
+ import { undoLoadingResolver } from './undo-loading'
4
+ import { completeLoadingResolver } from './complete-loading'
5
+
6
+ export const Mutations = {
7
+ ...activateLoadingResolver,
8
+ ...loadingResolver,
9
+ ...undoLoadingResolver,
10
+ ...completeLoadingResolver
11
+ }
@@ -0,0 +1,46 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Bizplace } from '@things-factory/biz-base'
5
+ import { generateDeliveryOrder, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
6
+ import { Domain } from '@things-factory/shell'
7
+
8
+ import { LoadingWorksheetController, WorksheetController } from '../../../../controllers'
9
+ import { WorksheetDetail } from '../../../../entities'
10
+
11
+ export const loadingResolver = {
12
+ async loading(_: any, { loadedWorksheetDetails, releaseGoodNo, orderInfo }, context: ResolverContext) {
13
+ const { tx, domain, user } = context.state
14
+ const worksheetDetails = await loading(tx, domain, user, loadedWorksheetDetails, releaseGoodNo)
15
+ const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
16
+ //@ts-ignore
17
+ const releaseGood: ReleaseGood = await worksheetController.findRefOrder(
18
+ //@ts-ignore
19
+ ReleaseGood,
20
+ { domain, name: releaseGoodNo },
21
+ ['bizplace', 'deliverTo']
22
+ )
23
+
24
+ const loadingWorksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
25
+ let targetInventories: OrderInventory[] = worksheetDetails.map(itm => itm.targetInventory)
26
+
27
+ const bizplace: Bizplace = releaseGood.bizplace
28
+ orderInfo = {
29
+ ...orderInfo,
30
+ contactPointRefId: releaseGood.deliverTo?.id || null
31
+ }
32
+
33
+ await generateDeliveryOrder(orderInfo, targetInventories, bizplace, releaseGood, domain, user, tx)
34
+ }
35
+ }
36
+
37
+ export async function loading(
38
+ tx: EntityManager,
39
+ domain: Domain,
40
+ user: User,
41
+ worksheetDetails: Partial<WorksheetDetail & { loadedQty: number } & { toteName: string }>[],
42
+ releaseGoodNo: string
43
+ ): Promise<any> {
44
+ const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
45
+ return await worksheetController.loading(releaseGoodNo, worksheetDetails)
46
+ }
@@ -0,0 +1,25 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { DeliveryOrder } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { LoadingWorksheetController } from '../../../../controllers'
8
+
9
+ export const undoLoadingResolver = {
10
+ async undoLoading(_: any, { deliveryOrder, palletIds }, context: ResolverContext) {
11
+ const { tx, domain, user } = context.state
12
+ await undoLoading(tx, domain, user, deliveryOrder, palletIds)
13
+ }
14
+ }
15
+
16
+ export async function undoLoading(
17
+ tx: EntityManager,
18
+ domain: Domain,
19
+ user: User,
20
+ deliveryOrder: Partial<DeliveryOrder>,
21
+ palletIds: string[]
22
+ ): Promise<void> {
23
+ const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
24
+ await worksheetController.undoLoading(deliveryOrder, palletIds)
25
+ }
@@ -0,0 +1,150 @@
1
+ import { Equal, In, Not, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import {
4
+ ORDER_INVENTORY_STATUS,
5
+ ORDER_STATUS,
6
+ OrderInventory,
7
+ OrderTote,
8
+ OrderToteItem,
9
+ ReleaseGood
10
+ } from '@things-factory/sales-base'
11
+ import { getRepository } from '@things-factory/shell'
12
+ import { Inventory, Location } from '@things-factory/warehouse-base'
13
+
14
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
15
+ import { Worksheet, WorksheetDetail } from '../../../entities'
16
+ import { fetchExecutingWorksheet } from '../../../utils'
17
+
18
+ export const loadingWorksheetResolver = {
19
+ async loadingWorksheet(_: any, { releaseGoodNo }, context: ResolverContext) {
20
+ const { domain } = context.state
21
+ let releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({
22
+ where: { domain: { id: domain.id }, name: releaseGoodNo /*status: ORDER_STATUS.LOADING*/ },
23
+ relations: ['bizplace', 'deliverTo', 'deliverTo.bizplace']
24
+ })
25
+
26
+ // Find Release Order based on Bin
27
+ if (!releaseGood) {
28
+ const binLocation: Location = await getRepository(Location).findOne({
29
+ where: { domain: { id: domain.id }, name: releaseGoodNo }
30
+ })
31
+
32
+ const qb: SelectQueryBuilder<OrderInventory> = getRepository(OrderInventory).createQueryBuilder('orderInventory')
33
+ qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')
34
+ .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
35
+ .innerJoinAndSelect('bizplace.domain', 'domain')
36
+ .where('orderInventory.domain_id = :domainId', { domainId: domain.id })
37
+ .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
38
+ orderInventoryStatus: [ORDER_INVENTORY_STATUS.LOADING, ORDER_INVENTORY_STATUS.LOADED]
39
+ })
40
+ .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
41
+ .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.LOADING })
42
+
43
+ const orderInventoryByBin = await qb.getOne()
44
+
45
+ if (orderInventoryByBin?.releaseGood) {
46
+ releaseGoodNo = orderInventoryByBin.releaseGood.name
47
+ releaseGood = orderInventoryByBin.releaseGood
48
+ }
49
+ }
50
+
51
+ if (!releaseGood) throw new Error(`Release good doesn't exists.`)
52
+
53
+ //@ts-ignore
54
+ let [orderTotes, orderTotesTotal]: OrderTote = await getRepository(OrderTote).findAndCount({
55
+ where: { releaseGood: { id: releaseGood.id } }
56
+ })
57
+
58
+ const foundWorksheet: Worksheet = await fetchExecutingWorksheet(
59
+ domain,
60
+ releaseGood.bizplace,
61
+ ['bizplace', 'worksheetDetails'],
62
+ WORKSHEET_TYPE.LOADING,
63
+ releaseGood
64
+ )
65
+ let foundWSD: any[] = await getRepository(WorksheetDetail).find({
66
+ where: {
67
+ domain: { id: domain.id },
68
+ worksheet: { id: foundWorksheet.id },
69
+ type: WORKSHEET_TYPE.LOADING,
70
+ status: Not(Equal(WORKSHEET_STATUS.DONE))
71
+ },
72
+ relations: [
73
+ 'targetInventory',
74
+ 'targetInventory.orderProduct',
75
+ 'targetInventory.inventory',
76
+ 'targetInventory.inventory.location',
77
+ 'targetInventory.inventory.product'
78
+ ]
79
+ })
80
+
81
+ if (orderTotesTotal > 0) {
82
+ //@ts-ignore
83
+ let [toteItems, toteItemsTotal]: OrderToteItem = await getRepository(OrderToteItem).findAndCount({
84
+ where: { orderTote: { id: In(orderTotes.map(itm => itm.id)) } },
85
+ relations: ['orderTote', 'orderInventory']
86
+ })
87
+
88
+ let toteWsd = []
89
+
90
+ for (let i = 0; i < toteItemsTotal; i++) {
91
+ let wsdIndex = foundWSD.findIndex(
92
+ itm => !itm?.toteName && itm.targetInventory.id == toteItems[i].orderInventory.id
93
+ )
94
+
95
+ if (wsdIndex >= 0) {
96
+ let filterWSD: any = JSON.parse(JSON.stringify(foundWSD[wsdIndex]))
97
+ let uomValue =
98
+ Math.round((filterWSD.targetInventory.releaseUomValue / filterWSD.targetInventory.releaseQty) * 100) / 100
99
+
100
+ foundWSD[wsdIndex].targetInventory.releaseQty -= toteItems[i].qty
101
+ foundWSD[wsdIndex].targetInventory.pickedQty -= toteItems[i].qty
102
+ foundWSD[wsdIndex].targetInventory.releaseUomValue = foundWSD[wsdIndex].targetInventory.releaseQty * uomValue
103
+
104
+ filterWSD.targetInventory.releaseQty = toteItems[i].qty
105
+ filterWSD.targetInventory.pickedQty = toteItems[i].qty
106
+ filterWSD.targetInventory.releaseUomValue = toteItems[i].qty * uomValue
107
+ filterWSD.toteName = toteItems[i].orderTote.name
108
+ toteWsd.push(filterWSD)
109
+ }
110
+ }
111
+
112
+ foundWSD = foundWSD.concat(toteWsd)
113
+ foundWSD.sort((a, b) => (a.toteName > b.toteName ? 1 : -1))
114
+ }
115
+
116
+ let worksheetDetailInfos = foundWSD
117
+ .filter(itm => itm.targetInventory.releaseQty > 0)
118
+ .map((loadingWSD: any) => {
119
+ const targetInventory: OrderInventory = loadingWSD.targetInventory
120
+ const inventory: Inventory = targetInventory.inventory
121
+ return {
122
+ name: loadingWSD.name,
123
+ palletId: inventory.palletId,
124
+ batchId: inventory.batchId,
125
+ batchIdRef: inventory.batchIdRef,
126
+ product: inventory.product,
127
+ releaseQty: targetInventory.releaseQty,
128
+ releaseUomValue: targetInventory.releaseUomValue,
129
+ status: loadingWSD.status,
130
+ description: loadingWSD.description,
131
+ targetName: targetInventory.name,
132
+ packingType: inventory.packingType,
133
+ packingSize: inventory.packingSize,
134
+ inventory: targetInventory.inventory,
135
+ toteName: loadingWSD.toteName
136
+ }
137
+ })
138
+
139
+ return {
140
+ worksheetInfo: {
141
+ releaseGood,
142
+ bizplaceName: releaseGood.bizplace.name,
143
+ startedAt: foundWorksheet.startedAt,
144
+ refNo: releaseGood.refNo,
145
+ ownCollection: releaseGood.ownTransport
146
+ },
147
+ worksheetDetailInfos
148
+ }
149
+ }
150
+ }