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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,25 @@
1
+ import { PickingWorksheetController } from '../../../../controllers'
2
+
3
+ export const scanProductPickingResolver = {
4
+ async scanProductPicking(
5
+ _: any,
6
+ { worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo, pickingQty },
7
+ context: ResolverContext
8
+ ) {
9
+ const { tx, domain, user } = context.state
10
+
11
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
12
+ let ws = await worksheetController.scanProductPicking(
13
+ worksheetDetailName,
14
+ worksheetType,
15
+ productBarcode,
16
+ cartonId,
17
+ binLocation,
18
+ serialNumber,
19
+ toteNo,
20
+ pickingQty
21
+ )
22
+
23
+ // return await pickingWorksheet(domain, releaseGoodNo, locationSortingRule, tx)
24
+ }
25
+ }
@@ -0,0 +1,25 @@
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 sealToteResolver = {
9
+ async sealTote(_: any, { sealNo, toteNo, orderNo }, context: ResolverContext) {
10
+ const { tx, domain, user } = context.state
11
+ await sealTote(tx, domain, user, sealNo, toteNo, orderNo)
12
+ }
13
+ }
14
+
15
+ async function sealTote(
16
+ tx: EntityManager,
17
+ domain: Domain,
18
+ user: User,
19
+ sealNo: string,
20
+ toteNo: string,
21
+ orderNo: string
22
+ ): Promise<void> {
23
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
24
+ await worksheetController.sealTote(sealNo, toteNo, orderNo)
25
+ }
@@ -0,0 +1,31 @@
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 undoPickingAssigmentResolver = {
9
+ async undoPickingAssigment(
10
+ _: any,
11
+ { worksheetNo, batchId, productId, packingType, packingSize },
12
+ context: ResolverContext
13
+ ): Promise<void> {
14
+ const { tx, domain, user } = context.state
15
+ await undoPickingAssigment(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize)
16
+ }
17
+ }
18
+
19
+ export async function undoPickingAssigment(
20
+ tx: EntityManager,
21
+ domain: Domain,
22
+ user: User,
23
+ worksheetNo: string,
24
+ batchId: string,
25
+ productId: string,
26
+ packingType: string,
27
+ packingSize: number
28
+ ): Promise<void> {
29
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
30
+ await worksheetController.undoPickingAssigment(worksheetNo, batchId, productId, packingType, packingSize)
31
+ }
@@ -0,0 +1,24 @@
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 undoSerialNumberPickingResolver = {
9
+ async undoSerialNumberPicking(_: any, { worksheetDetailName, inventoryItemId }, context: ResolverContext) {
10
+ const { tx, domain, user } = context.state
11
+ await undoSerialNumberPicking(tx, domain, user, worksheetDetailName, inventoryItemId)
12
+ }
13
+ }
14
+
15
+ async function undoSerialNumberPicking(
16
+ tx: EntityManager,
17
+ domain: Domain,
18
+ user: User,
19
+ worksheetDetailName: string,
20
+ inventoryItemId: string
21
+ ): Promise<void> {
22
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
23
+ await worksheetController.undoSerialNumberPicking(worksheetDetailName, inventoryItemId)
24
+ }
@@ -0,0 +1,147 @@
1
+ import { EntityManager, In, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood, ShippingOrder } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+ import { Inventory, InventoryChange, Location } from '@things-factory/warehouse-base'
6
+
7
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
8
+ import { WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
10
+
11
+ export const pickingWorksheetResolver = {
12
+ async pickingWorksheet(_: any, { releaseGoodNo, locationSortingRules }, context: ResolverContext) {
13
+ const { domain, tx } = context.state
14
+
15
+ return await pickingWorksheet(domain, releaseGoodNo, locationSortingRules, tx)
16
+ }
17
+ }
18
+
19
+ export async function pickingWorksheet(
20
+ domain: Domain,
21
+ releaseGoodNo: String,
22
+ locationSortingRules: any,
23
+ tx: EntityManager
24
+ ) {
25
+ let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
26
+ //@ts-ignore
27
+ where: { domain: { id: domain.id }, name: releaseGoodNo /*status: ORDER_STATUS.PICKING*/ },
28
+ relations: ['bizplace', 'bizplace.domain']
29
+ })
30
+
31
+ // Find Release Order based on Bin
32
+ if (!releaseGood) {
33
+ const binLocation: Location = await tx.getRepository(Location).findOne({
34
+ //@ts-ignore
35
+ where: { domain: { id: domain.id }, name: releaseGoodNo }
36
+ })
37
+
38
+ const orderInventoryByBin: OrderInventory = await tx.getRepository(OrderInventory).findOne({
39
+ where: {
40
+ domain: { id: domain.id },
41
+ binLocation: { id: binLocation.id },
42
+ status: In([ORDER_INVENTORY_STATUS.PICKING, ORDER_INVENTORY_STATUS.PICKED])
43
+ },
44
+ order: {
45
+ createdAt: 'ASC'
46
+ },
47
+ relations: ['releaseGood', 'releaseGood.bizplace', 'releaseGood.bizplace.domain']
48
+ })
49
+
50
+ if (orderInventoryByBin?.releaseGood) {
51
+ releaseGoodNo = orderInventoryByBin.releaseGood.name
52
+ releaseGood = orderInventoryByBin.releaseGood
53
+ }
54
+ }
55
+
56
+ if (!releaseGood) throw new Error(`Couldn't find picking worksheet by order no (${releaseGoodNo})`)
57
+
58
+ if (releaseGood.exportOption) {
59
+ var shippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).findOne({
60
+ where: {
61
+ id: releaseGood?.shippingOrderId
62
+ }
63
+ })
64
+ }
65
+
66
+ const worksheet = await fetchExecutingWorksheet(
67
+ domain,
68
+ releaseGood.bizplace,
69
+ ['bizplace'],
70
+ WORKSHEET_TYPE.PICKING,
71
+ releaseGood,
72
+ tx
73
+ )
74
+
75
+ const qb: SelectQueryBuilder<WorksheetDetail> = tx.createQueryBuilder(WorksheetDetail, 'WSD')
76
+ qb.leftJoinAndSelect('WSD.targetInventory', 'T_INV')
77
+ .leftJoinAndSelect('T_INV.binLocation', 'BIN_LOC')
78
+ .leftJoinAndSelect('T_INV.inventory', 'INV')
79
+ .leftJoinAndSelect('T_INV.product', 'PROD')
80
+ .leftJoinAndSelect('INV.location', 'LOC')
81
+
82
+ if (locationSortingRules?.length > 0) {
83
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }) => {
84
+ qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
85
+ })
86
+ }
87
+
88
+ qb.addOrderBy(`PROD.name`, 'ASC')
89
+
90
+ const worksheetDetails: WorksheetDetail[] = await qb
91
+ .where('"WSD"."worksheet_id" = :worksheetId', { worksheetId: worksheet.id })
92
+ .andWhere('"WSD"."status" != :status', { status: WORKSHEET_STATUS.REPLACED })
93
+ .andWhere('"T_INV"."status" != :t_invstatus', { t_invstatus: ORDER_INVENTORY_STATUS.CANCELLED })
94
+ .getMany()
95
+
96
+ return {
97
+ worksheetInfo: {
98
+ bizplaceName: releaseGood.bizplace.name,
99
+ partnerDomainId: releaseGood.bizplace?.domain.id,
100
+ startedAt: worksheet.startedAt,
101
+ refNo: releaseGood.refNo,
102
+ refNo2: releaseGood.refNo2,
103
+ refNo3: releaseGood.refNo3,
104
+ type: releaseGood.type,
105
+ containerNo: shippingOrder?.containerNo,
106
+ marketplaceStatus: releaseGood.marketplaceOrderStatus,
107
+ shippingProvider: releaseGood.transporter,
108
+ trackingNo: releaseGood.trackingNo,
109
+ releaseGood
110
+ },
111
+ worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
112
+ const targetInventory: OrderInventory = pickingWSD.targetInventory
113
+ const inventory: Inventory = targetInventory.inventory
114
+
115
+ const inventoryChangesCount: number = await tx.getRepository(InventoryChange).count({
116
+ where: {
117
+ inventory: { id: inventory.id },
118
+ status: 'PENDING',
119
+ transactionType: 'MISSING'
120
+ },
121
+ relations: ['inventory', 'product']
122
+ })
123
+
124
+ return {
125
+ name: pickingWSD.name,
126
+ palletId: inventory?.palletId,
127
+ cartonId: inventory?.cartonId,
128
+ batchId: inventory?.batchId,
129
+ batchIdRef: inventory?.batchIdRef,
130
+ product: inventory?.product,
131
+ qty: inventory?.qty,
132
+ binLocation: targetInventory?.binLocation || '',
133
+ releaseQty: targetInventory.releaseQty,
134
+ pickedQty: targetInventory.pickedQty,
135
+ status: pickingWSD.status,
136
+ description: pickingWSD.description,
137
+ targetName: targetInventory.name,
138
+ packingType: inventory?.packingType,
139
+ packingSize: inventory?.packingSize,
140
+ expirationDate: inventory?.expirationDate,
141
+ location: inventory?.location,
142
+ relatedOrderInv: targetInventory,
143
+ hasMissingInventoryChanges: inventoryChangesCount > 0 ? true : false
144
+ }
145
+ })
146
+ }
147
+ }
@@ -0,0 +1,242 @@
1
+ import { Role } from '@things-factory/auth-base'
2
+ import { Bizplace } from '@things-factory/biz-base'
3
+ import { ArrivalNotice, ORDER_PRODUCT_STATUS, ORDER_STATUS, OrderProduct } from '@things-factory/sales-base'
4
+
5
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
6
+ import { Worksheet, WorksheetDetail } from '../../../entities'
7
+ import { WorksheetNoGenerator } from '../../../utils'
8
+
9
+ const debug = require('debug')('things-factory:operato-wms:proceedExtraProducts')
10
+
11
+ export const proceedExtraProductsResolver = {
12
+ async proceedExtraProducts(
13
+ _: any,
14
+ { ganNo, bizplaceId, approvedProducts, rejectedProducts },
15
+ context: any
16
+ ): Promise<void> {
17
+ const { tx, domain, user } = context.state
18
+
19
+ const customerBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({
20
+ where: {
21
+ id: bizplaceId
22
+ }
23
+ })
24
+
25
+ let arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({
26
+ where: {
27
+ domain: { id: domain.id },
28
+ bizplace: { id: customerBizplace.id },
29
+ name: ganNo,
30
+ status: ORDER_STATUS.PENDING_APPROVAL
31
+ },
32
+ relations: ['orderProducts']
33
+ })
34
+
35
+ if (!arrivalNotice) throw new Error(`Unable to find ${arrivalNotice.name} under PENDING APPROVAL status`)
36
+
37
+ // Create worksheet details with approved order products
38
+ const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
39
+ where: {
40
+ domain: { id: domain.id },
41
+ arrivalNotice: { id: arrivalNotice.id },
42
+ type: WORKSHEET_TYPE.UNLOADING
43
+ }
44
+ })
45
+
46
+ arrivalNotice.status =
47
+ worksheet.status === WORKSHEET_STATUS.DEACTIVATED ? ORDER_STATUS.READY_TO_UNLOAD : ORDER_STATUS.PROCESSING
48
+ arrivalNotice.updater = user
49
+ await tx.getRepository(ArrivalNotice).save(arrivalNotice)
50
+
51
+ const targetProdCnt: number = arrivalNotice.orderProducts.filter(
52
+ (op: OrderProduct) => op.status === ORDER_PRODUCT_STATUS.ADDED || op.status === ORDER_PRODUCT_STATUS.EDITED
53
+ ).length
54
+
55
+ const storedOrderProducts: OrderProduct[] = arrivalNotice.orderProducts
56
+
57
+ if (approvedProducts.length + rejectedProducts.length != targetProdCnt)
58
+ throw new Error(`Invalid numbers of extra products`)
59
+
60
+ if (approvedProducts?.length) {
61
+ let updatedOrderProducts: OrderProduct[] = []
62
+ const editedApprovedProducts = approvedProducts.filter(
63
+ (approvedProd: OrderProduct) => approvedProd.status === ORDER_PRODUCT_STATUS.EDITED
64
+ )
65
+ const addedApprovedProducts = approvedProducts.filter(
66
+ (approvedProd: OrderProduct) => approvedProd.status === ORDER_PRODUCT_STATUS.ADDED
67
+ )
68
+
69
+ if (editedApprovedProducts?.length > 0) {
70
+ editedApprovedProducts.map((editedApprovedProd: OrderProduct) => {
71
+ const selectedOrderProduct: OrderProduct = storedOrderProducts.find(
72
+ (op: OrderProduct) => op.id === editedApprovedProd.id
73
+ )
74
+
75
+ updatedOrderProducts.push({
76
+ ...selectedOrderProduct,
77
+ batchId: selectedOrderProduct?.adjustedBatchId
78
+ ? selectedOrderProduct.adjustedBatchId
79
+ : selectedOrderProduct.batchId,
80
+ batchIdRef: selectedOrderProduct?.adjustedBatchIdRef
81
+ ? selectedOrderProduct.adjustedBatchIdRef
82
+ : selectedOrderProduct.batchIdRef,
83
+ packingType: selectedOrderProduct?.adjustedPackingType
84
+ ? selectedOrderProduct.adjustedPackingType
85
+ : selectedOrderProduct.packingType,
86
+ packQty: selectedOrderProduct?.adjustedPackQty
87
+ ? selectedOrderProduct.adjustedPackQty
88
+ : selectedOrderProduct.packQty,
89
+ uom: selectedOrderProduct?.adjustedUom ? selectedOrderProduct.adjustedUom : selectedOrderProduct.uom,
90
+ uomValue: selectedOrderProduct?.adjustedUomValue
91
+ ? selectedOrderProduct.adjustedUomValue
92
+ : selectedOrderProduct.uomValue,
93
+ totalUomValue: selectedOrderProduct?.adjustedTotalUomValue
94
+ ? selectedOrderProduct.adjustedTotalUomValue
95
+ : selectedOrderProduct.totalUomValue,
96
+ palletQty: selectedOrderProduct?.adjustedPalletQty
97
+ ? selectedOrderProduct.adjustedPalletQty
98
+ : selectedOrderProduct.palletQty,
99
+ unitPrice: selectedOrderProduct?.adjustedUnitPrice
100
+ ? selectedOrderProduct.adjustedUnitPrice
101
+ : selectedOrderProduct.unitPrice,
102
+ status:
103
+ worksheet.status === WORKSHEET_STATUS.DEACTIVATED
104
+ ? ORDER_PRODUCT_STATUS.READY_TO_UNLOAD
105
+ : ORDER_PRODUCT_STATUS.UNLOADING,
106
+ updater: user
107
+ })
108
+ })
109
+ }
110
+
111
+ if (addedApprovedProducts?.length > 0) {
112
+ addedApprovedProducts.map((addedApprovedProd: OrderProduct) => {
113
+ const selectedOrderProduct: OrderProduct = storedOrderProducts.find(
114
+ (op: OrderProduct) => op.id === addedApprovedProd.id
115
+ )
116
+ updatedOrderProducts.push({
117
+ ...selectedOrderProduct,
118
+ batchId: selectedOrderProduct.adjustedBatchId,
119
+ batchIdRef: selectedOrderProduct.adjustedBatchIdRef,
120
+ packingType: selectedOrderProduct.adjustedPackingType,
121
+ packQty: selectedOrderProduct.adjustedPackQty,
122
+ uom: selectedOrderProduct.adjustedUom,
123
+ uomValue: selectedOrderProduct.adjustedUomValue,
124
+ totalUomValue: selectedOrderProduct.adjustedTotalUomValue,
125
+ palletQty: selectedOrderProduct.adjustedPalletQty,
126
+ unitPrice: selectedOrderProduct.adjustedUnitPrice,
127
+ status:
128
+ worksheet.status === WORKSHEET_STATUS.DEACTIVATED
129
+ ? ORDER_PRODUCT_STATUS.READY_TO_UNLOAD
130
+ : ORDER_PRODUCT_STATUS.UNLOADING,
131
+ updater: user
132
+ })
133
+ })
134
+ }
135
+
136
+ debug('approved and updated order product', updatedOrderProducts)
137
+ await tx.getRepository(OrderProduct).save(updatedOrderProducts)
138
+
139
+ const unloadingWSDs: any[] = await Promise.all(
140
+ addedApprovedProducts.map(async (targetProduct: OrderProduct) => {
141
+ return {
142
+ domain,
143
+ bizplace: customerBizplace,
144
+ worksheet,
145
+ name: WorksheetNoGenerator.unloadingDetail(),
146
+ targetProduct: await tx.getRepository(OrderProduct).findOneBy({ id: targetProduct.id }),
147
+ type: WORKSHEET_TYPE.UNLOADING,
148
+ status:
149
+ worksheet.status === WORKSHEET_STATUS.EXECUTING
150
+ ? WORKSHEET_STATUS.EXECUTING
151
+ : WORKSHEET_STATUS.DEACTIVATED,
152
+ creator: user,
153
+ updater: user
154
+ }
155
+ })
156
+ )
157
+ debug('new unloading worksheet details', unloadingWSDs)
158
+ await tx.getRepository(WorksheetDetail).save(unloadingWSDs)
159
+ }
160
+
161
+ if (rejectedProducts?.length) {
162
+ const addedRejectedProducts: OrderProduct[] = rejectedProducts.filter(
163
+ (addedRejectedProduct: OrderProduct) => addedRejectedProduct.status === ORDER_PRODUCT_STATUS.ADDED
164
+ )
165
+ let editedRejectedProducts: OrderProduct[] = rejectedProducts.filter(
166
+ (editedRejectedProduct: OrderProduct) => editedRejectedProduct.status === ORDER_PRODUCT_STATUS.EDITED
167
+ )
168
+
169
+ if (editedRejectedProducts?.length > 0) {
170
+ editedRejectedProducts = editedRejectedProducts.map((editedRejectProduct: OrderProduct) => {
171
+ const selectedOrderProduct: OrderProduct = storedOrderProducts.find(
172
+ (op: OrderProduct) => op.id === editedRejectProduct.id
173
+ )
174
+
175
+ return {
176
+ ...selectedOrderProduct,
177
+ status:
178
+ worksheet.status === WORKSHEET_STATUS.DEACTIVATED
179
+ ? ORDER_PRODUCT_STATUS.READY_TO_UNLOAD
180
+ : ORDER_PRODUCT_STATUS.UNLOADING,
181
+ updater: user
182
+ }
183
+ })
184
+ debug('rejected existing order product changes', editedRejectedProducts)
185
+ await tx.getRepository(OrderProduct).save(editedRejectedProducts)
186
+ }
187
+
188
+ debug('rejected added order product', addedRejectedProducts)
189
+ if (addedRejectedProducts?.length > 0) {
190
+ let deleteOrderProducts: OrderProduct[] = []
191
+ addedRejectedProducts.map(rejectedOp => {
192
+ //@ts-ignore
193
+ const selectedOrderProduct: OrderProduct[] = storedOrderProducts.find(
194
+ (op: OrderProduct) => op.id === rejectedOp.id
195
+ )
196
+ //@ts-ignore
197
+ deleteOrderProducts.push(selectedOrderProduct)
198
+ })
199
+
200
+ await tx.getRepository(OrderProduct).delete(deleteOrderProducts)
201
+ }
202
+ }
203
+
204
+ // notification logics
205
+ // get Office Admin Users
206
+ const users: any[] = await tx
207
+ .getRepository('users_roles')
208
+ .createQueryBuilder('ur')
209
+ .select('ur.users_id', 'id')
210
+ .where(qb => {
211
+ const subQuery = qb
212
+ .subQuery()
213
+ .select('role.id')
214
+ .from(Role, 'role')
215
+ .where("role.name = 'Office Admin'")
216
+ .andWhere('role.domain_id = :domain', { domain: domain.id })
217
+ .getQuery()
218
+ return 'ur.roles_id IN ' + subQuery
219
+ })
220
+ .getRawMany()
221
+
222
+ // send notification to Office Admin Users
223
+ if (users?.length && context.header?.referer) {
224
+ const receivers: any[] = users.map(user => user.id)
225
+ const msg = {
226
+ title: `Product changes has been approved/rejected - (${arrivalNotice.name}, ${customerBizplace.name}) `,
227
+ body: `Approved products are ready for unloading`,
228
+ url: context.header.referer,
229
+ data: { url: context.header.referer }
230
+ }
231
+
232
+ /**
233
+ * @notes Temporary off sendNotification due to suspect of causing wms down
234
+ */
235
+
236
+ // await sendNotification({
237
+ // receivers,
238
+ // message: { ...msg }
239
+ // })
240
+ }
241
+ }
242
+ }
@@ -0,0 +1,51 @@
1
+ import { EntityManager, Equal, Not } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
7
+ import { PutawayWorksheetController } from '../../../../controllers'
8
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
9
+
10
+ export const activatePutawayResolver = {
11
+ async activatePutaway(_: any, { worksheetNo, putawayWorksheetDetails }, context: ResolverContext) {
12
+ const { tx, domain, user } = context.state
13
+ const foundWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
14
+ where: {
15
+ domain: { id: domain.id },
16
+ name: worksheetNo,
17
+ status: WORKSHEET_STATUS.DEACTIVATED,
18
+ type: WORKSHEET_TYPE.PUTAWAY
19
+ },
20
+ relations: ['bizplace', 'arrivalNotice', 'worksheetDetails', 'worksheetDetails.targetInventory']
21
+ })
22
+
23
+ if (!foundWorksheet) throw new Error(`Worksheet doesn't exists`)
24
+
25
+ const relatedWorksheetCnt: number = await tx.getRepository(Worksheet).count({
26
+ where: {
27
+ domain: { id: domain.id },
28
+ arrivalNotice: { id: foundWorksheet.arrivalNotice.id },
29
+ type: WORKSHEET_TYPE.VAS,
30
+ status: Not(Equal(WORKSHEET_STATUS.DONE))
31
+ }
32
+ })
33
+
34
+ if (relatedWorksheetCnt) {
35
+ throw new Error(`Related VAS order with GAN: ${foundWorksheet.arrivalNotice.name} is still under processing.`)
36
+ }
37
+
38
+ return await activatePutaway(tx, domain, user, worksheetNo, putawayWorksheetDetails)
39
+ }
40
+ }
41
+
42
+ export async function activatePutaway(
43
+ tx: EntityManager,
44
+ domain: Domain,
45
+ user: User,
46
+ worksheetNo: string,
47
+ putawayWorksheetDetails: Partial<WorksheetDetail>[]
48
+ ) {
49
+ const worksheetController: PutawayWorksheetController = new PutawayWorksheetController(tx, domain, user)
50
+ await worksheetController.activatePutaway(worksheetNo, putawayWorksheetDetails)
51
+ }
@@ -0,0 +1,105 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
6
+ import { ArrivalNotice } from '@things-factory/sales-base'
7
+ import { Domain } from '@things-factory/shell'
8
+
9
+ import { PutawayWorksheetController } from '../../../../controllers'
10
+ import { EcommerceController, SellercraftController } from '../../../../controllers/ecommerce'
11
+ import { Worksheet } from '../../../../entities'
12
+
13
+ export const completePutawayResolver = {
14
+ async completePutaway(_: any, { arrivalNoticeNo }, context: ResolverContext) {
15
+ const { tx, user, domain } = context.state
16
+ await completePutaway(tx, domain, user, arrivalNoticeNo)
17
+
18
+ const arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({
19
+ where: { domain: { id: domain.id }, name: arrivalNoticeNo },
20
+ relations: [
21
+ 'purchaseOrder',
22
+ 'bizplace',
23
+ 'bizplace.domain',
24
+ 'bizplace.company',
25
+ 'bizplace.company.domain',
26
+ 'orderProducts',
27
+ 'orderProducts.product',
28
+ 'orderProducts.product.productDetails',
29
+ 'orderProducts.product.productDetails.childProductDetail'
30
+ ]
31
+ })
32
+
33
+ // search for any active marketplace connection
34
+ const companyDomain: Domain = arrivalNotice.bizplace.company.domain
35
+ const customerDomain: Domain = arrivalNotice.bizplace.domain
36
+
37
+ const orderSource: string = arrivalNotice.source
38
+ switch (orderSource) {
39
+ case ApplicationType.SELLERCRAFT:
40
+ const sellercraft: Sellercraft = await tx
41
+ .getRepository(Sellercraft)
42
+ .findOneBy({ domain: { id: customerDomain.id }, status: SellercraftStatus.ACTIVE })
43
+
44
+ if (sellercraft) {
45
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
46
+ await sellercraftCtrl.registerProductInbound(sellercraft, arrivalNotice)
47
+ }
48
+ break
49
+
50
+ case ApplicationType.MMS:
51
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
52
+ where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
53
+ relations: ['marketplaceDistributors']
54
+ })
55
+
56
+ if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
57
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
58
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, arrivalNotice.orderProducts, companyDomain)
59
+ }
60
+ break
61
+
62
+ default:
63
+ break
64
+ }
65
+
66
+ // const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
67
+ // where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
68
+ // relations: ['marketplaceDistributors']
69
+ // })
70
+
71
+ // const sellercraft: Sellercraft = await tx
72
+ // .getRepository(Sellercraft)
73
+ // .findOne({ domain: customerDomain, status: SellercraftStatus.ACTIVE })
74
+
75
+ // if (sellercraft) {
76
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
77
+ // await sellercraftCtrl.registerProductInbound(sellercraft, arrivalNotice)
78
+ // }
79
+
80
+ // if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
81
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
82
+ // await ecommerceCtrl.updateProductVariationStock(marketplaceStores, arrivalNotice.orderProducts, companyDomain)
83
+ // }
84
+ }
85
+ }
86
+
87
+ export async function completePutaway(
88
+ tx: EntityManager,
89
+ domain: Domain,
90
+ user: User,
91
+ arrivalNoticeNo: string
92
+ ): Promise<void> {
93
+ const worksheetController: PutawayWorksheetController = new PutawayWorksheetController(tx, domain, user)
94
+ let worksheet: Worksheet = await worksheetController.completePutaway(arrivalNoticeNo)
95
+
96
+ /**
97
+ * 4. Generate the Goods Received Note straight away
98
+ */
99
+ if (!worksheet.arrivalNotice?.name || !worksheet.bizplace?.id) {
100
+ worksheet = await tx.getRepository(Worksheet).findOne({
101
+ where: { id: worksheet.id },
102
+ relations: ['bizplace', 'arrivalNotice']
103
+ })
104
+ }
105
+ }
@@ -0,0 +1,11 @@
1
+ import { activatePutawayResolver } from './activate-putaway'
2
+ import { completePutawayResolver } from './complete-putaway'
3
+ import { putawayResolver } from './putaway'
4
+ import { undoPutawayResolver } from './undo-putaway'
5
+
6
+ export const Mutations = {
7
+ ...activatePutawayResolver,
8
+ ...putawayResolver,
9
+ ...undoPutawayResolver,
10
+ ...completePutawayResolver
11
+ }