@things-factory/operato-hub 4.3.122 → 4.3.123

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