@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,36 @@
1
+ import { SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { OrderInventory as OrderInventoryEntity, ReleaseGood as ReleaseGoodEntity } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { Worksheet as WorksheetEntity, WorksheetDetail as WorksheetDetailEntity } from '../../../entities'
7
+
8
+ export const findReleaseOrdersByTaskNoResolver = {
9
+ async findReleaseOrdersByTaskNo(_: any, { taskNo }, context: ResolverContext) {
10
+ const { domain, tx } = context.state
11
+ let task = await tx.getRepository(WorksheetEntity).findOne({
12
+ where: { taskNo }
13
+ })
14
+
15
+ if (!task) throw new Error('Unable to find task no.')
16
+
17
+ const qb: SelectQueryBuilder<WorksheetEntity> = tx
18
+ .getRepository(WorksheetEntity)
19
+ .createQueryBuilder('ws')
20
+ .select('rg.id as id')
21
+ .addSelect('rg.name as name')
22
+ .addSelect('rg.status as status')
23
+ .innerJoin(Domain, 'domain', 'ws.domain_id = domain.id')
24
+ .innerJoin(WorksheetDetailEntity, 'wsd', 'ws.id = wsd.worksheet_id')
25
+ .innerJoin(OrderInventoryEntity, 'oi', 'oi.id = wsd.target_inventory_id')
26
+ .innerJoin(ReleaseGoodEntity, 'rg', 'rg.id = oi.release_good_id')
27
+ .where('domain.id = :domainId', { domainId: domain.id })
28
+ .andWhere('ws.taskNo = :taskNo', { taskNo: taskNo })
29
+ .groupBy('rg.id')
30
+ .addGroupBy('rg.name')
31
+ .addGroupBy('rg.status')
32
+
33
+ const releaseGoods: ReleaseGoodEntity[] = await qb.getRawMany()
34
+ return { releaseGoods, taskNo }
35
+ }
36
+ }
@@ -0,0 +1,29 @@
1
+ import { SelectQueryBuilder } from 'typeorm'
2
+
3
+ //@ts-ignore
4
+ import { ReleaseGood as ReleaseGoodEntity, Worksheet as WorksheetEntity } from '@things-factory/sales-base'
5
+
6
+ export const findReleaseOrderByWorksheetNoResolver = {
7
+ async findReleaseOrderByWorksheetNo(_: any, { batchWorksheetNo }, context: ResolverContext) {
8
+ const { domain, tx } = context.state
9
+ if (!batchWorksheetNo) throw new Error('Unable to find worksheet no.')
10
+
11
+ const qb: SelectQueryBuilder<WorksheetEntity> = tx
12
+ .getRepository(WorksheetEntity)
13
+ .createQueryBuilder('ws')
14
+ .select('rg.name')
15
+ .addSelect('rg.status')
16
+ .innerJoin('ws.domain', 'domain')
17
+ .innerJoin('ws.worksheetDetail', 'wsd')
18
+ .innerJoin('wsd.targetInventory', 'oi')
19
+ .innerJoin('oi.releaseGood', 'rg')
20
+ .where('ws.domain_id = :domainId', { domainId: domain.id })
21
+ .andWhere('ws.name = :worksheetNo', { worksheetNo: batchWorksheetNo })
22
+ .groupBy('rg.id')
23
+ .addGroupBy('rg.name')
24
+ .addGroupBy('rg.status')
25
+
26
+ const releaseGoods: ReleaseGoodEntity[] = await qb.getRawMany()
27
+ return releaseGoods
28
+ }
29
+ }
@@ -0,0 +1,80 @@
1
+ import { SelectQueryBuilder } from 'typeorm'
2
+
3
+ import {
4
+ ORDER_INVENTORY_STATUS,
5
+ ORDER_STATUS,
6
+ OrderInventory as OrderInventoryEntity,
7
+ ReleaseGood as ReleaseGoodEntity
8
+ } from '@things-factory/sales-base'
9
+ import { Domain } from '@things-factory/shell'
10
+ import { Location } from '@things-factory/warehouse-base'
11
+
12
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
13
+ import { Worksheet as WorksheetEntity, WorksheetDetail as WorksheetDetailEntity } from '../../../entities'
14
+
15
+ export const findSortingReleaseOrdersByTaskNoResolver = {
16
+ async findSortingReleaseOrdersByTaskNo(_: any, { taskNo }, context: ResolverContext) {
17
+ const { domain, tx } = context.state
18
+ let task = await tx.getRepository(WorksheetEntity).findOne({
19
+ where: { taskNo, status: WORKSHEET_STATUS.EXECUTING, type: WORKSHEET_TYPE.SORTING }
20
+ })
21
+
22
+ // Find Task based on Bin
23
+ if (!task) {
24
+ const binLocation: Location = await tx.getRepository(Location).findOne({
25
+ where: { domain: { id: domain.id }, name: taskNo }
26
+ })
27
+
28
+ const qb: SelectQueryBuilder<OrderInventoryEntity> = tx
29
+ .getRepository(OrderInventoryEntity)
30
+ .createQueryBuilder('orderInventory')
31
+
32
+ qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')
33
+ .innerJoinAndSelect('worksheets', 'ws', `orderInventory.ref_worksheet_id = ws.id AND ws.type = 'BATCH_PICKING'`)
34
+ .innerJoinAndSelect('worksheets', 'ws2', `ws2.task_no = ws.task_no AND ws2.type = 'SORTING'`)
35
+ .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
36
+ .innerJoinAndSelect('bizplace.domain', 'domain')
37
+ .where('orderInventory.domain_id = :domainId', { domainId: domain.id })
38
+ .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
39
+ orderInventoryStatus: [ORDER_INVENTORY_STATUS.SORTING]
40
+ })
41
+ .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
42
+ .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.SORTING })
43
+
44
+ const orderInventoryByBin = await qb.getRawOne()
45
+ if (orderInventoryByBin?.releaseGood_id) {
46
+ taskNo = orderInventoryByBin.ws_task_no
47
+ task = await tx.getRepository(WorksheetEntity).findOne({
48
+ where: { taskNo, status: WORKSHEET_STATUS.EXECUTING, type: WORKSHEET_TYPE.SORTING }
49
+ })
50
+ } else {
51
+ throw new Error(`Bin do not have any batch picking order.`)
52
+ }
53
+ }
54
+
55
+ if (!task) throw new Error('Unable to find task no.')
56
+
57
+ const qb: SelectQueryBuilder<WorksheetEntity> = tx
58
+ .getRepository(WorksheetEntity)
59
+ .createQueryBuilder('ws')
60
+ .select('rg.id as id')
61
+ .addSelect('rg.name as name')
62
+ .addSelect('rg.status as status')
63
+ .innerJoin(Domain, 'domain', 'ws.domain_id = domain.id')
64
+ .innerJoin(WorksheetDetailEntity, 'wsd', 'ws.id = wsd.worksheet_id')
65
+ .innerJoin(OrderInventoryEntity, 'oi', 'oi.id = wsd.target_inventory_id')
66
+ .innerJoin(ReleaseGoodEntity, 'rg', 'rg.id = oi.release_good_id')
67
+ .where('domain.id = :domainId', { domainId: domain.id })
68
+ .andWhere('ws.taskNo = :taskNo', { taskNo: taskNo })
69
+ .andWhere('ws.type = :worksheetType', { worksheetType: WORKSHEET_TYPE.SORTING })
70
+ .andWhere('ws.status = :worksheetStatus', { worksheetStatus: WORKSHEET_STATUS.EXECUTING })
71
+ .andWhere('rg.status = :roStatus', { roStatus: ORDER_STATUS.SORTING })
72
+ .groupBy('rg.id')
73
+ .addGroupBy('rg.name')
74
+ .addGroupBy('rg.status')
75
+ .orderBy('rg.createdAt', 'ASC')
76
+
77
+ const releaseGoods: ReleaseGoodEntity[] = await qb.getRawMany()
78
+ return { releaseGoods, taskNo }
79
+ }
80
+ }
@@ -0,0 +1,100 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ArrivalNotice } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { PickingWorksheetController, UnloadingWorksheetController } from '../../../../controllers'
8
+ import { Worksheet } from '../../../../entities'
9
+
10
+ export const generateArrivalNoticeWorksheetResolver = {
11
+ async generateArrivalNoticeWorksheet(_: any, { arrivalNoticeNos, bufferLocation }, context: ResolverContext) {
12
+ const { tx, domain, user } = context.state
13
+ /* REVIEW ME --
14
+ return await generateArrivalNoticeWorksheet(tx, domain, user, arrivalNoticeNo, bufferLocation)
15
+ */
16
+
17
+ await Promise.all(
18
+ arrivalNoticeNos.map(async arrivalNoticeNo => {
19
+ try {
20
+ let unloadingWorksheet = await generateUnloadingWorksheet(tx, domain, user, arrivalNoticeNo, bufferLocation)
21
+
22
+ if (!unloadingWorksheet.arrivalNotice?.id) {
23
+ unloadingWorksheet = await tx.getRepository(Worksheet).findOne({
24
+ where: { id: unloadingWorksheet.id },
25
+ relations: ['arrivalNotice']
26
+ })
27
+ }
28
+
29
+ let arrivalNotice: ArrivalNotice = unloadingWorksheet.arrivalNotice
30
+ const crossDocking: boolean = unloadingWorksheet.arrivalNotice.crossDocking
31
+
32
+ if (crossDocking) {
33
+ arrivalNotice = await tx
34
+ .getRepository(ArrivalNotice)
35
+ .findOne({ where: { domain: { id: domain.id }, name: arrivalNoticeNo }, relations: ['releaseGood'] })
36
+
37
+ const releaseGoodNo: string = arrivalNotice.releaseGood.name
38
+ const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
39
+ await pickingWSCtrl.generatePickingWorksheet(releaseGoodNo)
40
+ }
41
+
42
+ const vasWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
43
+ where: { domain: { id: domain.id }, arrivalNotice: { id: arrivalNotice.id } }
44
+ })
45
+
46
+ return { unloadingWorksheet, vasWorksheet }
47
+ } catch (e) {
48
+ throw new Error(e)
49
+ }
50
+ })
51
+ )
52
+ }
53
+ }
54
+
55
+ export async function generateArrivalNoticeWorksheet(
56
+ tx: EntityManager,
57
+ domain: Domain,
58
+ user: User,
59
+ arrivalNoticeNo: string,
60
+ bufferLocation: { id: string }
61
+ ) {
62
+ let unloadingWorksheet = await generateUnloadingWorksheet(tx, domain, user, arrivalNoticeNo, bufferLocation)
63
+
64
+ if (!unloadingWorksheet.arrivalNotice?.id) {
65
+ unloadingWorksheet = await tx.getRepository(Worksheet).findOne({
66
+ where: { id: unloadingWorksheet.id },
67
+ relations: ['arrivalNotice']
68
+ })
69
+ }
70
+
71
+ let arrivalNotice: ArrivalNotice = unloadingWorksheet.arrivalNotice
72
+ const crossDocking: boolean = unloadingWorksheet.arrivalNotice.crossDocking
73
+
74
+ if (crossDocking) {
75
+ arrivalNotice = await tx
76
+ .getRepository(ArrivalNotice)
77
+ .findOne({ where: { domain: { id: domain.id }, name: arrivalNoticeNo }, relations: ['releaseGood'] })
78
+
79
+ const releaseGoodNo: string = arrivalNotice.releaseGood.name
80
+ const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
81
+ await pickingWSCtrl.generatePickingWorksheet(releaseGoodNo)
82
+ }
83
+
84
+ const vasWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
85
+ where: { domain: { id: domain.id }, arrivalNotice: { id: arrivalNotice.id } }
86
+ })
87
+
88
+ return { unloadingWorksheet, vasWorksheet }
89
+ }
90
+
91
+ async function generateUnloadingWorksheet(
92
+ tx: EntityManager,
93
+ domain: Domain,
94
+ user: User,
95
+ arrivalNoticeNo: string,
96
+ bufferLocation: { id: string }
97
+ ): Promise<Worksheet> {
98
+ const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
99
+ return await worksheetController.generateUnloadingWorksheet(arrivalNoticeNo, bufferLocation.id)
100
+ }
@@ -0,0 +1,26 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ //@ts-ignore
5
+ import { GenerateBatchPickInfo } from '@things-factory/sales-base'
6
+ import { Domain } from '@things-factory/shell'
7
+
8
+ import { PickingWorksheetController } from '../../../../controllers/'
9
+ import { Worksheet } from '../../../../entities'
10
+
11
+ export const generateBatchPickingWorksheetResolver = {
12
+ async generateBatchPickingWorksheet(_: any, { releaseGoodWithBiz }, context: ResolverContext) {
13
+ const { tx, domain, user } = context.state
14
+ return await generateBatchPickingWorksheet(tx, domain, user, releaseGoodWithBiz)
15
+ }
16
+ }
17
+
18
+ export async function generateBatchPickingWorksheet(
19
+ tx: EntityManager,
20
+ domain: Domain,
21
+ user: User,
22
+ releaseGoodWithBiz: [[GenerateBatchPickInfo]]
23
+ ): Promise<Worksheet[]> {
24
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
25
+ return await worksheetController.generateBatchPickingWorksheet(releaseGoodWithBiz)
26
+ }
@@ -0,0 +1,51 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { OrderInventory } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { CycleCountWorksheetController } from '../../../../controllers'
8
+ import { Worksheet } from '../../../../entities'
9
+
10
+ export const generateCycleCountWorksheetResolver = {
11
+ async generateCycleCountWorksheet(
12
+ _: any,
13
+ { executionDate, customerId, orderInventoryIds, orderInventories, limit },
14
+ context: any
15
+ ) {
16
+ const { tx, domain, user } = context.state
17
+
18
+ const cycleCountWorksheet: Worksheet = await generateCycleCountWorksheet(
19
+ tx,
20
+ domain,
21
+ user,
22
+ executionDate,
23
+ customerId,
24
+ orderInventoryIds,
25
+ orderInventories,
26
+ limit
27
+ )
28
+
29
+ return cycleCountWorksheet
30
+ }
31
+ }
32
+
33
+ export async function generateCycleCountWorksheet(
34
+ tx: EntityManager,
35
+ domain: Domain,
36
+ user: User,
37
+ executionDate: string,
38
+ customerId: string,
39
+ orderInventoryIds: string[] = [],
40
+ orderInventories: OrderInventory[],
41
+ limit: number
42
+ ): Promise<Worksheet> {
43
+ const worksheetController: CycleCountWorksheetController = new CycleCountWorksheetController(tx, domain, user)
44
+ return await worksheetController.generateCycleCountWorksheet(
45
+ executionDate,
46
+ customerId,
47
+ orderInventoryIds,
48
+ orderInventories,
49
+ limit
50
+ )
51
+ }
@@ -0,0 +1,17 @@
1
+ import { getManager } from 'typeorm'
2
+
3
+ import { generatePickingWorksheet } from './generate-release-good-worksheet'
4
+
5
+ export const generateMultipleReleaseGoodWorksheetResolver = {
6
+ async generateMultipleReleaseGoodWorksheet(_: any, { releaseGoods }, context: ResolverContext) {
7
+ const { tx, domain, user } = context.state
8
+
9
+ for (let idx = 0; idx < releaseGoods.length; idx++) {
10
+ await getManager().transaction(async txMgr => {
11
+ await generatePickingWorksheet(txMgr, domain, user, releaseGoods[idx].name, releaseGoods[idx].status)
12
+ })
13
+ }
14
+
15
+ return true
16
+ }
17
+ }
@@ -0,0 +1,69 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ReturnOrder } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { Inventory } from '@things-factory/warehouse-base'
7
+
8
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
9
+ import { PutawayReturningWorksheetController } from '../../../../controllers'
10
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
11
+
12
+ export const generatePartialPutawayReturnWorksheetResolver = {
13
+ async generatePartialPutawayReturnWorksheet(
14
+ _: any,
15
+ { returnOrderNo, inventories },
16
+ context: ResolverContext
17
+ ): Promise<void> {
18
+ const { tx, domain, user } = context.state
19
+ let worksheet: Worksheet = await generatePartialPutawayReturnWorksheet(tx, domain, user, returnOrderNo, inventories)
20
+
21
+ if (!worksheet?.returnOrder?.id) {
22
+ worksheet = await tx.getRepository(Worksheet).findOne({
23
+ where: { id: worksheet.id },
24
+ relations: ['returnOrder']
25
+ })
26
+ }
27
+
28
+ const returnOrder: ReturnOrder = worksheet.returnOrder
29
+ const unloadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
30
+ where: { returnOrder: { id: returnOrder.id }, type: WORKSHEET_TYPE.UNLOADING_RETURN },
31
+ relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
32
+ })
33
+
34
+ const remainPalletCnt: number = await tx.getRepository(Inventory).count({
35
+ where: {
36
+ domain: { id: domain.id },
37
+ refOrderId: returnOrder.id,
38
+ status: WORKSHEET_STATUS.PARTIALLY_UNLOADED
39
+ }
40
+ })
41
+ const wsdStatus: string = remainPalletCnt >= 0 ? WORKSHEET_STATUS.PARTIALLY_UNLOADED : WORKSHEET_STATUS.EXECUTING
42
+
43
+ const worksheetDetails: WorksheetDetail[] = unloadingWorksheet.worksheetDetails
44
+ // const nonStartedWorksheetDetails: WorksheetDetail[] = worksheetDetails
45
+ // .filter((wsd: WorksheetDetail) => wsd.targetInventory?.inventory?.status !== INVENTORY_STATUS.PARTIALLY_UNLOADED)
46
+ // .map((wsd: WorksheetDetail) => {
47
+ // wsd.status = wsdStatus
48
+ // wsd.updater = user
49
+ // return wsd
50
+ // })
51
+
52
+ // await tx.getRepository(WorksheetDetail).save(nonStartedWorksheetDetails)
53
+ }
54
+ }
55
+
56
+ export async function generatePartialPutawayReturnWorksheet(
57
+ tx: EntityManager,
58
+ domain: Domain,
59
+ user: User,
60
+ returnOrderNo: string,
61
+ inventories: Inventory[]
62
+ ): Promise<Worksheet> {
63
+ const worksheetController: PutawayReturningWorksheetController = new PutawayReturningWorksheetController(
64
+ tx,
65
+ domain,
66
+ user
67
+ )
68
+ return await worksheetController.generatePutawayReturnWorksheet(returnOrderNo, inventories)
69
+ }
@@ -0,0 +1,65 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ArrivalNotice } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { Inventory } from '@things-factory/warehouse-base'
7
+
8
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
9
+ import { PutawayWorksheetController } from '../../../../controllers'
10
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
11
+
12
+ export const generatePartialPutawayWorksheetResolver = {
13
+ async generatePartialPutawayWorksheet(
14
+ _: any,
15
+ { arrivalNoticeNo, inventories },
16
+ context: ResolverContext
17
+ ): Promise<void> {
18
+ const { tx, domain, user } = context.state
19
+ let worksheet: Worksheet = await generatePartialPutawayWorksheet(tx, domain, user, arrivalNoticeNo, inventories)
20
+
21
+ if (!worksheet?.arrivalNotice?.id) {
22
+ worksheet = await tx.getRepository(Worksheet).findOne({
23
+ where: { id: worksheet.id },
24
+ relations: ['arrivalNotice']
25
+ })
26
+ }
27
+
28
+ const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice
29
+ const unloadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
30
+ where: { arrivalNotice: { id: arrivalNotice.id }, type: WORKSHEET_TYPE.UNLOADING },
31
+ relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
32
+ })
33
+
34
+ const remainPalletCnt: number = await tx.getRepository(Inventory).count({
35
+ where: {
36
+ domain: { id: domain.id },
37
+ refOrderId: arrivalNotice.id,
38
+ status: WORKSHEET_STATUS.PARTIALLY_UNLOADED
39
+ }
40
+ })
41
+ const wsdStatus: string = remainPalletCnt >= 0 ? WORKSHEET_STATUS.PARTIALLY_UNLOADED : WORKSHEET_STATUS.EXECUTING
42
+
43
+ const worksheetDetails: WorksheetDetail[] = unloadingWorksheet.worksheetDetails
44
+ // const nonStartedWorksheetDetails: WorksheetDetail[] = worksheetDetails
45
+ // .filter((wsd: WorksheetDetail) => wsd.targetInventory?.inventory?.status !== INVENTORY_STATUS.PARTIALLY_UNLOADED)
46
+ // .map((wsd: WorksheetDetail) => {
47
+ // wsd.status = wsdStatus
48
+ // wsd.updater = user
49
+ // return wsd
50
+ // })
51
+
52
+ // await tx.getRepository(WorksheetDetail).save(nonStartedWorksheetDetails)
53
+ }
54
+ }
55
+
56
+ export async function generatePartialPutawayWorksheet(
57
+ tx: EntityManager,
58
+ domain: Domain,
59
+ user: User,
60
+ arrivalNoticeNo: string,
61
+ inventories: Inventory[]
62
+ ): Promise<Worksheet> {
63
+ const worksheetController: PutawayWorksheetController = new PutawayWorksheetController(tx, domain, user)
64
+ return await worksheetController.generatePutawayWorksheet(arrivalNoticeNo, inventories)
65
+ }
@@ -0,0 +1,54 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ArrivalNotice } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
7
+
8
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
9
+ import { PutawayWorksheetController } from '../../../../controllers'
10
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
11
+
12
+ export const generatePutawayWorksheetResolver = {
13
+ async generatePutawayWorksheet(_: any, { arrivalNoticeNo, inventories }, context: ResolverContext): Promise<void> {
14
+ const { tx, domain, user } = context.state
15
+ let worksheet: Worksheet = await generatePutawayWorksheet(tx, domain, user, arrivalNoticeNo, inventories)
16
+
17
+ if (!worksheet.arrivalNotice?.id) {
18
+ worksheet = await tx.getRepository(Worksheet).findOne({
19
+ where: { id: worksheet.id },
20
+ relations: ['arrivalNotice']
21
+ })
22
+ }
23
+
24
+ // Find whether there's partially unloaded and not started inventories
25
+ // to execute it automatically.
26
+ const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice
27
+ const unloadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
28
+ where: { arrivalNotice: { id: arrivalNotice.id }, type: WORKSHEET_TYPE.UNLOADING },
29
+ relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
30
+ })
31
+ const worksheetDetails: WorksheetDetail[] = unloadingWorksheet.worksheetDetails
32
+ const nonStartedWorksheetDetails: WorksheetDetail[] = worksheetDetails
33
+ .filter((wsd: WorksheetDetail) => wsd.targetInventory?.inventory?.status !== INVENTORY_STATUS.PARTIALLY_UNLOADED)
34
+ .map((wsd: WorksheetDetail) => {
35
+ wsd.status = WORKSHEET_STATUS.EXECUTING
36
+ wsd.updater = user
37
+
38
+ return wsd
39
+ })
40
+
41
+ await tx.getRepository(WorksheetDetail).save(nonStartedWorksheetDetails)
42
+ }
43
+ }
44
+
45
+ export async function generatePutawayWorksheet(
46
+ tx: EntityManager,
47
+ domain: Domain,
48
+ user: User,
49
+ arrivalNoticeNo: string,
50
+ inventories: Inventory[]
51
+ ): Promise<Worksheet> {
52
+ const worksheetController: PutawayWorksheetController = new PutawayWorksheetController(tx, domain, user)
53
+ return await worksheetController.generatePutawayWorksheet(arrivalNoticeNo, inventories)
54
+ }
@@ -0,0 +1,114 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
5
+ import { Setting } from '@things-factory/setting-base'
6
+ import { Domain } from '@things-factory/shell'
7
+ import { Inventory, INVENTORY_TRANSACTION_TYPE, InventoryUtil } from '@things-factory/warehouse-base'
8
+
9
+ import { PickingWorksheetController } from '../../../../controllers/'
10
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
11
+
12
+ export const generateReleaseGoodWorksheetResolver = {
13
+ async generateReleaseGoodWorksheet(_: any, { releaseGoodNo, currentStatus = null }, context: ResolverContext) {
14
+ const { tx, domain, user } = context.state
15
+ return await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus)
16
+ }
17
+ }
18
+
19
+ export async function generatePickingWorksheet(
20
+ tx: EntityManager,
21
+ domain: Domain,
22
+ user: User,
23
+ releaseGoodNo: string,
24
+ currentStatus: string = null
25
+ ): Promise<Worksheet> {
26
+ try {
27
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
28
+
29
+ //@ts-ignore
30
+ let releaseGood: ReleaseGood = await worksheetController.findRefOrder(ReleaseGood, {
31
+ domain: { id: domain.id },
32
+ name: releaseGoodNo,
33
+ status: ORDER_STATUS.PENDING_WORKSHEET
34
+ })
35
+
36
+ let worksheet: Worksheet = new Worksheet()
37
+
38
+ const directReleaseOrder: Setting = await tx.getRepository(Setting).findOne({
39
+ where: { domain: { id: domain.id }, category: 'id-rule', name: 'enable-direct-b2c-release-order' }
40
+ })
41
+
42
+ if (releaseGood.type == 'b2c' && directReleaseOrder && directReleaseOrder.value.toLowerCase() == 'true') {
43
+ const inventoryUtil = new InventoryUtil(tx, domain, user)
44
+
45
+ let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
46
+ where: { domain: { id: domain.id }, releaseGood: { id: releaseGood.id } },
47
+ relations: ['inventory']
48
+ })
49
+
50
+ for (let idx = 0; idx < orderInventories.length; idx++) {
51
+ let orderInventory = orderInventories[idx]
52
+ //@ts-ignore
53
+ if (orderInventory.releaseQty <= 0 || (orderInventory.uomValue != null && orderInventory.uomValue <= 0)) {
54
+ throw new Error(`Invalid data for ${releaseGoodNo}. Please contact support.`)
55
+ }
56
+ //@ts-ignore
57
+ orderInventory.uomValue = orderInventory.uomValue > 0 ? orderInventory.uomValue : 0
58
+
59
+ let inventory: Inventory = await tx
60
+ .getRepository(Inventory)
61
+ .findOne({ where: { id: orderInventory.inventory.id } })
62
+
63
+ await inventoryUtil.transactionInventory(
64
+ {
65
+ id: inventory.id,
66
+ qty: inventory.qty - orderInventory.releaseQty,
67
+ uomValue: Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100,
68
+ lockedQty: inventory.lockedQty - orderInventory.releaseQty,
69
+ lockedUomValue: Math.round((inventory.lockedUomValue - orderInventory.releaseUomValue) * 100) / 100
70
+ } as any,
71
+ releaseGood,
72
+ -orderInventory.releaseQty,
73
+ -orderInventory.releaseUomValue,
74
+ INVENTORY_TRANSACTION_TYPE.DIRECT_DEDUCTION
75
+ )
76
+
77
+ await tx
78
+ .getRepository(OrderInventory)
79
+ .update({ id: orderInventory.id }, { status: ORDER_INVENTORY_STATUS.TERMINATED })
80
+ }
81
+
82
+ await tx.getRepository(ReleaseGood).update({ id: releaseGood.id }, { status: ORDER_STATUS.DONE })
83
+ } else {
84
+ worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo, currentStatus)
85
+ }
86
+
87
+ return worksheet
88
+ } catch (error) {
89
+ return new Worksheet()
90
+ }
91
+ }
92
+
93
+ /**
94
+ * @description This function will generate picking worksheet detail
95
+ * If you call this function without specified status, status will be set as DEACTIVATED
96
+ *
97
+ * @param {EntityManager} tx
98
+ * @param {Domain} domain
99
+ * @param {Bizplace} bizplace
100
+ * @param {User} user
101
+ * @param {Worksheet} worksheet
102
+ * @param {OrderInventory} targetInventory
103
+ * @param {String} status
104
+ */
105
+ export async function generatePickingWorksheetDetail(
106
+ tx: EntityManager,
107
+ domain: Domain,
108
+ user: User,
109
+ worksheet: Worksheet,
110
+ targetInventory: Partial<OrderInventory>[]
111
+ ): Promise<WorksheetDetail[]> {
112
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
113
+ return await worksheetController.generatePickingWorksheetDetail(worksheet, targetInventory)
114
+ }