@things-factory/operato-hub 4.3.107 → 4.3.108

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 (326) hide show
  1. package/client/pages/bizplace/register.js +2 -0
  2. package/dist-server/controllers/bizplace-initializer/dataset/codes.js +1 -1
  3. package/dist-server/controllers/bizplace-initializer/dataset/codes.js.map +1 -1
  4. package/dist-server/graphql/resolvers/synchronization/sync-products-to-sellercraft.js +10 -9
  5. package/dist-server/graphql/resolvers/synchronization/sync-products-to-sellercraft.js.map +1 -1
  6. package/dist-server/middlewares/store-middleware.js.map +1 -1
  7. package/dist-server/routers/api/index.js +0 -1
  8. package/dist-server/routers/api/index.js.map +1 -1
  9. package/dist-server/routers/api/restful-apis/unstable/add-release-order.js +8 -8
  10. package/dist-server/routers/api/restful-apis/v1/company/add-contact-points.js +105 -0
  11. package/dist-server/routers/api/restful-apis/v1/company/add-contact-points.js.map +1 -0
  12. package/dist-server/routers/api/restful-apis/v1/company/add-marketplace-order.js +197 -0
  13. package/dist-server/routers/api/restful-apis/v1/company/add-marketplace-order.js.map +1 -0
  14. package/dist-server/routers/api/restful-apis/v1/company/add-products.js +69 -0
  15. package/dist-server/routers/api/restful-apis/v1/company/add-products.js.map +1 -0
  16. package/dist-server/routers/api/restful-apis/v1/company/cancel-marketplace-order.js +90 -0
  17. package/dist-server/routers/api/restful-apis/v1/company/cancel-marketplace-order.js.map +1 -0
  18. package/dist-server/routers/api/restful-apis/v1/company/get-bizplace-list.js +49 -0
  19. package/dist-server/routers/api/restful-apis/v1/company/get-bizplace-list.js.map +1 -0
  20. package/dist-server/routers/api/restful-apis/v1/company/get-contact-point-list.js +62 -0
  21. package/dist-server/routers/api/restful-apis/v1/company/get-contact-point-list.js.map +1 -0
  22. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.js +108 -0
  23. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.js.map +1 -0
  24. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-store-list.js +51 -0
  25. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-store-list.js.map +1 -0
  26. package/dist-server/routers/api/restful-apis/v1/company/get-partner-list.js +88 -0
  27. package/dist-server/routers/api/restful-apis/v1/company/get-partner-list.js.map +1 -0
  28. package/dist-server/routers/api/restful-apis/v1/company/get-product-list.js +98 -0
  29. package/dist-server/routers/api/restful-apis/v1/company/get-product-list.js.map +1 -0
  30. package/dist-server/routers/api/restful-apis/v1/company/index.js +15 -0
  31. package/dist-server/routers/api/restful-apis/v1/company/index.js.map +1 -0
  32. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.js +62 -0
  33. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.js.map +1 -0
  34. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-shipping-order.js +44 -0
  35. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-shipping-order.js.map +1 -0
  36. package/dist-server/routers/api/restful-apis/v1/index.js +2 -31
  37. package/dist-server/routers/api/restful-apis/v1/index.js.map +1 -1
  38. package/dist-server/routers/api/restful-apis/v1/middlewares/business-middleware.js +66 -0
  39. package/dist-server/routers/api/restful-apis/v1/middlewares/business-middleware.js.map +1 -0
  40. package/dist-server/routers/api/restful-apis/v1/middlewares/index.js +40 -0
  41. package/dist-server/routers/api/restful-apis/v1/middlewares/index.js.map +1 -0
  42. package/dist-server/routers/api/restful-apis/v1/middlewares/logging-middleware.js +23 -0
  43. package/dist-server/routers/api/restful-apis/v1/middlewares/logging-middleware.js.map +1 -0
  44. package/dist-server/routers/api/restful-apis/v1/middlewares/store-middleware.js +32 -0
  45. package/dist-server/routers/api/restful-apis/v1/middlewares/store-middleware.js.map +1 -0
  46. package/dist-server/routers/api/restful-apis/v1/middlewares/validation-middleware.js +118 -0
  47. package/dist-server/routers/api/restful-apis/v1/middlewares/validation-middleware.js.map +1 -0
  48. package/dist-server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.js +31 -0
  49. package/dist-server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.js.map +1 -0
  50. package/dist-server/routers/api/restful-apis/v1/utils/error-util.js +71 -0
  51. package/dist-server/routers/api/restful-apis/v1/utils/error-util.js.map +1 -0
  52. package/dist-server/routers/api/restful-apis/v1/utils/params.js +555 -0
  53. package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +1 -0
  54. package/dist-server/routers/api/restful-apis/v1/utils/validate-util.js +60 -0
  55. package/dist-server/routers/api/restful-apis/v1/utils/validate-util.js.map +1 -0
  56. package/dist-server/routers/api/restful-apis/v1/warehouse/add-inbound-order.js +236 -0
  57. package/dist-server/routers/api/restful-apis/v1/warehouse/add-inbound-order.js.map +1 -0
  58. package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js +762 -0
  59. package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js.map +1 -0
  60. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.js +197 -0
  61. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.js.map +1 -0
  62. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-release-order.js +177 -0
  63. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-release-order.js.map +1 -0
  64. package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js +138 -0
  65. package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js.map +1 -0
  66. package/dist-server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.js +97 -0
  67. package/dist-server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.js.map +1 -0
  68. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js +81 -0
  69. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js.map +1 -0
  70. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.js +94 -0
  71. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.js.map +1 -0
  72. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.js +87 -0
  73. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.js.map +1 -0
  74. package/dist-server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.js +84 -0
  75. package/dist-server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.js.map +1 -0
  76. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js +96 -0
  77. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js.map +1 -0
  78. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js +110 -0
  79. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js.map +1 -0
  80. package/dist-server/routers/api/restful-apis/v1/warehouse/index.js +16 -0
  81. package/dist-server/routers/api/restful-apis/v1/warehouse/index.js.map +1 -0
  82. package/dist-server/routers/api/restful-apis/v1/warehouse/update-release-order-details.js +71 -0
  83. package/dist-server/routers/api/restful-apis/v1/warehouse/update-release-order-details.js.map +1 -0
  84. package/openapi/v1/Inventory.yaml +263 -0
  85. package/package.json +54 -54
  86. package/server/controllers/bizplace-initializer/dataset/codes.ts +1 -1
  87. package/server/graphql/resolvers/synchronization/sync-products-to-sellercraft.ts +25 -17
  88. package/server/middlewares/store-middleware.ts +1 -0
  89. package/server/routers/api/index.ts +0 -1
  90. package/server/routers/api/restful-apis/unstable/add-release-order.ts +8 -8
  91. package/server/routers/api/restful-apis/v1/company/add-contact-points.ts +111 -0
  92. package/server/routers/api/restful-apis/v1/company/add-marketplace-order.ts +234 -0
  93. package/server/routers/api/restful-apis/v1/company/add-products.ts +96 -0
  94. package/server/routers/api/restful-apis/v1/company/cancel-marketplace-order.ts +94 -0
  95. package/server/routers/api/restful-apis/v1/company/get-bizplace-list.ts +55 -0
  96. package/server/routers/api/restful-apis/v1/company/get-contact-point-list.ts +67 -0
  97. package/server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.ts +115 -0
  98. package/server/routers/api/restful-apis/v1/company/get-marketplace-store-list.ts +57 -0
  99. package/server/routers/api/restful-apis/v1/company/get-partner-list.ts +95 -0
  100. package/server/routers/api/restful-apis/v1/company/get-product-list.ts +103 -0
  101. package/server/routers/api/restful-apis/v1/company/index.ts +12 -0
  102. package/server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.ts +66 -0
  103. package/server/routers/api/restful-apis/v1/company/update-marketplace-shipping-order.ts +55 -0
  104. package/server/routers/api/restful-apis/v1/index.ts +2 -31
  105. package/server/routers/api/restful-apis/v1/middlewares/business-middleware.ts +68 -0
  106. package/server/routers/api/restful-apis/v1/middlewares/index.ts +26 -0
  107. package/server/routers/api/restful-apis/v1/middlewares/logging-middleware.ts +24 -0
  108. package/server/routers/api/restful-apis/v1/middlewares/store-middleware.ts +34 -0
  109. package/server/routers/api/restful-apis/v1/middlewares/validation-middleware.ts +116 -0
  110. package/server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.ts +31 -0
  111. package/server/routers/api/restful-apis/v1/utils/error-util.ts +70 -0
  112. package/server/routers/api/restful-apis/v1/utils/params.ts +555 -0
  113. package/server/routers/api/restful-apis/v1/utils/validate-util.ts +53 -0
  114. package/server/routers/api/restful-apis/v1/warehouse/add-inbound-order.ts +324 -0
  115. package/server/routers/api/restful-apis/v1/warehouse/add-release-order.ts +941 -0
  116. package/server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.ts +261 -0
  117. package/server/routers/api/restful-apis/v1/warehouse/cancel-release-order.ts +258 -0
  118. package/server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.ts +141 -0
  119. package/server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.ts +105 -0
  120. package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.ts +83 -0
  121. package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.ts +96 -0
  122. package/server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.ts +112 -0
  123. package/server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.ts +89 -0
  124. package/server/routers/api/restful-apis/v1/warehouse/get-release-order-details.ts +99 -0
  125. package/server/routers/api/restful-apis/v1/warehouse/get-release-order-list.ts +113 -0
  126. package/server/routers/api/restful-apis/v1/warehouse/index.ts +13 -0
  127. package/server/routers/api/restful-apis/v1/warehouse/update-release-order-details.ts +96 -0
  128. package/translations/en.json +2 -0
  129. package/translations/ko.json +2 -0
  130. package/translations/ms.json +2 -0
  131. package/translations/zh.json +2 -0
  132. package/dist-server/routers/api/restful-apis/v1/add-contact-point.js +0 -64
  133. package/dist-server/routers/api/restful-apis/v1/add-contact-point.js.map +0 -1
  134. package/dist-server/routers/api/restful-apis/v1/add-draft-release-order.js +0 -171
  135. package/dist-server/routers/api/restful-apis/v1/add-draft-release-order.js.map +0 -1
  136. package/dist-server/routers/api/restful-apis/v1/add-inbound-order.js +0 -213
  137. package/dist-server/routers/api/restful-apis/v1/add-inbound-order.js.map +0 -1
  138. package/dist-server/routers/api/restful-apis/v1/add-marketplace-order.js +0 -144
  139. package/dist-server/routers/api/restful-apis/v1/add-marketplace-order.js.map +0 -1
  140. package/dist-server/routers/api/restful-apis/v1/add-products.js +0 -88
  141. package/dist-server/routers/api/restful-apis/v1/add-products.js.map +0 -1
  142. package/dist-server/routers/api/restful-apis/v1/add-release-order.js +0 -774
  143. package/dist-server/routers/api/restful-apis/v1/add-release-order.js.map +0 -1
  144. package/dist-server/routers/api/restful-apis/v1/bizplace.js +0 -45
  145. package/dist-server/routers/api/restful-apis/v1/bizplace.js.map +0 -1
  146. package/dist-server/routers/api/restful-apis/v1/cancel-marketplace-order.js +0 -63
  147. package/dist-server/routers/api/restful-apis/v1/cancel-marketplace-order.js.map +0 -1
  148. package/dist-server/routers/api/restful-apis/v1/cancel-release-order.js +0 -66
  149. package/dist-server/routers/api/restful-apis/v1/cancel-release-order.js.map +0 -1
  150. package/dist-server/routers/api/restful-apis/v1/get-contact-point-list.js +0 -103
  151. package/dist-server/routers/api/restful-apis/v1/get-contact-point-list.js.map +0 -1
  152. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-detail.js +0 -47
  153. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-detail.js.map +0 -1
  154. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-list.js +0 -124
  155. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-list.js.map +0 -1
  156. package/dist-server/routers/api/restful-apis/v1/get-delivery-orders.js +0 -164
  157. package/dist-server/routers/api/restful-apis/v1/get-delivery-orders.js.map +0 -1
  158. package/dist-server/routers/api/restful-apis/v1/get-goods-received-notes.js +0 -120
  159. package/dist-server/routers/api/restful-apis/v1/get-goods-received-notes.js.map +0 -1
  160. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-detail.js +0 -115
  161. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-detail.js.map +0 -1
  162. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-list.js +0 -125
  163. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-list.js.map +0 -1
  164. package/dist-server/routers/api/restful-apis/v1/get-inventory-overall-product-group.js +0 -88
  165. package/dist-server/routers/api/restful-apis/v1/get-inventory-overall-product-group.js.map +0 -1
  166. package/dist-server/routers/api/restful-apis/v1/get-inventory-product-group.js +0 -101
  167. package/dist-server/routers/api/restful-apis/v1/get-inventory-product-group.js.map +0 -1
  168. package/dist-server/routers/api/restful-apis/v1/get-marketplace-order-shipping-list.js +0 -146
  169. package/dist-server/routers/api/restful-apis/v1/get-marketplace-order-shipping-list.js.map +0 -1
  170. package/dist-server/routers/api/restful-apis/v1/get-marketplace-store-list.js +0 -79
  171. package/dist-server/routers/api/restful-apis/v1/get-marketplace-store-list.js.map +0 -1
  172. package/dist-server/routers/api/restful-apis/v1/get-onhand-inventories.js +0 -110
  173. package/dist-server/routers/api/restful-apis/v1/get-onhand-inventories.js.map +0 -1
  174. package/dist-server/routers/api/restful-apis/v1/get-partners.js +0 -23
  175. package/dist-server/routers/api/restful-apis/v1/get-partners.js.map +0 -1
  176. package/dist-server/routers/api/restful-apis/v1/get-products.js +0 -210
  177. package/dist-server/routers/api/restful-apis/v1/get-products.js.map +0 -1
  178. package/dist-server/routers/api/restful-apis/v1/get-release-order-detail.js +0 -122
  179. package/dist-server/routers/api/restful-apis/v1/get-release-order-detail.js.map +0 -1
  180. package/dist-server/routers/api/restful-apis/v1/get-release-order-list.js +0 -191
  181. package/dist-server/routers/api/restful-apis/v1/get-release-order-list.js.map +0 -1
  182. package/dist-server/routers/api/restful-apis/v1/get-warehouses.js +0 -20
  183. package/dist-server/routers/api/restful-apis/v1/get-warehouses.js.map +0 -1
  184. package/dist-server/routers/api/restful-apis/v1/reject-inbound-order.js +0 -35
  185. package/dist-server/routers/api/restful-apis/v1/reject-inbound-order.js.map +0 -1
  186. package/dist-server/routers/api/restful-apis/v1/set-marketplace-order-delivered.js +0 -45
  187. package/dist-server/routers/api/restful-apis/v1/set-marketplace-order-delivered.js.map +0 -1
  188. package/dist-server/routers/api/restful-apis/v1/set-marketplace-order-failed-delivery.js +0 -45
  189. package/dist-server/routers/api/restful-apis/v1/set-marketplace-order-failed-delivery.js.map +0 -1
  190. package/dist-server/routers/api/restful-apis/v1/update-marketplace-order.js +0 -93
  191. package/dist-server/routers/api/restful-apis/v1/update-marketplace-order.js.map +0 -1
  192. package/dist-server/routers/api/restful-apis/v1/update-marketplace-shipping-order.js +0 -85
  193. package/dist-server/routers/api/restful-apis/v1/update-marketplace-shipping-order.js.map +0 -1
  194. package/dist-server/routers/api/restful-apis/v1/update-release-order-details.js +0 -82
  195. package/dist-server/routers/api/restful-apis/v1/update-release-order-details.js.map +0 -1
  196. package/dist-server/routers/api/restful-apis/v2/add-contact-point.js +0 -64
  197. package/dist-server/routers/api/restful-apis/v2/add-contact-point.js.map +0 -1
  198. package/dist-server/routers/api/restful-apis/v2/add-draft-release-order.js +0 -171
  199. package/dist-server/routers/api/restful-apis/v2/add-draft-release-order.js.map +0 -1
  200. package/dist-server/routers/api/restful-apis/v2/add-inbound-order.js +0 -213
  201. package/dist-server/routers/api/restful-apis/v2/add-inbound-order.js.map +0 -1
  202. package/dist-server/routers/api/restful-apis/v2/add-marketplace-order.js +0 -144
  203. package/dist-server/routers/api/restful-apis/v2/add-marketplace-order.js.map +0 -1
  204. package/dist-server/routers/api/restful-apis/v2/add-products.js +0 -88
  205. package/dist-server/routers/api/restful-apis/v2/add-products.js.map +0 -1
  206. package/dist-server/routers/api/restful-apis/v2/add-release-order.js +0 -774
  207. package/dist-server/routers/api/restful-apis/v2/add-release-order.js.map +0 -1
  208. package/dist-server/routers/api/restful-apis/v2/bizplace.js +0 -45
  209. package/dist-server/routers/api/restful-apis/v2/bizplace.js.map +0 -1
  210. package/dist-server/routers/api/restful-apis/v2/cancel-marketplace-order.js +0 -63
  211. package/dist-server/routers/api/restful-apis/v2/cancel-marketplace-order.js.map +0 -1
  212. package/dist-server/routers/api/restful-apis/v2/cancel-release-order.js +0 -66
  213. package/dist-server/routers/api/restful-apis/v2/cancel-release-order.js.map +0 -1
  214. package/dist-server/routers/api/restful-apis/v2/get-contact-point-list.js +0 -103
  215. package/dist-server/routers/api/restful-apis/v2/get-contact-point-list.js.map +0 -1
  216. package/dist-server/routers/api/restful-apis/v2/get-delivery-order-detail.js +0 -47
  217. package/dist-server/routers/api/restful-apis/v2/get-delivery-order-detail.js.map +0 -1
  218. package/dist-server/routers/api/restful-apis/v2/get-delivery-order-list.js +0 -124
  219. package/dist-server/routers/api/restful-apis/v2/get-delivery-order-list.js.map +0 -1
  220. package/dist-server/routers/api/restful-apis/v2/get-delivery-orders.js +0 -164
  221. package/dist-server/routers/api/restful-apis/v2/get-delivery-orders.js.map +0 -1
  222. package/dist-server/routers/api/restful-apis/v2/get-goods-received-notes.js +0 -120
  223. package/dist-server/routers/api/restful-apis/v2/get-goods-received-notes.js.map +0 -1
  224. package/dist-server/routers/api/restful-apis/v2/get-inbound-order-detail.js +0 -115
  225. package/dist-server/routers/api/restful-apis/v2/get-inbound-order-detail.js.map +0 -1
  226. package/dist-server/routers/api/restful-apis/v2/get-inbound-order-list.js +0 -125
  227. package/dist-server/routers/api/restful-apis/v2/get-inbound-order-list.js.map +0 -1
  228. package/dist-server/routers/api/restful-apis/v2/get-inventory-overall-product-group.js +0 -88
  229. package/dist-server/routers/api/restful-apis/v2/get-inventory-overall-product-group.js.map +0 -1
  230. package/dist-server/routers/api/restful-apis/v2/get-inventory-product-group.js +0 -101
  231. package/dist-server/routers/api/restful-apis/v2/get-inventory-product-group.js.map +0 -1
  232. package/dist-server/routers/api/restful-apis/v2/get-marketplace-order-shipping-list.js +0 -146
  233. package/dist-server/routers/api/restful-apis/v2/get-marketplace-order-shipping-list.js.map +0 -1
  234. package/dist-server/routers/api/restful-apis/v2/get-marketplace-store-list.js +0 -79
  235. package/dist-server/routers/api/restful-apis/v2/get-marketplace-store-list.js.map +0 -1
  236. package/dist-server/routers/api/restful-apis/v2/get-onhand-inventories.js +0 -110
  237. package/dist-server/routers/api/restful-apis/v2/get-onhand-inventories.js.map +0 -1
  238. package/dist-server/routers/api/restful-apis/v2/get-partners.js +0 -23
  239. package/dist-server/routers/api/restful-apis/v2/get-partners.js.map +0 -1
  240. package/dist-server/routers/api/restful-apis/v2/get-products.js +0 -210
  241. package/dist-server/routers/api/restful-apis/v2/get-products.js.map +0 -1
  242. package/dist-server/routers/api/restful-apis/v2/get-release-order-detail.js +0 -122
  243. package/dist-server/routers/api/restful-apis/v2/get-release-order-detail.js.map +0 -1
  244. package/dist-server/routers/api/restful-apis/v2/get-release-order-list.js +0 -191
  245. package/dist-server/routers/api/restful-apis/v2/get-release-order-list.js.map +0 -1
  246. package/dist-server/routers/api/restful-apis/v2/get-warehouses.js +0 -20
  247. package/dist-server/routers/api/restful-apis/v2/get-warehouses.js.map +0 -1
  248. package/dist-server/routers/api/restful-apis/v2/index.js +0 -34
  249. package/dist-server/routers/api/restful-apis/v2/index.js.map +0 -1
  250. package/dist-server/routers/api/restful-apis/v2/reject-inbound-order.js +0 -35
  251. package/dist-server/routers/api/restful-apis/v2/reject-inbound-order.js.map +0 -1
  252. package/dist-server/routers/api/restful-apis/v2/set-marketplace-order-delivered.js +0 -45
  253. package/dist-server/routers/api/restful-apis/v2/set-marketplace-order-delivered.js.map +0 -1
  254. package/dist-server/routers/api/restful-apis/v2/set-marketplace-order-failed-delivery.js +0 -45
  255. package/dist-server/routers/api/restful-apis/v2/set-marketplace-order-failed-delivery.js.map +0 -1
  256. package/dist-server/routers/api/restful-apis/v2/update-marketplace-order.js +0 -93
  257. package/dist-server/routers/api/restful-apis/v2/update-marketplace-order.js.map +0 -1
  258. package/dist-server/routers/api/restful-apis/v2/update-marketplace-shipping-order.js +0 -85
  259. package/dist-server/routers/api/restful-apis/v2/update-marketplace-shipping-order.js.map +0 -1
  260. package/dist-server/routers/api/restful-apis/v2/update-release-order-details.js +0 -82
  261. package/dist-server/routers/api/restful-apis/v2/update-release-order-details.js.map +0 -1
  262. package/server/routers/api/restful-apis/v1/add-contact-point.ts +0 -77
  263. package/server/routers/api/restful-apis/v1/add-draft-release-order.ts +0 -196
  264. package/server/routers/api/restful-apis/v1/add-inbound-order.ts +0 -242
  265. package/server/routers/api/restful-apis/v1/add-marketplace-order.ts +0 -172
  266. package/server/routers/api/restful-apis/v1/add-products.ts +0 -112
  267. package/server/routers/api/restful-apis/v1/add-release-order.ts +0 -967
  268. package/server/routers/api/restful-apis/v1/bizplace.ts +0 -45
  269. package/server/routers/api/restful-apis/v1/cancel-marketplace-order.ts +0 -81
  270. package/server/routers/api/restful-apis/v1/cancel-release-order.ts +0 -91
  271. package/server/routers/api/restful-apis/v1/get-contact-point-list.ts +0 -110
  272. package/server/routers/api/restful-apis/v1/get-delivery-order-detail.ts +0 -46
  273. package/server/routers/api/restful-apis/v1/get-delivery-order-list.ts +0 -121
  274. package/server/routers/api/restful-apis/v1/get-delivery-orders.ts +0 -178
  275. package/server/routers/api/restful-apis/v1/get-goods-received-notes.ts +0 -134
  276. package/server/routers/api/restful-apis/v1/get-inbound-order-detail.ts +0 -128
  277. package/server/routers/api/restful-apis/v1/get-inbound-order-list.ts +0 -126
  278. package/server/routers/api/restful-apis/v1/get-inventory-overall-product-group.ts +0 -99
  279. package/server/routers/api/restful-apis/v1/get-inventory-product-group.ts +0 -112
  280. package/server/routers/api/restful-apis/v1/get-marketplace-order-shipping-list.ts +0 -156
  281. package/server/routers/api/restful-apis/v1/get-marketplace-store-list.ts +0 -81
  282. package/server/routers/api/restful-apis/v1/get-onhand-inventories.ts +0 -125
  283. package/server/routers/api/restful-apis/v1/get-partners.ts +0 -24
  284. package/server/routers/api/restful-apis/v1/get-products.ts +0 -216
  285. package/server/routers/api/restful-apis/v1/get-release-order-detail.ts +0 -134
  286. package/server/routers/api/restful-apis/v1/get-release-order-list.ts +0 -198
  287. package/server/routers/api/restful-apis/v1/get-warehouses.ts +0 -18
  288. package/server/routers/api/restful-apis/v1/reject-inbound-order.ts +0 -46
  289. package/server/routers/api/restful-apis/v1/set-marketplace-order-delivered.ts +0 -60
  290. package/server/routers/api/restful-apis/v1/set-marketplace-order-failed-delivery.ts +0 -60
  291. package/server/routers/api/restful-apis/v1/update-marketplace-order.ts +0 -111
  292. package/server/routers/api/restful-apis/v1/update-marketplace-shipping-order.ts +0 -104
  293. package/server/routers/api/restful-apis/v1/update-release-order-details.ts +0 -94
  294. package/server/routers/api/restful-apis/v2/add-contact-point.ts +0 -77
  295. package/server/routers/api/restful-apis/v2/add-draft-release-order.ts +0 -196
  296. package/server/routers/api/restful-apis/v2/add-inbound-order.ts +0 -242
  297. package/server/routers/api/restful-apis/v2/add-marketplace-order.ts +0 -172
  298. package/server/routers/api/restful-apis/v2/add-products.ts +0 -112
  299. package/server/routers/api/restful-apis/v2/add-release-order.ts +0 -967
  300. package/server/routers/api/restful-apis/v2/bizplace.ts +0 -45
  301. package/server/routers/api/restful-apis/v2/cancel-marketplace-order.ts +0 -81
  302. package/server/routers/api/restful-apis/v2/cancel-release-order.ts +0 -91
  303. package/server/routers/api/restful-apis/v2/get-contact-point-list.ts +0 -110
  304. package/server/routers/api/restful-apis/v2/get-delivery-order-detail.ts +0 -46
  305. package/server/routers/api/restful-apis/v2/get-delivery-order-list.ts +0 -121
  306. package/server/routers/api/restful-apis/v2/get-delivery-orders.ts +0 -178
  307. package/server/routers/api/restful-apis/v2/get-goods-received-notes.ts +0 -134
  308. package/server/routers/api/restful-apis/v2/get-inbound-order-detail.ts +0 -128
  309. package/server/routers/api/restful-apis/v2/get-inbound-order-list.ts +0 -126
  310. package/server/routers/api/restful-apis/v2/get-inventory-overall-product-group.ts +0 -99
  311. package/server/routers/api/restful-apis/v2/get-inventory-product-group.ts +0 -112
  312. package/server/routers/api/restful-apis/v2/get-marketplace-order-shipping-list.ts +0 -156
  313. package/server/routers/api/restful-apis/v2/get-marketplace-store-list.ts +0 -81
  314. package/server/routers/api/restful-apis/v2/get-onhand-inventories.ts +0 -125
  315. package/server/routers/api/restful-apis/v2/get-partners.ts +0 -24
  316. package/server/routers/api/restful-apis/v2/get-products.ts +0 -216
  317. package/server/routers/api/restful-apis/v2/get-release-order-detail.ts +0 -134
  318. package/server/routers/api/restful-apis/v2/get-release-order-list.ts +0 -198
  319. package/server/routers/api/restful-apis/v2/get-warehouses.ts +0 -18
  320. package/server/routers/api/restful-apis/v2/index.ts +0 -31
  321. package/server/routers/api/restful-apis/v2/reject-inbound-order.ts +0 -46
  322. package/server/routers/api/restful-apis/v2/set-marketplace-order-delivered.ts +0 -60
  323. package/server/routers/api/restful-apis/v2/set-marketplace-order-failed-delivery.ts +0 -60
  324. package/server/routers/api/restful-apis/v2/update-marketplace-order.ts +0 -111
  325. package/server/routers/api/restful-apis/v2/update-marketplace-shipping-order.ts +0 -104
  326. package/server/routers/api/restful-apis/v2/update-release-order-details.ts +0 -94
@@ -0,0 +1,941 @@
1
+ import { EntityManager, getConnection, getRepository, In, Not, Repository, SelectQueryBuilder } from 'typeorm'
2
+ import { v4 as uuidv4 } from 'uuid'
3
+
4
+ import { restfulApiRouter as router } from '@things-factory/api'
5
+ import { User } from '@things-factory/auth-base'
6
+ import { Bizplace, getCompanyBizplace } from '@things-factory/biz-base'
7
+ import { generateId } from '@things-factory/id-rule-base'
8
+ import { Sellercraft } from '@things-factory/integration-sellercraft'
9
+ import { MarketplaceOrder } from '@things-factory/marketplace-base'
10
+ import { ProductBundle, ProductDetail } from '@things-factory/product-base'
11
+ import {
12
+ createDraftReleaseGoodFunction,
13
+ DRAFT_RELEASE_ORDER_STATUS,
14
+ DraftReleaseGood,
15
+ ORDER_INVENTORY_STATUS,
16
+ ORDER_NUMBER_RULE_TYPE,
17
+ ORDER_NUMBER_SETTING_KEY,
18
+ ORDER_PRODUCT_STATUS,
19
+ ORDER_STATUS,
20
+ ORDER_TYPES,
21
+ OrderInventory,
22
+ OrderNoGenerator,
23
+ OrderProduct,
24
+ ReleaseGood,
25
+ SellercraftController,
26
+ ShippingOrder
27
+ } from '@things-factory/sales-base'
28
+ import { Setting } from '@things-factory/setting-base'
29
+ import { Domain } from '@things-factory/shell'
30
+ import { Inventory, INVENTORY_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
31
+
32
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
33
+ import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
34
+
35
+ const debug = require('debug')('things-factory:operato-hub:restful-api:unstable:add-release-order')
36
+ const apiVersion = 'v1'
37
+
38
+ router.post(
39
+ `/${apiVersion}/warehouse/add-release-order`,
40
+ businessMiddleware,
41
+ validationMiddleware,
42
+ loggingMiddleware,
43
+ async (context, next) => {
44
+ return await getConnection().transaction(async (tx: EntityManager) => {
45
+ const { client, domain, user, application } = context.state
46
+ const { bizplaceId: customerBizplaceId } = context.request.body.data
47
+ const { t } = context
48
+ const bodyReq = context.request.body.data
49
+ const requiredDraft: Boolean = bodyReq.hasOwnProperty('requiredDraft') ? bodyReq.requiredDraft : true
50
+ let releaseGood
51
+ let massagedData = { orderProducts: [], combinedItems: [] }
52
+ // const isAutoAssign: Boolean = bodyReq.hasOwnProperty('isAutoAssign') ? bodyReq.isAutoAssign : true
53
+
54
+ try {
55
+ if (!customerBizplaceId) throw new ApiError('E04', 'warehouse id not found')
56
+
57
+ if (typeof bodyReq === undefined || !Object.keys(bodyReq)?.length) {
58
+ throw new ApiError('E01', 'invalid body request format')
59
+ }
60
+ debug('post:/add-release-order request.body', bodyReq)
61
+
62
+ // get customer company's bizplace
63
+ const custCompanyBizplace: Bizplace = await getCompanyBizplace(null, null, customerBizplaceId, tx)
64
+ const customerBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({
65
+ where: { id: customerBizplaceId },
66
+ relations: ['domain']
67
+ })
68
+
69
+ // conditional validation
70
+ if (bodyReq.ownTransport && !bodyReq.collectionOrderNo) throw new ApiError('E03', 'collectionOrderNo')
71
+ if (bodyReq.exportOption && !bodyReq.shippingOrder) throw new ApiError('E03', 'shippingOrder')
72
+ if (bodyReq.exportOption && !bodyReq.ownTransport) throw new ApiError('E01', 'ownTransport')
73
+ if (new Date(bodyReq.releaseDate) < new Date()) throw new ApiError('E01', 'releaseDate')
74
+
75
+ bodyReq.exportOption
76
+ releaseGood = {
77
+ domain,
78
+ bizplace: customerBizplace,
79
+ companyBizplace: custCompanyBizplace,
80
+ courierOption: bodyReq.courierOption,
81
+ collectionOrderNo: bodyReq?.collectionOrderNo,
82
+ exportOption: bodyReq.exportOption,
83
+ ownTransport: bodyReq.ownTransport,
84
+ packingOption: bodyReq.packingOption,
85
+ refNo: bodyReq.refNo,
86
+ refNo2: bodyReq?.refNo2,
87
+ refNo3: bodyReq?.refNo3,
88
+ releaseDate: bodyReq.releaseDate,
89
+ type: bodyReq.type,
90
+ marketplaceOrderStatus: bodyReq?.marketplaceOrderStatus,
91
+ remark: bodyReq?.remark || null,
92
+ billingAddress: bodyReq?.billTo?.billingAddress || null,
93
+ deliveryAddress1: bodyReq?.deliverTo?.deliveryAddress1 || null,
94
+ deliveryAddress2: bodyReq?.deliverTo?.deliveryAddress2 || null,
95
+ deliveryAddress3: bodyReq?.deliverTo?.deliveryAddress3 || null,
96
+ deliveryAddress4: bodyReq?.deliverTo?.deliveryAddress4 || null,
97
+ deliveryAddress5: bodyReq?.deliverTo?.deliveryAddress5 || null,
98
+ attentionTo: bodyReq?.deliverTo?.attentionTo || null,
99
+ attentionCompany: bodyReq?.deliverTo?.attentionCompany || null,
100
+ city: bodyReq?.deliverTo?.city || null,
101
+ state: bodyReq?.deliverTo?.state || null,
102
+ postalCode: bodyReq?.deliverTo?.postalCode || null,
103
+ country: bodyReq?.deliverTo?.country || null,
104
+ phone1: bodyReq?.deliverTo?.phone1 || null,
105
+ phone2: bodyReq?.deliverTo?.phone2 || null,
106
+ email: bodyReq?.deliverTo?.email || null,
107
+ transporter: bodyReq?.transporter,
108
+ trackingNo: bodyReq?.trackingNo,
109
+ airwayBill: bodyReq?.airwayBill,
110
+ invoice: bodyReq?.invoice,
111
+ packageId: bodyReq?.packageId,
112
+ storeName: bodyReq?.storeName,
113
+ storeId: bodyReq?.storeId,
114
+ routeId: bodyReq?.routeId,
115
+ stopId: bodyReq?.stopId,
116
+ source: application?.type,
117
+ shippingOrder: {
118
+ shipName: bodyReq?.shippingOrder.shipName,
119
+ containerNo: bodyReq?.shippingOrder.containerNo,
120
+ loadType: bodyReq?.shippingOrder?.loadType,
121
+ from: bodyReq?.shippingOrder?.from,
122
+ to: bodyReq?.shippingOrder?.to,
123
+ containerArrivalDate: bodyReq?.shippingOrder.containerArrivalDate,
124
+ containerLeavingDate: bodyReq?.shippingOrder.containerLeavingDate
125
+ }
126
+ }
127
+
128
+ // check existing order
129
+ await checkExistingOrder(releaseGood, customerBizplace, bodyReq?.checkDuplicationValidation, context, tx)
130
+
131
+ // massage data
132
+ massagedData = await massageOrderItems(releaseGood, bodyReq.orderInventories, context)
133
+
134
+ // validation
135
+ await Promise.all(
136
+ massagedData.combinedItems.map(async item => {
137
+ let itemList = await tx.query(
138
+ `
139
+ select wboi.* from warehouse_bizplace_onhand_inventories wboi
140
+ where wboi."domain_id"= $1 and
141
+ wboi."bizplace_id" = $2 and
142
+ wboi."group_type" = 'SINGLE' and
143
+ wboi."product_id" = $3 and
144
+ wboi."packing_type" = $4 and
145
+ wboi."packing_size" = $5 and
146
+ wboi."uom" = $6 and
147
+ wboi."remain_qty" >= $7 and
148
+ wboi."remain_uom_value" >= $8
149
+ `,
150
+ [
151
+ domain.id,
152
+ customerBizplace.id,
153
+ item.product.id,
154
+ item.packingType,
155
+ item.packingSize,
156
+ item.uom,
157
+ item.releaseQty,
158
+ item.releaseUomValue
159
+ ]
160
+ )
161
+ if (itemList.length <= 0) {
162
+ throw new ApiError('E01', 'INSUFFICIENT_STOCK')
163
+ }
164
+ console.log()
165
+ })
166
+ )
167
+
168
+ // assignment
169
+ // console.time('assign')
170
+ let assignedOrderProducts = await assignToInventory(massagedData.orderProducts, customerBizplace, context, tx)
171
+ // console.timeEnd('assign')
172
+
173
+ // create order
174
+ // console.time('save')
175
+ let result = await createReleaseGood(releaseGood, assignedOrderProducts, customerBizplace, context, tx)
176
+ // console.timeEnd('save')
177
+
178
+ let data = {
179
+ id: result.id,
180
+ roNo: result.name,
181
+ refNo: result.refNo,
182
+ refNo2: result.refNo2,
183
+ refNo3: result.refNo3,
184
+ status: result.status,
185
+ truckNo: result.truckNo,
186
+ ownTransport: result.ownTransport,
187
+ crossDocking: result.crossDocking,
188
+ marketplaceOrderStatus: result.marketplaceOrderStatus,
189
+ billingAddress: result.billingAddress,
190
+ deliveryAddress1: result.deliveryAddress1,
191
+ deliveryAddress2: result.deliveryAddress2,
192
+ deliveryAddress3: result.deliveryAddress3,
193
+ deliveryAddress4: result.deliveryAddress4,
194
+ deliveryAddress5: result.deliveryAddress5,
195
+ attentionTo: result.attentionTo,
196
+ attentionCompany: result.attentionCompany,
197
+ city: result.city,
198
+ state: result.state,
199
+ postalCode: result.postalCode,
200
+ country: result.country,
201
+ phone1: result.phone1,
202
+ phone2: result.phone2,
203
+ email: result.email,
204
+ transporter: result.transporter,
205
+ trackingNo: result.trackingNo,
206
+ airwayBill: result.airwayBill,
207
+ invoice: result.invoice,
208
+ type: result.type,
209
+ packageId: result.packageId,
210
+ storeName: result.storeName,
211
+ storeId: result.storeId,
212
+ routeId: result.routeId,
213
+ stopId: result.stopId,
214
+ exportOption: result.exportOption,
215
+ releaseDate: result.releaseDate,
216
+ collectionOrderNo: result.collectionOrderNo,
217
+ bizplace: { name: result.bizplace.name },
218
+ domain: { name: result.domain.name },
219
+ orderInventories: result.orderInventories
220
+ }
221
+ // return body
222
+ context.body = { result: { data } }
223
+ } catch (error) {
224
+ if (error.details) {
225
+ if (error.details == 'INSUFFICIENT_STOCK' && requiredDraft) {
226
+ const result = await createDraftOrder(releaseGood, massagedData.orderProducts, context)
227
+ let data = {
228
+ id: result.id,
229
+ name: result.name,
230
+ refNo: result.refNo,
231
+ refNo2: result.refNo2,
232
+ refNo3: result.refNo3,
233
+ status: result.status,
234
+ truckNo: result.truckNo,
235
+ ownTransport: result.ownTransport,
236
+ marketplaceOrderStatus: result.marketplaceOrderStatus,
237
+ billingAddress: result.billingAddress,
238
+ deliveryAddress1: result.deliveryAddress1,
239
+ deliveryAddress2: result.deliveryAddress2,
240
+ deliveryAddress3: result.deliveryAddress3,
241
+ deliveryAddress4: result.deliveryAddress4,
242
+ deliveryAddress5: result.deliveryAddress5,
243
+ attentionTo: result.attentionTo,
244
+ attentionCompany: result.attentionCompany,
245
+ city: result.city,
246
+ state: result.state,
247
+ postalCode: result.postalCode,
248
+ country: result.country,
249
+ phone1: result.phone1,
250
+ phone2: result.phone2,
251
+ email: result.email,
252
+ type: result.type,
253
+ packageId: result.packageId,
254
+ exportOption: result.exportOption,
255
+ releaseDate: result.releaseDate,
256
+ collectionOrderNo: result.collectionOrderNo,
257
+ bizplace: { name: result.bizplace.name },
258
+ domain: { name: result.domain.name }
259
+ }
260
+ context.body = { result: { data } }
261
+ } else {
262
+ if (error instanceof ApiError) ApiErrorHandler(context, error)
263
+ else throwInternalServerError(context, error)
264
+ }
265
+ } else {
266
+ if (error instanceof ApiError) ApiErrorHandler(context, error)
267
+ else throwInternalServerError(context, error)
268
+ }
269
+ }
270
+ })
271
+ }
272
+ )
273
+
274
+ async function checkExistingOrder(releaseGood, bizplace, checkDuplicationValidation = true, context, tx) {
275
+ const { domain, user }: { domain: Domain; user: User } = context.state
276
+ const refNo: string = releaseGood.refNo
277
+ const refNo2: string = releaseGood.refNo2
278
+ const refNo3: string = releaseGood.refNo3
279
+
280
+ if (checkDuplicationValidation) {
281
+ const foundDraftReleaseGood: DraftReleaseGood = await tx.getRepository(DraftReleaseGood).findOne({
282
+ where: {
283
+ domain,
284
+ refNo: refNo || null,
285
+ refNo2: refNo2 || null,
286
+ refNo3: refNo3 || null,
287
+ status: Not(In([DRAFT_RELEASE_ORDER_STATUS.CANCELLED]))
288
+ }
289
+ })
290
+
291
+ if (foundDraftReleaseGood) {
292
+ throw new ApiError('E05', `existing draft release order found: ${foundDraftReleaseGood.name}`)
293
+ }
294
+
295
+ const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({ domain: bizplace.domain })
296
+
297
+ if (sellercraft) {
298
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, bizplace.domain, user)
299
+ await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood)
300
+ } else {
301
+ const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
302
+ where: {
303
+ domain: domain,
304
+ refNo,
305
+ status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))
306
+ },
307
+ relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
308
+ })
309
+
310
+ if (foundReleaseGood) {
311
+ const customerCompanyDomain: Domain = foundReleaseGood.bizplace.company.domain
312
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
313
+ where: { orderNo: refNo, domain: customerCompanyDomain }
314
+ })
315
+
316
+ // Need to restructure the validation
317
+ if (marketplaceOrder?.isSplitted) {
318
+ const refNo2: string = releaseGood.refNo2
319
+ const foundSplittedReleaseGood = await tx.getRepository(ReleaseGood).findOne({
320
+ where: {
321
+ domain,
322
+ refNo2,
323
+ status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))
324
+ },
325
+ relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
326
+ })
327
+
328
+ if (foundSplittedReleaseGood)
329
+ throw new ApiError('E05', `existing release order found: ${foundSplittedReleaseGood.name}`)
330
+ } else {
331
+ throw new ApiError('E05', `existing release order found: ${foundReleaseGood.name}`)
332
+ }
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ async function createDraftOrder(releaseGood, orderProducts, context) {
339
+ return await getConnection().transaction(async (tx: EntityManager) => {
340
+ return await createDraftReleaseGoodFunction(null, releaseGood, orderProducts, null, [], context, tx)
341
+ })
342
+ }
343
+
344
+ async function createReleaseGood(
345
+ releaseGood: any,
346
+ orderProducts: OrderProduct[],
347
+ bizplace: Bizplace,
348
+ context: any,
349
+ tx?: EntityManager
350
+ ): Promise<ReleaseGood> {
351
+ const { domain, user }: { domain: Domain; user: User } = context.state
352
+ const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
353
+
354
+ if (orderProducts.length <= 0) {
355
+ throw new ApiError('E04', `no order items found: ${JSON.stringify(releaseGood)}`)
356
+ }
357
+
358
+ let newReleaseGood: ReleaseGood = new ReleaseGood()
359
+
360
+ // find RO number rule setting
361
+ const roNoSetting: Setting = await settingRepo.findOne({
362
+ where: {
363
+ domain,
364
+ name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE
365
+ }
366
+ })
367
+
368
+ let shippingOrder: ShippingOrder
369
+ if (releaseGood?.shippingOrder) {
370
+ shippingOrder = await tx.getRepository(ShippingOrder).save({
371
+ name: OrderNoGenerator.shippingOrder(),
372
+ shipName: releaseGood.shippingOrder.shipName,
373
+ containerNo: releaseGood.shippingOrder.containerNo,
374
+ loadType: releaseGood.shippingOrder.loadType,
375
+ from: releaseGood.shippingOrder.from,
376
+ to: releaseGood.shippingOrder.to,
377
+ containerArrivalDate: releaseGood.shippingOrder.containerArrivalDate,
378
+ containerLeavingDate: releaseGood.shippingOrder.containerLeavingDate,
379
+ status: ORDER_STATUS.PENDING,
380
+ creator: user,
381
+ updater: user
382
+ })
383
+ }
384
+
385
+ newReleaseGood = {
386
+ name: roNoSetting
387
+ ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })
388
+ : OrderNoGenerator.releaseGood(),
389
+ domain: domain,
390
+ bizplace: bizplace,
391
+ collectionOrderNo: releaseGood.collectionOrderNo,
392
+ courierOption: releaseGood.courierOption,
393
+ exportOption: releaseGood.exportOption,
394
+ ownTransport: releaseGood.ownTransport,
395
+ packingOption: releaseGood.packingOption,
396
+ marketplaceOrderStatus: releaseGood?.marketplaceOrderStatus || null,
397
+ billingAddress: releaseGood?.billingAddress || null,
398
+ deliveryAddress1: releaseGood?.deliveryAddress1 || null,
399
+ deliveryAddress2: releaseGood?.deliveryAddress2 || null,
400
+ deliveryAddress3: releaseGood?.deliveryAddress3 || null,
401
+ deliveryAddress4: releaseGood?.deliveryAddress4 || null,
402
+ deliveryAddress5: releaseGood?.deliveryAddress5 || null,
403
+ attentionTo: releaseGood?.attentionTo || null,
404
+ attentionCompany: releaseGood?.attentionCompany || null,
405
+ city: releaseGood?.city || null,
406
+ state: releaseGood?.state || null,
407
+ postalCode: releaseGood?.postalCode || null,
408
+ country: releaseGood?.country || null,
409
+ phone1: releaseGood?.phone1 || null,
410
+ phone2: releaseGood?.phone2 || null,
411
+ email: releaseGood?.email || null,
412
+ transporter: releaseGood?.transporter,
413
+ trackingNo: releaseGood?.trackingNo,
414
+ airwayBill: releaseGood?.airwayBill,
415
+ invoice: releaseGood?.invoice,
416
+ refNo: releaseGood.refNo,
417
+ refNo2: releaseGood.refNo2 || null,
418
+ refNo3: releaseGood.refNo3 || null,
419
+ remark: releaseGood?.remark || null,
420
+ releaseDate: releaseGood.releaseDate,
421
+ truckNo: releaseGood.truckNo,
422
+ type: releaseGood?.type ? releaseGood.type : 'b2b',
423
+ status: ORDER_STATUS.PENDING_WORKSHEET,
424
+ storeName: releaseGood?.storeName,
425
+ storeId: releaseGood?.storeId,
426
+ routeId: releaseGood?.routeId,
427
+ stopId: releaseGood?.stopId,
428
+ packageId: releaseGood?.packageId || null,
429
+ noOfItems: orderProducts.length,
430
+ source: releaseGood?.source,
431
+ creator: user,
432
+ updater: user,
433
+ acceptedBy: user,
434
+ acceptedAt: new Date(),
435
+ shippingOrder: shippingOrder ? shippingOrder : null
436
+ }
437
+
438
+ let resultReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)
439
+ let combinedOrderInventories: OrderInventory[] = []
440
+ let savedOrderProducts = await Promise.all(
441
+ orderProducts.map(async orderProduct => {
442
+ let orderInventories: OrderInventory[] = orderProduct.orderInventories
443
+ orderProduct = Object.assign(new OrderProduct(), {
444
+ ...orderProduct,
445
+ name: uuidv4(),
446
+ domain: domain,
447
+ bizplace: bizplace,
448
+ releaseGood: resultReleaseGood,
449
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
450
+ status: ORDER_PRODUCT_STATUS.ASSIGNED
451
+ })
452
+ let result = await tx.getRepository(OrderProduct).save(orderProduct)
453
+
454
+ for (let oiIdx = 0; oiIdx < orderInventories.length; oiIdx++) {
455
+ let orderInventory = Object.assign(new OrderInventory(), {
456
+ ...orderInventories[oiIdx],
457
+ name: uuidv4(),
458
+ domain: domain,
459
+ bizplace: bizplace,
460
+ releaseGood: resultReleaseGood,
461
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
462
+ status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET
463
+ })
464
+ await tx.getRepository(OrderInventory).save(orderInventory)
465
+
466
+ combinedOrderInventories.push({
467
+ product: { name: orderInventory.product.name, sku: orderInventory.product.sku },
468
+ batchId: orderInventory.batchId,
469
+ packingType: orderInventory.packingType,
470
+ packingSize: orderInventory.packingSize,
471
+ releaseQty: orderInventory.releaseQty,
472
+ releaseUomValue: orderInventory.releaseUomValue
473
+ })
474
+ }
475
+
476
+ return result
477
+ })
478
+ )
479
+
480
+ newReleaseGood.orderProducts = savedOrderProducts
481
+ newReleaseGood.orderInventories = combinedOrderInventories
482
+
483
+ return newReleaseGood
484
+ }
485
+
486
+ async function massageOrderItems(
487
+ releaseGood,
488
+ inputOrderProducts,
489
+ context
490
+ ): Promise<{ orderProducts: OrderProduct[]; combinedItems: OrderProduct[] }> {
491
+ const { t } = context
492
+ let orderProducts: OrderProduct[] = []
493
+ //combine any repeated skus
494
+ inputOrderProducts = inputOrderProducts.reduce((acc, itm, idx) => {
495
+ let { sku, refCode } = itm.product
496
+ let { packingType, packingSize, batchId, releaseQty } = itm
497
+
498
+ if (!sku && !refCode) {
499
+ throw new ApiError('E01', 'sku or refCode not found')
500
+ }
501
+
502
+ if (releaseQty <= 0) {
503
+ throw new ApiError('E01', 'negative stock request')
504
+ }
505
+ if (releaseQty % 1 !== 0) throw new ApiError('E01', `releaseQty is not an integer: ${releaseQty}`)
506
+
507
+ let existingIndex = acc.findIndex(
508
+ itm =>
509
+ itm?.sku == sku?.trim() &&
510
+ itm?.refCode == refCode?.trim() &&
511
+ itm?.packingType == packingType?.trim() &&
512
+ itm?.packingSize == packingSize
513
+ )
514
+
515
+ if (existingIndex >= 0 && releaseQty > 0) {
516
+ acc[existingIndex].releaseQty = acc[existingIndex].releaseQty + releaseQty
517
+ } else {
518
+ acc.push({
519
+ sku: sku?.trim(),
520
+ refCode: refCode?.trim(),
521
+ packingType: packingType?.trim(),
522
+ packingSize: packingSize,
523
+ releaseQty: releaseQty
524
+ })
525
+ }
526
+
527
+ return acc
528
+ }, [])
529
+
530
+ //find customer sku in system
531
+ await Promise.all(
532
+ inputOrderProducts.map(async inputOrderItem => {
533
+ const sku: string = inputOrderItem.sku
534
+ const refCode: string = inputOrderItem.refCode
535
+ const packingType: string = inputOrderItem.packingType
536
+ const packingSize: string = inputOrderItem.packingSize
537
+
538
+ const qb: SelectQueryBuilder<ProductDetail> = getRepository(ProductDetail)
539
+ .createQueryBuilder('PD')
540
+ .innerJoinAndSelect('PD.product', 'PROD')
541
+ .where('PROD.bizplace_id = :bizplaceId', { bizplaceId: releaseGood.companyBizplace.id })
542
+
543
+ if (!sku && !refCode) {
544
+ throw new ApiError('E04', t('sku or refCode not found'))
545
+ }
546
+
547
+ if (refCode) {
548
+ qb.andWhere('PD.ref_code = :refCode', { refCode })
549
+ }
550
+
551
+ if (sku) {
552
+ qb.andWhere('PROD.sku = :sku', { sku })
553
+ }
554
+
555
+ if (packingType) {
556
+ qb.andWhere('PD.packing_type = :packingType', { packingType })
557
+ }
558
+
559
+ if ((!packingType && !refCode) || !packingSize) {
560
+ qb.andWhere('PD.is_default = :isDefault', { isDefault: true })
561
+ }
562
+
563
+ const productDetail: ProductDetail = await qb.getOne()
564
+
565
+ // order Product based on product detail
566
+ if (productDetail) {
567
+ let newOrderProduct: OrderInventory = Object.assign({}, inputOrderItem)
568
+ newOrderProduct = {
569
+ ...newOrderProduct,
570
+ product: productDetail.product,
571
+ productDetail: productDetail,
572
+ packingType: productDetail.packingType,
573
+ packingSize: packingSize || productDetail.packingSize,
574
+ uom: productDetail.uom,
575
+ uomValue: productDetail.uomValue,
576
+ refCode: inputOrderItem.refCode,
577
+ releaseQty: inputOrderItem.releaseQty,
578
+ releaseUomValue: inputOrderItem.releaseQty * (productDetail.uomValue || 1),
579
+ packQty: 0,
580
+ actualPackQty: 0,
581
+ palletQty: 0,
582
+ actualPalletQty: 0,
583
+ type: 'RELEASE_OF_GOODS',
584
+ status: ORDER_PRODUCT_STATUS.ASSIGNED,
585
+ batchId: '-'
586
+ }
587
+
588
+ newOrderProduct.orderInventories = [
589
+ {
590
+ ...newOrderProduct,
591
+ packQty: 0,
592
+ actualPackQty: 0,
593
+ palletQty: 0,
594
+ actualPalletQty: 0,
595
+ type: 'RELEASE_OF_GOODS',
596
+ status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET
597
+ }
598
+ ]
599
+
600
+ orderProducts.push(newOrderProduct)
601
+ }
602
+
603
+ if (!productDetail) {
604
+ const qb: SelectQueryBuilder<ProductDetail> = getRepository(ProductBundle)
605
+ .createQueryBuilder('PB')
606
+ .innerJoinAndSelect('PB.productBundleSettings', 'PBS')
607
+ .innerJoinAndSelect('PBS.productDetail', 'PBD')
608
+ .innerJoinAndSelect('PBD.product', 'PROD')
609
+ .where('PB.bizplace_id = :bizplaceId', { bizplaceId: releaseGood.companyBizplace.id })
610
+
611
+ if (!sku && !refCode) {
612
+ throw new ApiError('E04', 'sku or refCode not found')
613
+ }
614
+
615
+ if (refCode) {
616
+ qb.andWhere('PB.ref_code = :refCode', { refCode })
617
+ }
618
+
619
+ if (sku) {
620
+ qb.andWhere('PB.sku = :sku', { sku })
621
+ }
622
+
623
+ if (packingType) {
624
+ qb.andWhere('PB.packing_type = :packingType', { packingType })
625
+ }
626
+
627
+ const foundProductBundle: ProductBundle = await qb.getOne()
628
+
629
+ if (foundProductBundle) {
630
+ let orderProduct = {
631
+ productBundle: foundProductBundle,
632
+ refCode,
633
+ packingType: foundProductBundle.packingType,
634
+ packingSize: packingSize || 1,
635
+ uom: inputOrderItem?.uom,
636
+ releaseQty: inputOrderItem.releaseQty,
637
+ releaseUomValue: inputOrderItem.releaseQty,
638
+ packQty: 0,
639
+ actualPackQty: 0,
640
+ palletQty: 0,
641
+ actualPalletQty: 0,
642
+ orderInventories: [],
643
+ type: 'RELEASE_OF_GOODS',
644
+ status: ORDER_PRODUCT_STATUS.ASSIGNED,
645
+ batchId: '-'
646
+ }
647
+
648
+ const bundleProductSettings: any[] = foundProductBundle.productBundleSettings
649
+ bundleProductSettings.map(bundleProductSetting => {
650
+ const productDetailBundle: ProductDetail = bundleProductSetting.productDetail
651
+
652
+ let newOrderInventory: OrderInventory = {
653
+ product: productDetailBundle.product,
654
+ productDetail: productDetailBundle,
655
+ sku: productDetailBundle.product.sku,
656
+ packingType: productDetailBundle.packingType,
657
+ packingSize: productDetailBundle.packingSize,
658
+ uom: productDetailBundle.uom,
659
+ packQty: 0,
660
+ actualPackQty: 0,
661
+ palletQty: 0,
662
+ actualPalletQty: 0,
663
+ releaseQty: inputOrderItem.releaseQty * bundleProductSetting.bundleQty,
664
+ releaseUomValue:
665
+ inputOrderItem.releaseQty *
666
+ bundleProductSetting.bundleQty *
667
+ (productDetailBundle.uomValue <= 0 ? 1 : productDetailBundle.uomValue),
668
+ type: 'RELEASE_OF_GOODS',
669
+ status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET
670
+ }
671
+
672
+ orderProduct.orderInventories.push(newOrderInventory)
673
+ })
674
+ orderProducts.push(orderProduct)
675
+ } else {
676
+ if (sku && refCode) {
677
+ throw new ApiError('E04', t(`error.sku ${sku} and refCode ${refCode} not exist in product / bundle master`))
678
+ }
679
+
680
+ if (sku) {
681
+ throw new ApiError('E04', t(`error.sku ${sku} not exist in product / bundle master`))
682
+ }
683
+
684
+ if (refCode) {
685
+ throw new ApiError('E04', t(`error.refCode ${refCode} not exist in product / bundle master`))
686
+ }
687
+ }
688
+ }
689
+ })
690
+ )
691
+
692
+ //combine any repeated skus
693
+ let combinedItems: OrderProduct[] = orderProducts.reduce((acc, op, idx) => {
694
+ let oi = op?.orderInventories || []
695
+ oi.forEach(itm => {
696
+ let { sku, refCode } = itm.product
697
+ let { packingType, packingSize, batchId, releaseQty, product, productDetail, uom } = itm
698
+
699
+ if (!sku && !refCode) {
700
+ throw new ApiError('E04', t('error.sku or refCode not found'))
701
+ }
702
+ let existingIndex = acc.findIndex(
703
+ itm =>
704
+ itm?.sku == sku?.trim() &&
705
+ itm?.refCode == refCode?.trim() &&
706
+ itm?.packingType == packingType?.trim() &&
707
+ itm?.packingSize == packingSize &&
708
+ itm?.batchId == batchId?.trim() &&
709
+ itm?.uom == uom?.trim()
710
+ )
711
+
712
+ if (existingIndex >= 0 && releaseQty > 0) {
713
+ acc[existingIndex].releaseQty = acc[existingIndex].releaseQty + releaseQty
714
+ acc[existingIndex].releaseUomValue =
715
+ acc[existingIndex].releaseUomValue + releaseQty * (productDetail.uomValue <= 0 ? 1 : productDetail.uomValue)
716
+ } else {
717
+ let updateObj = {
718
+ sku: sku?.trim(),
719
+ packingType: packingType?.trim(),
720
+ packingSize: packingSize,
721
+ uom: uom?.trim(),
722
+ releaseQty: releaseQty,
723
+ releaseUomValue: releaseQty * (productDetail.uomValue <= 0 ? 1 : productDetail.uomValue),
724
+ product,
725
+ productDetail
726
+ }
727
+
728
+ if (refCode) updateObj['refCode'] = refCode.trim()
729
+ updateObj['batchId'] = batchId ? batchId?.trim() : '-'
730
+
731
+ acc.push(updateObj)
732
+ }
733
+ })
734
+ return acc
735
+ }, [])
736
+
737
+ return { orderProducts, combinedItems }
738
+ }
739
+
740
+ async function assignToInventory(orderProducts: OrderProduct[], customerBizplace, context, tx) {
741
+ const { client, domain, user } = context.state
742
+ for (let opIdx = 0; opIdx < orderProducts.length; opIdx++) {
743
+ let orderProduct = orderProducts[opIdx]
744
+
745
+ let assignedOrderInventories = []
746
+ const pickingProductSetting: Setting = await tx.getRepository(Setting).findOne({
747
+ where: { domain, name: 'rule-for-picking-product' }
748
+ })
749
+
750
+ for (let oiIdx = 0; oiIdx < orderProducts[opIdx].orderInventories.length; oiIdx++) {
751
+ const orderInventory = orderProduct.orderInventories[oiIdx]
752
+ let sortings: any = []
753
+
754
+ switch (orderInventory.product.pickingStrategy) {
755
+ case 'LIFO':
756
+ sortings.push({ name: 'iv.created_at', desc: true })
757
+ if (pickingProductSetting?.value) {
758
+ for (const [key, value] of Object.entries(JSON.parse(pickingProductSetting.value))) {
759
+ sortings.push({ name: `loc.${key}`, desc: value == 'DESC' ? true : false })
760
+ }
761
+ } else {
762
+ sortings.push({ name: 'loc.name', desc: false }, { name: 'iv.created_at', desc: false })
763
+ }
764
+
765
+ break
766
+ case 'FEFO':
767
+ sortings.push({ name: 'iv.expiration_date', desc: false }, { name: 'iv.created_at', desc: false })
768
+ if (pickingProductSetting?.value) {
769
+ for (const [key, value] of Object.entries(JSON.parse(pickingProductSetting.value))) {
770
+ sortings.push({ name: `loc.${key}`, desc: value == 'DESC' ? true : false })
771
+ }
772
+ } else {
773
+ sortings.push({ name: 'loc.name', desc: false }, { name: 'iv.created_at', desc: false })
774
+ }
775
+
776
+ break
777
+ case 'FMFO':
778
+ sortings.push({ name: 'iv.manufacture_date', desc: false }, { name: 'iv.created_at', desc: false })
779
+ if (pickingProductSetting?.value) {
780
+ for (const [key, value] of Object.entries(JSON.parse(pickingProductSetting.value))) {
781
+ sortings.push({ name: `loc.${key}`, desc: value == 'DESC' ? true : false })
782
+ }
783
+ } else {
784
+ sortings.push({ name: 'loc.name', desc: false }, { name: 'iv.created_at', desc: false })
785
+ }
786
+
787
+ break
788
+ case 'LOCATION':
789
+ if (pickingProductSetting?.value) {
790
+ for (const [key, value] of Object.entries(JSON.parse(pickingProductSetting.value))) {
791
+ sortings.push({ name: `loc.${key}`, desc: value == 'DESC' ? true : false })
792
+ }
793
+ } else {
794
+ sortings.push({ name: 'loc.name', desc: false }, { name: 'iv.created_at', desc: false })
795
+ }
796
+
797
+ break
798
+ //Every other case includes 'FIFO' will be applicable for this case
799
+ default:
800
+ sortings.push({ name: 'iv.created_at', desc: false })
801
+ if (pickingProductSetting?.value) {
802
+ for (const [key, value] of Object.entries(JSON.parse(pickingProductSetting.value))) {
803
+ sortings.push({ name: `loc.${key}`, desc: value == 'DESC' ? true : false })
804
+ }
805
+ } else {
806
+ sortings.push({ name: 'loc.name', desc: false })
807
+ sortings.push({ name: 'iv.pallet_id', desc: false })
808
+ }
809
+ break
810
+ }
811
+
812
+ let queryFilters = []
813
+
814
+ let queryStrings = queryFilters.reduce(
815
+ (acc, itm, idx, arr) => {
816
+ acc.values.push(itm.filters)
817
+
818
+ switch (itm?.operator) {
819
+ case 'notin':
820
+ case 'in':
821
+ acc.query.push(
822
+ `${itm.query} ${itm.operator == 'notin' ? 'NOT IN' : 'IN'} (${itm.filtes
823
+ .map((itm, idx) => {
824
+ return `$${acc.values.length + 1}`
825
+ })
826
+ .join(',')})`
827
+ )
828
+ break
829
+
830
+ default:
831
+ acc.query.push(`${itm.query} ${itm?.operator ? itm.operator : '='} $${acc.values.length + 1}`)
832
+ break
833
+ }
834
+ acc.query.push(`${itm.query} ${itm?.operator ? itm.operator : '='} $${acc.values.length + 1}`)
835
+ },
836
+ {
837
+ query: [],
838
+ values: []
839
+ }
840
+ )
841
+
842
+ let sortQuery = sortings
843
+ .map(itm => {
844
+ return `${itm.name} ${itm.desc ? 'DESC' : 'ASC'}`
845
+ })
846
+ .join(`,`)
847
+
848
+ let updatedInventories = await tx.getRepository(Inventory).query(
849
+ `
850
+ update inventories tgt set locked_qty = coalesce(locked_qty,0) + src.reserve_qty,
851
+ locked_uom_value = coalesce(locked_uom_value,0) + src.reserve_uom_value,
852
+ updated_at = NOW(),
853
+ updater_id = $1
854
+ from (
855
+ select "id", "pallet_id","carton_id", "batch_id", "batch_id_ref", "unit", "uom", "packing_type", "packing_size", "manufacture_year",
856
+ "reserve_qty", (("uom_value"/"qty") * "reserve_qty") as "reserve_uom_value" from (
857
+ select "sort_seq", "id", "pallet_id", "batch_id", "batch_id_ref", "unit", "uom", "packing_type", "packing_size", "manufacture_year", "carton_id", "uom_value", "locked_uom_value", "qty", "locked_qty", "created_at",
858
+ "release_qty", "release_uom_value", lock_amount,
859
+ case when "lock_amount" < 0 then "available_qty" else "available_qty" - "lock_amount" end as "reserve_qty"
860
+ from (
861
+ select *,
862
+ qty - locked_qty as available_qty,
863
+ sum(qty - locked_qty - release_qty) over (order by sort_seq asc rows between unbounded preceding and current row) as lock_amount
864
+ from (
865
+ SELECT 0 as sort_seq, null as id, null as pallet_id, null as batch_id, null as batch_id_ref,
866
+ null as unit, '${orderInventory.uom}' as uom, '${orderInventory.packingType}' as packing_type, '${
867
+ orderInventory.packingSize
868
+ }' as packing_size,
869
+ null as manufacture_year, null as carton_id, 0 as uom_value, 0 as locked_uom_value, 0 as qty, 0 as locked_qty, null as created_at,
870
+ '${orderInventory.releaseQty}' as release_qty, '${orderInventory.releaseUomValue}' as release_uom_value
871
+ UNION
872
+ (
873
+ SELECT ROW_NUMBER() OVER(PARTITION BY iv.domain_id ORDER BY ${sortQuery}) as sort_seq,
874
+ iv.id, iv.pallet_id, iv.batch_id, iv.batch_id_ref,
875
+ iv.unit, iv.uom, iv.packing_type, iv.packing_size,
876
+ iv.manufacture_year, iv.carton_id, iv.uom_value,
877
+ coalesce(iv.locked_uom_value,0) as locked_uom_value, iv.qty, coalesce(iv.locked_qty,0) as locked_qty, iv.created_at,
878
+ 0 as release_qty, 0 as release_uom_value
879
+ FROM "inventories" "iv"
880
+ INNER JOIN "locations" "loc" ON "loc"."id"="iv"."location_id"
881
+ WHERE case when coalesce("iv"."locked_qty",0) < 0 then 0 else ("iv"."qty" - coalesce("iv"."locked_qty",0)) end > 0 AND
882
+ "iv"."domain_id" = $2 AND "iv"."bizplace_id" = $3 AND "iv"."packing_type" = $4 AND "iv"."packing_size" = $5 AND "iv"."product_id" = $6 AND "iv"."status" = $7 AND "loc"."type" NOT IN ($8, $9)
883
+ ${queryStrings.query.length > 0 ? `AND ${queryStrings.join(' AND ')}` : ''}
884
+ ORDER BY ${sortQuery}
885
+ )
886
+ ) dt1
887
+ ) dt2 where case when "lock_amount" < 0 then "available_qty" else "available_qty" - "lock_amount" end > 0
888
+ ) dt3 where sort_seq > 0
889
+ ) src where src.id = tgt.id
890
+ returning
891
+ tgt."id", tgt."qty", tgt."pallet_id", tgt."carton_id", tgt."batch_id", tgt."batch_id_ref", tgt."unit",
892
+ tgt."uom", tgt."packing_type", tgt."packing_size", tgt."manufacture_year",
893
+ tgt."locked_qty", tgt."uom_value", tgt."locked_uom_value", src."reserve_qty", src."reserve_uom_value";`,
894
+ [
895
+ user.id,
896
+ domain.id,
897
+ customerBizplace.id,
898
+ orderInventory.packingType,
899
+ orderInventory.packingSize,
900
+ orderInventory.product.id,
901
+ INVENTORY_STATUS.STORED,
902
+ LOCATION_TYPE.QUARANTINE,
903
+ LOCATION_TYPE.RESERVE,
904
+ ...queryStrings.values
905
+ ]
906
+ )
907
+
908
+ let totalAssigned = updatedInventories[0].reduce((acc, inv) => {
909
+ return acc + inv.reserve_qty
910
+ }, 0)
911
+
912
+ if (orderInventory.releaseQty != totalAssigned) {
913
+ throw new ApiError('E01', 'INSUFFICIENT_STOCK')
914
+ }
915
+
916
+ updatedInventories[0].forEach(inv => {
917
+ let oi = {
918
+ ...orderInventory,
919
+ inventory: { id: inv.id },
920
+ uom: inv.uom,
921
+ packingType: inv.packing_type,
922
+ batchId: inv.batch_id,
923
+ releaseQty: inv.reserve_qty,
924
+ releaseUomValue: inv.reserve_uom_value,
925
+ pickedQty: 0,
926
+ packedQty: 0,
927
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
928
+ status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET,
929
+ domain: { id: domain.id },
930
+ bizplace: { id: customerBizplace.id }
931
+ }
932
+
933
+ assignedOrderInventories.push(oi)
934
+ })
935
+ }
936
+
937
+ orderProducts[opIdx].orderInventories = assignedOrderInventories
938
+ }
939
+
940
+ return orderProducts
941
+ }