@things-factory/worksheet-base 8.0.0-beta.8 → 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,282 @@
1
+ import { EntityManager, getManager } from 'typeorm'
2
+
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
+ import { Bizplace, ContactPoint, getMyBizplace } from '@things-factory/biz-base'
5
+ import { LastMileAPI, LastMileDelivery } from '@things-factory/integration-lmd'
6
+ import { MarketplaceStore, MarketplaceTransporter } from '@things-factory/integration-marketplace'
7
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
8
+ import {
9
+ MarketplaceOrder,
10
+ MarketplaceOrderItem,
11
+ MarketplaceOrderShipping,
12
+ MarketplaceOrderShippingItem
13
+ } from '@things-factory/marketplace-base'
14
+ import {
15
+ ORDER_INVENTORY_STATUS,
16
+ ORDER_STATUS,
17
+ OrderInventory,
18
+ OrderProduct,
19
+ ReleaseGood
20
+ } from '@things-factory/sales-base'
21
+ import { Domain } from '@things-factory/shell'
22
+
23
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
24
+ import {
25
+ LoadingWorksheetController,
26
+ PackingWorksheetController,
27
+ PickingWorksheetController,
28
+ SellercraftController
29
+ } from '../../../../controllers/'
30
+ import { EcommerceController } from '../../../../controllers/ecommerce'
31
+ import { WorksheetController } from '../../../../controllers/worksheet-controller'
32
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
33
+
34
+ export const completePickingResolver = {
35
+ async completePicking(_: any, { releaseGoodNo }, context: ResolverContext) {
36
+ const { tx, domain, user } = context.state
37
+
38
+ await completePicking(tx, domain, user, releaseGoodNo)
39
+
40
+ const bizplace: Bizplace = await getMyBizplace(domain, user)
41
+ const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
42
+ await worksheetController.notifyToCustomer(bizplace, {
43
+ title: `Picking has been completed (${bizplace.name}, ${releaseGoodNo})`,
44
+ body: `Items now are ready to be loaded`,
45
+ url: context.header.referer,
46
+ data: { url: context.header.referer }
47
+ })
48
+ }
49
+ }
50
+
51
+ export async function completePicking(
52
+ tx: EntityManager,
53
+ domain: Domain,
54
+ user: User,
55
+ releaseGoodNo: string
56
+ ): Promise<void> {
57
+ const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
58
+ let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
59
+ where: { domain: { id: domain.id }, name: releaseGoodNo },
60
+ relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
61
+ })
62
+
63
+ const worksheet: Worksheet = await pickingWSCtrl.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
64
+ 'worksheetDetails',
65
+ 'worksheetDetails.targetInventory'
66
+ ])
67
+
68
+ const warehouseContactPoint: ContactPoint = await tx.getRepository(ContactPoint).findOne({
69
+ where: {
70
+ domain: { id: domain.id },
71
+ type: 'WAREHOUSE'
72
+ }
73
+ })
74
+
75
+ const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
76
+ const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
77
+ const pickedTargetInventories: OrderInventory[] = targetInventories.filter(
78
+ targetInventory => targetInventory.status === ORDER_INVENTORY_STATUS.PICKED
79
+ )
80
+
81
+ await pickingWSCtrl.completePicking(releaseGoodNo)
82
+
83
+ const orderSource: string = releaseGood.source
84
+ switch (orderSource) {
85
+ case ApplicationType.SELLERCRAFT:
86
+ const sellercraft: Sellercraft = await tx
87
+ .getRepository(Sellercraft)
88
+ .findOneBy({ domain: {id: releaseGood.bizplace.domain.id}, status: SellercraftStatus.ACTIVE })
89
+ const initSCOrderShipment = async sellercraft => {
90
+ if (sellercraft) {
91
+ await getManager().transaction(async txMgr => {
92
+ const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
93
+
94
+ if (!releaseGood?.packageId) {
95
+ const orderProducts: OrderProduct[] = await tx.getRepository(OrderProduct).find({
96
+ where: { releaseGood },
97
+ relations: ['product', 'product.productDetails']
98
+ })
99
+ releaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
100
+
101
+ if (releaseGood?.packageId) {
102
+ await txMgr
103
+ .getRepository(ReleaseGood)
104
+ .update({ id: releaseGood.id }, { packageId: releaseGood.packageId, updater: releaseGood.updater })
105
+ }
106
+ }
107
+
108
+ await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
109
+ })
110
+ }
111
+ }
112
+
113
+ // asynchronouly call to initiate sellercraft order shipment/ RTS
114
+ initSCOrderShipment(sellercraft)
115
+ break
116
+
117
+ case ApplicationType.MMS:
118
+ const companyDomain: Domain = releaseGood.bizplace.company.domain
119
+ let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
120
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
121
+ relations: [
122
+ 'marketplaceStore',
123
+ 'marketplaceOrderItems',
124
+ 'marketplaceOrderItems.marketplaceOrderShippingItems',
125
+ 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
126
+ ]
127
+ })
128
+
129
+ if (marketplaceOrder) {
130
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
131
+ let eTraxOption: boolean
132
+
133
+ if (marketplaceStore.isAutoUpdateShipment) {
134
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
135
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
136
+ }
137
+
138
+ if (!marketplaceOrder)
139
+ throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
140
+ eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
141
+
142
+ // if eTrax option is true
143
+ if (eTraxOption) {
144
+ const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
145
+
146
+ // access every marketplaceOrderItems for shipping information you need
147
+ // trigger the controller from integration-lmd that trigger the API, build the parameters needed
148
+ // for etrax didn't support multi awb per order
149
+ const marketplaceOrderShippingItems: MarketplaceOrderShippingItem[] =
150
+ marketplaceOrderItems[0].marketplaceOrderShippingItems
151
+ const marketplaceOrderShipping: MarketplaceOrderShipping =
152
+ marketplaceOrderShippingItems[0].marketplaceOrderShipping
153
+ const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
154
+ where: {
155
+ domain,
156
+ platform: 'eTrax'
157
+ }
158
+ })
159
+
160
+ //Get which transporter to use
161
+ const marketplaceTransporter: MarketplaceTransporter = await tx
162
+ .getRepository(MarketplaceTransporter)
163
+ .findOne({
164
+ where: { marketplaceStore: marketplaceOrder.marketplaceStore },
165
+ relations: ['pickupTransporter', 'deliveryTransporter']
166
+ })
167
+
168
+ const resp = await LastMileAPI.createShipmentRequest(lmd, {
169
+ orderNo: marketplaceOrder.orderNo,
170
+ clientId: lmd.clientId,
171
+ clientType: lmd.clientType,
172
+ clientName: lmd.clientName,
173
+ transporterId: marketplaceTransporter.pickupTransporter.transporterId,
174
+ pickupName: warehouseContactPoint.name,
175
+ pickupAddress1: warehouseContactPoint.address,
176
+ pickupAddress2: warehouseContactPoint.address2,
177
+ pickupPostcode: warehouseContactPoint.postCode,
178
+ pickupState: warehouseContactPoint.state,
179
+ pickupCity: warehouseContactPoint.city,
180
+ pickupPhone: warehouseContactPoint.phone,
181
+ pickupEmail: warehouseContactPoint.email,
182
+ name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
183
+ address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
184
+ address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
185
+ postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
186
+ city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
187
+ state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
188
+ phone: marketplaceOrderShipping.phone1 || '',
189
+ email: marketplaceOrderShipping.email || '',
190
+ attentionTo: marketplaceOrderShipping.attentionTo,
191
+ quantity: marketplaceOrderItems.length
192
+ })
193
+
194
+ const delay = (ms: number) => {
195
+ return new Promise(resolve => setTimeout(resolve, ms))
196
+ }
197
+
198
+ if (resp.Status === 'SUCCESS') {
199
+ //Success
200
+ let awbObtained = false
201
+ let retry = 0
202
+ while (!awbObtained) {
203
+ const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
204
+ where: { releaseOrderId: releaseGood.id },
205
+ relations: [
206
+ 'marketplaceStore',
207
+ 'marketplaceOrderItems',
208
+ 'marketplaceOrderItems.marketplaceOrderShippingItems',
209
+ 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
210
+ ]
211
+ })
212
+ const orderShipping =
213
+ marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShippingItems[0].marketplaceOrderShipping
214
+ if (orderShipping?.airwayBill) {
215
+ awbObtained = true
216
+ }
217
+ await delay(5000)
218
+ //Timeout after 15sec
219
+ if (++retry > 3) {
220
+ break
221
+ }
222
+ }
223
+ } else {
224
+ if (resp?.AWBurl && resp?.TrackingNo)
225
+ await tx
226
+ .getRepository(MarketplaceOrderShipping)
227
+ .update({ id: marketplaceOrderShipping.id }, { airwayBill: resp.AWBurl, trackingNo: resp.TrackingNo })
228
+ else throw resp
229
+ }
230
+ }
231
+ }
232
+ break
233
+
234
+ default:
235
+ break
236
+ }
237
+
238
+ if (releaseGood.packingOption) {
239
+ const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
240
+ await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
241
+ } else {
242
+ // Find Existing Loading Worksheet if any
243
+ let existLoadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
244
+ where: {
245
+ releaseGood: { id: releaseGood.id },
246
+ type: WORKSHEET_TYPE.LOADING,
247
+ status: WORKSHEET_STATUS.DEACTIVATED
248
+ }
249
+ })
250
+
251
+ if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
252
+ if (pickedTargetInventories.length > 0) {
253
+ const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
254
+ let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
255
+ releaseGoodNo,
256
+ pickedTargetInventories
257
+ )
258
+
259
+ if (!loadingWorksheet.worksheetDetails?.length) {
260
+ loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
261
+ }
262
+
263
+ const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
264
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
265
+ }
266
+ } else {
267
+ const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
268
+ let loadingWorksheet: Worksheet = await loadingWSCtrl.updateLoadingWorksheet(
269
+ releaseGoodNo,
270
+ pickedTargetInventories,
271
+ existLoadingWorksheet
272
+ )
273
+
274
+ if (!loadingWorksheet.worksheetDetails?.length) {
275
+ loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
276
+ }
277
+
278
+ const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
279
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
280
+ }
281
+ }
282
+ }
@@ -0,0 +1,121 @@
1
+ import { EntityManager, getConnection } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { OrderInventory, ReleaseGood } from '@things-factory/sales-base'
5
+ import { Setting } from '@things-factory/setting-base'
6
+ import { Domain } from '@things-factory/shell'
7
+
8
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
9
+ import { Worksheet } from '../../../../entities'
10
+ import { pickingWorksheet } from '../picking-worksheet'
11
+ import { activatePicking } from './activate-picking'
12
+
13
+ export const fetchAndAssignPickingTaskResolver = {
14
+ async fetchAndAssignPickingTask(_: any, {}, context: ResolverContext) {
15
+ try {
16
+ const { tx, domain, user } = context.state
17
+ const assignee: User = await tx.getRepository(User).findOne({
18
+ where: { id: user.id },
19
+ relations: ['domains']
20
+ })
21
+ if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
22
+ throw new Error('Target user is not belong to current domain')
23
+
24
+ if (!assignee) throw new Error('failed to find target user')
25
+
26
+ let worksheet: Worksheet
27
+ let worksheetQb = await tx
28
+ .getRepository(Worksheet)
29
+ .createQueryBuilder('ws')
30
+ .select('ws.id')
31
+ .addSelect('ws.name')
32
+ .addSelect('ws.status')
33
+ .innerJoinAndSelect('ws.releaseGood', 'rg')
34
+ .where(
35
+ '(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))',
36
+ {
37
+ domain_id: domain.id,
38
+ type: WORKSHEET_TYPE.PICKING,
39
+ assignee: assignee.id,
40
+ status1: WORKSHEET_STATUS.EXECUTING,
41
+ status2: WORKSHEET_STATUS.DEACTIVATED
42
+ }
43
+ )
44
+ .andWhere(qb => {
45
+ const subQuery = qb
46
+ .subQuery()
47
+ .select('COUNT(*) AS totalPS')
48
+ .from(OrderInventory, 'OrderInventory')
49
+ .where('OrderInventory.release_good_id = ws.release_good_id')
50
+ .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
51
+ .groupBy('OrderInventory.release_good_id')
52
+ .having('COUNT(*) > 0')
53
+ .getQuery()
54
+ return 'NOT EXISTS ' + subQuery
55
+ })
56
+ .orderBy('"rg"."created_at"', 'ASC')
57
+
58
+ worksheet = await worksheetQb.getOne()
59
+
60
+ if (!worksheet) {
61
+ // update and return updated worksheet id
62
+ let updatedWorksheets = await getConnection().transaction(async (tx2: EntityManager) => {
63
+ let x = await tx2.getRepository(Worksheet).query(
64
+ `
65
+ UPDATE worksheets ws SET assignee_id = $2,
66
+ updated_at = NOW(),
67
+ updater_id = $2
68
+ FROM (
69
+ SELECT ws.id, ws.name, ws.status, ws.release_good_id FROM worksheets ws
70
+ INNER JOIN release_goods rg ON rg.id = ws.release_good_id
71
+ WHERE
72
+ ws.domain_id = $1 AND
73
+ ws.type = 'PICKING' AND
74
+ ws.assignee_id IS NULL AND
75
+ (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED') AND
76
+ NOT EXISTS (
77
+ SELECT count(id) AS "totalPS"
78
+ FROM order_inventories oi
79
+ WHERE oi.release_good_id = ws.release_good_id AND
80
+ oi.status = 'PENDING_SPLIT'
81
+ GROUP BY oi.release_good_id
82
+ HAVING count(id) > 0
83
+ )
84
+ ORDER BY rg.release_date, rg.created_at LIMIT 1
85
+ ) src where src.id = ws.id
86
+ RETURNING ws.id;
87
+ `,
88
+ [domain.id, assignee.id]
89
+ )
90
+ return x[0]
91
+ })
92
+
93
+ if (updatedWorksheets.length == 0) throw new Error('no suitable worksheet found')
94
+
95
+ // relace worksheet with newly assigned worksheet
96
+ worksheet = await tx
97
+ .getRepository(Worksheet)
98
+ .findOne({ where: { id: updatedWorksheets[0].id }, relations: ['releaseGood'] })
99
+ }
100
+
101
+ if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.name)
102
+
103
+ const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
104
+ where: { domain: { id: domain.id }, name: 'rule-for-picking-product' }
105
+ })
106
+
107
+ const sortingRule = JSON.parse(locationSortingRules.value)
108
+ const locationSortingRule = Object.keys(sortingRule).map(field => {
109
+ return { name: field, desc: sortingRule[field] === 'DESC' }
110
+ })
111
+
112
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOneBy({
113
+ id: worksheet.releaseGood.id
114
+ })
115
+
116
+ return await pickingWorksheet(domain, releaseGood.name, locationSortingRule, tx)
117
+ } catch (error) {
118
+ throw error
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,31 @@
1
+ import { activateBatchPickingResolver } from './activate-batch-picking'
2
+ import { activatePickingResolver } from './activate-picking'
3
+ import { assignPickingInventoriesResolver } from './assign-picking-inventories'
4
+ import { assignPickingWorkerResolver } from './assign-picking-worker'
5
+ import { fetchAndAssignPickingTaskResolver } from './fetch-and-assign-picking-task'
6
+ import { batchPickingResolver } from './batch-picking'
7
+ import { completeBatchPickingResolver } from './complete-batch-picking'
8
+ import { completePickingResolver } from './complete-picking'
9
+ import { pickingResolver } from './picking'
10
+ import { scanProductPickingResolver } from './scan-product-picking'
11
+ import { scanProductBatchPickingResolver } from './scan-product-batch-picking'
12
+ import { undoPickingAssigmentResolver } from './undo-picking-assignment'
13
+ import { undoSerialNumberPickingResolver } from './undo-serial-number-picking'
14
+ import { sealToteResolver } from './seal-tote'
15
+
16
+ export const Mutations = {
17
+ ...assignPickingInventoriesResolver,
18
+ ...undoPickingAssigmentResolver,
19
+ ...activatePickingResolver,
20
+ ...activateBatchPickingResolver,
21
+ ...pickingResolver,
22
+ ...scanProductPickingResolver,
23
+ ...scanProductBatchPickingResolver,
24
+ ...batchPickingResolver,
25
+ ...completePickingResolver,
26
+ ...completeBatchPickingResolver,
27
+ ...assignPickingWorkerResolver,
28
+ ...fetchAndAssignPickingTaskResolver,
29
+ ...undoSerialNumberPickingResolver,
30
+ ...sealToteResolver
31
+ }
@@ -0,0 +1,35 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { getRepository } from '@things-factory/shell'
4
+
5
+ import { WORKSHEET_STATUS } from '../../../../constants'
6
+ import { Worksheet } from '../../../../entities'
7
+
8
+ type AssignmentStatusType = { userId: string; pending?: Worksheet[]; picking: Worksheet[] }
9
+
10
+ export const myPickingAssignmentStatusResolver = {
11
+ async myPickingAssignmentStatus(
12
+ _parentObj: void,
13
+ _params: void,
14
+ context: ResolverContext
15
+ ): Promise<AssignmentStatusType> {
16
+ const { domain, user } = context.state
17
+
18
+ const pickingWorksheets: Worksheet[] = await getRepository(Worksheet).find({
19
+ where: {
20
+ domain: { id: domain.id },
21
+ assignee: { id: user.id },
22
+ status: In([WORKSHEET_STATUS.DEACTIVATED, WORKSHEET_STATUS.EXECUTING])
23
+ }
24
+ })
25
+
26
+ return (pickingWorksheets || []).reduce(
27
+ (assignmentStatus: AssignmentStatusType, worksheet: Worksheet) => {
28
+ if (worksheet.status === WORKSHEET_STATUS.DEACTIVATED) assignmentStatus.pending.push(worksheet)
29
+ if (worksheet.status === WORKSHEET_STATUS.EXECUTING) assignmentStatus.picking.push(worksheet)
30
+ return assignmentStatus
31
+ },
32
+ { userId: user.id, pending: [], picking: [] }
33
+ )
34
+ }
35
+ }
@@ -0,0 +1,96 @@
1
+ import { getManager, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { getRepository, ListParam } from '@things-factory/shell'
5
+
6
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
7
+ import { Worksheet } from '../../../../entities'
8
+
9
+ type AssignmentStatusByUserType = { user: User; pending?: string; picking?: string }
10
+
11
+ export const pickingAssignmentStatusByUsersResolver = {
12
+ async pickingAssignmentStatusByUsers(
13
+ _: void,
14
+ params: ListParam,
15
+ context: any
16
+ ): Promise<AssignmentStatusByUserType[]> {
17
+ const { domain } = context.state
18
+
19
+ const nameFilter = params.filters.find(p => {
20
+ return p.name == 'name'
21
+ })
22
+ const emailFilter = params.filters.find(p => {
23
+ return p.name == 'email'
24
+ })
25
+ const roleFilter = params.filters.find(p => {
26
+ return p.name == 'roles'
27
+ })
28
+
29
+ const pendingSorter = params.sortings.find(p => {
30
+ return p.name == 'pending'
31
+ })
32
+ const pickingSorter = params.sortings.find(p => {
33
+ return p.name == 'picking'
34
+ })
35
+
36
+ const getUserInfoQb: SelectQueryBuilder<User> = await getRepository(User).createQueryBuilder('u')
37
+
38
+ getUserInfoQb.select('u.id')
39
+ getUserInfoQb.addSelect('u.name')
40
+ getUserInfoQb.addSelect('u.email')
41
+ getUserInfoQb.addSelect("string_agg(r.name,', ') as roles")
42
+ getUserInfoQb.innerJoin('u.roles', 'r')
43
+ getUserInfoQb.where('r.domain_id = :domainId', { domainId: domain.id })
44
+ roleFilter ? getUserInfoQb.andWhere('r.name ilike :userRole', { userRole: `%${roleFilter.value}%` }) : ''
45
+ nameFilter ? getUserInfoQb.andWhere('u.name ilike :userName', { userName: `%${nameFilter.value}%` }) : ''
46
+ emailFilter ? getUserInfoQb.andWhere('u.email ilike :userEmail', { userEmail: `%${emailFilter.value}%` }) : ''
47
+ getUserInfoQb.andWhere('r.name not ilike :userR', { userR: `%CLIENT%` })
48
+ getUserInfoQb.andWhere('u.user_type = :userType', { userType: 'user' })
49
+ getUserInfoQb.groupBy('u.id')
50
+ getUserInfoQb.addGroupBy('u.name')
51
+ getUserInfoQb.addGroupBy('u.email')
52
+
53
+ const getAssignedWSQb = await getRepository(Worksheet).createQueryBuilder('ws')
54
+
55
+ getAssignedWSQb.select('ws.assignee_id')
56
+ getAssignedWSQb.addSelect('u.name')
57
+ getAssignedWSQb.addSelect("sum(case when ws.status='EXECUTING' then 1 else 0 end) as picking")
58
+ getAssignedWSQb.addSelect("sum(case when ws.status='DEACTIVATED' then 1 else 0 end) as pending")
59
+ getAssignedWSQb.innerJoin('ws.assignee', 'u')
60
+ getAssignedWSQb.where('ws.domain_id = :id', { id: domain.id })
61
+ getAssignedWSQb.andWhere('ws.type IN (:...type)', { type: [WORKSHEET_TYPE.PICKING, WORKSHEET_TYPE.BATCH_PICKING] })
62
+ getAssignedWSQb.andWhere('ws.status IN (:...status)', {
63
+ status: [WORKSHEET_STATUS.DEACTIVATED, WORKSHEET_STATUS.EXECUTING]
64
+ })
65
+ getAssignedWSQb.groupBy('ws.assignee_id')
66
+ getAssignedWSQb.addGroupBy('u.name')
67
+ pendingSorter?.desc ? getAssignedWSQb.orderBy('pending', 'DESC') : ''
68
+ pickingSorter?.desc ? getAssignedWSQb.orderBy('picking', 'DESC') : ''
69
+ pickingSorter && Object.keys(pickingSorter).length == 1 ? getAssignedWSQb.orderBy('picking', 'ASC') : ''
70
+ pendingSorter && Object.keys(pendingSorter).length == 1 ? getAssignedWSQb.orderBy('pending', 'ASC') : ''
71
+
72
+ const parameter1 = getUserInfoQb.getParameters()
73
+ const parameter2 = getAssignedWSQb.getParameters()
74
+
75
+ const combineParams = Object.assign(parameter1, parameter2)
76
+
77
+ const combineQb = getManager().createQueryBuilder()
78
+
79
+ combineQb.select('u.*')
80
+ combineQb.addSelect('coalesce(ws.picking, 0) as picking')
81
+ combineQb.addSelect('coalesce(ws.pending, 0) as pending')
82
+ combineQb.from('(' + getUserInfoQb.getQuery() + ')', 'u')
83
+ combineQb.leftJoin('(' + getAssignedWSQb.getQuery() + ')', 'ws', ' ws.assignee_id = u.u_id')
84
+ combineQb.setParameters(combineParams)
85
+
86
+ const combineInfo = await combineQb.getRawMany()
87
+
88
+ return combineInfo.map(itm => {
89
+ return {
90
+ user: { id: itm.u_id, email: itm.u_email, name: itm.u_name, description: itm.roles },
91
+ pending: itm.pending,
92
+ picking: itm.picking
93
+ } as any
94
+ })
95
+ }
96
+ }
@@ -0,0 +1,55 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { PickingWorksheetController } from '../../../../controllers'
7
+
8
+ export const pickingResolver = {
9
+ async picking(
10
+ _: any,
11
+ { worksheetDetailName, worksheetType, palletId, locationName, releaseQty, binLocation, serialNumber, toteNo },
12
+ context: any
13
+ ) {
14
+ const { tx, domain, user } = context.state
15
+ await picking(
16
+ tx,
17
+ domain,
18
+ user,
19
+ worksheetDetailName,
20
+ worksheetType,
21
+ palletId,
22
+ locationName,
23
+ releaseQty,
24
+ binLocation,
25
+ serialNumber,
26
+ toteNo
27
+ )
28
+ }
29
+ }
30
+
31
+ export async function picking(
32
+ tx: EntityManager,
33
+ domain: Domain,
34
+ user: User,
35
+ worksheetDetailName: string,
36
+ worksheetType: string,
37
+ palletId: string,
38
+ locationName: string,
39
+ releaseQty: number,
40
+ binLocation?: string,
41
+ serialNumber?: string,
42
+ toteNo?: string
43
+ ) {
44
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
45
+ await worksheetController.picking(
46
+ worksheetDetailName,
47
+ worksheetType,
48
+ palletId,
49
+ locationName,
50
+ releaseQty,
51
+ binLocation,
52
+ serialNumber,
53
+ toteNo
54
+ )
55
+ }
@@ -0,0 +1,52 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { PickingWorksheetController } from '../../../../controllers'
7
+
8
+ export const scanProductBatchPickingResolver = {
9
+ async scanProductBatchPicking(
10
+ _: any,
11
+ { taskNo, worksheetType, cartonId, productBarcode, inventory, binLocationName, pickingQty },
12
+ context: any
13
+ ) {
14
+ const { tx, domain, user } = context.state
15
+ await scanProductBatchPicking(
16
+ tx,
17
+ domain,
18
+ user,
19
+ taskNo,
20
+ worksheetType,
21
+ cartonId,
22
+ productBarcode,
23
+ inventory,
24
+ binLocationName,
25
+ pickingQty
26
+ )
27
+ }
28
+ }
29
+
30
+ export async function scanProductBatchPicking(
31
+ tx: EntityManager,
32
+ domain: Domain,
33
+ user: User,
34
+ taskNo: string,
35
+ worksheetType: string,
36
+ cartonId: string,
37
+ productBarcode: string,
38
+ inventory: any,
39
+ binLocationName?: string,
40
+ pickingQty?: number
41
+ ) {
42
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
43
+ await worksheetController.scanProductBatchPicking(
44
+ taskNo,
45
+ worksheetType,
46
+ cartonId,
47
+ productBarcode,
48
+ inventory,
49
+ binLocationName,
50
+ pickingQty
51
+ )
52
+ }