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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +2 -0
  2. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  3. package/dist-server/graphql/resolvers/worksheet/vas-candidates.d.ts +2 -0
  4. package/dist-server/tsconfig.tsbuildinfo +1 -1
  5. package/dist-server/utils/inventory-util.d.ts +2 -0
  6. package/package.json +17 -17
  7. package/server/constants/index.ts +5 -0
  8. package/server/constants/rule-type.ts +4 -0
  9. package/server/constants/target-type.ts +6 -0
  10. package/server/constants/template.ts +12 -0
  11. package/server/constants/transaction-type.ts +9 -0
  12. package/server/constants/worksheet.ts +38 -0
  13. package/server/controllers/ecommerce/ecommerce-controller.ts +209 -0
  14. package/server/controllers/ecommerce/index.ts +2 -0
  15. package/server/controllers/ecommerce/sellercraft-controller.ts +358 -0
  16. package/server/controllers/inbound/index.ts +4 -0
  17. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +450 -0
  18. package/server/controllers/inbound/putaway-worksheet-controller.ts +454 -0
  19. package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +291 -0
  20. package/server/controllers/inbound/unloading-worksheet-controller.ts +1400 -0
  21. package/server/controllers/index.ts +21 -0
  22. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +537 -0
  23. package/server/controllers/inspect/index.ts +1 -0
  24. package/server/controllers/outbound/index.ts +5 -0
  25. package/server/controllers/outbound/loading-worksheet-controller.ts +377 -0
  26. package/server/controllers/outbound/packing-worksheet-controller.ts +449 -0
  27. package/server/controllers/outbound/picking-worksheet-controller.ts +1769 -0
  28. package/server/controllers/outbound/returning-worksheet-controller.ts +254 -0
  29. package/server/controllers/outbound/sorting-worksheet-controller.ts +554 -0
  30. package/server/controllers/render-elccl-grn.ts +228 -0
  31. package/server/controllers/render-fm-grn.ts +287 -0
  32. package/server/controllers/render-grn.ts +285 -0
  33. package/server/controllers/render-invoices.ts +201 -0
  34. package/server/controllers/render-job-sheet.ts +208 -0
  35. package/server/controllers/render-kimeda-grn.ts +185 -0
  36. package/server/controllers/render-manifest.ts +76 -0
  37. package/server/controllers/render-manual-do.ts +227 -0
  38. package/server/controllers/render-orientage-do.ts +376 -0
  39. package/server/controllers/render-orientage-grn.ts +191 -0
  40. package/server/controllers/render-po.ts +182 -0
  41. package/server/controllers/render-ro-do.ts +404 -0
  42. package/server/controllers/render-seebuu-grn.ts +208 -0
  43. package/server/controllers/vas/index.ts +1 -0
  44. package/server/controllers/vas/vas-worksheet-controller.ts +848 -0
  45. package/server/controllers/worksheet-controller.ts +1267 -0
  46. package/server/entities/index.ts +8 -0
  47. package/server/entities/warehouse-bizplace-onhand-inventory.ts +148 -0
  48. package/server/entities/worksheet-detail.ts +106 -0
  49. package/server/entities/worksheet-movement.ts +34 -0
  50. package/server/entities/worksheet.ts +100 -0
  51. package/server/graphql/index.ts +7 -0
  52. package/server/graphql/resolvers/index.ts +8 -0
  53. package/server/graphql/resolvers/pallet/index.ts +7 -0
  54. package/server/graphql/resolvers/pallet/pallet-outbound.ts +92 -0
  55. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +137 -0
  56. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +20 -0
  57. package/server/graphql/resolvers/worksheet/check-inventory-release.ts +37 -0
  58. package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +63 -0
  59. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +213 -0
  60. package/server/graphql/resolvers/worksheet/create-worksheet.ts +21 -0
  61. package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +173 -0
  62. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +211 -0
  63. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +79 -0
  64. package/server/graphql/resolvers/worksheet/delete-worksheet.ts +21 -0
  65. package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +104 -0
  66. package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +191 -0
  67. package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
  68. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +36 -0
  69. package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +29 -0
  70. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
  71. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +100 -0
  72. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +26 -0
  73. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +51 -0
  74. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +17 -0
  75. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +69 -0
  76. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +65 -0
  77. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +54 -0
  78. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +114 -0
  79. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +45 -0
  80. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +35 -0
  81. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +23 -0
  82. package/server/graphql/resolvers/worksheet/having-vas.ts +45 -0
  83. package/server/graphql/resolvers/worksheet/index.ts +142 -0
  84. package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +24 -0
  85. package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +49 -0
  86. package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +18 -0
  87. package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +41 -0
  88. package/server/graphql/resolvers/worksheet/inspecting/index.ts +17 -0
  89. package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +30 -0
  90. package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +46 -0
  91. package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +23 -0
  92. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +150 -0
  93. package/server/graphql/resolvers/worksheet/loaded-inventories.ts +40 -0
  94. package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +73 -0
  95. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +165 -0
  96. package/server/graphql/resolvers/worksheet/loading/index.ts +11 -0
  97. package/server/graphql/resolvers/worksheet/loading/loading.ts +46 -0
  98. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +25 -0
  99. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +150 -0
  100. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +34 -0
  101. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +69 -0
  102. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +102 -0
  103. package/server/graphql/resolvers/worksheet/packing/index.ts +13 -0
  104. package/server/graphql/resolvers/worksheet/packing/packing.ts +59 -0
  105. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +70 -0
  106. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  107. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +378 -0
  108. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +142 -0
  109. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +234 -0
  110. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +40 -0
  111. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +98 -0
  112. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +50 -0
  113. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +44 -0
  114. package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +32 -0
  115. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +137 -0
  116. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +282 -0
  117. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +121 -0
  118. package/server/graphql/resolvers/worksheet/picking/index.ts +31 -0
  119. package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +35 -0
  120. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +96 -0
  121. package/server/graphql/resolvers/worksheet/picking/picking.ts +55 -0
  122. package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +52 -0
  123. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +25 -0
  124. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  125. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +31 -0
  126. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  127. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +147 -0
  128. package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +242 -0
  129. package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +51 -0
  130. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +105 -0
  131. package/server/graphql/resolvers/worksheet/putaway/index.ts +11 -0
  132. package/server/graphql/resolvers/worksheet/putaway/putaway.ts +26 -0
  133. package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +25 -0
  134. package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +55 -0
  135. package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +38 -0
  136. package/server/graphql/resolvers/worksheet/putaway-return/index.ts +11 -0
  137. package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +30 -0
  138. package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +29 -0
  139. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +83 -0
  140. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +82 -0
  141. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +133 -0
  142. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +186 -0
  143. package/server/graphql/resolvers/worksheet/relocate-pallet.ts +67 -0
  144. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +127 -0
  145. package/server/graphql/resolvers/worksheet/return-worksheet.ts +70 -0
  146. package/server/graphql/resolvers/worksheet/returning/activate-return.ts +24 -0
  147. package/server/graphql/resolvers/worksheet/returning/complete-return.ts +39 -0
  148. package/server/graphql/resolvers/worksheet/returning/index.ts +9 -0
  149. package/server/graphql/resolvers/worksheet/returning/returning.ts +26 -0
  150. package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +25 -0
  151. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +40 -0
  152. package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +23 -0
  153. package/server/graphql/resolvers/worksheet/sorting/index.ts +13 -0
  154. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +31 -0
  155. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +32 -0
  156. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +87 -0
  157. package/server/graphql/resolvers/worksheet/transfer.ts +176 -0
  158. package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +54 -0
  159. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +78 -0
  160. package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +56 -0
  161. package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +25 -0
  162. package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +25 -0
  163. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +76 -0
  164. package/server/graphql/resolvers/worksheet/unloading/index.ts +21 -0
  165. package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +26 -0
  166. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  167. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  168. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +25 -0
  169. package/server/graphql/resolvers/worksheet/unloading/unload.ts +26 -0
  170. package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +28 -0
  171. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +29 -0
  172. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +91 -0
  173. package/server/graphql/resolvers/worksheet/unloading-return/index.ts +9 -0
  174. package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +75 -0
  175. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +98 -0
  176. package/server/graphql/resolvers/worksheet/update-worksheet.ts +25 -0
  177. package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +25 -0
  178. package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +25 -0
  179. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +72 -0
  180. package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +31 -0
  181. package/server/graphql/resolvers/worksheet/vas/index.ts +15 -0
  182. package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +24 -0
  183. package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +24 -0
  184. package/server/graphql/resolvers/worksheet/vas-candidates.ts +177 -0
  185. package/server/graphql/resolvers/worksheet/vas-inventories.ts +41 -0
  186. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +1182 -0
  187. package/server/graphql/resolvers/worksheet/vas-transactions/index.ts +5 -0
  188. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +56 -0
  189. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.ts +20 -0
  190. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +27 -0
  191. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.ts +14 -0
  192. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.ts +14 -0
  193. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +96 -0
  194. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +93 -0
  195. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.ts +4 -0
  196. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +105 -0
  197. package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +40 -0
  198. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +236 -0
  199. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.ts +3 -0
  200. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +402 -0
  201. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +166 -0
  202. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +116 -0
  203. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.ts +3 -0
  204. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +167 -0
  205. package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +74 -0
  206. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +20 -0
  207. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.ts +2 -0
  208. package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +164 -0
  209. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +110 -0
  210. package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +43 -0
  211. package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +46 -0
  212. package/server/graphql/resolvers/worksheet/worksheet.ts +330 -0
  213. package/server/graphql/resolvers/worksheet/worksheets.ts +493 -0
  214. package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +22 -0
  215. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +38 -0
  216. package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +18 -0
  217. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +206 -0
  218. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +165 -0
  219. package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +26 -0
  220. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +94 -0
  221. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +259 -0
  222. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +142 -0
  223. package/server/graphql/resolvers/worksheet-detail/index.ts +34 -0
  224. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +165 -0
  225. package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +39 -0
  226. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +19 -0
  227. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +56 -0
  228. package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +21 -0
  229. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +17 -0
  230. package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +12 -0
  231. package/server/graphql/resolvers/worksheet-movement/index.ts +17 -0
  232. package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +15 -0
  233. package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +10 -0
  234. package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +14 -0
  235. package/server/graphql/types/index.ts +15 -0
  236. package/server/graphql/types/pallet/index.ts +12 -0
  237. package/server/graphql/types/pallet/pallet.ts +7 -0
  238. package/server/graphql/types/worksheet/arrival-notice-worksheet.ts +8 -0
  239. package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
  240. package/server/graphql/types/worksheet/contact-point-info.ts +12 -0
  241. package/server/graphql/types/worksheet/cycle-count-worksheet.ts +16 -0
  242. package/server/graphql/types/worksheet/delivery-info.ts +11 -0
  243. package/server/graphql/types/worksheet/delivery-order-info.ts +25 -0
  244. package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
  245. package/server/graphql/types/worksheet/delivery-worksheet.ts +7 -0
  246. package/server/graphql/types/worksheet/executing-worksheet.ts +8 -0
  247. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  248. package/server/graphql/types/worksheet/goods-delivery-note.ts +8 -0
  249. package/server/graphql/types/worksheet/index.ts +750 -0
  250. package/server/graphql/types/worksheet/inventory-check-worksheet.ts +7 -0
  251. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +9 -0
  252. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  253. package/server/graphql/types/worksheet/my-picking-assignment-status.ts +9 -0
  254. package/server/graphql/types/worksheet/new-worksheet.ts +10 -0
  255. package/server/graphql/types/worksheet/picking-assignment-status.ts +9 -0
  256. package/server/graphql/types/worksheet/product-approval.ts +11 -0
  257. package/server/graphql/types/worksheet/release-good-worksheet.ts +8 -0
  258. package/server/graphql/types/worksheet/return-order-worksheet.ts +8 -0
  259. package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
  260. package/server/graphql/types/worksheet/vas-order-worksheet.ts +7 -0
  261. package/server/graphql/types/worksheet/vas-worksheet.ts +8 -0
  262. package/server/graphql/types/worksheet/worksheet-detail-info.ts +68 -0
  263. package/server/graphql/types/worksheet/worksheet-info.ts +33 -0
  264. package/server/graphql/types/worksheet/worksheet-list.ts +8 -0
  265. package/server/graphql/types/worksheet/worksheet-patch.ts +19 -0
  266. package/server/graphql/types/worksheet/worksheet-with-pagination.ts +9 -0
  267. package/server/graphql/types/worksheet/worksheet.ts +34 -0
  268. package/server/graphql/types/worksheet-detail/index.ts +81 -0
  269. package/server/graphql/types/worksheet-detail/inventory-detail.ts +39 -0
  270. package/server/graphql/types/worksheet-detail/new-worksheet-detail.ts +20 -0
  271. package/server/graphql/types/worksheet-detail/pallet-info.ts +8 -0
  272. package/server/graphql/types/worksheet-detail/worksheet-detail-list.ts +8 -0
  273. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +28 -0
  274. package/server/graphql/types/worksheet-detail/worksheet-detail.ts +29 -0
  275. package/server/graphql/types/worksheet-movement/index.ts +30 -0
  276. package/server/graphql/types/worksheet-movement/new-worksheet-movement.ts +8 -0
  277. package/server/graphql/types/worksheet-movement/worksheet-movement-list.ts +8 -0
  278. package/server/graphql/types/worksheet-movement/worksheet-movement-patch.ts +8 -0
  279. package/server/graphql/types/worksheet-movement/worksheet-movement.ts +10 -0
  280. package/server/index.ts +14 -0
  281. package/server/middlewares/index.ts +3 -0
  282. package/server/migrations/index.ts +9 -0
  283. package/server/routes.ts +80 -0
  284. package/server/utils/datetime-util.ts +54 -0
  285. package/server/utils/index.ts +4 -0
  286. package/server/utils/inventory-util.ts +390 -0
  287. package/server/utils/worksheet-no-generator.ts +206 -0
  288. package/server/utils/worksheet-util.ts +85 -0
@@ -0,0 +1,236 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Bizplace } from '@things-factory/biz-base'
5
+ import { Product } from '@things-factory/product-base'
6
+ import { OrderVas } from '@things-factory/sales-base'
7
+ import { Domain } from '@things-factory/shell'
8
+ import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
9
+
10
+ import { deductProductAmount, temporaryGetCurrentAmount, upsertInventory } from '../common-utils'
11
+ import {
12
+ FeaturedInventoryInterface,
13
+ OperationGuideInterface,
14
+ PackingUnits,
15
+ RefOrderType,
16
+ RepackagingGuide,
17
+ RepackedInvInfo,
18
+ TemporaryPalletChangesInterface
19
+ } from '../interfaces'
20
+
21
+ export async function completeRepackaging(trxMgr: EntityManager, orderVas: OrderVas, user: User): Promise<void> {
22
+ orderVas = await trxMgr.getRepository(OrderVas).findOne({
23
+ where: { id: orderVas.id },
24
+ relations: [
25
+ 'domain',
26
+ 'bizplace',
27
+ 'inventory',
28
+ 'inventory.product',
29
+ 'inventory.productDetail',
30
+ 'arrivalNotice',
31
+ 'releaseGood',
32
+ 'vasOrder',
33
+ 'vas'
34
+ ]
35
+ })
36
+ const domain: Domain = orderVas.domain
37
+ const bizplace: Bizplace = orderVas.bizplace
38
+ let originInv: Inventory = orderVas.inventory
39
+ let transactionType: string = INVENTORY_TRANSACTION_TYPE.REPACKAGING
40
+ const operationGuide: OperationGuideInterface<RepackagingGuide> = JSON.parse(orderVas.operationGuide)
41
+ const operationGuideData: RepackagingGuide = operationGuide.data
42
+ const packingUnit: string = operationGuideData.packingUnit
43
+ const stdAmount: number = operationGuideData.stdAmount
44
+ const toPackingType: string = operationGuideData.toPackingType
45
+ const { arrivalNotice, releaseGood, vasOrder } = orderVas
46
+ const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder
47
+ const repackedInvs: RepackedInvInfo[] = operationGuideData.repackedInvs
48
+ const repackedFroms: TemporaryPalletChangesInterface[] = extractRepackedFroms(
49
+ operationGuideData,
50
+ orderVas,
51
+ packingUnit
52
+ )
53
+
54
+ if (orderVas.vas && orderVas.vas.operationGuide === 'vas-repack-relabel') {
55
+ transactionType = INVENTORY_TRANSACTION_TYPE.REPACKAGING_RELABELING
56
+ const toProduct: any = operationGuideData.toProduct
57
+
58
+ // please add domain filter as well
59
+ const foundProduct: Product = await trxMgr.getRepository(Product).findOne({
60
+ where: {
61
+ id: toProduct.product.id,
62
+ sku: toProduct.product.sku,
63
+ name: toProduct.product.name
64
+ }
65
+ })
66
+
67
+ if (!foundProduct) {
68
+ throw new Error(`Cannot find product with SKU ${toProduct.product.sku}`)
69
+ }
70
+
71
+ originInv.product = foundProduct
72
+ originInv.batchId = operationGuideData.toBatchId
73
+ originInv.productDetail = toProduct.productDetailId
74
+ }
75
+
76
+ // create repacked inventories based on repackedInvs
77
+ for (const ri of repackedInvs) {
78
+ const repackedFromList: TemporaryPalletChangesInterface[] = ri.repackedFrom.filter(
79
+ (rf: TemporaryPalletChangesInterface) => rf.toPalletId === ri.palletId
80
+ )
81
+
82
+ const { qty, uomValue } = temporaryGetCurrentAmount(repackedFromList, ri.palletId, packingUnit, stdAmount)
83
+ /* const changedInv: Inventory = */ await upsertInventory(
84
+ trxMgr,
85
+ domain,
86
+ bizplace,
87
+ user,
88
+ originInv,
89
+ refOrder,
90
+ ri.palletId,
91
+ ri.locationName,
92
+ toPackingType,
93
+ packingUnit == PackingUnits.QTY ? qty : ri.repackedPkgQty,
94
+ uomValue,
95
+ transactionType,
96
+ stdAmount,
97
+ packingUnit
98
+ )
99
+ }
100
+
101
+ for (const rf of repackedFroms) {
102
+ let foundInventory: Inventory = await trxMgr.getRepository(Inventory).findOne({
103
+ where: {
104
+ domain: { id: domain.id },
105
+ bizplace: { id: bizplace.id },
106
+ palletId: rf.fromPalletId
107
+ }
108
+ })
109
+
110
+ if (foundInventory) {
111
+ let reducedQty: number
112
+ let reducedUomValue: number
113
+
114
+ if (packingUnit == PackingUnits.QTY) {
115
+ reducedQty = rf.reducedUnitQty / rf.packingSize
116
+ reducedUomValue = rf.reducedUomValue
117
+ } else if (packingUnit == PackingUnits.UOM) {
118
+ // reducedQty will remain 0 if there is remaining uomValue
119
+ reducedQty = foundInventory.uomValue - rf.reducedUomValue == 0 ? 1 : 0
120
+ reducedUomValue = rf.reducedUomValue
121
+ }
122
+
123
+ foundInventory = await deductProductAmount(
124
+ trxMgr,
125
+ domain,
126
+ bizplace,
127
+ user,
128
+ refOrder,
129
+ foundInventory,
130
+ reducedQty,
131
+ getRoundedAmount(reducedUomValue, 1000),
132
+ transactionType,
133
+ rf.originalQty,
134
+ getRoundedAmount(rf.originalUomValue, 1000),
135
+ rf.currentUnitQty,
136
+ rf.currentUomValue
137
+ )
138
+ }
139
+ }
140
+ }
141
+
142
+ function extractRepackedFroms(
143
+ operationGuideData: RepackagingGuide,
144
+ orderVas: OrderVas,
145
+ packingUnit: string
146
+ ): Partial<TemporaryPalletChangesInterface[]> {
147
+ return (
148
+ operationGuideData.repackedInvs
149
+ .reduce((acc, ri: RepackedInvInfo) => {
150
+ acc = [...acc, ...ri.repackedFrom]
151
+ return acc
152
+ }, [])
153
+ // .flat()
154
+ .reduce((acc, inv) => {
155
+ let foundInv = acc.find(a => a.fromPalletId == inv.fromPalletId)
156
+ if (foundInv) {
157
+ if (packingUnit == PackingUnits.QTY) {
158
+ foundInv.reducedUnitQty += inv.reducedUnitQty
159
+ foundInv.reducedUomValue += inv.reducedUomValue
160
+ } else if (packingUnit == PackingUnits.UOM) {
161
+ foundInv.reducedQty += inv.reducedQty
162
+ foundInv.reducedUomValue += inv.reducedUomValue
163
+ }
164
+ } else {
165
+ if (packingUnit == PackingUnits.QTY) {
166
+ acc.push({
167
+ fromPalletId: inv.fromPalletId,
168
+ reducedUnitQty: inv.reducedUnitQty,
169
+ reducedUomValue: inv.reducedUomValue,
170
+ packingSize: inv.packingSize
171
+ })
172
+ } else if (packingUnit == PackingUnits.UOM) {
173
+ acc.push({
174
+ fromPalletId: inv.fromPalletId,
175
+ reducedQty: inv.reducedQty,
176
+ reducedUomValue: inv.reducedUomValue,
177
+ packingSize: inv.packingSize
178
+ })
179
+ }
180
+ }
181
+
182
+ return acc
183
+ }, [])
184
+ .map((pc: TemporaryPalletChangesInterface) => {
185
+ //@ts-ignore
186
+ const featuredInvs: FeaturedInventoryInterface[] = operationGuideData.featuredInvs || []
187
+ const foundFeaturedInv = featuredInvs.find(
188
+ (inv: FeaturedInventoryInterface) => inv.palletId === pc.fromPalletId
189
+ )
190
+
191
+ let originalQty: number
192
+ let originalUomValue: number
193
+
194
+ if (foundFeaturedInv) {
195
+ originalQty = foundFeaturedInv.originalQty
196
+ originalUomValue = foundFeaturedInv.originalUomValue
197
+
198
+ if (packingUnit == PackingUnits.QTY) {
199
+ pc.currentUnitQty = foundFeaturedInv.currentUnitQty
200
+ } else if (packingUnit == PackingUnits.UOM) {
201
+ pc.currentUomValue = foundFeaturedInv.currentUomValue
202
+ }
203
+ } else {
204
+ originalQty =
205
+ packingUnit == PackingUnits.UOM
206
+ ? orderVas.qty
207
+ : orderVas.qty -
208
+ featuredInvs.reduce((qty: number, inv: FeaturedInventoryInterface) => {
209
+ return qty + inv.originalQty
210
+ }, 0)
211
+
212
+ originalUomValue =
213
+ orderVas.uomValue -
214
+ featuredInvs.reduce((uomValue: number, inv: FeaturedInventoryInterface) => {
215
+ return uomValue + inv.originalUomValue
216
+ }, 0)
217
+
218
+ if (packingUnit == PackingUnits.QTY) {
219
+ pc.currentUnitQty = originalQty - pc.reducedUnitQty / pc.packingSize
220
+ } else if (packingUnit == PackingUnits.UOM) {
221
+ pc.currentUomValue = getRoundedAmount(originalUomValue - pc.reducedUomValue)
222
+ }
223
+ }
224
+
225
+ return {
226
+ ...pc,
227
+ originalQty,
228
+ originalUomValue
229
+ }
230
+ })
231
+ )
232
+ }
233
+
234
+ function getRoundedAmount(value: number, decimalPlace: number = 100): number {
235
+ return Math.round((value + Number.EPSILON) * decimalPlace) / decimalPlace
236
+ }
@@ -0,0 +1,3 @@
1
+ export * from './complete-repackaging'
2
+ export * from './repackaging'
3
+ export * from './undo-repackaging'
@@ -0,0 +1,402 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { Bizplace } from '@things-factory/biz-base'
4
+ import { OrderVas } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { Inventory, Location, Warehouse } from '@things-factory/warehouse-base'
7
+
8
+ import { Worksheet, WorksheetDetail } from '../../../../../entities'
9
+ import { checkPalletDuplication, checkPalletIdenticallity } from '../../../../../utils'
10
+ import { executeVas } from '../../vas/execute-vas'
11
+ import {
12
+ assignInventory,
13
+ getWorksheetDetailByName,
14
+ temporaryGetRemainInventoryAmount,
15
+ updateRelatedOrderVas
16
+ } from '../common-utils'
17
+ import {
18
+ FeaturedInventoryInterface,
19
+ OperationGuideInterface,
20
+ PackingUnits,
21
+ RefOrderType,
22
+ RepackagingGuide,
23
+ RepackedInvInfo,
24
+ TemporaryPalletChangesInterface
25
+ } from '../interfaces'
26
+
27
+ export const repackagingResolver = {
28
+ async repackaging(
29
+ _: any,
30
+ { worksheetDetailName, fromPalletId, toPalletId, locationName, packageQty },
31
+ context: ResolverContext
32
+ ) {
33
+ const { tx, domain, user } = context.state
34
+ const location: Location = await tx.getRepository(Location).findOne({
35
+ where: { domain: { id: domain.id }, name: locationName },
36
+ relations: ['warehouse']
37
+ })
38
+ if (!location) throw new Error(`Couldn't find location by its name (${locationName})`)
39
+ const warehouse: Warehouse = location.warehouse
40
+ if (!warehouse) throw new Error(`Location (name: ${locationName}) doesn't have any relation with warehouse`)
41
+
42
+ // Find target worksheet detail & target order vas & bizplace
43
+ const wsd: WorksheetDetail = await getWorksheetDetailByName(tx, domain, worksheetDetailName)
44
+ let { bizplace, targetVas }: { bizplace: Bizplace; targetVas: OrderVas } = wsd
45
+
46
+ // Check whether from pallet has valid condition compared with customer's request
47
+ // Batch ID, product and packing type
48
+ const { identicallity, errorMessage } = await checkPalletIdenticallity(
49
+ domain,
50
+ bizplace,
51
+ fromPalletId,
52
+ targetVas.targetBatchId,
53
+ targetVas.targetProduct,
54
+ targetVas.packingType,
55
+ tx
56
+ )
57
+ if (!identicallity) throw new Error(errorMessage)
58
+
59
+ // Check whether there's duplicated inventory in warehouse.
60
+ if (await checkPalletDuplication(domain, bizplace, toPalletId, tx))
61
+ throw new Error(`The lot ID (${toPalletId}) is duplicated.`)
62
+
63
+ // Init refOrder
64
+ //@ts-ignore
65
+ const { arrivalNotice, releaseGood, vasOrder }: { [key: string]: RefOrderType } = targetVas
66
+ const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder || null
67
+ if (!refOrder) throw new Error(`Couldn't find reference order with current order vas`)
68
+
69
+ // Assign inventory if specific inventory isn't assigned yet.
70
+ // This case is occured when the VAS order comes with Arrival Notice or Release Good
71
+ if (!targetVas.inventory) {
72
+ //@ts-ignore
73
+ targetVas = await assignInventory(tx, domain, bizplace, user, wsd, refOrder, targetVas, fromPalletId)
74
+ }
75
+
76
+ let originInv: Inventory = targetVas.inventory
77
+
78
+ let operationGuide: OperationGuideInterface<RepackagingGuide> = JSON.parse(targetVas.operationGuide)
79
+ let operationGuideData: RepackagingGuide = operationGuide.data
80
+ //@ts-ignore
81
+ let featuredInvs: FeaturedInventoryInterface[] = operationGuideData.featuredInvs
82
+ const packingUnit: string = operationGuideData.packingUnit
83
+ const stdAmount: number = operationGuideData.stdAmount
84
+
85
+ let repackedInvs: RepackedInvInfo[] = operationGuideData.repackedInvs
86
+
87
+ if (repackedInvs?.length && repackedInvs.some((inv: RepackedInvInfo) => inv.palletId == toPalletId))
88
+ throw new Error(`Unable to repack into the same lot ID ${toPalletId}`)
89
+
90
+ let palletChanges: TemporaryPalletChangesInterface[] = []
91
+
92
+ if (repackedInvs && repackedInvs.length) {
93
+ palletChanges = repackedInvs.reduce((acc, ri: RepackedInvInfo) => {
94
+ acc = [...acc, ...ri.repackedFrom]
95
+ return acc
96
+ }, [])
97
+ // .map((ri: RepackedInvInfo) => ri.repackedFrom).flat()
98
+ } else if (!repackedInvs) {
99
+ operationGuideData.repackedInvs = []
100
+ }
101
+
102
+ // get remainUnitQty of originInv (from previous repackaging actions)
103
+ let remainOriginInv: { remainUomValue: number; remainUnitQty: number } = {
104
+ remainUomValue: 0,
105
+ remainUnitQty: 0
106
+ }
107
+ let remainUomValue: number = 0
108
+ let remainUnitQty: number = 0
109
+
110
+ try {
111
+ remainOriginInv = await temporaryGetRemainInventoryAmount(
112
+ tx,
113
+ refOrder,
114
+ domain,
115
+ bizplace,
116
+ originInv,
117
+ palletChanges,
118
+ fromPalletId
119
+ )
120
+
121
+ remainUomValue = remainOriginInv.remainUomValue
122
+ remainUnitQty = remainOriginInv.remainUnitQty
123
+ } catch (err) {}
124
+
125
+ let repackedFroms: TemporaryPalletChangesInterface[] = []
126
+ let repackedInv: RepackedInvInfo = getRepackedInv(operationGuideData, toPalletId, locationName)
127
+ let isCompleted: boolean = false
128
+ const repackagingAmount: number = stdAmount * packageQty
129
+
130
+ if (packingUnit === PackingUnits.QTY) {
131
+ const singleUnitUomValue: number = originInv.uomValue / (originInv.qty * originInv.packingSize)
132
+ // const singleUnitUomValue: number = getRoundedAmount(
133
+ // originInv.uomValue / (originInv.qty * originInv.packingSize),
134
+ // 10000
135
+ // )
136
+
137
+ if (featuredInvs?.length && repackagingAmount > remainUnitQty) {
138
+ const inventoriesChanges = deductedFeaturedInventories(
139
+ featuredInvs,
140
+ repackagingAmount,
141
+ remainUnitQty,
142
+ toPalletId,
143
+ 'currentUnitQty'
144
+ )
145
+
146
+ //@ts-ignore
147
+ operationGuideData.featuredInvs = inventoriesChanges.featuredInvs
148
+ repackedFroms = [...repackedFroms, ...inventoriesChanges.repackedFroms]
149
+
150
+ if (remainUnitQty > 0) {
151
+ repackedFroms.push({
152
+ fromPalletId,
153
+ toPalletId,
154
+ reducedUnitQty: remainUnitQty,
155
+ reducedUomValue: remainUnitQty * singleUnitUomValue,
156
+ packingSize: originInv.packingSize
157
+ })
158
+ }
159
+ } else if (remainUnitQty >= repackagingAmount) {
160
+ repackedFroms.push({
161
+ fromPalletId,
162
+ toPalletId,
163
+ reducedUnitQty: repackagingAmount,
164
+ reducedUomValue: repackagingAmount * singleUnitUomValue,
165
+ packingSize: originInv.packingSize
166
+ })
167
+ }
168
+
169
+ repackedInv.repackedFrom = repackedFroms
170
+ const totalPackedQty: number = repackedInv.repackedFrom.reduce(
171
+ (qty: number, rf: TemporaryPalletChangesInterface) => (qty += rf.reducedUnitQty),
172
+ 0
173
+ )
174
+ repackedInv.repackedPkgQty = totalPackedQty / stdAmount
175
+ isCompleted = operationGuideData.requiredPackageQty == 0
176
+ } else if (packingUnit === PackingUnits.UOM) {
177
+ if (featuredInvs?.length && repackagingAmount > remainUomValue) {
178
+ const inventoriesChanges = deductedFeaturedInventories(
179
+ featuredInvs,
180
+ repackagingAmount,
181
+ remainUomValue,
182
+ toPalletId,
183
+ 'currentUomValue'
184
+ )
185
+
186
+ //@ts-ignore
187
+ operationGuideData.featuredInvs = inventoriesChanges.featuredInvs
188
+ repackedFroms = [...repackedFroms, ...inventoriesChanges.repackedFroms]
189
+
190
+ if (remainUomValue > 0) {
191
+ repackedFroms.push({
192
+ fromPalletId,
193
+ toPalletId,
194
+ reducedQty: 0,
195
+ reducedUomValue: remainUomValue,
196
+ // reducedUomValue: getRoundedAmount(remainUomValue),
197
+ packingSize: originInv.packingSize
198
+ })
199
+ }
200
+ } else if (remainUomValue >= repackagingAmount) {
201
+ repackedFroms.push({
202
+ fromPalletId,
203
+ toPalletId,
204
+ reducedQty: 0,
205
+ reducedUomValue: repackagingAmount,
206
+ // reducedUomValue: getRoundedAmount(repackagingAmount),
207
+ packingSize: originInv.packingSize
208
+ })
209
+ }
210
+
211
+ repackedInv.repackedFrom = repackedFroms
212
+ const totalPackedUomValue: number = repackedInv.repackedFrom.reduce(
213
+ (qty: number, rf: TemporaryPalletChangesInterface) => (qty += rf.reducedUomValue),
214
+ 0
215
+ )
216
+ repackedInv.repackedPkgQty = totalPackedUomValue / stdAmount
217
+ // repackedInv.repackedPkgQty = getRoundedAmount(totalPackedUomValue / stdAmount)
218
+ isCompleted = operationGuideData.requiredPackageQty == 0
219
+ }
220
+
221
+ // Get total required package qty to complete this VAS Task
222
+ const requiredPackageQty: number = await getRequiredPackageQty(
223
+ tx,
224
+ domain,
225
+ bizplace,
226
+ wsd.worksheet,
227
+ targetVas,
228
+ packingUnit,
229
+ stdAmount,
230
+ operationGuideData?.remainder || 0
231
+ )
232
+ // Get total repacked package qty until this transaction
233
+ const repackedPackageQty: number = getRepackedPackageQty(operationGuideData.repackedInvs)
234
+ const remainRequiredPackageQty: number = getRoundedAmount(requiredPackageQty - repackedPackageQty)
235
+
236
+ // const requiredPackageQty: number = operationGuideData.requiredPackageQty - repackedPackageQty
237
+
238
+ operationGuide.data = {
239
+ ...operationGuideData,
240
+ requiredPackageQty: remainRequiredPackageQty
241
+ }
242
+
243
+ // Update every order vas to share same operation guide
244
+ await updateRelatedOrderVas<RepackagingGuide>(tx, domain, bizplace, wsd, targetVas, operationGuide, user)
245
+
246
+ // ######################### KIV DULU YANG NI #########################
247
+ if (isCompleted || remainRequiredPackageQty === 0) {
248
+ await executeVas(tx, domain, user, wsd)
249
+ }
250
+ }
251
+ }
252
+
253
+ /**
254
+ * @description Get total qty of repacked.
255
+ *
256
+ * @param {RepackedInvInfo[]} repackedInvs
257
+ */
258
+ function getRepackedPackageQty(repackedInvs: RepackedInvInfo[]): number {
259
+ return repackedInvs.reduce((repackedPkgQty: number, ri: RepackedInvInfo) => (repackedPkgQty += ri.repackedPkgQty), 0)
260
+ }
261
+
262
+ /**
263
+ * @description Get total required package qty to complete this Repackagine VAS Task.
264
+ *
265
+ * @param {EntityManager} tx
266
+ * @param {Domain} domain
267
+ * @param {Bizplace} bizplace
268
+ * @param {Worksheet} worksheet
269
+ * @param {String} packingUnit
270
+ * @param {Number} stdAmount
271
+ */
272
+ async function getRequiredPackageQty(
273
+ tx: EntityManager,
274
+ domain: Domain,
275
+ bizplace: Bizplace,
276
+ worksheet: Worksheet,
277
+ currentOV: OrderVas,
278
+ packingUnit: string,
279
+ stdAmount: number,
280
+ remainder: number
281
+ ): Promise<number> {
282
+ const relatedWSDs: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
283
+ where: { domain: { id: domain.id }, bizplace: { id: bizplace.id }, worksheet: { id: worksheet.id } },
284
+ relations: ['targetVas', 'targetVas.vas', 'targetVas.inventory']
285
+ })
286
+
287
+ const orderVASs: OrderVas[] = relatedWSDs.map((wsd: WorksheetDetail) => wsd.targetVas)
288
+ const { qty, uomValue } = orderVASs
289
+ .filter((ov: OrderVas) => ov.set === currentOV.set && ov.vas.id === currentOV.vas.id)
290
+ .reduce(
291
+ (total: { qty: number; uomValue: number }, ov: OrderVas) => {
292
+ const inventory: Inventory = ov.inventory
293
+ const packingSize: number = inventory.packingSize
294
+
295
+ total.qty += ov.qty * packingSize
296
+ total.uomValue += ov.uomValue
297
+
298
+ return total
299
+ },
300
+ { qty: 0, uomValue: 0 }
301
+ )
302
+
303
+ if (packingUnit === PackingUnits.QTY) {
304
+ return (qty - remainder) / stdAmount
305
+ } else if (packingUnit === PackingUnits.UOM) {
306
+ return Math.floor(uomValue / stdAmount)
307
+ }
308
+ }
309
+
310
+ /**
311
+ * @description Find repacked pallet which has same pallet id with passed pallet id as param
312
+ * If there's no repacked pallet init new RepackedInvInfo object and return it
313
+ *
314
+ * @param {RepackagingGuide} operationGuideData
315
+ * @param {String} palletId
316
+ * @param {String} locationName
317
+ */
318
+ function getRepackedInv(operationGuideData: RepackagingGuide, palletId: string, locationName: string): RepackedInvInfo {
319
+ let repackedInv: RepackedInvInfo = operationGuideData.repackedInvs.find(
320
+ (ri: RepackedInvInfo) => ri.palletId === palletId
321
+ )
322
+ if (!repackedInv) {
323
+ repackedInv = {
324
+ palletId,
325
+ locationName,
326
+ repackedPkgQty: 0,
327
+ repackedFrom: []
328
+ }
329
+ operationGuideData.repackedInvs.push(repackedInv)
330
+ }
331
+
332
+ return repackedInv
333
+ }
334
+
335
+ /**
336
+ * @description To transfer qty or uom value from featured inventories into origin inventory
337
+ * If and only if the origin inventory has insufficient amount
338
+ *
339
+ * @param {FeaturedInventoryInterface} featuredInvs
340
+ * @param {Number} repackagingAmount
341
+ * @param {Number} remainingAmount
342
+ * @param {String} packingUnit -- value is strictly for qty / uomValue
343
+ */
344
+ function deductedFeaturedInventories(
345
+ featuredInvs: FeaturedInventoryInterface[],
346
+ repackagingAmount: number,
347
+ remainingAmount: number,
348
+ toPalletId: string,
349
+ packingUnit: string
350
+ ): { featuredInvs: FeaturedInventoryInterface[]; repackedFroms: TemporaryPalletChangesInterface[] } {
351
+ let requiredAmount: number = getRoundedAmount(repackagingAmount - remainingAmount)
352
+ const repackedFroms: TemporaryPalletChangesInterface[] = []
353
+
354
+ featuredInvs = featuredInvs.map(inv => {
355
+ if (requiredAmount > 0 && inv[packingUnit] > 0) {
356
+ let reducedAmount: number = requiredAmount
357
+
358
+ if (inv[packingUnit] >= requiredAmount) {
359
+ inv[packingUnit] = inv[packingUnit] - requiredAmount
360
+ // inv[packingUnit] = getRoundedAmount(inv[packingUnit] - requiredAmount)
361
+ requiredAmount = 0
362
+ } else {
363
+ requiredAmount = requiredAmount - inv[packingUnit]
364
+ // requiredAmount = getRoundedAmount(requiredAmount - inv[packingUnit])
365
+ reducedAmount = inv[packingUnit]
366
+ inv[packingUnit] = 0
367
+ }
368
+
369
+ switch (packingUnit) {
370
+ case 'currentUnitQty':
371
+ repackedFroms.push({
372
+ fromPalletId: inv.palletId,
373
+ toPalletId,
374
+ reducedUnitQty: reducedAmount,
375
+ reducedUomValue: reducedAmount * inv.uomValuePerQty,
376
+ // reducedUomValue: getRoundedAmount(reducedAmount * inv.uomValuePerQty),
377
+ packingSize: featuredInvs.find(inv => inv.palletId == inv.palletId).packingSize
378
+ })
379
+ break
380
+
381
+ case 'currentUomValue':
382
+ repackedFroms.push({
383
+ fromPalletId: inv.palletId,
384
+ toPalletId,
385
+ reducedQty: 0,
386
+ reducedUomValue: reducedAmount,
387
+ // reducedUomValue: getRoundedAmount(reducedAmount),
388
+ packingSize: featuredInvs.find(inv => inv.palletId == inv.palletId).packingSize
389
+ })
390
+ break
391
+ }
392
+ }
393
+
394
+ return inv
395
+ })
396
+
397
+ return { featuredInvs, repackedFroms }
398
+ }
399
+
400
+ function getRoundedAmount(value, decimalPlace = 100) {
401
+ return Math.round((value + Number.EPSILON) * decimalPlace) / decimalPlace
402
+ }