@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,228 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+ import { EntityManager, getManager } from 'typeorm'
4
+
5
+ import { Attachment, STORAGE } from '@things-factory/attachment-base'
6
+ import { Bizplace, ContactPoint } from '@things-factory/biz-base'
7
+ import { config } from '@things-factory/env'
8
+ import { ArrivalNotice, GoodsReceivalNote, ORDER_PRODUCT_STATUS, ORDER_STATUS } from '@things-factory/sales-base'
9
+ import { Domain, getRepository } from '@things-factory/shell'
10
+
11
+ import { TEMPLATE_TYPE, TRANSACTION_TYPE } from '../constants'
12
+ import { Worksheet } from '../entities'
13
+ import { DateTimeConverter } from '../utils/datetime-util'
14
+
15
+ const REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')
16
+
17
+ export async function renderElcclGRN({ grnNo }, context: ResolverContext) {
18
+ // 1. find domain
19
+ const domain: Domain = await getRepository(Domain).findOne({
20
+ where: { id: context.state.domain.id }
21
+ })
22
+
23
+ // 2. find grn
24
+ const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({
25
+ where: { domain: { id: domain.id }, name: grnNo },
26
+ relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']
27
+ })
28
+
29
+ // 3. find GAN
30
+ const foundGAN: ArrivalNotice = foundGRN.arrivalNotice
31
+ const ownRefNo = foundGAN.refNo
32
+
33
+ // 4. find customer bizplace
34
+ const partnerBiz: Bizplace = foundGRN.bizplace
35
+
36
+ // 5. find domain contact point
37
+ const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({
38
+ where: { domain: { id: domain.id }, bizplace: { id: partnerBiz.id } }
39
+ })
40
+
41
+ // 6. find unloading worksheet
42
+ const foundWS: Worksheet = await getRepository(Worksheet).findOne({
43
+ where: {
44
+ domain: { id: domain.id },
45
+ arrivalNotice: { id: foundGAN.id },
46
+ type: ORDER_PRODUCT_STATUS.UNLOADING,
47
+ status: ORDER_STATUS.DONE
48
+ },
49
+ relations: ['worksheetDetails']
50
+ })
51
+
52
+ // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({
53
+ // where: { domain: { id: domain.id }, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
54
+ // relations: ['product']
55
+ // })
56
+
57
+ // 7. find grn template based on category
58
+ const foundTemplate: Attachment = await getRepository(Attachment).findOne({
59
+ where: { domain: { id: domain.id }, category: TEMPLATE_TYPE.GRN_TEMPLATE }
60
+ })
61
+
62
+ // 8. find grn logo
63
+ const foundLogo: Attachment = await getRepository(Attachment).findOne({
64
+ where: {
65
+ domain: { id: domain.id },
66
+ category: TEMPLATE_TYPE.LOGO
67
+ }
68
+ })
69
+
70
+ // 9. find signature
71
+ const foundSignature: Attachment = await getRepository(Attachment).findOne({
72
+ where: {
73
+ domain: { id: domain.id },
74
+ category: TEMPLATE_TYPE.SIGNATURE
75
+ }
76
+ })
77
+
78
+ const foundCop: Attachment = await getRepository(Attachment).findOne({
79
+ where: {
80
+ domain: { id: domain.id },
81
+ category: TEMPLATE_TYPE.COP
82
+ }
83
+ })
84
+
85
+ const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')
86
+
87
+ let logo = null
88
+ if (foundLogo?.path) {
89
+ logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))
90
+ }
91
+
92
+ let signature = null
93
+ if (foundSignature?.path) {
94
+ signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))
95
+ }
96
+
97
+ let cop = null
98
+ if (foundCop?.path) {
99
+ cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))
100
+ }
101
+
102
+ let invItems: any
103
+
104
+ await getManager().transaction(async (trxMgr: EntityManager) => {
105
+ await trxMgr.query(
106
+ `
107
+ create temp table tmp on commit drop as(
108
+ select invh.*, invh2.ref_order_id as release_order_id, invh2.qty as release_qty, invh.qty as inbound_qty,
109
+ invh.qty + invh2.qty as remaining_qty, invh2.uom_value as release_uom_value, invh.uom_value as inbound_uom_value,
110
+ invh.uom_value + invh2.uom_value as remaining_uom_value
111
+ from reduced_inventory_histories invh
112
+ left join reduced_inventory_histories invh2 on
113
+ invh2.domain_id = invh.domain_id and
114
+ invh2.pallet_id = invh.pallet_id and
115
+ invh2.seq = invh.seq + 1 and
116
+ invh2.transaction_type='PICKING'
117
+ where invh.ref_order_id is not null and invh.ref_order_id::uuid = $1 and invh.transaction_type = $2
118
+ )
119
+ `,
120
+ [foundGAN.id, TRANSACTION_TYPE.UNLOADING]
121
+ )
122
+
123
+ await trxMgr.query(
124
+ `
125
+ create temp table tmp2 on commit drop as(
126
+ select id,seq,ref_order_id,order_no,"name",pallet_id,batch_id,product_id,warehouse_id,location_id,"zone",order_ref_no,packing_type,uom as unit,qty,
127
+ opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,
128
+ reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, inbound_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value,
129
+ inbound_uom_value as loose_wgt, null as cross_dock, inventory_id
130
+ from tmp where release_qty > 0 or release_qty is null
131
+ union all
132
+ select id,seq,ref_order_id,order_no,"name",pallet_id,batch_id,product_id,warehouse_id,location_id,"zone",order_ref_no,packing_type,uom as unit,qty,
133
+ opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,
134
+ reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, remaining_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value,
135
+ remaining_uom_value as loose_wgt, null as cross_dock, inventory_id
136
+ from tmp where release_qty < 0 and remaining_qty > 0
137
+ union all
138
+ select id,seq,ref_order_id,order_no,"name",pallet_id,batch_id,product_id,warehouse_id,location_id,"zone",order_ref_no,packing_type,uom as unit,qty,
139
+ opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,
140
+ reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, -release_qty as loose_amt, release_uom_value,inbound_uom_value,remaining_uom_value,
141
+ -release_uom_value as loose_wgt, '[C/D]' as cross_dock, inventory_id
142
+ from tmp where release_qty < 0
143
+ )
144
+ `
145
+ )
146
+
147
+ await trxMgr.query(
148
+ `
149
+ create temp table tmp3 on commit drop as (
150
+ select main.*, concat(p2.name, ' (', p2.description, ')') as product_name, plt.name as pallet_name,
151
+ case when main.reusable_pallet_id notnull then concat(main.qty, ' ', main.packing_type, '(S) ', plt.name) else concat(main.pallet, ' PALLET(S)')
152
+ end as remarks,
153
+ row_number() over (
154
+ partition by p2.name, main.packing_type
155
+ order by p2.name, reusable_pallet_id desc, cross_dock desc
156
+ ) as sort
157
+ from (
158
+ select product_id, reusable_pallet_id, packing_type, cross_dock, sum(qty) as ori_qty, sum(loose_amt) as qty, sum(coalesce(release_qty, 0)) as release_qty,
159
+ sum(loose_wgt) as uom_value, count(distinct pallet_id) as pallet
160
+ from tmp2
161
+ group by cross_dock, reusable_pallet_id, product_id, packing_type
162
+ ) as main
163
+ inner join products p2 on p2.id = main.product_id
164
+ left join pallets plt on plt.id = main.reusable_pallet_id
165
+ order by product_name, sort, remarks
166
+ )
167
+ `
168
+ )
169
+
170
+ invItems = await trxMgr.query(
171
+ `
172
+ select product_name, qty, uom_value, concat(remarks, ' ', cross_dock) as remarks, 0 as rank from (
173
+ select product_name, sum(qty) as qty, sum(uom_value) as uom_value, string_agg(remarks,' ' order by product_name, sort, remarks) as remarks, cross_dock
174
+ from tmp3 group by product_name, cross_dock
175
+ ) as foo
176
+ union
177
+ select vas.name as product_name, qty, 0 as uom_value, remark as remarks, 1 as rank
178
+ from order_vass ov
179
+ inner join vass vas on vas.id = ov.vas_id
180
+ where arrival_notice_id = $1 and vas.type = 'MATERIALS'
181
+ order by rank, product_name, remarks
182
+ `,
183
+ [foundGAN.id]
184
+ )
185
+ })
186
+
187
+ const data = {
188
+ logo_url: logo,
189
+ sign_url: signature,
190
+ cop_url: cop,
191
+ customer_biz: partnerBiz.company.name,
192
+ customer_address: partnerBiz.address,
193
+ company_domain: partnerBiz.company.name,
194
+ company_phone: foundCP.phone,
195
+ company_email: foundCP.email,
196
+ company_brn: partnerBiz.company.description,
197
+ company_address: partnerBiz.company.address,
198
+ order_no: foundGRN.name,
199
+ unload_date: DateTimeConverter.date(foundWS.endedAt),
200
+ ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,
201
+ received_date: DateTimeConverter.date(foundWS.endedAt),
202
+ truck_no: foundGAN.truckNo || '',
203
+ container_no: foundGAN?.containerNo ? foundGAN.containerNo : foundGAN.deliveryOrderNo,
204
+ product_list: invItems.map((item, idx) => {
205
+ return {
206
+ list_no: idx + 1,
207
+ product_name: item.product_name,
208
+ product_type: item.packing_type,
209
+ product_batch: item.batch_id,
210
+ product_qty: item.qty,
211
+ product_uom_value: Math.round(item.uom_value * 100) / 100,
212
+ pallet_qty: item.pallet_count,
213
+ remark: item.remarks
214
+ }
215
+ })
216
+ }
217
+
218
+ const formData = new FormData()
219
+ formData.append('template', template)
220
+ formData.append('jsonString', JSON.stringify(data))
221
+
222
+ const response = await fetch(REPORT_API_URL, {
223
+ method: 'POST',
224
+ body: formData
225
+ })
226
+
227
+ return await response.text()
228
+ }
@@ -0,0 +1,287 @@
1
+ import FormData from 'form-data'
2
+ import _ from 'lodash'
3
+ import fetch from 'node-fetch'
4
+ import { IsNull, Not } from 'typeorm'
5
+
6
+ import { Attachment, STORAGE } from '@things-factory/attachment-base'
7
+ import { Partner } from '@things-factory/auth-base'
8
+ import { Bizplace, ContactPoint } from '@things-factory/biz-base'
9
+ import { config } from '@things-factory/env'
10
+ import { ArrivalNotice, GoodsReceivalNote, ORDER_STATUS, OrderProduct } from '@things-factory/sales-base'
11
+ import { Domain, getRepository } from '@things-factory/shell'
12
+ import { InventoryItem, ReducedInventoryHistory } from '@things-factory/warehouse-base'
13
+
14
+ import { TEMPLATE_TYPE, WORKSHEET_TYPE } from '../constants'
15
+ import { Worksheet } from '../entities'
16
+ import { DateTimeConverter } from '../utils/datetime-util'
17
+
18
+ const REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')
19
+
20
+ export async function renderFmGRN({ grnNo, timezoneOffSet }, context: ResolverContext) {
21
+ // 1. find domain
22
+ const domain: Domain = await getRepository(Domain).findOne({
23
+ where: { id: context.state.domain.id }
24
+ })
25
+
26
+ // 2. find grn
27
+ const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({
28
+ where: { domain: { id: domain.id }, name: grnNo },
29
+ relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'arrivalNotice']
30
+ })
31
+
32
+ // 3. find GAN
33
+ const foundGAN: ArrivalNotice = foundGRN.arrivalNotice
34
+ const ownRefNo = foundGAN.refNo
35
+
36
+ const foundInventoryItem: InventoryItem[] = await getRepository(InventoryItem).query(
37
+ `select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`
38
+ )
39
+
40
+ // 4. find customer bizplace
41
+ const partnerBiz: Bizplace = foundGRN.bizplace
42
+
43
+ const partnerDomain: Partner = await getRepository(Partner).findOne({
44
+ where: { partnerDomain: { id: partnerBiz.domain.id }, domain: { id: domain.id } },
45
+ relations: ['domain']
46
+ })
47
+
48
+ const domainOwner: Domain = partnerDomain.domain
49
+ const domainBizplace: Bizplace = await getRepository(Bizplace).findOne({
50
+ where: { domain: { id: domainOwner.id } },
51
+ relations: ['company']
52
+ })
53
+
54
+ const qbReducedInventory = getRepository(ReducedInventoryHistory)
55
+ .createQueryBuilder('ivh')
56
+ .select('product_id', 'productId')
57
+ .addSelect('batch_id', 'batchId')
58
+ .addSelect('reusable_pallet_id', 'reusablePalletId')
59
+ .addSelect('packing_type', 'packingType')
60
+ .addSelect('sum(qty)', 'qty')
61
+ .addSelect('sum(uom_value)', 'uomValue')
62
+ .addSelect('uom', 'uom')
63
+ .addSelect('expiration_date', 'expiryDate')
64
+ .addSelect('count(distinct pallet_id)', 'pallet')
65
+ .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, 'palletId')
66
+ .where('ivh.domain_id = :domainId', { domainId: domain.id })
67
+ .andWhere('ivh.ref_order_id = :refOrderId', { refOrderId: foundGAN.id })
68
+ .andWhere(`ivh.transaction_type = 'UNLOADING'`)
69
+ .groupBy('reusable_pallet_id')
70
+ .addGroupBy('product_id')
71
+ .addGroupBy('batch_id')
72
+ .addGroupBy('packing_type')
73
+ .addGroupBy('uom')
74
+ .addGroupBy('expiration_date')
75
+ .getRawMany()
76
+
77
+ // 5. find domain contact point
78
+ const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({
79
+ where: { domain: { id: domain.id }, bizplace: { id: domainBizplace.id } }
80
+ })
81
+
82
+ // 5. find domain contact point
83
+ const foundPartnerCP: ContactPoint = await getRepository(ContactPoint).findOne({
84
+ where: { domain: { id: domain.id }, bizplace: { id: partnerBiz.id } }
85
+ })
86
+
87
+ // 6. find unloading worksheet
88
+ const foundWS: Worksheet = await getRepository(Worksheet).findOne({
89
+ where: {
90
+ domain: { id: domain.id },
91
+ arrivalNotice: { id: foundGAN.id },
92
+ type: WORKSHEET_TYPE.UNLOADING,
93
+ status: ORDER_STATUS.DONE
94
+ },
95
+ relations: ['worksheetDetails', 'updater']
96
+ })
97
+
98
+ // find putaway worksheet
99
+ const foundPutawayWS: Worksheet = await getRepository(Worksheet).findOne({
100
+ where: {
101
+ domain: { id: domain.id },
102
+ arrivalNotice: { id: foundGAN.id },
103
+ type: WORKSHEET_TYPE.PUTAWAY,
104
+ status: ORDER_STATUS.DONE
105
+ },
106
+ relations: ['worksheetDetails', 'updater']
107
+ })
108
+
109
+ const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({
110
+ where: {
111
+ domain: { id: domain.id },
112
+ arrivalNotice: { id: foundGAN.id },
113
+ actualPalletQty: Not(IsNull()),
114
+ actualPackQty: Not(IsNull())
115
+ },
116
+ relations: ['product']
117
+ })
118
+
119
+ // 7. find grn template based on category
120
+ const foundTemplate: Attachment = await getRepository(Attachment).findOne({
121
+ where: { domain: { id: domain.id }, category: TEMPLATE_TYPE.GRN_TEMPLATE }
122
+ })
123
+
124
+ // 8. find grn logo
125
+ const foundLogo: Attachment = await getRepository(Attachment).findOne({
126
+ where: {
127
+ domain: { id: domain.id },
128
+ category: TEMPLATE_TYPE.LOGO
129
+ }
130
+ })
131
+
132
+ // 9. find signature
133
+ const foundSignature: Attachment = await getRepository(Attachment).findOne({
134
+ where: {
135
+ domain: { id: domain.id },
136
+ category: TEMPLATE_TYPE.SIGNATURE
137
+ }
138
+ })
139
+
140
+ const foundCop: Attachment = await getRepository(Attachment).findOne({
141
+ where: {
142
+ domain: { id: domain.id },
143
+ category: TEMPLATE_TYPE.COP
144
+ }
145
+ })
146
+
147
+ const inboundInventories: any[] = await qbReducedInventory
148
+
149
+ const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')
150
+
151
+ let logo = null
152
+ if (foundLogo?.path) {
153
+ logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))
154
+ }
155
+
156
+ let signature = null
157
+ if (foundSignature?.path) {
158
+ signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))
159
+ }
160
+
161
+ let cop = null
162
+ if (foundCop?.path) {
163
+ cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))
164
+ }
165
+
166
+ //@ts-ignore
167
+ const filterInventoryItem = _.groupBy(foundInventoryItem, i => i.sku)
168
+
169
+ const tempIndexArr = []
170
+
171
+ const tempTotalQuantity = []
172
+
173
+ Object.keys(filterInventoryItem).forEach(k => {
174
+ const tempIndex = foundInventoryItem.findIndex(i => {
175
+ //@ts-ignore
176
+ return i.sku == k
177
+ })
178
+
179
+ tempIndexArr.push(tempIndex)
180
+ })
181
+
182
+ Object.values(filterInventoryItem).forEach(k => {
183
+ const tempQuantity = k.length
184
+
185
+ tempTotalQuantity.push(tempQuantity)
186
+ })
187
+
188
+ tempIndexArr.forEach((t, index) => {
189
+ //@ts-ignore
190
+ if (t >= 0) foundInventoryItem[t].totalQuantity = tempTotalQuantity[index]
191
+ })
192
+
193
+ const data = {
194
+ logo_url: logo,
195
+ sign_url: signature,
196
+ cop_url: cop,
197
+ customer_biz: partnerBiz.name,
198
+ customer_address: partnerBiz.address,
199
+ company_domain: domainBizplace.company.name,
200
+ company_phone: foundCP.phone,
201
+ company_email: foundCP.email,
202
+ company_brn: domainBizplace.company.brn,
203
+ company_address: domainBizplace.company.address,
204
+ warehouse_address: foundCP.address,
205
+ warehouse_address2: foundCP.address2,
206
+ warehouse_postcode: foundCP.postCode,
207
+ warehouse_city: foundCP.city,
208
+ warehouse_state: foundCP.state,
209
+ warehouse_phone: foundCP.phone,
210
+ warehouse_fax: foundCP.fax,
211
+ warehouse_email: foundCP.email,
212
+ order_no: foundGRN.name,
213
+ gan_no: foundGAN.name,
214
+ gan_accepted_at: foundGAN.acceptedAt ? DateTimeConverter.datetime(foundGAN.acceptedAt, timezoneOffSet) : '',
215
+ unload_date: DateTimeConverter.date(foundWS.endedAt),
216
+ ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,
217
+ ref_no_only: ownRefNo ? ` ${foundGAN.refNo}` : '',
218
+ ref_no1: foundGAN.refNo2 ? `${foundGAN.refNo2}` : '',
219
+ ref_no2: foundGAN.refNo3 ? `${foundGAN.refNo3}` : '',
220
+ received_date: DateTimeConverter.date(foundWS.endedAt),
221
+ truck_no: foundGAN.truckNo || '',
222
+ container_no: foundGAN.containerNo || '',
223
+ container_size: foundGAN.containerSize || '',
224
+ delivery_order_no: foundGAN.deliveryOrderNo ? foundGAN.deliveryOrderNo : '',
225
+ account_no: foundPartnerCP ? foundPartnerCP.accountNo : '',
226
+ unloaded_by: foundWS ? foundWS.updater.name : '',
227
+ putaway_by: foundPutawayWS ? foundPutawayWS.updater.name : '',
228
+ product_list: targetProducts
229
+ .reduce((acc, item) => {
230
+ acc.push(
231
+ ...inboundInventories
232
+ .filter(
233
+ ih =>
234
+ ih.productId == item.product.id &&
235
+ ih.batchId == item.batchId &&
236
+ ih.packingType == item.packingType &&
237
+ ih.uom == item.uom
238
+ )
239
+ .map(unloadInvHistory => {
240
+ return {
241
+ product_sku: `${item.product.sku}`,
242
+ product_brand_sku: `${item.product.brandSku}`,
243
+ product_name: `${item.product.name}(${item.product.description})`,
244
+ product_desc: item.product.description,
245
+ product_nameOnly: item.product.name,
246
+ product_type: item.packingType,
247
+ product_size: item.packingSize,
248
+ product_batch: item.batchId,
249
+ batch_id_ref: item?.batchIdRef ? item.batchIdRef : '',
250
+ pallet_qty: item.actualPalletQty,
251
+ product_qty: unloadInvHistory.qty || item.actualPackQty,
252
+ product_pack_qty: item.packQty,
253
+ descrepancy_qty: (unloadInvHistory.qty || item.actualPackQty) - item.packQty,
254
+ product_unit_uom_value: `${Math.round(item.uomValue * 100) / 100}`,
255
+ product_total_uom_value: `${
256
+ Math.round((unloadInvHistory.uomValue || item.uomValue * item.actualPackQty) * 100) / 100
257
+ }`,
258
+ product_uom: `${unloadInvHistory.uom || item.uom}`,
259
+ product_gross_weight: item.product.grossWeight || null,
260
+ unit_price: item.unitPrice || null,
261
+ expiry_date:
262
+ unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != ''
263
+ ? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0]
264
+ : '',
265
+ manufacture_date: item.manufactureDate,
266
+ reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
267
+ remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
268
+ }
269
+ })
270
+ )
271
+ return acc
272
+ }, [])
273
+ .map((item, idx) => ({ list_no: idx + 1, ...item })),
274
+ serialNumber: foundInventoryItem
275
+ }
276
+
277
+ const formData = new FormData()
278
+ formData.append('template', template)
279
+ formData.append('jsonString', JSON.stringify(data))
280
+
281
+ const response = await fetch(REPORT_API_URL, {
282
+ method: 'POST',
283
+ body: formData
284
+ })
285
+
286
+ return await response.text()
287
+ }