@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,259 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import {
5
+ ORDER_INVENTORY_STATUS,
6
+ ORDER_PRODUCT_STATUS,
7
+ ORDER_TYPES,
8
+ OrderInventory,
9
+ OrderInventoryPatch,
10
+ OrderNoGenerator,
11
+ OrderProduct,
12
+ ReleaseGood
13
+ } from '@things-factory/sales-base'
14
+ import { Setting } from '@things-factory/setting-base'
15
+ import { Domain } from '@things-factory/shell'
16
+ import { getInventoriesByStrategy, Inventory } from '@things-factory/warehouse-base'
17
+
18
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
19
+ import { Worksheet, WorksheetDetail } from '../../../entities'
20
+ import { WorksheetNoGenerator } from '../../../utils'
21
+
22
+ export const generatePickingWorksheetDetailsResolver = {
23
+ async generatePickingWorksheetDetails(
24
+ _: any,
25
+ { bizplaceId, selectedItems, worksheetNo, locationSortingRules },
26
+ context: any
27
+ ): Promise<Boolean> {
28
+ const { tx, user, domain } = context.state
29
+
30
+ // 1. find related worksheet
31
+ const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
32
+ where: { name: worksheetNo, status: WORKSHEET_STATUS.DEACTIVATED, domain: { id: domain.id } },
33
+ relations: ['releaseGood']
34
+ })
35
+
36
+ if (!worksheet) throw new Error('picking worksheet not found')
37
+ const worksheetId = worksheet.id
38
+
39
+ // 2. search for sorting rules
40
+ const inventoryAssignmentSetting: Setting = await tx.getRepository(Setting).findOne({
41
+ where: { domain: { id: domain.id }, name: 'rule-for-inventory-assignment' }
42
+ })
43
+
44
+ if (!locationSortingRules && inventoryAssignmentSetting) {
45
+ locationSortingRules = []
46
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value)
47
+ for (const key in locationSetting) {
48
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })
49
+ }
50
+ }
51
+
52
+ try {
53
+ // 3. get all related inventories by strategy
54
+ let inventories: any[] = await getInventoriesByStrategy(
55
+ domain.id,
56
+ bizplaceId,
57
+ worksheetId,
58
+ selectedItems,
59
+ locationSortingRules,
60
+ tx
61
+ )
62
+
63
+ // 4. get worksheet details
64
+ let worksheetDetails: WorksheetDetail[] = selectedItems.reduce(
65
+ (accWSD: WorksheetDetail[], oi: OrderInventoryPatch) => {
66
+ const relatedInventories = inventories.filter(
67
+ inv =>
68
+ inv.productId == oi.productId &&
69
+ inv.batchId == oi.batchId &&
70
+ inv.packingType == oi.packingType &&
71
+ inv.packingSize == oi.packingSize &&
72
+ inv.uom == oi.uom &&
73
+ inv.remainQty
74
+ )
75
+
76
+ if (
77
+ relatedInventories.length &&
78
+ oi.releaseQty <= inventories.reduce((totalQty: number, inv) => totalQty + inv.remainQty, 0)
79
+ ) {
80
+ let composedWSD: WorksheetDetail[] = _composeWorksheetDetails(
81
+ domain,
82
+ user,
83
+ worksheet.releaseGood,
84
+ bizplaceId,
85
+ oi,
86
+ relatedInventories
87
+ )
88
+
89
+ accWSD.push(...composedWSD)
90
+ }
91
+
92
+ return accWSD
93
+ },
94
+ []
95
+ )
96
+
97
+ //@ts-ignore
98
+ let targetInventories: OrderInventory = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
99
+
100
+ // 5. remove existing worksheet details and its target inventory if there's any
101
+ //@ts-ignore
102
+ await _removeOldWorksheetDetails(targetInventories, worksheet.id, tx)
103
+
104
+ targetInventories = await tx.getRepository(OrderInventory).save(targetInventories)
105
+
106
+ let newWorksheetDetails: WorksheetDetail[] = []
107
+
108
+ //@ts-ignore
109
+ for (let i = 0, l = targetInventories.length; i < l; i++) {
110
+ const targetInventory: OrderInventory = targetInventories[i]
111
+
112
+ // 6. update inventory lockedQty and lockedUomValue
113
+ await tx
114
+ .createQueryBuilder()
115
+ .update(Inventory)
116
+ .set({
117
+ lockedQty: () => `COALESCE("locked_qty", 0) + ${targetInventory.releaseQty}`,
118
+ lockedUomValue: () => `COALESCE("locked_uom_value", 0) + ${targetInventory.releaseUomValue}`,
119
+ updater: user
120
+ } as any)
121
+ .where('id = :id', { id: targetInventory.inventory.id })
122
+ .execute()
123
+
124
+ // update order product status to ASSIGNED
125
+ await tx.getRepository(OrderProduct).update({ id: targetInventory.orderProduct.id }, {
126
+ status: ORDER_PRODUCT_STATUS.ASSIGNED,
127
+ updater: user
128
+ } as any)
129
+
130
+ // 7. collect new worksheet details records
131
+ const worksheetDetail: WorksheetDetail = Object.assign(new WorksheetDetail(), {
132
+ domain,
133
+ bizplace: { id: bizplaceId },
134
+ worksheet,
135
+ name: WorksheetNoGenerator.pickingDetail(),
136
+ seq: 0,
137
+ targetInventory,
138
+ targetProduct: targetInventory.orderProduct,
139
+ type: WORKSHEET_TYPE.PICKING,
140
+ status: WORKSHEET_STATUS.DEACTIVATED,
141
+ creator: user,
142
+ updater: user
143
+ })
144
+
145
+ newWorksheetDetails.push(worksheetDetail)
146
+ }
147
+
148
+ // 8. save worksheet details
149
+ await tx.getRepository(WorksheetDetail).save(newWorksheetDetails)
150
+
151
+ return true
152
+ } catch (error) {
153
+ throw error
154
+ }
155
+ }
156
+ }
157
+
158
+ function _composeWorksheetDetails(
159
+ domain: Domain,
160
+ user: User,
161
+ releaseGood: ReleaseGood,
162
+ bizplaceId: string,
163
+ record: OrderInventoryPatch,
164
+ inventories: Inventory[]
165
+ ): WorksheetDetail[] {
166
+ let leftReleaseQty: number = record.releaseQty
167
+ let leftReleaseUomValue: number = record.releaseUomValue
168
+ let compReleaseQty: number = 0
169
+ let compReleaseUomValue: number = 0
170
+
171
+ let worksheetDetails: Partial<WorksheetDetail[]> = []
172
+ let idx = 0
173
+
174
+ while (compReleaseQty < record.releaseQty) {
175
+ const inv = inventories[idx]
176
+
177
+ if (!inv) break
178
+
179
+ let releaseQty: number = 0
180
+ let releaseUomValue: number = 0
181
+
182
+ if (inv.remainQty > leftReleaseQty) {
183
+ compReleaseQty += leftReleaseQty
184
+ compReleaseUomValue += leftReleaseUomValue
185
+ releaseQty = leftReleaseQty
186
+ releaseUomValue = leftReleaseUomValue
187
+ } else {
188
+ compReleaseQty += inv.remainQty
189
+ compReleaseUomValue += inv.remainUomValue
190
+ leftReleaseQty -= inv.remainQty
191
+ leftReleaseUomValue -= inv.remainUomValue
192
+ releaseQty = inv.remainQty
193
+ releaseUomValue = inv.remainUomValue
194
+ }
195
+
196
+ let worksheetDetail: WorksheetDetail = Object.assign(new WorksheetDetail(), {
197
+ targetInventory: {
198
+ domain,
199
+ bizplace: { id: bizplaceId },
200
+ name: OrderNoGenerator.orderInventory(),
201
+ releaseGood,
202
+ inventory: { id: inv.id },
203
+ product: { id: inv.productId },
204
+ batchId: inv.batchId,
205
+ batchIdRef: inv.batchIdRef,
206
+ packingType: inv.packingType,
207
+ packingSize: inv.packingSize,
208
+ releaseQty,
209
+ releaseUomValue,
210
+ creator: user,
211
+ updater: user,
212
+ status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
213
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
214
+ uom: record.uom,
215
+ orderProduct: { id: inv.orderProductId }
216
+ }
217
+ })
218
+
219
+ worksheetDetails.push(worksheetDetail)
220
+
221
+ idx++
222
+ }
223
+
224
+ return worksheetDetails
225
+ }
226
+
227
+ async function _removeOldWorksheetDetails(targetInventories: OrderInventory[], worksheetId: string, tx: EntityManager) {
228
+ let orderProductJson = JSON.stringify(
229
+ targetInventories.map((target: OrderInventory) => {
230
+ return {
231
+ product_id: target.product.id,
232
+ batch_id: target.batchId,
233
+ packing_type: target.packingType,
234
+ packing_size: target.packingSize
235
+ }
236
+ })
237
+ )
238
+
239
+ // get worksheetDetail IDs and their targetInventory IDs
240
+ let existingOIandWSD: WorksheetDetail[] = await tx.query(
241
+ `
242
+ SELECT wsd.id AS "worksheetDetailId", oi.id AS "orderInventoryId"
243
+ FROM order_inventories oi
244
+ INNER JOIN JSON_POPULATE_RECORDSET(NULL::order_products, $1) js ON oi.batch_id = js.batch_id
245
+ AND oi.product_id = js.product_id
246
+ AND oi.packing_type = js.packing_type
247
+ AND oi.packing_size = js.packing_size
248
+ LEFT JOIN worksheet_details wsd ON oi.id = wsd.target_inventory_id
249
+ WHERE oi.release_good_id = $2
250
+ `,
251
+ [orderProductJson, worksheetId]
252
+ )
253
+
254
+ // if found the records then delete, so that we can create new records
255
+ if (existingOIandWSD.length) {
256
+ await tx.getRepository(WorksheetDetail).delete(existingOIandWSD.map((wsd: any) => wsd.worksheetDetailId))
257
+ await tx.getRepository(OrderInventory).delete(existingOIandWSD.map((wsd: any) => wsd.orderInventoryId))
258
+ }
259
+ }
@@ -0,0 +1,142 @@
1
+ import { EntityManager, Equal } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Product } from '@things-factory/product-base'
5
+ import {
6
+ ORDER_INVENTORY_STATUS,
7
+ ORDER_PRODUCT_STATUS,
8
+ OrderInventory,
9
+ OrderNoGenerator,
10
+ OrderProduct
11
+ } from '@things-factory/sales-base'
12
+ import { Domain } from '@things-factory/shell'
13
+ import { Inventory } from '@things-factory/warehouse-base'
14
+
15
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
16
+ import { Worksheet, WorksheetDetail } from '../../../entities'
17
+ import { WorksheetNoGenerator } from '../../../utils'
18
+
19
+ export const generateReleaseGoodWorksheetDetailsResolver = {
20
+ async generateReleaseGoodWorksheetDetails(
21
+ _: any,
22
+ { worksheetNo, batchId, productId, packingType, packingSize, worksheetDetails },
23
+ context: any
24
+ ): Promise<void> {
25
+ const { tx, domain, user } = context.state
26
+ return await generateReleaseGoodWorksheetDetails(
27
+ tx,
28
+ domain,
29
+ user,
30
+ worksheetNo,
31
+ batchId,
32
+ productId,
33
+ packingType,
34
+ packingSize,
35
+ worksheetDetails
36
+ )
37
+ }
38
+ }
39
+
40
+ export async function generateReleaseGoodWorksheetDetails(
41
+ tx: EntityManager,
42
+ domain: Domain,
43
+ user: User,
44
+ worksheetNo: string,
45
+ batchId: string,
46
+ productId: string,
47
+ packingType: string,
48
+ packingSize: number,
49
+ worksheetDetails: Partial<WorksheetDetail>[]
50
+ ): Promise<void> {
51
+ // 1. Remove prev worksheet details if it's exists
52
+ const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
53
+ where: { name: worksheetNo, domain: { id: domain.id } },
54
+ relations: [
55
+ 'bizplace',
56
+ 'releaseGood',
57
+ 'worksheetDetails',
58
+ 'worksheetDetails.targetInventory',
59
+ 'worksheetDetails.targetInventory.product'
60
+ ]
61
+ })
62
+
63
+ const prevWSDs: WorksheetDetail[] = worksheet.worksheetDetails.filter((wsd: WorksheetDetail) => {
64
+ const targetInv: OrderInventory = wsd.targetInventory
65
+ if (targetInv.batchId === batchId && targetInv.product.id === productId && targetInv.packingType === packingType)
66
+ return wsd.id
67
+ })
68
+
69
+ // TODO: Delete order inventories
70
+ if (prevWSDs?.length) {
71
+ const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)
72
+ const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)
73
+ await tx.getRepository(WorksheetDetail).delete(wsdIds)
74
+ await tx.getRepository(OrderInventory).delete(prevOrderInvIds)
75
+ }
76
+
77
+ await Promise.all(
78
+ worksheetDetails.map(async (wsd: WorksheetDetail) => {
79
+ // 2. Create order inventory
80
+ let targetInventory: OrderInventory = wsd.targetInventory
81
+ const inventory: Inventory = await tx
82
+ .getRepository(Inventory)
83
+ .findOne({ where: { id: targetInventory.inventory.id } })
84
+
85
+ let targetProduct: OrderProduct = await tx
86
+ .getRepository(OrderProduct)
87
+ .findOne({ where: { id: Equal(wsd.targetProduct?.id) } })
88
+
89
+ targetInventory = await tx.getRepository(OrderInventory).save({
90
+ ...targetInventory,
91
+ domain,
92
+ bizplace: worksheet.bizplace,
93
+ name: OrderNoGenerator.orderInventory(),
94
+ releaseGood: worksheet.releaseGood,
95
+ inventory,
96
+ batchId,
97
+ batchIdRef: inventory.batchIdRef,
98
+ status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
99
+ product: await tx.getRepository(Product).findOneBy({ id: productId }),
100
+ packingType,
101
+ packingSize,
102
+ orderProduct: targetProduct,
103
+ creator: user,
104
+ updater: user
105
+ })
106
+
107
+ const currentLockedQty: any = inventory.lockedQty
108
+ const currentLockedUomValue: any = inventory.lockedUomValue
109
+
110
+ await tx.getRepository(Inventory).save({
111
+ ...targetInventory.inventory,
112
+ lockedQty: Boolean(currentLockedQty)
113
+ ? targetInventory.releaseQty + currentLockedQty
114
+ : targetInventory.releaseQty,
115
+ lockedUomValue: Boolean(currentLockedUomValue)
116
+ ? targetInventory.releaseUomValue + currentLockedUomValue
117
+ : targetInventory.releaseUomValue,
118
+ updater: user
119
+ })
120
+
121
+ // update order product status to ASSIGNED
122
+ await tx
123
+ .getRepository(OrderProduct)
124
+ .update({ id: targetProduct?.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user } as any)
125
+
126
+ // 3. Create worksheet details
127
+ await tx.getRepository(WorksheetDetail).save({
128
+ ...wsd,
129
+ domain,
130
+ bizplace: worksheet.bizplace,
131
+ worksheet,
132
+ name: WorksheetNoGenerator.pickingDetail(),
133
+ targetProduct,
134
+ targetInventory,
135
+ type: WORKSHEET_TYPE.PICKING,
136
+ status: WORKSHEET_STATUS.DEACTIVATED,
137
+ creator: user,
138
+ updater: user
139
+ })
140
+ })
141
+ )
142
+ }
@@ -0,0 +1,34 @@
1
+ import { checkProgressingPalletResolver } from './check-progressing-pallet'
2
+ import { createWorksheetDetail } from './create-worksheet-detail'
3
+ import { deleteWorksheetDetail } from './delete-worksheet-detail'
4
+ import { generateBatchPickingWorksheetDetailsResolver } from './generate-batch-picking-worksheet-details'
5
+ import { generateBatchPickingWorksheetDetailsByBulkResolver } from './generate-batch-picking-worksheet-details-by-bulk'
6
+ import { generateCartonIdResolver } from './generate-carton-id'
7
+ import { generatePalletIdResolver } from './generate-pallet-id'
8
+ import { generatePickingWorksheetDetailsResolver } from './generate-picking-worksheet-details'
9
+ import { generateReleaseGoodWorksheetDetailsResolver } from './generate-release-good-worksheet-details'
10
+ import { regenerateReleaseGoodWorksheetDetailsResolver } from './regenerate-release-good-worksheet-details'
11
+ import { updateWorksheetDetail } from './update-worksheet-detail'
12
+ import { worksheetDetailResolver } from './worksheet-detail'
13
+ import { worksheetDetailsResolver } from './worksheet-details'
14
+ import { worksheetDetailsByProductGroupResolver } from './worksheet-details-by-product-group'
15
+
16
+ export const Query = {
17
+ ...worksheetDetailsResolver,
18
+ ...worksheetDetailResolver,
19
+ ...worksheetDetailsByProductGroupResolver,
20
+ ...checkProgressingPalletResolver,
21
+ ...generatePalletIdResolver,
22
+ ...generateCartonIdResolver
23
+ }
24
+
25
+ export const Mutation = {
26
+ ...updateWorksheetDetail,
27
+ ...createWorksheetDetail,
28
+ ...deleteWorksheetDetail,
29
+ ...generateBatchPickingWorksheetDetailsResolver,
30
+ ...generateBatchPickingWorksheetDetailsByBulkResolver,
31
+ ...generatePickingWorksheetDetailsResolver,
32
+ ...generateReleaseGoodWorksheetDetailsResolver,
33
+ ...regenerateReleaseGoodWorksheetDetailsResolver
34
+ }
@@ -0,0 +1,165 @@
1
+ import { EntityManager, Repository } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Product } from '@things-factory/product-base'
5
+ import {
6
+ ORDER_INVENTORY_STATUS,
7
+ ORDER_PRODUCT_STATUS,
8
+ OrderInventory,
9
+ OrderNoGenerator,
10
+ OrderProduct
11
+ } from '@things-factory/sales-base'
12
+ import { Domain } from '@things-factory/shell'
13
+ import { Inventory } from '@things-factory/warehouse-base'
14
+
15
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
16
+ import { Worksheet, WorksheetDetail } from '../../../entities'
17
+ import { WorksheetNoGenerator } from '../../../utils'
18
+
19
+ export const regenerateReleaseGoodWorksheetDetailsResolver = {
20
+ async regenerateReleaseGoodWorksheetDetails(
21
+ _: any,
22
+ { worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails },
23
+ context: any
24
+ ): Promise<void> {
25
+ const { tx, domain, user } = context.state
26
+ return await regenerateReleaseGoodWorksheetDetails(
27
+ tx,
28
+ domain,
29
+ user,
30
+ worksheetNo,
31
+ batchId,
32
+ productId,
33
+ packingType,
34
+ packingSize,
35
+ orderProductId,
36
+ worksheetDetails
37
+ )
38
+ }
39
+ }
40
+
41
+ export async function regenerateReleaseGoodWorksheetDetails(
42
+ tx: EntityManager,
43
+ domain: Domain,
44
+ user: User,
45
+ worksheetNo: string,
46
+ batchId: string,
47
+ productId: string,
48
+ packingType: string,
49
+ packingSize: number,
50
+ orderProductId: string,
51
+ worksheetDetails: Partial<WorksheetDetail>[]
52
+ ): Promise<void> {
53
+ // 1. Remove prev worksheet details if it's exists
54
+ const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
55
+ where: { name: worksheetNo, domain: { id: domain.id } },
56
+ relations: [
57
+ 'bizplace',
58
+ 'releaseGood',
59
+ 'worksheetDetails',
60
+ 'worksheetDetails.targetInventory',
61
+ 'worksheetDetails.targetInventory.inventory',
62
+ 'worksheetDetails.targetInventory.product',
63
+ 'worksheetDetails.targetInventory.releaseGood',
64
+ 'worksheetDetails.targetInventory.orderProduct',
65
+ 'worksheetDetails.targetInventory.bizplace'
66
+ ]
67
+ })
68
+
69
+ const prevWSDs: WorksheetDetail[] = worksheet.worksheetDetails.filter((wsd: WorksheetDetail) => {
70
+ const targetInv: OrderInventory = wsd.targetInventory
71
+ if (targetInv.orderProductId === orderProductId) return wsd.id
72
+ })
73
+
74
+ // TODO: Update prev inventory locked qty and delete order inventories
75
+ if (prevWSDs?.length) {
76
+ const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)
77
+ const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)
78
+ const prevOrderInventories: OrderInventory[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory)
79
+ await Promise.all(
80
+ prevOrderInventories.map(async prevOI => {
81
+ if (prevOI?.inventory) {
82
+ await (tx.getRepository(Inventory) as Repository<Inventory>).update(
83
+ { id: prevOI.inventory.id },
84
+ {
85
+ lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,
86
+ lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue
87
+ }
88
+ )
89
+ }
90
+ })
91
+ )
92
+
93
+ await tx.getRepository(WorksheetDetail).delete(wsdIds)
94
+ await tx.getRepository(OrderInventory).delete(prevOrderInvIds)
95
+ }
96
+
97
+ await Promise.all(
98
+ worksheetDetails.map(async (wsd: WorksheetDetail) => {
99
+ // 2. Create order inventory
100
+ let targetInventory: OrderInventory = wsd.targetInventory
101
+ //@ts-ignore
102
+ const inventory: Inventory = await tx.getRepository(Inventory).findOne(targetInventory.inventory.id)
103
+
104
+ let targetProduct: OrderProduct = await tx
105
+ .getRepository(OrderProduct)
106
+ .findOne({ where: { id: wsd.targetProduct.id }, relations: ['releaseGood'] })
107
+
108
+ targetInventory = await tx.getRepository(OrderInventory).save({
109
+ ...targetInventory,
110
+ domain,
111
+ bizplace: worksheet.bizplace,
112
+ name: OrderNoGenerator.orderInventory(),
113
+ releaseGood: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? targetProduct.releaseGood : worksheet.releaseGood,
114
+ inventory,
115
+ batchId: inventory.batchId,
116
+ batchIdRef: inventory.batchIdRef,
117
+ status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
118
+ product: await tx.getRepository(Product).findOneBy({ id: productId }),
119
+ packingType,
120
+ packingSize,
121
+ orderProduct: targetProduct,
122
+ refWorksheetId: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? worksheet.id : null,
123
+ creator: user,
124
+ updater: user
125
+ })
126
+
127
+ const currentLockedQty: any = inventory.lockedQty
128
+ const currentLockedUomValue: any = inventory.lockedUomValue
129
+
130
+ await tx.getRepository(Inventory).save({
131
+ ...targetInventory.inventory,
132
+ lockedQty: Boolean(currentLockedQty)
133
+ ? targetInventory.releaseQty + currentLockedQty
134
+ : targetInventory.releaseQty,
135
+ lockedUomValue: Boolean(currentLockedUomValue)
136
+ ? targetInventory.releaseUomValue + currentLockedUomValue
137
+ : targetInventory.releaseUomValue,
138
+ updater: user
139
+ })
140
+
141
+ // update order product status to ASSIGNED
142
+ await tx
143
+ .getRepository(OrderProduct)
144
+ .update({ id: targetProduct.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user } as any)
145
+
146
+ // 3. Create worksheet details
147
+ await tx.getRepository(WorksheetDetail).save({
148
+ ...wsd,
149
+ domain,
150
+ bizplace: worksheet.bizplace,
151
+ worksheet,
152
+ name:
153
+ worksheet.type == WORKSHEET_TYPE.BATCH_PICKING
154
+ ? WorksheetNoGenerator.batchPickingDetail()
155
+ : WorksheetNoGenerator.pickingDetail(),
156
+ targetProduct,
157
+ targetInventory,
158
+ type: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? WORKSHEET_TYPE.BATCH_PICKING : WORKSHEET_TYPE.PICKING,
159
+ status: WORKSHEET_STATUS.DEACTIVATED,
160
+ creator: user,
161
+ updater: user
162
+ })
163
+ })
164
+ )
165
+ }
@@ -0,0 +1,39 @@
1
+ import { EntityManager, In } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { getPermittedBizplaceIds, Worker } from '@things-factory/biz-base'
5
+ import { OrderProduct, OrderVas } from '@things-factory/sales-base'
6
+ import { Domain } from '@things-factory/shell'
7
+
8
+ import { WorksheetDetail } from '../../../entities'
9
+
10
+ export const updateWorksheetDetail = {
11
+ async updateWorksheetDetail(_: any, { id, patch }, context: ResolverContext) {
12
+ const { tx, user, domain } = context.state
13
+ const worksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({
14
+ where: {
15
+ domain: { id: domain.id },
16
+ bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) },
17
+ id
18
+ }
19
+ })
20
+
21
+ if (patch.worker && patch.worker.id) {
22
+ patch.worker = await tx.getRepository(Worker).findOne(patch.worker.id)
23
+ }
24
+
25
+ if (patch.targetProduct && patch.targetProduct.id) {
26
+ patch.targetProduct = await tx.getRepository(OrderProduct).findOne(patch.targetProduct.id)
27
+ }
28
+
29
+ if (patch.targetVas && patch.targetVas.id) {
30
+ patch.targetVas = await tx.getRepository(OrderVas).findOne(patch.targetVas.id)
31
+ }
32
+
33
+ return await tx.getRepository(WorksheetDetail).save({
34
+ ...worksheetDetail,
35
+ ...patch,
36
+ updater: user
37
+ })
38
+ }
39
+ }
@@ -0,0 +1,19 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { getPermittedBizplaceIds } from '@things-factory/biz-base'
4
+
5
+ import { WorksheetDetail } from '../../../entities'
6
+
7
+ export const worksheetDetailResolver = {
8
+ async worksheetDetail(_: any, { name }, context: ResolverContext) {
9
+ const { tx, user, domain } = context.state
10
+ tx.getRepository(WorksheetDetail).findOne({
11
+ where: {
12
+ domain: { id: domain.id },
13
+ bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) },
14
+ name
15
+ },
16
+ relations: ['domain', 'bizplace', 'worksheet', 'worker', 'targetProduct', 'targetVas', 'creator', 'updater']
17
+ })
18
+ }
19
+ }