@things-factory/sales-base 4.3.671 → 4.3.675

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 (429) hide show
  1. package/dist-server/constants/attachment-type.js +15 -0
  2. package/dist-server/constants/attachment-type.js.map +1 -0
  3. package/dist-server/constants/index.js +24 -0
  4. package/dist-server/constants/index.js.map +1 -0
  5. package/dist-server/constants/load-type.js +8 -0
  6. package/dist-server/constants/load-type.js.map +1 -0
  7. package/dist-server/constants/order.js +235 -0
  8. package/dist-server/constants/order.js.map +1 -0
  9. package/dist-server/constants/product-group-type.js +8 -0
  10. package/dist-server/constants/product-group-type.js.map +1 -0
  11. package/dist-server/constants/release-good.js +13 -0
  12. package/dist-server/constants/release-good.js.map +1 -0
  13. package/dist-server/constants/transfer-order-type.js +9 -0
  14. package/dist-server/constants/transfer-order-type.js.map +1 -0
  15. package/dist-server/constants/validation-error-code.js +7 -0
  16. package/dist-server/constants/validation-error-code.js.map +1 -0
  17. package/dist-server/constants/vas-target-type.js +26 -0
  18. package/dist-server/constants/vas-target-type.js.map +1 -0
  19. package/dist-server/controllers/ecommerce/ecommerce-controller.js +138 -0
  20. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -0
  21. package/dist-server/controllers/ecommerce/index.js +21 -0
  22. package/dist-server/controllers/ecommerce/index.js.map +1 -0
  23. package/dist-server/controllers/ecommerce/powrup-controller.js +747 -0
  24. package/dist-server/controllers/ecommerce/powrup-controller.js.map +1 -0
  25. package/dist-server/controllers/ecommerce/sellercraft-controller.js +148 -0
  26. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -0
  27. package/dist-server/controllers/ecommerce/webspert-controller.js +237 -0
  28. package/dist-server/controllers/ecommerce/webspert-controller.js.map +1 -0
  29. package/dist-server/controllers/index.js +19 -0
  30. package/dist-server/controllers/index.js.map +1 -0
  31. package/dist-server/controllers/order-controller.js +244 -0
  32. package/dist-server/controllers/order-controller.js.map +1 -0
  33. package/dist-server/errors/index.js +18 -0
  34. package/dist-server/errors/index.js.map +1 -0
  35. package/dist-server/errors/validation-error.js +41 -0
  36. package/dist-server/errors/validation-error.js.map +1 -0
  37. package/dist-server/index.js +30 -0
  38. package/dist-server/index.js.map +1 -0
  39. package/dist-server/migrations/index.js +12 -0
  40. package/dist-server/migrations/index.js.map +1 -0
  41. package/dist-server/service/arrival-notice/arrival-notice-mutation.js +1453 -0
  42. package/dist-server/service/arrival-notice/arrival-notice-mutation.js.map +1 -0
  43. package/dist-server/service/arrival-notice/arrival-notice-query.js +638 -0
  44. package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -0
  45. package/dist-server/service/arrival-notice/arrival-notice-types.js +443 -0
  46. package/dist-server/service/arrival-notice/arrival-notice-types.js.map +1 -0
  47. package/dist-server/service/arrival-notice/arrival-notice.js +259 -0
  48. package/dist-server/service/arrival-notice/arrival-notice.js.map +1 -0
  49. package/dist-server/service/arrival-notice/index.js +25 -0
  50. package/dist-server/service/arrival-notice/index.js.map +1 -0
  51. package/dist-server/service/claim/claim-mutation.js +243 -0
  52. package/dist-server/service/claim/claim-mutation.js.map +1 -0
  53. package/dist-server/service/claim/claim-query.js +165 -0
  54. package/dist-server/service/claim/claim-query.js.map +1 -0
  55. package/dist-server/service/claim/claim-types.js +191 -0
  56. package/dist-server/service/claim/claim-types.js.map +1 -0
  57. package/dist-server/service/claim/claim.js +176 -0
  58. package/dist-server/service/claim/claim.js.map +1 -0
  59. package/dist-server/service/claim/index.js +25 -0
  60. package/dist-server/service/claim/index.js.map +1 -0
  61. package/dist-server/service/claim-detail/claim-detail-mutation.js +110 -0
  62. package/dist-server/service/claim-detail/claim-detail-mutation.js.map +1 -0
  63. package/dist-server/service/claim-detail/claim-detail-query.js +90 -0
  64. package/dist-server/service/claim-detail/claim-detail-query.js.map +1 -0
  65. package/dist-server/service/claim-detail/claim-detail-types.js +81 -0
  66. package/dist-server/service/claim-detail/claim-detail-types.js.map +1 -0
  67. package/dist-server/service/claim-detail/claim-detail.js +102 -0
  68. package/dist-server/service/claim-detail/claim-detail.js.map +1 -0
  69. package/dist-server/service/claim-detail/index.js +25 -0
  70. package/dist-server/service/claim-detail/index.js.map +1 -0
  71. package/dist-server/service/claim-order/claim-order-mutation.js +110 -0
  72. package/dist-server/service/claim-order/claim-order-mutation.js.map +1 -0
  73. package/dist-server/service/claim-order/claim-order-query.js +86 -0
  74. package/dist-server/service/claim-order/claim-order-query.js.map +1 -0
  75. package/dist-server/service/claim-order/claim-order-types.js +65 -0
  76. package/dist-server/service/claim-order/claim-order-types.js.map +1 -0
  77. package/dist-server/service/claim-order/claim-order.js +104 -0
  78. package/dist-server/service/claim-order/claim-order.js.map +1 -0
  79. package/dist-server/service/claim-order/index.js +25 -0
  80. package/dist-server/service/claim-order/index.js.map +1 -0
  81. package/dist-server/service/collection-order/collection-order-mutation.js +241 -0
  82. package/dist-server/service/collection-order/collection-order-mutation.js.map +1 -0
  83. package/dist-server/service/collection-order/collection-order-query.js +125 -0
  84. package/dist-server/service/collection-order/collection-order-query.js.map +1 -0
  85. package/dist-server/service/collection-order/collection-order-types.js +241 -0
  86. package/dist-server/service/collection-order/collection-order-types.js.map +1 -0
  87. package/dist-server/service/collection-order/collection-order.js +183 -0
  88. package/dist-server/service/collection-order/collection-order.js.map +1 -0
  89. package/dist-server/service/collection-order/index.js +25 -0
  90. package/dist-server/service/collection-order/index.js.map +1 -0
  91. package/dist-server/service/delivery-order/delivery-order-mutation.js +746 -0
  92. package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -0
  93. package/dist-server/service/delivery-order/delivery-order-query.js +570 -0
  94. package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -0
  95. package/dist-server/service/delivery-order/delivery-order-types.js +397 -0
  96. package/dist-server/service/delivery-order/delivery-order-types.js.map +1 -0
  97. package/dist-server/service/delivery-order/delivery-order.js +365 -0
  98. package/dist-server/service/delivery-order/delivery-order.js.map +1 -0
  99. package/dist-server/service/delivery-order/index.js +25 -0
  100. package/dist-server/service/delivery-order/index.js.map +1 -0
  101. package/dist-server/service/draft-release-good/draft-release-good-create.js +647 -0
  102. package/dist-server/service/draft-release-good/draft-release-good-create.js.map +1 -0
  103. package/dist-server/service/draft-release-good/draft-release-good-mutation.js +486 -0
  104. package/dist-server/service/draft-release-good/draft-release-good-mutation.js.map +1 -0
  105. package/dist-server/service/draft-release-good/draft-release-good-query.js +372 -0
  106. package/dist-server/service/draft-release-good/draft-release-good-query.js.map +1 -0
  107. package/dist-server/service/draft-release-good/draft-release-good-type.js +424 -0
  108. package/dist-server/service/draft-release-good/draft-release-good-type.js.map +1 -0
  109. package/dist-server/service/draft-release-good/draft-release-good.js +444 -0
  110. package/dist-server/service/draft-release-good/draft-release-good.js.map +1 -0
  111. package/dist-server/service/draft-release-good/index.js +29 -0
  112. package/dist-server/service/draft-release-good/index.js.map +1 -0
  113. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.js +140 -0
  114. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.js.map +1 -0
  115. package/dist-server/service/goods-receival-note/goods-receival-note-query.js +273 -0
  116. package/dist-server/service/goods-receival-note/goods-receival-note-query.js.map +1 -0
  117. package/dist-server/service/goods-receival-note/goods-receival-note-types.js +159 -0
  118. package/dist-server/service/goods-receival-note/goods-receival-note-types.js.map +1 -0
  119. package/dist-server/service/goods-receival-note/goods-receival-note.js +156 -0
  120. package/dist-server/service/goods-receival-note/goods-receival-note.js.map +1 -0
  121. package/dist-server/service/goods-receival-note/index.js +25 -0
  122. package/dist-server/service/goods-receival-note/index.js.map +1 -0
  123. package/dist-server/service/index.js +282 -0
  124. package/dist-server/service/index.js.map +1 -0
  125. package/dist-server/service/inventory-check/index.js +25 -0
  126. package/dist-server/service/inventory-check/index.js.map +1 -0
  127. package/dist-server/service/inventory-check/inventory-check-mutation.js +151 -0
  128. package/dist-server/service/inventory-check/inventory-check-mutation.js.map +1 -0
  129. package/dist-server/service/inventory-check/inventory-check-query.js +138 -0
  130. package/dist-server/service/inventory-check/inventory-check-query.js.map +1 -0
  131. package/dist-server/service/inventory-check/inventory-check-types.js +82 -0
  132. package/dist-server/service/inventory-check/inventory-check-types.js.map +1 -0
  133. package/dist-server/service/inventory-check/inventory-check.js +115 -0
  134. package/dist-server/service/inventory-check/inventory-check.js.map +1 -0
  135. package/dist-server/service/inventory-check-item/index.js +25 -0
  136. package/dist-server/service/inventory-check-item/index.js.map +1 -0
  137. package/dist-server/service/inventory-check-item/inventory-check-item-mutation.js +120 -0
  138. package/dist-server/service/inventory-check-item/inventory-check-item-mutation.js.map +1 -0
  139. package/dist-server/service/inventory-check-item/inventory-check-item-query.js +196 -0
  140. package/dist-server/service/inventory-check-item/inventory-check-item-query.js.map +1 -0
  141. package/dist-server/service/inventory-check-item/inventory-check-item-types.js +157 -0
  142. package/dist-server/service/inventory-check-item/inventory-check-item-types.js.map +1 -0
  143. package/dist-server/service/inventory-check-item/inventory-check-item.js +273 -0
  144. package/dist-server/service/inventory-check-item/inventory-check-item.js.map +1 -0
  145. package/dist-server/service/invoice/index.js +25 -0
  146. package/dist-server/service/invoice/index.js.map +1 -0
  147. package/dist-server/service/invoice/invoice-mutation.js +105 -0
  148. package/dist-server/service/invoice/invoice-mutation.js.map +1 -0
  149. package/dist-server/service/invoice/invoice-query.js +94 -0
  150. package/dist-server/service/invoice/invoice-query.js.map +1 -0
  151. package/dist-server/service/invoice/invoice-types.js +388 -0
  152. package/dist-server/service/invoice/invoice-types.js.map +1 -0
  153. package/dist-server/service/invoice/invoice.js +312 -0
  154. package/dist-server/service/invoice/invoice.js.map +1 -0
  155. package/dist-server/service/invoice-product/index.js +25 -0
  156. package/dist-server/service/invoice-product/index.js.map +1 -0
  157. package/dist-server/service/invoice-product/invoice-product-mutation.js +70 -0
  158. package/dist-server/service/invoice-product/invoice-product-mutation.js.map +1 -0
  159. package/dist-server/service/invoice-product/invoice-product-query.js +95 -0
  160. package/dist-server/service/invoice-product/invoice-product-query.js.map +1 -0
  161. package/dist-server/service/invoice-product/invoice-product-types.js +131 -0
  162. package/dist-server/service/invoice-product/invoice-product-types.js.map +1 -0
  163. package/dist-server/service/invoice-product/invoice-product.js +130 -0
  164. package/dist-server/service/invoice-product/invoice-product.js.map +1 -0
  165. package/dist-server/service/job-sheet/index.js +25 -0
  166. package/dist-server/service/job-sheet/index.js.map +1 -0
  167. package/dist-server/service/job-sheet/job-sheet-mutation.js +93 -0
  168. package/dist-server/service/job-sheet/job-sheet-mutation.js.map +1 -0
  169. package/dist-server/service/job-sheet/job-sheet-query.js +134 -0
  170. package/dist-server/service/job-sheet/job-sheet-query.js.map +1 -0
  171. package/dist-server/service/job-sheet/job-sheet-types.js +113 -0
  172. package/dist-server/service/job-sheet/job-sheet-types.js.map +1 -0
  173. package/dist-server/service/job-sheet/job-sheet.js +132 -0
  174. package/dist-server/service/job-sheet/job-sheet.js.map +1 -0
  175. package/dist-server/service/manifest/index.js +9 -0
  176. package/dist-server/service/manifest/index.js.map +1 -0
  177. package/dist-server/service/manifest/manifest-mutation.js +264 -0
  178. package/dist-server/service/manifest/manifest-mutation.js.map +1 -0
  179. package/dist-server/service/manifest/manifest-query.js +228 -0
  180. package/dist-server/service/manifest/manifest-query.js.map +1 -0
  181. package/dist-server/service/manifest/manifest-type.js +183 -0
  182. package/dist-server/service/manifest/manifest-type.js.map +1 -0
  183. package/dist-server/service/manifest/manifest.js +134 -0
  184. package/dist-server/service/manifest/manifest.js.map +1 -0
  185. package/dist-server/service/order-consignment/index.js +9 -0
  186. package/dist-server/service/order-consignment/index.js.map +1 -0
  187. package/dist-server/service/order-consignment/order-consignment-mutation.js +120 -0
  188. package/dist-server/service/order-consignment/order-consignment-mutation.js.map +1 -0
  189. package/dist-server/service/order-consignment/order-consignment-query.js +87 -0
  190. package/dist-server/service/order-consignment/order-consignment-query.js.map +1 -0
  191. package/dist-server/service/order-consignment/order-consignment-type.js +69 -0
  192. package/dist-server/service/order-consignment/order-consignment-type.js.map +1 -0
  193. package/dist-server/service/order-consignment/order-consignment.js +115 -0
  194. package/dist-server/service/order-consignment/order-consignment.js.map +1 -0
  195. package/dist-server/service/order-inventory/index.js +25 -0
  196. package/dist-server/service/order-inventory/index.js.map +1 -0
  197. package/dist-server/service/order-inventory/order-inventory-mutation.js +80 -0
  198. package/dist-server/service/order-inventory/order-inventory-mutation.js.map +1 -0
  199. package/dist-server/service/order-inventory/order-inventory-query.js +592 -0
  200. package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -0
  201. package/dist-server/service/order-inventory/order-inventory-types.js +341 -0
  202. package/dist-server/service/order-inventory/order-inventory-types.js.map +1 -0
  203. package/dist-server/service/order-inventory/order-inventory.js +785 -0
  204. package/dist-server/service/order-inventory/order-inventory.js.map +1 -0
  205. package/dist-server/service/order-package/index.js +9 -0
  206. package/dist-server/service/order-package/index.js.map +1 -0
  207. package/dist-server/service/order-package/order-package-mutation.js +120 -0
  208. package/dist-server/service/order-package/order-package-mutation.js.map +1 -0
  209. package/dist-server/service/order-package/order-package-query.js +142 -0
  210. package/dist-server/service/order-package/order-package-query.js.map +1 -0
  211. package/dist-server/service/order-package/order-package-types.js +113 -0
  212. package/dist-server/service/order-package/order-package-types.js.map +1 -0
  213. package/dist-server/service/order-package/order-package.js +229 -0
  214. package/dist-server/service/order-package/order-package.js.map +1 -0
  215. package/dist-server/service/order-package-item/index.js +9 -0
  216. package/dist-server/service/order-package-item/index.js.map +1 -0
  217. package/dist-server/service/order-package-item/order-package-item-mutation.js +120 -0
  218. package/dist-server/service/order-package-item/order-package-item-mutation.js.map +1 -0
  219. package/dist-server/service/order-package-item/order-package-item-query.js +127 -0
  220. package/dist-server/service/order-package-item/order-package-item-query.js.map +1 -0
  221. package/dist-server/service/order-package-item/order-package-item-types.js +99 -0
  222. package/dist-server/service/order-package-item/order-package-item-types.js.map +1 -0
  223. package/dist-server/service/order-package-item/order-package-item.js +162 -0
  224. package/dist-server/service/order-package-item/order-package-item.js.map +1 -0
  225. package/dist-server/service/order-product/index.js +25 -0
  226. package/dist-server/service/order-product/index.js.map +1 -0
  227. package/dist-server/service/order-product/order-product-mutation.js +74 -0
  228. package/dist-server/service/order-product/order-product-mutation.js.map +1 -0
  229. package/dist-server/service/order-product/order-product-query.js +125 -0
  230. package/dist-server/service/order-product/order-product-query.js.map +1 -0
  231. package/dist-server/service/order-product/order-product-types.js +545 -0
  232. package/dist-server/service/order-product/order-product-types.js.map +1 -0
  233. package/dist-server/service/order-product/order-product.js +605 -0
  234. package/dist-server/service/order-product/order-product.js.map +1 -0
  235. package/dist-server/service/order-tote/index.js +25 -0
  236. package/dist-server/service/order-tote/index.js.map +1 -0
  237. package/dist-server/service/order-tote/order-tote-mutation.js +56 -0
  238. package/dist-server/service/order-tote/order-tote-mutation.js.map +1 -0
  239. package/dist-server/service/order-tote/order-tote-query.js +123 -0
  240. package/dist-server/service/order-tote/order-tote-query.js.map +1 -0
  241. package/dist-server/service/order-tote/order-tote-types.js +79 -0
  242. package/dist-server/service/order-tote/order-tote-types.js.map +1 -0
  243. package/dist-server/service/order-tote/order-tote.js +92 -0
  244. package/dist-server/service/order-tote/order-tote.js.map +1 -0
  245. package/dist-server/service/order-tote-item/index.js +25 -0
  246. package/dist-server/service/order-tote-item/index.js.map +1 -0
  247. package/dist-server/service/order-tote-item/order-tote-item-mutation.js +56 -0
  248. package/dist-server/service/order-tote-item/order-tote-item-mutation.js.map +1 -0
  249. package/dist-server/service/order-tote-item/order-tote-item-query.js +100 -0
  250. package/dist-server/service/order-tote-item/order-tote-item-query.js.map +1 -0
  251. package/dist-server/service/order-tote-item/order-tote-item-types.js +91 -0
  252. package/dist-server/service/order-tote-item/order-tote-item-types.js.map +1 -0
  253. package/dist-server/service/order-tote-item/order-tote-item.js +118 -0
  254. package/dist-server/service/order-tote-item/order-tote-item.js.map +1 -0
  255. package/dist-server/service/order-tote-seal/index.js +25 -0
  256. package/dist-server/service/order-tote-seal/index.js.map +1 -0
  257. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.js +56 -0
  258. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.js.map +1 -0
  259. package/dist-server/service/order-tote-seal/order-tote-seal-query.js +97 -0
  260. package/dist-server/service/order-tote-seal/order-tote-seal-query.js.map +1 -0
  261. package/dist-server/service/order-tote-seal/order-tote-seal-types.js +71 -0
  262. package/dist-server/service/order-tote-seal/order-tote-seal-types.js.map +1 -0
  263. package/dist-server/service/order-tote-seal/order-tote-seal.js +71 -0
  264. package/dist-server/service/order-tote-seal/order-tote-seal.js.map +1 -0
  265. package/dist-server/service/order-vas/index.js +25 -0
  266. package/dist-server/service/order-vas/index.js.map +1 -0
  267. package/dist-server/service/order-vas/order-vas-mutation.js +148 -0
  268. package/dist-server/service/order-vas/order-vas-mutation.js.map +1 -0
  269. package/dist-server/service/order-vas/order-vas-query.js +148 -0
  270. package/dist-server/service/order-vas/order-vas-query.js.map +1 -0
  271. package/dist-server/service/order-vas/order-vas-types.js +348 -0
  272. package/dist-server/service/order-vas/order-vas-types.js.map +1 -0
  273. package/dist-server/service/order-vas/order-vas.js +476 -0
  274. package/dist-server/service/order-vas/order-vas.js.map +1 -0
  275. package/dist-server/service/order-vas-item/index.js +9 -0
  276. package/dist-server/service/order-vas-item/index.js.map +1 -0
  277. package/dist-server/service/order-vas-item/order-vas-item-mutation.js +164 -0
  278. package/dist-server/service/order-vas-item/order-vas-item-mutation.js.map +1 -0
  279. package/dist-server/service/order-vas-item/order-vas-item-query.js +99 -0
  280. package/dist-server/service/order-vas-item/order-vas-item-query.js.map +1 -0
  281. package/dist-server/service/order-vas-item/order-vas-item-type.js +131 -0
  282. package/dist-server/service/order-vas-item/order-vas-item-type.js.map +1 -0
  283. package/dist-server/service/order-vas-item/order-vas-item.js +166 -0
  284. package/dist-server/service/order-vas-item/order-vas-item.js.map +1 -0
  285. package/dist-server/service/others/index.js +21 -0
  286. package/dist-server/service/others/index.js.map +1 -0
  287. package/dist-server/service/others/other-query.js +605 -0
  288. package/dist-server/service/others/other-query.js.map +1 -0
  289. package/dist-server/service/others/other-types.js +198 -0
  290. package/dist-server/service/others/other-types.js.map +1 -0
  291. package/dist-server/service/purchase-order/index.js +25 -0
  292. package/dist-server/service/purchase-order/index.js.map +1 -0
  293. package/dist-server/service/purchase-order/purchase-order-mutation.js +398 -0
  294. package/dist-server/service/purchase-order/purchase-order-mutation.js.map +1 -0
  295. package/dist-server/service/purchase-order/purchase-order-query.js +126 -0
  296. package/dist-server/service/purchase-order/purchase-order-query.js.map +1 -0
  297. package/dist-server/service/purchase-order/purchase-order-types.js +240 -0
  298. package/dist-server/service/purchase-order/purchase-order-types.js.map +1 -0
  299. package/dist-server/service/purchase-order/purchase-order.js +236 -0
  300. package/dist-server/service/purchase-order/purchase-order.js.map +1 -0
  301. package/dist-server/service/purchase-order-other-charge/index.js +25 -0
  302. package/dist-server/service/purchase-order-other-charge/index.js.map +1 -0
  303. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.js +56 -0
  304. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.js.map +1 -0
  305. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.js +87 -0
  306. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.js.map +1 -0
  307. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.js +77 -0
  308. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.js.map +1 -0
  309. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.js +101 -0
  310. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.js.map +1 -0
  311. package/dist-server/service/release-good/index.js +25 -0
  312. package/dist-server/service/release-good/index.js.map +1 -0
  313. package/dist-server/service/release-good/release-good-mutation.js +1598 -0
  314. package/dist-server/service/release-good/release-good-mutation.js.map +1 -0
  315. package/dist-server/service/release-good/release-good-query.js +1132 -0
  316. package/dist-server/service/release-good/release-good-query.js.map +1 -0
  317. package/dist-server/service/release-good/release-good-types.js +1043 -0
  318. package/dist-server/service/release-good/release-good-types.js.map +1 -0
  319. package/dist-server/service/release-good/release-good.js +817 -0
  320. package/dist-server/service/release-good/release-good.js.map +1 -0
  321. package/dist-server/service/release-good-logs/index.js +11 -0
  322. package/dist-server/service/release-good-logs/index.js.map +1 -0
  323. package/dist-server/service/release-good-logs/release-good-logs-mutation.js +126 -0
  324. package/dist-server/service/release-good-logs/release-good-logs-mutation.js.map +1 -0
  325. package/dist-server/service/release-good-logs/release-good-logs-query.js +71 -0
  326. package/dist-server/service/release-good-logs/release-good-logs-query.js.map +1 -0
  327. package/dist-server/service/release-good-logs/release-good-logs-type.js +65 -0
  328. package/dist-server/service/release-good-logs/release-good-logs-type.js.map +1 -0
  329. package/dist-server/service/release-good-logs/release-good-logs.js +96 -0
  330. package/dist-server/service/release-good-logs/release-good-logs.js.map +1 -0
  331. package/dist-server/service/replenishment/index.js +9 -0
  332. package/dist-server/service/replenishment/index.js.map +1 -0
  333. package/dist-server/service/replenishment/replenishment-mutation.js +234 -0
  334. package/dist-server/service/replenishment/replenishment-mutation.js.map +1 -0
  335. package/dist-server/service/replenishment/replenishment-query.js +185 -0
  336. package/dist-server/service/replenishment/replenishment-query.js.map +1 -0
  337. package/dist-server/service/replenishment/replenishment-type.js +119 -0
  338. package/dist-server/service/replenishment/replenishment-type.js.map +1 -0
  339. package/dist-server/service/replenishment/replenishment.js +114 -0
  340. package/dist-server/service/replenishment/replenishment.js.map +1 -0
  341. package/dist-server/service/retail-replenishment-order/index.js +25 -0
  342. package/dist-server/service/retail-replenishment-order/index.js.map +1 -0
  343. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.js +314 -0
  344. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.js.map +1 -0
  345. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.js +89 -0
  346. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.js.map +1 -0
  347. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.js +148 -0
  348. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.js.map +1 -0
  349. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.js +141 -0
  350. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.js.map +1 -0
  351. package/dist-server/service/return-order/index.js +25 -0
  352. package/dist-server/service/return-order/index.js.map +1 -0
  353. package/dist-server/service/return-order/return-order-mutation.js +451 -0
  354. package/dist-server/service/return-order/return-order-mutation.js.map +1 -0
  355. package/dist-server/service/return-order/return-order-query.js +243 -0
  356. package/dist-server/service/return-order/return-order-query.js.map +1 -0
  357. package/dist-server/service/return-order/return-order-types.js +274 -0
  358. package/dist-server/service/return-order/return-order-types.js.map +1 -0
  359. package/dist-server/service/return-order/return-order.js +159 -0
  360. package/dist-server/service/return-order/return-order.js.map +1 -0
  361. package/dist-server/service/reverse-kitting-order/index.js +25 -0
  362. package/dist-server/service/reverse-kitting-order/index.js.map +1 -0
  363. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js +407 -0
  364. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js.map +1 -0
  365. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js +222 -0
  366. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js.map +1 -0
  367. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js +230 -0
  368. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js.map +1 -0
  369. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js +145 -0
  370. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js.map +1 -0
  371. package/dist-server/service/reverse-kitting-order-inventory/index.js +25 -0
  372. package/dist-server/service/reverse-kitting-order-inventory/index.js.map +1 -0
  373. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js +130 -0
  374. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js.map +1 -0
  375. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.js +87 -0
  376. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.js.map +1 -0
  377. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js +143 -0
  378. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js.map +1 -0
  379. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js +178 -0
  380. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js.map +1 -0
  381. package/dist-server/service/shipping-order/index.js +25 -0
  382. package/dist-server/service/shipping-order/index.js.map +1 -0
  383. package/dist-server/service/shipping-order/shipping-order-mutation.js +78 -0
  384. package/dist-server/service/shipping-order/shipping-order-mutation.js.map +1 -0
  385. package/dist-server/service/shipping-order/shipping-order-query.js +96 -0
  386. package/dist-server/service/shipping-order/shipping-order-query.js.map +1 -0
  387. package/dist-server/service/shipping-order/shipping-order-types.js +137 -0
  388. package/dist-server/service/shipping-order/shipping-order-types.js.map +1 -0
  389. package/dist-server/service/shipping-order/shipping-order.js +165 -0
  390. package/dist-server/service/shipping-order/shipping-order.js.map +1 -0
  391. package/dist-server/service/transfer-order/index.js +25 -0
  392. package/dist-server/service/transfer-order/index.js.map +1 -0
  393. package/dist-server/service/transfer-order/transfer-order-mutation.js +252 -0
  394. package/dist-server/service/transfer-order/transfer-order-mutation.js.map +1 -0
  395. package/dist-server/service/transfer-order/transfer-order-query.js +104 -0
  396. package/dist-server/service/transfer-order/transfer-order-query.js.map +1 -0
  397. package/dist-server/service/transfer-order/transfer-order-types.js +148 -0
  398. package/dist-server/service/transfer-order/transfer-order-types.js.map +1 -0
  399. package/dist-server/service/transfer-order/transfer-order.js +146 -0
  400. package/dist-server/service/transfer-order/transfer-order.js.map +1 -0
  401. package/dist-server/service/vas/index.js +25 -0
  402. package/dist-server/service/vas/index.js.map +1 -0
  403. package/dist-server/service/vas/vas-mutation.js +562 -0
  404. package/dist-server/service/vas/vas-mutation.js.map +1 -0
  405. package/dist-server/service/vas/vas-query.js +114 -0
  406. package/dist-server/service/vas/vas-query.js.map +1 -0
  407. package/dist-server/service/vas/vas-types.js +113 -0
  408. package/dist-server/service/vas/vas-types.js.map +1 -0
  409. package/dist-server/service/vas/vas.js +114 -0
  410. package/dist-server/service/vas/vas.js.map +1 -0
  411. package/dist-server/service/vas-order/index.js +25 -0
  412. package/dist-server/service/vas-order/index.js.map +1 -0
  413. package/dist-server/service/vas-order/vas-order-mutation.js +241 -0
  414. package/dist-server/service/vas-order/vas-order-mutation.js.map +1 -0
  415. package/dist-server/service/vas-order/vas-order-query.js +151 -0
  416. package/dist-server/service/vas-order/vas-order-query.js.map +1 -0
  417. package/dist-server/service/vas-order/vas-order-types.js +83 -0
  418. package/dist-server/service/vas-order/vas-order-types.js.map +1 -0
  419. package/dist-server/service/vas-order/vas-order.js +104 -0
  420. package/dist-server/service/vas-order/vas-order.js.map +1 -0
  421. package/dist-server/utils/datetime-util.js +82 -0
  422. package/dist-server/utils/datetime-util.js.map +1 -0
  423. package/dist-server/utils/index.js +20 -0
  424. package/dist-server/utils/index.js.map +1 -0
  425. package/dist-server/utils/inventory-util.js +1098 -0
  426. package/dist-server/utils/inventory-util.js.map +1 -0
  427. package/dist-server/utils/order-no-generator.js +112 -0
  428. package/dist-server/utils/order-no-generator.js.map +1 -0
  429. package/package.json +17 -17
@@ -0,0 +1,1598 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var _a;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.bulkConfirmOrReceiveReleaseGoods = exports.bulkGenerateReleaseGood = exports.rejectReleaseGood = exports.receiveReleaseGood = exports.confirmReleaseGood = exports.generateReleaseGoodFunction = exports.deleteReleaseGood = exports.ReleaseGoodMutation = void 0;
17
+ const graphql_upload_1 = require("graphql-upload");
18
+ const type_graphql_1 = require("type-graphql");
19
+ const typeorm_1 = require("typeorm");
20
+ const attachment_base_1 = require("@things-factory/attachment-base");
21
+ const auth_base_1 = require("@things-factory/auth-base");
22
+ const biz_base_1 = require("@things-factory/biz-base");
23
+ const geography_1 = require("@things-factory/geography");
24
+ const id_rule_base_1 = require("@things-factory/id-rule-base");
25
+ const integration_base_1 = require("@things-factory/integration-base");
26
+ const integration_lmd_1 = require("@things-factory/integration-lmd");
27
+ const integration_marketplace_1 = require("@things-factory/integration-marketplace");
28
+ const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
29
+ const marketplace_base_1 = require("@things-factory/marketplace-base");
30
+ // import { sendNotification } from '@things-factory/notification'
31
+ const product_base_1 = require("@things-factory/product-base");
32
+ const setting_base_1 = require("@things-factory/setting-base");
33
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
34
+ // import { NewOrderProduct } from '../order-product/order-product-types'
35
+ const constants_1 = require("../../constants");
36
+ const controllers_1 = require("../../controllers");
37
+ const errors_1 = require("../../errors");
38
+ const utils_1 = require("../../utils");
39
+ const arrival_notice_1 = require("../arrival-notice/arrival-notice");
40
+ const arrival_notice_mutation_1 = require("../arrival-notice/arrival-notice-mutation");
41
+ const order_inventory_1 = require("../order-inventory/order-inventory");
42
+ const order_package_1 = require("../order-package/order-package");
43
+ const order_product_1 = require("../order-product/order-product");
44
+ const order_vas_item_1 = require("../order-vas-item/order-vas-item");
45
+ const order_vas_1 = require("../order-vas/order-vas");
46
+ const order_vas_types_1 = require("../order-vas/order-vas-types");
47
+ const release_good_types_1 = require("../release-good/release-good-types");
48
+ const shipping_order_1 = require("../shipping-order/shipping-order");
49
+ const shipping_order_types_1 = require("../shipping-order/shipping-order-types");
50
+ const vas_1 = require("../vas");
51
+ const release_good_1 = require("./release-good");
52
+ const release_good_query_1 = require("./release-good-query");
53
+ const integration_lmd_2 = require("@things-factory/integration-lmd");
54
+ // Utility function for safe decimal arithmetic
55
+ function safeDecimalOperation(value1, value2, operation) {
56
+ // Convert to string with fixed precision to avoid floating point issues
57
+ const num1 = parseFloat(value1.toFixed(3));
58
+ const num2 = parseFloat(value2.toFixed(3));
59
+ let result;
60
+ switch (operation) {
61
+ case 'add':
62
+ result = num1 + num2;
63
+ break;
64
+ case 'subtract':
65
+ result = num1 - num2;
66
+ break;
67
+ case 'multiply':
68
+ result = num1 * num2;
69
+ break;
70
+ default:
71
+ throw new Error('Invalid operation');
72
+ }
73
+ // Ensure result is within valid range and has correct precision
74
+ if (result < 0) {
75
+ throw new Error('Decimal value cannot be negative');
76
+ }
77
+ // Check if result exceeds maximum precision (10 digits total with 3 decimal places)
78
+ if (result > 9999999.999) {
79
+ throw new Error('Decimal value exceeds maximum allowed precision');
80
+ }
81
+ return parseFloat(result.toFixed(3));
82
+ }
83
+ let ReleaseGoodMutation = class ReleaseGoodMutation {
84
+ async bulkAddReleaseGoods(context, rawReleaseGoods, bizplaceId) {
85
+ const { domain, user, tx } = context.state;
86
+ if (!bizplaceId)
87
+ throw new Error('company ID is not provided');
88
+ let createdReleaseGoods = [];
89
+ const settingRepo = (tx === null || tx === void 0 ? void 0 : tx.getRepository(setting_base_1.Setting)) || (0, typeorm_1.getRepository)(setting_base_1.Setting);
90
+ const roNoSetting = await settingRepo.findOne({
91
+ where: {
92
+ domain,
93
+ name: constants_1.ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE
94
+ }
95
+ });
96
+ let releaseGoods = extractRawReleaseGoods(rawReleaseGoods);
97
+ let errorsCaught = [];
98
+ for (let i = 0, l = releaseGoods.length; i < l; i++) {
99
+ // generate release good by group to avoid duplication
100
+ // if this function is called simultaneously by different users
101
+ try {
102
+ await (0, typeorm_1.getConnection)().transaction(async (childTx) => {
103
+ const existingReleaseGood = await childTx.getRepository(release_good_1.ReleaseGood).findOne({
104
+ where: Object.assign(Object.assign({}, Object.fromEntries(Object.entries(releaseGoods[i]).filter(([_, val]) => !/^\s*$/.test(val) && _ != 'orderInventories'))), { domain, status: (0, typeorm_1.Not)('REJECTED') })
105
+ });
106
+ if (existingReleaseGood)
107
+ throw new Error('this order is already exist in the system');
108
+ let availableItems = await (0, release_good_query_1.bulkReleaseGoodsAvailableItemsFunction)([...releaseGoods[i].orderInventories], bizplaceId, context, childTx);
109
+ if (availableItems.some(item => !item.releaseQty || item.releaseQty > item.assignedQty))
110
+ throw new errors_1.ValidationError(Object.assign(Object.assign({}, errors_1.ValidationError.ERROR_CODES.INSUFFICIENT_STOCK), { detail: { data: JSON.stringify(availableItems) } }));
111
+ // update orderInventories if availableItems are valid
112
+ releaseGoods[i].orderInventories = availableItems;
113
+ const createdReleaseGood = await bulkGenerateReleaseGood(releaseGoods[i], bizplaceId, roNoSetting, domain, user, null, childTx);
114
+ createdReleaseGoods.push(createdReleaseGood);
115
+ });
116
+ }
117
+ catch (error) {
118
+ let rawReleaseGoods = formRawReleaseGoods(releaseGoods[i], error.message);
119
+ errorsCaught.push(...rawReleaseGoods);
120
+ }
121
+ }
122
+ let confirmedReleaseGoods = [];
123
+ await (0, typeorm_1.getConnection)().transaction(async (childTx) => {
124
+ if (createdReleaseGoods.length)
125
+ try {
126
+ const bizplace = await childTx.getRepository(biz_base_1.Bizplace).findOne({
127
+ where: { id: bizplaceId },
128
+ relations: ['domain']
129
+ });
130
+ const directReceiveSetting = await childTx.getRepository(setting_base_1.Setting).findOne({
131
+ where: { domain, category: 'id-rule', name: 'enable-direct-receive-release-order' }
132
+ });
133
+ const partnerDirectReceiveSetting = await childTx.getRepository(setting_base_1.PartnerSetting).findOne({
134
+ where: { setting: directReceiveSetting, domain, partnerDomain: bizplace === null || bizplace === void 0 ? void 0 : bizplace.domain }
135
+ });
136
+ let partnerDirectReceiveSettingValue = parseFloat(partnerDirectReceiveSetting === null || partnerDirectReceiveSetting === void 0 ? void 0 : partnerDirectReceiveSetting.value);
137
+ // If status of create RO is PENDING then directly CONFIRM -> RECEIVE
138
+ if (!isNaN(partnerDirectReceiveSetting === null || partnerDirectReceiveSetting === void 0 ? void 0 : partnerDirectReceiveSetting.value) &&
139
+ !isNaN(parseFloat(partnerDirectReceiveSetting === null || partnerDirectReceiveSetting === void 0 ? void 0 : partnerDirectReceiveSetting.value)) &&
140
+ partnerDirectReceiveSettingValue > 0) {
141
+ confirmedReleaseGoods = await bulkConfirmOrReceiveReleaseGoods(createdReleaseGoods.map(rg => rg.name), domain, user, context, partnerDirectReceiveSettingValue, childTx);
142
+ }
143
+ }
144
+ catch (error) { }
145
+ });
146
+ if (errorsCaught.length)
147
+ throw new errors_1.ValidationError(Object.assign(Object.assign({}, errors_1.ValidationError.ERROR_CODES.INVALID_DATA_FOUND), { detail: { data: JSON.stringify(errorsCaught) } }));
148
+ return confirmedReleaseGoods;
149
+ }
150
+ async deleteReleaseGood(name, context) {
151
+ const { tx, user, domain } = context.state;
152
+ return await deleteReleaseGood(tx, name, user, domain);
153
+ }
154
+ async deleteReleaseGoods(names, context) {
155
+ const { tx } = context.state;
156
+ await tx.getRepository(release_good_1.ReleaseGood).delete({
157
+ domain: context.state.domain,
158
+ name: (0, typeorm_1.In)(names)
159
+ });
160
+ return true;
161
+ }
162
+ async generateReleaseGood(context, attachments, invoiceAttachment, awbAttachment, releaseGood, orderVasPatch, shippingOrder, shippingOrderInfo) {
163
+ const { tx } = context.state;
164
+ const createdReleaseGood = await generateReleaseGoodFunction(null, releaseGood, shippingOrder, shippingOrderInfo, attachments, context, tx, orderVasPatch, invoiceAttachment, awbAttachment);
165
+ (0, integration_base_1.webhookHandler)(createdReleaseGood, createdReleaseGood.bizplace, integration_base_1.WebhookEventsEnum.ReleaseOrderCreated);
166
+ return createdReleaseGood;
167
+ }
168
+ async updateReleaseGoodDetails(context, releaseGood, shippingOrder, shippingOrderInfo) {
169
+ const { tx, domain, user } = context.state;
170
+ let foundReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
171
+ where: { id: releaseGood.id, domain },
172
+ relations: ['domain', 'bizplace', 'shippingOrder']
173
+ });
174
+ if (!foundReleaseGood) {
175
+ throw new Error(`Release order ${releaseGood.id} is not found.`);
176
+ }
177
+ if (foundReleaseGood.source === 'OTHERS' && foundReleaseGood.manifestedAt === null) {
178
+ await tx
179
+ .getRepository(order_package_1.OrderPackage)
180
+ .createQueryBuilder()
181
+ .update(order_package_1.OrderPackage)
182
+ .set({ trackingNo: releaseGood.trackingNo })
183
+ .where('releaseGood.id = :releaseGoodId', { releaseGoodId: releaseGood.id })
184
+ .execute();
185
+ }
186
+ // case to update existing shippingOrder
187
+ if (shippingOrder !== null) {
188
+ shippingOrder.remark = shippingOrder.exportRemark;
189
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate);
190
+ delete shippingOrder.exportRemark;
191
+ }
192
+ if (foundReleaseGood.shippingOrder && shippingOrder) {
193
+ await tx.getRepository(shipping_order_1.ShippingOrder).update(foundReleaseGood.shippingOrder.id, shippingOrder);
194
+ }
195
+ // case for new shippingOrder
196
+ else if (!foundReleaseGood.shippingOrder && shippingOrder) {
197
+ let newShippingOrder = await tx.getRepository(shipping_order_1.ShippingOrder).save(Object.assign(Object.assign({}, shippingOrder), { name: utils_1.OrderNoGenerator.shippingOrder(), domain, bizplace: await (0, biz_base_1.getMyBizplace)(domain, user), status: constants_1.ORDER_STATUS.PENDING, creator: user, updater: user }));
198
+ releaseGood.shippingOrder = newShippingOrder;
199
+ }
200
+ foundReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(Object.assign(Object.assign(Object.assign(Object.assign({}, foundReleaseGood), releaseGood), shippingOrderInfo), { remark: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.remark) ? releaseGood.remark : null }));
201
+ (0, integration_base_1.webhookHandler)(foundReleaseGood, foundReleaseGood.bizplace, integration_base_1.WebhookEventsEnum.ReleaseOrderUpdated);
202
+ return foundReleaseGood;
203
+ }
204
+ async confirmReleaseGood(name, context) {
205
+ const { tx } = context.state;
206
+ const releaseGood = await confirmReleaseGood(name, context, tx);
207
+ // If current RO has cross docking
208
+ if (releaseGood.crossDocking) {
209
+ const { arrivalNotice } = await tx.getRepository(release_good_1.ReleaseGood).findOne(releaseGood.id, {
210
+ relations: ['arrivalNotice']
211
+ });
212
+ // If status of related GAN is not equal to PENDING_RECEIVE (i.e. Wasn't confirmed yet.)
213
+ if (arrivalNotice.status !== constants_1.ORDER_STATUS.PENDING_RECEIVE) {
214
+ await (0, arrival_notice_mutation_1.confirmArrivalNoticeFunction)(arrivalNotice.name, context, tx);
215
+ }
216
+ }
217
+ (0, integration_base_1.webhookHandler)(releaseGood, releaseGood.bizplace, integration_base_1.WebhookEventsEnum.ReleaseOrderConfirmed);
218
+ return releaseGood;
219
+ }
220
+ async receiveReleaseGood(name, context) {
221
+ const { tx } = context.state;
222
+ const releaseGood = await receiveReleaseGood(name, context, tx);
223
+ return releaseGood;
224
+ }
225
+ async rejectReleaseGood(name, patch, context) {
226
+ const { tx } = context.state;
227
+ return await rejectReleaseGood(tx, context, name, patch.remark);
228
+ }
229
+ async addReleaseGood(context, releaseGood, shippingOrder, file) {
230
+ const { tx } = context.state;
231
+ const createdRO = await generateReleaseGoodFunction(null, releaseGood, shippingOrder, file, context, tx, null);
232
+ const confirmedRO = await confirmReleaseGood(createdRO.name, context, tx);
233
+ const receivedRO = await receiveReleaseGood(confirmedRO.name, context, tx);
234
+ return receivedRO;
235
+ }
236
+ async executeOrderRemark(releaseGoodNo, context) {
237
+ const { domain, tx, user } = context.state;
238
+ await tx.getRepository(release_good_1.ReleaseGood).update({
239
+ domain,
240
+ name: releaseGoodNo
241
+ }, {
242
+ checkedRemarkAt: new Date(),
243
+ checkedRemarkUser: user,
244
+ checkedRemarkBy: user.name
245
+ });
246
+ return true;
247
+ }
248
+ };
249
+ __decorate([
250
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
251
+ (0, type_graphql_1.Directive)('@transaction'),
252
+ (0, type_graphql_1.Mutation)(returns => [release_good_1.ReleaseGood]),
253
+ __param(0, (0, type_graphql_1.Ctx)()),
254
+ __param(1, (0, type_graphql_1.Arg)('rawReleaseGoods', type => [release_good_types_1.NewReleaseGood], { nullable: true })),
255
+ __param(2, (0, type_graphql_1.Arg)('bizplaceId', type => String)),
256
+ __metadata("design:type", Function),
257
+ __metadata("design:paramtypes", [Object, Array, String]),
258
+ __metadata("design:returntype", Promise)
259
+ ], ReleaseGoodMutation.prototype, "bulkAddReleaseGoods", null);
260
+ __decorate([
261
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
262
+ (0, type_graphql_1.Directive)('@transaction'),
263
+ (0, type_graphql_1.Mutation)(returns => Boolean),
264
+ __param(0, (0, type_graphql_1.Arg)('name')),
265
+ __param(1, (0, type_graphql_1.Ctx)()),
266
+ __metadata("design:type", Function),
267
+ __metadata("design:paramtypes", [String, Object]),
268
+ __metadata("design:returntype", Promise)
269
+ ], ReleaseGoodMutation.prototype, "deleteReleaseGood", null);
270
+ __decorate([
271
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
272
+ (0, type_graphql_1.Directive)('@transaction'),
273
+ (0, type_graphql_1.Mutation)(returns => Boolean),
274
+ __param(0, (0, type_graphql_1.Arg)('names', type => [String])),
275
+ __param(1, (0, type_graphql_1.Ctx)()),
276
+ __metadata("design:type", Function),
277
+ __metadata("design:paramtypes", [Array, Object]),
278
+ __metadata("design:returntype", Promise)
279
+ ], ReleaseGoodMutation.prototype, "deleteReleaseGoods", null);
280
+ __decorate([
281
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
282
+ (0, type_graphql_1.Directive)('@transaction'),
283
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
284
+ __param(0, (0, type_graphql_1.Ctx)()),
285
+ __param(1, (0, type_graphql_1.Arg)('attachments', type => [graphql_upload_1.GraphQLUpload], { nullable: true })),
286
+ __param(2, (0, type_graphql_1.Arg)('invoiceAttachment', type => [graphql_upload_1.GraphQLUpload], { nullable: true })),
287
+ __param(3, (0, type_graphql_1.Arg)('awbAttachment', type => [graphql_upload_1.GraphQLUpload], { nullable: true })),
288
+ __param(4, (0, type_graphql_1.Arg)('releaseGood', type => release_good_types_1.NewReleaseGood, { nullable: true })),
289
+ __param(5, (0, type_graphql_1.Arg)('orderVasPatch', type => [order_vas_types_1.OrderVasPatch], { nullable: true })),
290
+ __param(6, (0, type_graphql_1.Arg)('shippingOrder', type => shipping_order_types_1.ShippingOrderPatch, { nullable: true })),
291
+ __param(7, (0, type_graphql_1.Arg)('shippingOrderInfo', type => release_good_types_1.ShippingOrderInfoPatch, { nullable: true })),
292
+ __metadata("design:type", Function),
293
+ __metadata("design:paramtypes", [Object, Array, Array, Array, release_good_types_1.NewReleaseGood, Array, shipping_order_types_1.ShippingOrderPatch,
294
+ release_good_types_1.ShippingOrderInfoPatch]),
295
+ __metadata("design:returntype", Promise)
296
+ ], ReleaseGoodMutation.prototype, "generateReleaseGood", null);
297
+ __decorate([
298
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
299
+ (0, type_graphql_1.Directive)('@transaction'),
300
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
301
+ __param(0, (0, type_graphql_1.Ctx)()),
302
+ __param(1, (0, type_graphql_1.Arg)('releaseGood', type => release_good_types_1.ReleaseGoodPatch, { nullable: true })),
303
+ __param(2, (0, type_graphql_1.Arg)('shippingOrder', type => shipping_order_types_1.ShippingOrderPatch, { nullable: true })),
304
+ __param(3, (0, type_graphql_1.Arg)('shippingOrderInfo', type => release_good_types_1.ShippingOrderInfoPatch, { nullable: true })),
305
+ __metadata("design:type", Function),
306
+ __metadata("design:paramtypes", [Object, release_good_types_1.ReleaseGoodPatch,
307
+ shipping_order_types_1.ShippingOrderPatch,
308
+ release_good_types_1.ShippingOrderInfoPatch]),
309
+ __metadata("design:returntype", Promise)
310
+ ], ReleaseGoodMutation.prototype, "updateReleaseGoodDetails", null);
311
+ __decorate([
312
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
313
+ (0, type_graphql_1.Directive)('@transaction'),
314
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
315
+ __param(0, (0, type_graphql_1.Arg)('name')),
316
+ __param(1, (0, type_graphql_1.Ctx)()),
317
+ __metadata("design:type", Function),
318
+ __metadata("design:paramtypes", [String, Object]),
319
+ __metadata("design:returntype", Promise)
320
+ ], ReleaseGoodMutation.prototype, "confirmReleaseGood", null);
321
+ __decorate([
322
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
323
+ (0, type_graphql_1.Directive)('@transaction'),
324
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
325
+ __param(0, (0, type_graphql_1.Arg)('name')),
326
+ __param(1, (0, type_graphql_1.Ctx)()),
327
+ __metadata("design:type", Function),
328
+ __metadata("design:paramtypes", [String, Object]),
329
+ __metadata("design:returntype", Promise)
330
+ ], ReleaseGoodMutation.prototype, "receiveReleaseGood", null);
331
+ __decorate([
332
+ (0, type_graphql_1.Directive)('@privilege(category: "order_warehouse", privilege: "mutation")'),
333
+ (0, type_graphql_1.Directive)('@transaction'),
334
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
335
+ __param(0, (0, type_graphql_1.Arg)('name')),
336
+ __param(1, (0, type_graphql_1.Arg)('patch', type => release_good_types_1.ReleaseGoodPatch)),
337
+ __param(2, (0, type_graphql_1.Ctx)()),
338
+ __metadata("design:type", Function),
339
+ __metadata("design:paramtypes", [String, release_good_types_1.ReleaseGoodPatch, Object]),
340
+ __metadata("design:returntype", Promise)
341
+ ], ReleaseGoodMutation.prototype, "rejectReleaseGood", null);
342
+ __decorate([
343
+ (0, type_graphql_1.Directive)('@transaction'),
344
+ (0, type_graphql_1.Mutation)(returns => release_good_1.ReleaseGood),
345
+ __param(0, (0, type_graphql_1.Ctx)()),
346
+ __param(1, (0, type_graphql_1.Arg)('releaseGood', type => release_good_types_1.NewReleaseGood, { nullable: true })),
347
+ __param(2, (0, type_graphql_1.Arg)('shippingOrder', type => shipping_order_types_1.ShippingOrderPatch, { nullable: true })),
348
+ __param(3, (0, type_graphql_1.Arg)('file', type => graphql_upload_1.GraphQLUpload, { nullable: true })),
349
+ __metadata("design:type", Function),
350
+ __metadata("design:paramtypes", [Object, release_good_types_1.NewReleaseGood,
351
+ shipping_order_types_1.ShippingOrderPatch, typeof (_a = typeof graphql_upload_1.FileUpload !== "undefined" && graphql_upload_1.FileUpload) === "function" ? _a : Object]),
352
+ __metadata("design:returntype", Promise)
353
+ ], ReleaseGoodMutation.prototype, "addReleaseGood", null);
354
+ __decorate([
355
+ (0, type_graphql_1.Directive)('@privilege(category: "order_customer", privilege: "mutation")'),
356
+ (0, type_graphql_1.Directive)('@transaction'),
357
+ (0, type_graphql_1.Mutation)(returns => Boolean),
358
+ __param(0, (0, type_graphql_1.Arg)('releaseGoodNo')),
359
+ __param(1, (0, type_graphql_1.Ctx)()),
360
+ __metadata("design:type", Function),
361
+ __metadata("design:paramtypes", [String, Object]),
362
+ __metadata("design:returntype", Promise)
363
+ ], ReleaseGoodMutation.prototype, "executeOrderRemark", null);
364
+ ReleaseGoodMutation = __decorate([
365
+ (0, type_graphql_1.Resolver)(release_good_1.ReleaseGood)
366
+ ], ReleaseGoodMutation);
367
+ exports.ReleaseGoodMutation = ReleaseGoodMutation;
368
+ async function deleteReleaseGood(tx, name, user, domain) {
369
+ var _a;
370
+ let foundReleaseOrder = await tx.getRepository(release_good_1.ReleaseGood).findOne({
371
+ where: { domain, name },
372
+ relations: [
373
+ 'arrivalNotice',
374
+ 'orderProducts',
375
+ 'orderProducts.productDetail',
376
+ 'orderInventories',
377
+ 'orderInventories.orderProduct',
378
+ 'orderInventories.inventory',
379
+ 'orderVass',
380
+ 'shippingOrder',
381
+ 'creator',
382
+ 'updater'
383
+ ]
384
+ });
385
+ if (!foundReleaseOrder)
386
+ throw new Error(`Release order doesn't exists.`);
387
+ const foundOIs = foundReleaseOrder.orderInventories;
388
+ const foundOVs = foundReleaseOrder.orderVass;
389
+ const foundSO = foundReleaseOrder.shippingOrder;
390
+ const foundOPs = foundReleaseOrder.orderProducts;
391
+ let foundAttachment;
392
+ if (foundReleaseOrder === null || foundReleaseOrder === void 0 ? void 0 : foundReleaseOrder.ownTransport) {
393
+ foundAttachment = await tx.getRepository(attachment_base_1.Attachment).findOne({
394
+ where: {
395
+ domain,
396
+ refBy: foundReleaseOrder.id,
397
+ category: constants_1.ATTACHMENT_TYPE.DELIVERY_ORDER
398
+ }
399
+ });
400
+ }
401
+ // Delete order inventories by ids
402
+ await Promise.all(foundOIs.map(async (oi) => {
403
+ var _a, _b;
404
+ if ((_a = oi === null || oi === void 0 ? void 0 : oi.inventory) === null || _a === void 0 ? void 0 : _a.id) {
405
+ oi.inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne(oi.inventory.id);
406
+ await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oi.inventory), { lockedQty: safeDecimalOperation(oi.inventory.lockedQty, oi.releaseQty, 'subtract'), lockedUomValue: safeDecimalOperation(oi.inventory.lockedUomValue, oi.releaseUomValue, 'subtract'), updater: user }));
407
+ }
408
+ await tx.getRepository(order_inventory_1.OrderInventory).delete({ id: oi.id });
409
+ if ((_b = oi === null || oi === void 0 ? void 0 : oi.orderProduct) === null || _b === void 0 ? void 0 : _b.id) {
410
+ await tx.getRepository(order_product_1.OrderProduct).delete({ id: oi.orderProduct.id });
411
+ }
412
+ return oi;
413
+ }));
414
+ // Deduct unassigned qty if ro is unassigned
415
+ if (foundReleaseOrder.assignedInventory == false) {
416
+ await Promise.all(foundOPs.map(async (op) => {
417
+ await tx
418
+ .getRepository(warehouse_base_1.ProductDetailStock)
419
+ .createQueryBuilder()
420
+ .update(warehouse_base_1.ProductDetailStock)
421
+ .set({
422
+ unassignedQty: () => `"unassigned_qty" - ${op.releaseQty}`,
423
+ unassignedUomValue: () => `"unassigned_uom_value" - ${op.releaseUomValue}`
424
+ })
425
+ .where({ productDetail: op.productDetail.id })
426
+ .execute();
427
+ await tx.getRepository(order_product_1.OrderProduct).delete({ id: op.id });
428
+ return op;
429
+ }));
430
+ }
431
+ // 2. delete order vass
432
+ const vasIds = foundOVs.map((vas) => vas.id);
433
+ if (vasIds.length) {
434
+ await tx.getRepository(order_vas_item_1.OrderVasItem).delete({ orderVas: (0, typeorm_1.In)(vasIds) });
435
+ await tx.getRepository(order_vas_1.OrderVas).delete({ id: (0, typeorm_1.In)(vasIds) });
436
+ }
437
+ if (foundAttachment) {
438
+ await tx.getRepository(attachment_base_1.Attachment).delete({ domain, id: foundAttachment.id });
439
+ }
440
+ // 4. Remove relation with GAN if it's cross docking
441
+ if (foundReleaseOrder.crossDocking && ((_a = foundReleaseOrder.arrivalNotice) === null || _a === void 0 ? void 0 : _a.id)) {
442
+ let arrivalNotice = foundReleaseOrder.arrivalNotice;
443
+ arrivalNotice.releaseGood = null;
444
+ arrivalNotice = await tx.getRepository(arrival_notice_1.ArrivalNotice).save(arrivalNotice);
445
+ await tx.getRepository(release_good_1.ReleaseGood).delete({ domain, name });
446
+ await (0, arrival_notice_mutation_1.deleteArrivalNotice)(tx, arrivalNotice.name, user, domain);
447
+ }
448
+ else {
449
+ await tx.getRepository(release_good_1.ReleaseGood).delete({ domain, name });
450
+ }
451
+ // 5. if there is SO, delete SO
452
+ if (foundSO) {
453
+ await tx.getRepository(shipping_order_1.ShippingOrder).delete({ domain, id: foundSO.id });
454
+ }
455
+ return true;
456
+ }
457
+ exports.deleteReleaseGood = deleteReleaseGood;
458
+ async function generateReleaseGoodFunction(_, releaseGood, shippingOrder, shippingOrderInfo, attachments, context, tx, orderVasPatch, invoiceAttachment, awbAttachment) {
459
+ var _a, _b, _c, _d, _e, _f;
460
+ try {
461
+ const { domain, user } = context.state;
462
+ const settingRepo = (tx === null || tx === void 0 ? void 0 : tx.getRepository(setting_base_1.Setting)) || (0, typeorm_1.getRepository)(setting_base_1.Setting);
463
+ // let orderInventories: OrderInventory[] = releaseGood.orderInventories
464
+ // let orderVass: OrderVas[] = releaseGood.orderVass
465
+ let { orderInventories, orderVass } = releaseGood;
466
+ let bizplace;
467
+ let warehouseDomain = domain;
468
+ let finalOrderInventories = [];
469
+ /** Validate for b2b order that uses LMD */
470
+ if (releaseGood.type === 'b2b' && !releaseGood.ownTransport) {
471
+ releaseGood = await validateB2BLmdOrder(releaseGood, warehouseDomain, tx, shippingOrderInfo);
472
+ }
473
+ /** Validate user permitted Bizplace */
474
+ if (releaseGood.warehouseId) {
475
+ bizplace = await (0, biz_base_1.getOutletBizplace)(releaseGood.warehouseId);
476
+ }
477
+ else if (releaseGood.customerBizplaceId) {
478
+ const permittedBizplaces = await (0, biz_base_1.getPermittedBizplaces)(domain, user);
479
+ let foundPermittedBizplace = permittedBizplaces.find(biz => biz.id == releaseGood.customerBizplaceId);
480
+ if (!foundPermittedBizplace)
481
+ throw new Error(`This user does not permitted for this company`);
482
+ bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({
483
+ where: {
484
+ id: releaseGood.customerBizplaceId
485
+ },
486
+ relations: ['domain']
487
+ });
488
+ const customerPartner = await tx
489
+ .getRepository(auth_base_1.Partner)
490
+ .findOne({ where: { partnerDomain: bizplace.domain, domain }, relations: ['domain'] });
491
+ warehouseDomain = customerPartner.domain;
492
+ }
493
+ else if (releaseGood.partnerBizplaceId) {
494
+ const permittedBizplaces = await (0, biz_base_1.getPermittedBizplaces)(domain, user);
495
+ let foundPermittedBizplace = permittedBizplaces.find(biz => biz.id == releaseGood.partnerBizplaceId);
496
+ if (!foundPermittedBizplace)
497
+ throw new Error(`This user does not permitted for this company`);
498
+ bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({
499
+ where: {
500
+ id: releaseGood.partnerBizplaceId
501
+ },
502
+ relations: ['domain']
503
+ });
504
+ warehouseDomain = domain;
505
+ }
506
+ else {
507
+ bizplace = await (0, biz_base_1.getMyBizplace)(domain, user);
508
+ }
509
+ /** End Validate user permitted Bizplace Section */
510
+ /** Validate Release Order Product Quantity */
511
+ await utils_1.InventoryUtil.validateWarehousePartnersProductsQuantity(domain, bizplace, orderInventories, context, tx);
512
+ /** End Validate Release Order Product Quantity Section */
513
+ const orderSource = releaseGood.source;
514
+ switch (orderSource) {
515
+ case auth_base_1.ApplicationType.SELLERCRAFT:
516
+ const sellercraft = await tx
517
+ .getRepository(integration_sellercraft_1.Sellercraft)
518
+ .findOne({ domain: bizplace.domain, status: integration_sellercraft_1.SellercraftStatus.ACTIVE });
519
+ if (sellercraft) {
520
+ const sellercraftCtrl = new controllers_1.SellercraftController(tx, domain, user);
521
+ await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood);
522
+ }
523
+ break;
524
+ case auth_base_1.ApplicationType.MMS:
525
+ const refNo = releaseGood.refNo;
526
+ const foundReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
527
+ where: {
528
+ domain: warehouseDomain,
529
+ refNo,
530
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([constants_1.ORDER_STATUS.CANCELLED, constants_1.ORDER_STATUS.PENDING_CANCEL]))
531
+ },
532
+ relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
533
+ });
534
+ if (foundReleaseGood) {
535
+ const customerCompanyDomain = foundReleaseGood.bizplace.company.domain;
536
+ const marketplaceOrder = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
537
+ where: { orderNo: refNo, domain: customerCompanyDomain }
538
+ });
539
+ // Need to restructure the validation
540
+ if (marketplaceOrder === null || marketplaceOrder === void 0 ? void 0 : marketplaceOrder.isSplitted) {
541
+ const refNo2 = releaseGood.refNo2;
542
+ const foundSplittedReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
543
+ where: {
544
+ domain: warehouseDomain,
545
+ refNo2,
546
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([constants_1.ORDER_STATUS.CANCELLED, constants_1.ORDER_STATUS.PENDING_CANCEL]))
547
+ },
548
+ relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
549
+ });
550
+ if (foundSplittedReleaseGood)
551
+ throw new Error('Existing release order found');
552
+ }
553
+ else {
554
+ throw new Error('Existing release order found');
555
+ }
556
+ }
557
+ break;
558
+ default:
559
+ break;
560
+ }
561
+ let newReleaseGood = new release_good_1.ReleaseGood();
562
+ /** Generate Shipping Order */
563
+ if (shippingOrder) {
564
+ shippingOrder.remark = shippingOrder.exportRemark;
565
+ if (shippingOrder.containerClosureDate !== undefined) {
566
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate);
567
+ }
568
+ delete shippingOrder.exportRemark;
569
+ const createdSO = await tx.getRepository(shipping_order_1.ShippingOrder).save(Object.assign(Object.assign({}, shippingOrder), { name: utils_1.OrderNoGenerator.shippingOrder(), domain,
570
+ bizplace, status: constants_1.ORDER_STATUS.PENDING, creator: user, updater: user }));
571
+ newReleaseGood.shippingOrder = createdSO;
572
+ }
573
+ /** End Generate Shipping Order Section */
574
+ // find RO number rule setting
575
+ const roNoSetting = await settingRepo.findOne({
576
+ where: {
577
+ domain,
578
+ name: constants_1.ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE
579
+ }
580
+ });
581
+ let lmd = null;
582
+ if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lmdOption) {
583
+ const geoCountryRepo = (tx === null || tx === void 0 ? void 0 : tx.getRepository(geography_1.GeoCountry)) || (0, typeorm_1.getRepository)(geography_1.GeoCountry);
584
+ const countryNameOrDescription = (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country) || (shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.country); // shippingOrderInfo?.country when using lmd/tms for b2b orders
585
+ let deliveryCountry = countryNameOrDescription
586
+ ? await geoCountryRepo.findOne({
587
+ where: [{ name: (0, typeorm_1.ILike)(countryNameOrDescription) }, { description: (0, typeorm_1.ILike)(countryNameOrDescription) }]
588
+ })
589
+ : null;
590
+ //Assign LMD
591
+ lmd = await autoAssignLmd(domain, deliveryCountry === null || deliveryCountry === void 0 ? void 0 : deliveryCountry.id, releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.postalCode, bizplace);
592
+ }
593
+ newReleaseGood = Object.assign(Object.assign({}, newReleaseGood), { name: roNoSetting
594
+ ? await (0, id_rule_base_1.generateId)({ domain, type: constants_1.ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })
595
+ : utils_1.OrderNoGenerator.releaseGood(), domain: warehouseDomain, bizplace: bizplace, collectionOrderNo: releaseGood.collectionOrderNo, courierOption: releaseGood.courierOption, exportOption: releaseGood.exportOption, ownTransport: releaseGood.ownTransport || false, packingOption: releaseGood.packingOption, recall: releaseGood.recall, marketplaceOrderStatus: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.marketplaceOrderStatus) || null, billingAddress: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress : shippingOrderInfo.billingAddress || null, billingAddress2: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress2 : shippingOrderInfo.billingAddress2 || null, billingAddress3: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress3 : shippingOrderInfo.billingAddress3 || null, billingAddress4: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress4 : shippingOrderInfo.billingAddress4 || null, billingAddress5: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress5 : shippingOrderInfo.billingAddress5 || null, deliveryAddress1: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress1 : shippingOrderInfo.deliveryAddress1 || null, deliveryAddress2: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress2 : shippingOrderInfo.deliveryAddress2 || null, deliveryAddress3: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress3 : shippingOrderInfo.deliveryAddress3 || null, deliveryAddress4: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress4 : shippingOrderInfo.deliveryAddress4 || null, deliveryAddress5: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress5 : shippingOrderInfo.deliveryAddress5 || null, attentionTo: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.attentionTo : shippingOrderInfo.attentionTo || null, attentionCompany: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.companyName : shippingOrderInfo.attentionCompany || null, city: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.city : shippingOrderInfo.city || null, state: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.state : shippingOrderInfo.state || null, postalCode: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.postalCode : shippingOrderInfo.postalCode || null, country: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country : shippingOrderInfo.country || null, phone1: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.phone1 : shippingOrderInfo.phone1 || null, phone2: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.phone2) || null, email: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.email) || null, billingCity: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingCity : shippingOrderInfo.billingCity || null, billingCountry: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingCountry : shippingOrderInfo.billingCountry || null, billingPostalCode: releaseGood.type == 'b2c'
596
+ ? (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingPostalCode) || null
597
+ : shippingOrderInfo.billingPostalCode || null, billingState: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingState : shippingOrderInfo.billingState || null, district: releaseGood.type == 'b2c' ? releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.city : null, transporter: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.transporter, trackingNo: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.trackingNo, airwayBill: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill, invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice, refNo: releaseGood.refNo, refNo2: releaseGood.refNo2, refNo3: releaseGood.refNo3, remark: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.remark) || null, releaseDate: releaseGood.releaseDate, truckNo: releaseGood.truckNo, bundleInfo: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.bundleInfo) || [], orderInventories: releaseGood.orderInventories, type: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.type) ? releaseGood.type : 'b2b', orderMethod: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderMethod)
598
+ ? releaseGood.orderMethod
599
+ : ((_b = (_a = releaseGood.orderInventories[0]) === null || _a === void 0 ? void 0 : _a.inventory) === null || _b === void 0 ? void 0 : _b.id)
600
+ ? constants_1.ORDER_METHOD.SELECT_BY_PALLET
601
+ : constants_1.ORDER_METHOD.SELECT_BY_PRODUCT, status: constants_1.ORDER_STATUS.PENDING, packageId: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packageId, storeName: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.storeName, storeId: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.storeId, routeId: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.routeId, stopId: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.stopId, lmdOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lmdOption) || null, lastMileDelivery: lmd || null, codOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.codOption) || null, paidAmount: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.paidAmount) || null, creator: user, updater: user });
602
+ // Make relation with GAN for cross docking
603
+ let crossDockingGAN = undefined;
604
+ if (releaseGood.crossDocking && releaseGood.ganNo) {
605
+ crossDockingGAN = await tx.getRepository(arrival_notice_1.ArrivalNotice).findOne({
606
+ where: { domain, bizplace, name: releaseGood.ganNo, status: constants_1.ORDER_STATUS.PENDING }
607
+ });
608
+ if (!crossDockingGAN)
609
+ throw new Error(`Failed to find GAN (${releaseGood.ganNo}) for cross docking`);
610
+ newReleaseGood.arrivalNotice = crossDockingGAN;
611
+ }
612
+ // Make relation with RO for cross docking
613
+ if (newReleaseGood.crossDocking) {
614
+ crossDockingGAN.releaseGood = newReleaseGood;
615
+ await tx.getRepository(arrival_notice_1.ArrivalNotice).save(crossDockingGAN);
616
+ }
617
+ // Check if there is bundle item in orderInventories
618
+ const bundledOIs = orderInventories.filter(oi => oi.product.groupType === constants_1.PRODUCT_GROUP_TYPE.BUNDLE);
619
+ const singleProductOIs = orderInventories.filter(oi => oi.product.groupType !== constants_1.PRODUCT_GROUP_TYPE.BUNDLE);
620
+ const splitBundleOIs = [];
621
+ // If there is bundle item, split each item in that bundle into into each product
622
+ if (bundledOIs && bundledOIs.length > 0) {
623
+ await Promise.all(bundledOIs.map(async (oi) => {
624
+ let splitOI = null;
625
+ const pbSettings = await tx.getRepository(product_base_1.ProductBundleSetting).find({
626
+ where: { productBundle: oi.product.id },
627
+ relations: ['product', 'productBundle', 'productDetail']
628
+ });
629
+ pbSettings.forEach(pbs => {
630
+ splitOI = Object.assign(Object.assign({}, oi), { releaseQty: safeDecimalOperation(oi.releaseQty, pbs.bundleQty, 'multiply'), releaseUomValue: safeDecimalOperation(safeDecimalOperation(oi.releaseUomValue, pbs.bundleQty, 'multiply'), pbs.product.primaryValue, 'multiply'), packingType: pbs.product.packingType, batchId: '', product: {
631
+ id: pbs.product.id,
632
+ name: pbs.product.name,
633
+ groupType: constants_1.PRODUCT_GROUP_TYPE.SINGLE
634
+ }, productDetail: {
635
+ id: pbs.productDetail.id
636
+ } });
637
+ splitBundleOIs.push(splitOI);
638
+ });
639
+ }));
640
+ }
641
+ orderInventories = [...singleProductOIs, ...splitBundleOIs];
642
+ newReleaseGood.noOfItems = orderInventories.length;
643
+ newReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(newReleaseGood);
644
+ const worksheetPickingAssignment = await tx.getRepository(setting_base_1.Setting).findOne({
645
+ where: { domain, category: 'id-rule', name: 'enable-worksheet-picking-activation-assignment' }
646
+ });
647
+ newReleaseGood.assignedInventory =
648
+ (worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) == 'true'
649
+ ? newReleaseGood.orderMethod == constants_1.ORDER_METHOD.SELECT_BY_PALLET
650
+ ? true
651
+ : false
652
+ : true;
653
+ newReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(newReleaseGood);
654
+ for (let oi of orderInventories) {
655
+ let productDetail = await tx
656
+ .getRepository(product_base_1.ProductDetail)
657
+ .findOne(oi.productDetail.id, { relations: ['product'] });
658
+ let newOrderInv = Object.assign({}, oi);
659
+ newOrderInv = Object.assign(Object.assign({}, newOrderInv), { domain: warehouseDomain, bizplace: bizplace, status: constants_1.ORDER_INVENTORY_STATUS.PENDING, releaseGood: newReleaseGood, product: productDetail.product, productDetail, creator: user, updater: user });
660
+ let newOrderProduct = Object.assign(new order_product_1.OrderProduct(), newOrderInv);
661
+ newOrderProduct = Object.assign(Object.assign({}, newOrderProduct), { name: utils_1.OrderNoGenerator.orderProduct(), packQty: 0, actualPackQty: 0, palletQty: 0, actualPalletQty: 0, uomValue: productDetail.uomValue, status: constants_1.ORDER_PRODUCT_STATUS.ASSIGNED });
662
+ newOrderProduct = await tx.getRepository(order_product_1.OrderProduct).save(newOrderProduct);
663
+ if ((_c = newOrderInv.inventory) === null || _c === void 0 ? void 0 : _c.id) {
664
+ const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOne(newOrderInv.inventory.id);
665
+ newOrderInv.inventory = foundInv;
666
+ newOrderInv.orderProduct = newOrderProduct;
667
+ finalOrderInventories.push(newOrderInv);
668
+ }
669
+ else {
670
+ if ((worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) !== 'true') {
671
+ // Preassign Inventories
672
+ const inventoryAssignmentSetting = await tx.getRepository(setting_base_1.Setting).findOne({
673
+ where: { domain, name: 'rule-for-inventory-assignment' }
674
+ });
675
+ let locationSortingRules = [];
676
+ if (inventoryAssignmentSetting) {
677
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value);
678
+ for (const key in locationSetting) {
679
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true });
680
+ }
681
+ }
682
+ let assignedOrderInventories = await utils_1.InventoryUtil.autoAssignInventoryForRelease(newOrderInv, productDetail.product, productDetail, locationSortingRules, bizplace, warehouseDomain, tx, newOrderInv.batchId);
683
+ assignedOrderInventories = assignedOrderInventories.map(aoi => {
684
+ return Object.assign(Object.assign({}, aoi), { orderProduct: newOrderProduct });
685
+ });
686
+ finalOrderInventories.push(...assignedOrderInventories);
687
+ }
688
+ else {
689
+ finalOrderInventories.push(newOrderInv);
690
+ }
691
+ }
692
+ }
693
+ for (let oi of finalOrderInventories) {
694
+ // update inventory locked qty and uom value
695
+ if ((worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) !== 'true' || ((_d = oi.inventory) === null || _d === void 0 ? void 0 : _d.id)) {
696
+ await tx.getRepository(order_inventory_1.OrderInventory).save(Object.assign(Object.assign({}, oi), { name: utils_1.OrderNoGenerator.orderInventory() }));
697
+ await tx.getRepository(warehouse_base_1.Inventory).update(oi.inventory.id, {
698
+ lockedQty: (((_e = oi.inventory) === null || _e === void 0 ? void 0 : _e.lockedQty) || 0) + oi.releaseQty,
699
+ lockedUomValue: (((_f = oi.inventory) === null || _f === void 0 ? void 0 : _f.lockedUomValue) || 0) + oi.releaseUomValue,
700
+ updater: user
701
+ });
702
+ }
703
+ else {
704
+ await tx
705
+ .getRepository(warehouse_base_1.ProductDetailStock)
706
+ .createQueryBuilder()
707
+ .update(warehouse_base_1.ProductDetailStock)
708
+ .set({
709
+ unassignedQty: () => `"unassigned_qty" + ${oi.releaseQty}`,
710
+ unassignedUomValue: () => `"unassigned_uom_value" + ${oi.releaseUomValue}`
711
+ })
712
+ .where({ productDetail: oi.productDetail.id })
713
+ .execute();
714
+ }
715
+ }
716
+ // VAS
717
+ if (orderVasPatch) {
718
+ orderVasPatch = orderVasPatch.map(itm => {
719
+ return Object.assign(Object.assign({}, itm), { releaseGood: newReleaseGood });
720
+ });
721
+ await (0, vas_1.editVas)(orderVasPatch, null, context);
722
+ }
723
+ // if (orderVass?.length) {
724
+ // orderVass = await Promise.all(
725
+ // orderVass.map(async orderVas => {
726
+ // if (orderVas?.targetProduct?.id) {
727
+ // orderVas.targetProduct = await tx.getRepository(Product).findOne(orderVas.targetProduct.id)
728
+ // }
729
+ // let newOrderVas: OrderVas = {
730
+ // ...orderVas,
731
+ // domain: warehouseDomain,
732
+ // bizplace,
733
+ // name: OrderNoGenerator.releaseVas(),
734
+ // vas: await tx.getRepository(Vas).findOne(orderVas.vas.id),
735
+ // type: ORDER_TYPES.RELEASE_OF_GOODS,
736
+ // releaseGood: newReleaseGood,
737
+ // status: ORDER_VAS_STATUS.PENDING,
738
+ // creator: user,
739
+ // updater: user
740
+ // }
741
+ // if (orderVas?.inventory?.id) {
742
+ // newOrderVas.inventory = await tx.getRepository(Inventory).findOne(orderVas.inventory.id)
743
+ // }
744
+ // return newOrderVas
745
+ // })
746
+ // )
747
+ // await tx.getRepository(OrderVas).save(orderVass)
748
+ // }
749
+ if ((attachments === null || attachments === void 0 ? void 0 : attachments.length) > 0) {
750
+ const files = attachments.map(attachment => {
751
+ return {
752
+ file: attachment,
753
+ refBy: newReleaseGood.id,
754
+ category: constants_1.ATTACHMENT_TYPE.DELIVERY_ORDER
755
+ };
756
+ });
757
+ await (0, attachment_base_1.createAttachments)(_, { attachments: files }, context);
758
+ }
759
+ if (invoiceAttachment && invoiceAttachment.length > 0) {
760
+ const file = {
761
+ file: invoiceAttachment[0],
762
+ refBy: newReleaseGood.id,
763
+ category: constants_1.ATTACHMENT_TYPE.INVOICE
764
+ };
765
+ const invoiceAttachmentResult = await (0, attachment_base_1.createAttachments)(_, { attachments: [file] }, context);
766
+ await tx
767
+ .getRepository(release_good_1.ReleaseGood)
768
+ .update({ id: newReleaseGood.id }, { invoice: invoiceAttachmentResult[0].path });
769
+ }
770
+ if (awbAttachment && awbAttachment.length > 0) {
771
+ const file = {
772
+ file: awbAttachment[0],
773
+ refBy: newReleaseGood.id,
774
+ category: constants_1.ATTACHMENT_TYPE.AWB
775
+ };
776
+ const awbAttachmentResult = await (0, attachment_base_1.createAttachments)(_, { attachments: [file] }, context);
777
+ await tx.getRepository(release_good_1.ReleaseGood).update({ id: newReleaseGood.id }, { airwayBill: awbAttachmentResult[0].path });
778
+ }
779
+ const directReceiveSetting = await tx.getRepository(setting_base_1.Setting).findOne({
780
+ where: { domain, category: 'id-rule', name: 'enable-direct-receive-release-order' }
781
+ });
782
+ const partnerDirectReceiveSetting = await tx.getRepository(setting_base_1.PartnerSetting).findOne({
783
+ where: { setting: directReceiveSetting, domain, partnerDomain: bizplace === null || bizplace === void 0 ? void 0 : bizplace.domain }
784
+ });
785
+ // If status of create RO is PENDING then directly CONFIRM -> RECEIVE
786
+ if (!isNaN(partnerDirectReceiveSetting === null || partnerDirectReceiveSetting === void 0 ? void 0 : partnerDirectReceiveSetting.value) &&
787
+ !isNaN(parseFloat(partnerDirectReceiveSetting === null || partnerDirectReceiveSetting === void 0 ? void 0 : partnerDirectReceiveSetting.value)) &&
788
+ newReleaseGood.status === constants_1.ORDER_STATUS.PENDING) {
789
+ let partnerDirectReceiveSettingValue = parseFloat(partnerDirectReceiveSetting.value);
790
+ // CONFIRM if setting value is > 0
791
+ if (partnerDirectReceiveSettingValue > 0)
792
+ await confirmReleaseGood(newReleaseGood.name, context, tx);
793
+ // RECEIVE if setting value is > 1
794
+ if (partnerDirectReceiveSettingValue > 1)
795
+ await receiveReleaseGood(newReleaseGood.name, context, tx);
796
+ }
797
+ return newReleaseGood;
798
+ }
799
+ catch (error) {
800
+ throw error;
801
+ }
802
+ }
803
+ exports.generateReleaseGoodFunction = generateReleaseGoodFunction;
804
+ async function confirmReleaseGood(name, context, tx) {
805
+ var _a, _b;
806
+ const { user, domain } = context.state;
807
+ let foundReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
808
+ where: { name, status: constants_1.ORDER_STATUS.PENDING },
809
+ relations: [
810
+ 'domain',
811
+ 'bizplace',
812
+ 'bizplace.domain',
813
+ 'bizplace.company',
814
+ 'bizplace.company.domain',
815
+ 'orderVass',
816
+ 'lastMileDelivery'
817
+ ]
818
+ });
819
+ if (!foundReleaseGood)
820
+ throw new Error(`Release good order doesn't exists.`);
821
+ // query orderInventories separately from releaseGood to reduce resource usage
822
+ let foundOIs = await tx.getRepository(order_inventory_1.OrderInventory).find({
823
+ where: { domain, releaseGood: foundReleaseGood },
824
+ relations: ['product']
825
+ });
826
+ // query orderProducts separately from releaseGood to reduce resource usage
827
+ let foundOPs = await tx.getRepository(order_product_1.OrderProduct).find({
828
+ where: { domain, releaseGood: foundReleaseGood },
829
+ relations: ['bizplace', 'product', 'product.productDetails', 'productDetail']
830
+ });
831
+ let foundBundleInfo = JSON.parse(foundReleaseGood.bundleInfo);
832
+ let foundOVs = foundReleaseGood.orderVass;
833
+ let customerBizplace = foundReleaseGood.bizplace;
834
+ const companyDomain = customerBizplace === null || customerBizplace === void 0 ? void 0 : customerBizplace.company.domain;
835
+ const sellercraft = await tx.getRepository(integration_sellercraft_1.Sellercraft).findOne({
836
+ where: { domain: foundReleaseGood.bizplace.domain, status: integration_sellercraft_1.SellercraftStatus.ACTIVE },
837
+ relations: ['domain']
838
+ });
839
+ const sellercraftCtrl = new controllers_1.SellercraftController(tx, domain, user);
840
+ let updateSCStock = async (sellercraft) => {
841
+ if (sellercraft) {
842
+ await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER');
843
+ }
844
+ };
845
+ const orderSource = foundReleaseGood.source;
846
+ switch (orderSource) {
847
+ case auth_base_1.ApplicationType.MMS:
848
+ // find for any existing marketplace store connections
849
+ let marketplaceStores = await tx.getRepository(integration_marketplace_1.MarketplaceStore).find({
850
+ where: { domain: companyDomain, status: 'ACTIVE' },
851
+ relations: ['marketplaceDistributors']
852
+ });
853
+ const foundMarketplaceOrder = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
854
+ where: { domain: companyDomain, orderNo: foundReleaseGood.refNo },
855
+ relations: ['marketplaceStore']
856
+ });
857
+ let matchedMarketplaceStore;
858
+ if (foundMarketplaceOrder) {
859
+ matchedMarketplaceStore = marketplaceStores.filter(marketplaceStore => marketplaceStore.id == foundMarketplaceOrder.marketplaceStore.id)[0];
860
+ }
861
+ let combinedOrderInventories = foundOIs.map(oi => {
862
+ return {
863
+ sku: oi.product.sku,
864
+ releaseQty: oi.releaseQty
865
+ };
866
+ });
867
+ if (foundBundleInfo === null || foundBundleInfo === void 0 ? void 0 : foundBundleInfo.length) {
868
+ foundBundleInfo.map(bundle => {
869
+ combinedOrderInventories.push({
870
+ sku: bundle.sku,
871
+ releaseQty: bundle.releaseQty
872
+ });
873
+ });
874
+ }
875
+ // for (let oi of combinedOrderInventories) {
876
+ // let foundMarketplaceProductVariations: MarketplaceProductVariation[] = await tx
877
+ // .getRepository(MarketplaceProductVariation)
878
+ // .find({
879
+ // where: { domain: companyDomain, sku: oi.sku },
880
+ // relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']
881
+ // })
882
+ // if (foundMarketplaceProductVariations) {
883
+ // await Promise.all(
884
+ // foundMarketplaceProductVariations.map(async variation => {
885
+ // if (variation.marketplaceProduct.marketplaceStore.reserveEnabled) {
886
+ // // temporary prevention measure to stop reserve from going below 0
887
+ // variation.reserveQty =
888
+ // variation.reserveQty - oi.releaseQty >= 0 ? variation.reserveQty - oi.releaseQty : 0
889
+ // try {
890
+ // let log = {
891
+ // marketplaceOrder: foundMarketplaceOrder.name,
892
+ // releaseOrder: foundMarketplaceOrder?.releaseOrderId,
893
+ // mpvId: variation.id,
894
+ // sku: variation?.sku,
895
+ // reservedQty: oi.releaseQty,
896
+ // roDeduction: true
897
+ // }
898
+ // logger.info(`[reserveQty] ${JSON.stringify(log)}`)
899
+ // } catch (e) {
900
+ // logger.error('[sales-base] cannot create reserve qty logs')
901
+ // }
902
+ // }
903
+ // await tx.getRepository(MarketplaceProductVariation).save(variation)
904
+ // })
905
+ // )
906
+ // }
907
+ // }
908
+ if ((marketplaceStores === null || marketplaceStores === void 0 ? void 0 : marketplaceStores.length) && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
909
+ marketplaceStores = marketplaceStores.filter(marketplaceStore => marketplaceStore.isAutoUpdateStockQty);
910
+ let productIds = foundOIs.map(oi => oi.product.id);
911
+ productIds = Array.from(new Set([...productIds]));
912
+ const ecommerceCtrl = new controllers_1.EcommerceController(tx, domain, user);
913
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, productIds, companyDomain);
914
+ }
915
+ updateSCStock(sellercraft);
916
+ break;
917
+ default:
918
+ updateSCStock(sellercraft);
919
+ break;
920
+ }
921
+ if (foundReleaseGood.type == 'b2b') {
922
+ const customerDomain = foundReleaseGood.bizplace.domain;
923
+ const customerBizplaceId = foundReleaseGood.bizplace.id;
924
+ const companyBizplace = await (0, biz_base_1.getCompanyBizplace)(domain, null, customerBizplaceId, tx);
925
+ const application = await tx
926
+ .getRepository(auth_base_1.Application)
927
+ .findOne({ domain: companyBizplace.domain, status: 'ACTIVE', type: auth_base_1.ApplicationType.POWRUP });
928
+ if (application) {
929
+ const powrupController = new controllers_1.PowrupController();
930
+ powrupController.updateStock(foundOPs, customerDomain, user, tx);
931
+ }
932
+ }
933
+ // 1. RO Status change (PENDING => PENDING_RECEIVE)
934
+ const releaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(Object.assign(Object.assign({}, foundReleaseGood), { status: constants_1.ORDER_STATUS.PENDING_RECEIVE, updater: user }));
935
+ // 1. Update status of order inventories
936
+ foundOIs = foundOIs
937
+ .filter((orderInventory) => orderInventory.status !== constants_1.ORDER_INVENTORY_STATUS.CANCELLED)
938
+ .map((orderInventory) => {
939
+ return Object.assign(Object.assign({}, orderInventory), { status: constants_1.ORDER_INVENTORY_STATUS.PENDING_RECEIVE, updater: user });
940
+ });
941
+ await tx.getRepository(order_inventory_1.OrderInventory).save(foundOIs);
942
+ // 2. Update status of order vass
943
+ if (foundOVs && foundOVs.length && foundOVs.some(vas => vas.status != constants_1.ORDER_VAS_STATUS.PENDING_APPROVE)) {
944
+ foundOVs = foundOVs.map((orderVas) => {
945
+ return Object.assign(Object.assign({}, orderVas), { status: constants_1.ORDER_VAS_STATUS.PENDING_RECEIVE, updater: user });
946
+ });
947
+ await tx.getRepository(order_vas_1.OrderVas).save(foundOVs);
948
+ }
949
+ // notification logics
950
+ // get Office Admin Users
951
+ if (((_a = context === null || context === void 0 ? void 0 : context.state) === null || _a === void 0 ? void 0 : _a.type) != 'api') {
952
+ const users = await tx
953
+ .getRepository('users_roles')
954
+ .createQueryBuilder('ur')
955
+ .select('ur.users_id', 'id')
956
+ .where(qb => {
957
+ const subQuery = qb
958
+ .subQuery()
959
+ .select('role.id')
960
+ .from(auth_base_1.Role, 'role')
961
+ .where("role.name = 'Office Admin'")
962
+ .andWhere('role.domain_id = :domain', { domain: domain.id })
963
+ .getQuery();
964
+ return 'ur.roles_id IN ' + subQuery;
965
+ })
966
+ .getRawMany();
967
+ // send notification to Office Admin Users
968
+ if ((users === null || users === void 0 ? void 0 : users.length) && ((_b = context.header) === null || _b === void 0 ? void 0 : _b.referer)) {
969
+ const receivers = users.map(user => user.id);
970
+ const msg = {
971
+ title: `New Release Order from ${customerBizplace.name}`,
972
+ body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,
973
+ url: context.header.referer,
974
+ data: { url: context.header.referer }
975
+ };
976
+ /**
977
+ * @notes Temporary off sendNotification due to suspect of causing wms down
978
+ */
979
+ // await sendNotification({
980
+ // receivers,
981
+ // message: { ...msg }
982
+ // })
983
+ }
984
+ }
985
+ return releaseGood;
986
+ }
987
+ exports.confirmReleaseGood = confirmReleaseGood;
988
+ async function receiveReleaseGood(name, context, tx) {
989
+ var _a, _b, _c;
990
+ const { domain, user } = context.state;
991
+ const foundReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
992
+ where: { domain, name, status: constants_1.ORDER_STATUS.PENDING_RECEIVE },
993
+ relations: ['domain', 'bizplace', 'orderInventories', 'orderVass', 'lastMileDelivery']
994
+ });
995
+ if (!foundReleaseGood)
996
+ throw new Error(`Release good order doesn't exists.`);
997
+ let foundOIs = foundReleaseGood.orderInventories;
998
+ let foundOVs = foundReleaseGood.orderVass;
999
+ let customerBizplace = foundReleaseGood.bizplace;
1000
+ // 1. RO Status change (PENDING_RECEIVE => PENDING_WORKSHEET)
1001
+ const releaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(Object.assign(Object.assign({}, foundReleaseGood), { status: constants_1.ORDER_STATUS.PENDING_WORKSHEET, acceptedBy: user, acceptedAt: new Date(), updater: user }));
1002
+ // 1. Update status of order inventories
1003
+ foundOIs = foundOIs
1004
+ .filter((orderInventory) => orderInventory.status !== constants_1.ORDER_INVENTORY_STATUS.CANCELLED)
1005
+ .map((orderInventory) => {
1006
+ return Object.assign(Object.assign({}, orderInventory), { status: constants_1.ORDER_INVENTORY_STATUS.PENDING_WORKSHEET, updater: user });
1007
+ });
1008
+ await tx.getRepository(order_inventory_1.OrderInventory).save(foundOIs);
1009
+ // 2. Update status of order vass
1010
+ if (foundOVs && foundOVs.length && foundOVs.some(vas => vas.status != constants_1.ORDER_VAS_STATUS.PENDING_APPROVE)) {
1011
+ foundOVs = foundOVs.map((orderVas) => {
1012
+ return Object.assign(Object.assign({}, orderVas), { status: constants_1.ORDER_VAS_STATUS.READY_TO_PROCESS, updater: user });
1013
+ });
1014
+ await tx.getRepository(order_vas_1.OrderVas).save(foundOVs);
1015
+ }
1016
+ if ((foundReleaseGood === null || foundReleaseGood === void 0 ? void 0 : foundReleaseGood.lmdOption) && ((_a = foundReleaseGood === null || foundReleaseGood === void 0 ? void 0 : foundReleaseGood.lastMileDelivery) === null || _a === void 0 ? void 0 : _a.isTms)) {
1017
+ const lastMileDeliveries = foundReleaseGood.lastMileDelivery;
1018
+ let data = foundReleaseGood;
1019
+ const tmsService = (0, integration_lmd_2.getTmsService)(lastMileDeliveries === null || lastMileDeliveries === void 0 ? void 0 : lastMileDeliveries.platform);
1020
+ tmsService.createShipment([data]);
1021
+ }
1022
+ // notification logics
1023
+ // get Office Admin Users
1024
+ if (((_b = context === null || context === void 0 ? void 0 : context.state) === null || _b === void 0 ? void 0 : _b.type) != 'api') {
1025
+ const users = await tx
1026
+ .getRepository('users_roles')
1027
+ .createQueryBuilder('ur')
1028
+ .select('ur.users_id', 'id')
1029
+ .where(qb => {
1030
+ const subQuery = qb
1031
+ .subQuery()
1032
+ .select('role.id')
1033
+ .from(auth_base_1.Role, 'role')
1034
+ .where("role.name = 'Office Admin'")
1035
+ .andWhere('role.domain_id = :domain', { domain: domain.id })
1036
+ .getQuery();
1037
+ return 'ur.roles_id IN ' + subQuery;
1038
+ })
1039
+ .getRawMany();
1040
+ // send notification to Office Admin Users
1041
+ if ((users === null || users === void 0 ? void 0 : users.length) && ((_c = context.header) === null || _c === void 0 ? void 0 : _c.referer)) {
1042
+ const receivers = users.map(user => user.id);
1043
+ const msg = {
1044
+ title: `New Release Order from ${customerBizplace.name}`,
1045
+ body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,
1046
+ url: context.header.referer,
1047
+ data: { url: context.header.referer }
1048
+ };
1049
+ /**
1050
+ * @notes Temporary off sendNotification due to suspect of causing wms down
1051
+ */
1052
+ // await sendNotification({
1053
+ // receivers,
1054
+ // message: { ...msg }
1055
+ // })
1056
+ }
1057
+ }
1058
+ return releaseGood;
1059
+ }
1060
+ exports.receiveReleaseGood = receiveReleaseGood;
1061
+ async function rejectReleaseGood(tx, context, name, remark) {
1062
+ var _a;
1063
+ const { domain, user } = context.state;
1064
+ const releaseGood = await tx.getRepository(release_good_1.ReleaseGood).findOne({
1065
+ where: { domain, name, status: constants_1.ORDER_STATUS.PENDING_RECEIVE },
1066
+ relations: [
1067
+ 'bizplace',
1068
+ 'bizplace.domain',
1069
+ 'orderProducts',
1070
+ 'orderProducts.product',
1071
+ 'orderProducts.productDetail',
1072
+ 'orderProducts.product.productDetails',
1073
+ 'orderInventories',
1074
+ 'orderInventories.inventory',
1075
+ 'orderVass',
1076
+ 'shippingOrder'
1077
+ ]
1078
+ });
1079
+ if (!releaseGood)
1080
+ throw new Error(`Release good doesn't exists.`);
1081
+ if (!remark)
1082
+ throw new Error('Remark is not exist.');
1083
+ let foundOIs = releaseGood.orderInventories;
1084
+ let foundOVs = releaseGood.orderVass;
1085
+ let foundOPs = releaseGood.orderProducts;
1086
+ // 1. Update status of order products (PENDING_RECEIVE => REJECTED)
1087
+ if (foundOIs && foundOIs.length) {
1088
+ await tx.getRepository(order_inventory_1.OrderInventory).save(await Promise.all(foundOIs.map(async (oi) => {
1089
+ var _a;
1090
+ if ((_a = oi === null || oi === void 0 ? void 0 : oi.inventory) === null || _a === void 0 ? void 0 : _a.id) {
1091
+ oi.inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne(oi.inventory.id);
1092
+ await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oi.inventory), { lockedQty: safeDecimalOperation(oi.inventory.lockedQty, oi.releaseQty, 'subtract'), lockedUomValue: safeDecimalOperation(oi.inventory.lockedUomValue, oi.releaseUomValue, 'subtract'), updater: user }));
1093
+ }
1094
+ oi.status = constants_1.ORDER_INVENTORY_STATUS.REJECTED;
1095
+ oi.updater = user;
1096
+ return oi;
1097
+ })));
1098
+ }
1099
+ if (foundOPs && foundOPs.length) {
1100
+ const orderSource = releaseGood.source;
1101
+ switch (orderSource) {
1102
+ case auth_base_1.ApplicationType.SELLERCRAFT:
1103
+ const sellercraft = await tx
1104
+ .getRepository(integration_sellercraft_1.Sellercraft)
1105
+ .findOne({ domain: releaseGood.bizplace.domain, status: integration_sellercraft_1.SellercraftStatus.ACTIVE });
1106
+ if (sellercraft) {
1107
+ const sellercraftCtrl = new controllers_1.SellercraftController(tx, domain, user);
1108
+ await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER');
1109
+ }
1110
+ break;
1111
+ default:
1112
+ break;
1113
+ }
1114
+ if (releaseGood.type == 'b2b') {
1115
+ const customerDomain = releaseGood.bizplace.domain;
1116
+ const customerBizplaceId = releaseGood.bizplace.id;
1117
+ const companyBizplace = await (0, biz_base_1.getCompanyBizplace)(domain, null, customerBizplaceId, tx);
1118
+ const application = await tx
1119
+ .getRepository(auth_base_1.Application)
1120
+ .findOne({ domain: companyBizplace.domain, status: 'ACTIVE', type: auth_base_1.ApplicationType.POWRUP });
1121
+ if (application) {
1122
+ const powrupController = new controllers_1.PowrupController();
1123
+ powrupController.updateStock(foundOPs, customerDomain, user, tx);
1124
+ }
1125
+ }
1126
+ await tx.getRepository(order_product_1.OrderProduct).save(await Promise.all(foundOPs.map(async (op) => {
1127
+ op.status = constants_1.ORDER_PRODUCT_STATUS.REJECTED;
1128
+ op.updater = user;
1129
+ return op;
1130
+ })));
1131
+ }
1132
+ // 2. Update status of order vass if it exists (PENDING_RECEIVE => REJECTED)
1133
+ if (foundOVs && foundOVs.length) {
1134
+ foundOVs = foundOVs.map((ov) => {
1135
+ ov.status = constants_1.ORDER_VAS_STATUS.REJECTED;
1136
+ ov.updater = user;
1137
+ return ov;
1138
+ });
1139
+ await tx.getRepository(order_vas_1.OrderVas).save(foundOVs);
1140
+ }
1141
+ if (releaseGood.shippingOrder) {
1142
+ // 2. 1) if it's yes update status of collection order
1143
+ const shippingOrder = await tx.getRepository(shipping_order_1.ShippingOrder).findOne({
1144
+ where: { domain, name: releaseGood.shippingOrder.name }
1145
+ });
1146
+ shippingOrder.status = constants_1.ORDER_STATUS.REJECTED;
1147
+ shippingOrder.updater = user;
1148
+ await tx.getRepository(shipping_order_1.ShippingOrder).save(shippingOrder);
1149
+ }
1150
+ releaseGood.remark = remark;
1151
+ releaseGood.status = constants_1.ORDER_STATUS.REJECTED;
1152
+ releaseGood.updater = user;
1153
+ await tx.getRepository(release_good_1.ReleaseGood).save(releaseGood);
1154
+ // notification logics
1155
+ const users = await (0, biz_base_1.getDomainUsers)(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.bizplace, tx);
1156
+ if ((users === null || users === void 0 ? void 0 : users.length) && ((_a = context.header) === null || _a === void 0 ? void 0 : _a.referer)) {
1157
+ const receivers = users.map(user => user.id);
1158
+ const msg = {
1159
+ title: `Latest status for ${releaseGood.name}`,
1160
+ body: `Your RO has been rejected.`,
1161
+ url: context.header.referer,
1162
+ data: { url: context.header.referer }
1163
+ };
1164
+ /**
1165
+ * @notes Temporary off sendNotification due to suspect of causing wms down
1166
+ */
1167
+ // await sendNotification({
1168
+ // receivers,
1169
+ // message: { ...msg }
1170
+ // })
1171
+ }
1172
+ return releaseGood;
1173
+ }
1174
+ exports.rejectReleaseGood = rejectReleaseGood;
1175
+ async function bulkGenerateReleaseGood(releaseGood, bizplaceId, roNoSetting, domain, user, draftOrder, tx) {
1176
+ var _a, _b, _c, _d, _e, _f;
1177
+ try {
1178
+ const worksheetPickingAssignment = await tx.getRepository(setting_base_1.Setting).findOne({
1179
+ where: { domain, category: 'id-rule', name: 'enable-worksheet-picking-activation-assignment' }
1180
+ });
1181
+ let warehouseDomain = domain;
1182
+ let { orderInventories, shippingOrder } = releaseGood;
1183
+ let bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne(bizplaceId);
1184
+ let geoCountry = (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country)
1185
+ ? await tx.getRepository(geography_1.GeoCountry).findOne({
1186
+ where: [{ name: (0, typeorm_1.ILike)(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country) }, { description: (0, typeorm_1.ILike)(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country) }]
1187
+ })
1188
+ : null;
1189
+ if (releaseGood.type == 'b2b') {
1190
+ releaseGood = await validateB2BLmdOrder(releaseGood, domain, tx);
1191
+ }
1192
+ let lmd = null;
1193
+ if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lmdOption) {
1194
+ //Assign LMD
1195
+ lmd = await autoAssignLmd(domain, geoCountry === null || geoCountry === void 0 ? void 0 : geoCountry.id, releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.postalCode, bizplace);
1196
+ }
1197
+ let newReleaseGood = Object.assign(Object.assign({}, releaseGood), { name: roNoSetting
1198
+ ? await (0, id_rule_base_1.generateId)({ domain, type: constants_1.ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })
1199
+ : utils_1.OrderNoGenerator.releaseGood(), domain: warehouseDomain, bizplace: bizplace, deliveryAddress1: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress1) || null, deliveryAddress2: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress2) || null, deliveryAddress3: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress3) || null, deliveryAddress4: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress4) || null, deliveryAddress5: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.deliveryAddress5) || null, attentionTo: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.attentionTo) || null, attentionCompany: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.attentionCompany) || null, city: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.city) || null, state: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.state) || null, postalCode: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.postalCode) || null, country: ((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == ((_b = geoCountry === null || geoCountry === void 0 ? void 0 : geoCountry.name) === null || _b === void 0 ? void 0 : _b.toLowerCase())
1200
+ ? geoCountry === null || geoCountry === void 0 ? void 0 : geoCountry.description
1201
+ : (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.country) || null, phone1: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.phone1) || null, phone2: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.phone2) || null, email: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.email) || null, source: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.source) || null, airwayBill: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill) || null, invoice: releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice, refNo: releaseGood.refNo, refNo2: releaseGood.refNo2, refNo3: releaseGood.refNo3, draftReleaseGood: draftOrder || null, releaseDate: releaseGood.releaseDate, ownTransport: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.ownTransport) || false, orderMethod: constants_1.ORDER_METHOD.SELECT_BY_PRODUCT, status: constants_1.ORDER_STATUS.PENDING, creator: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.creator) || user, updater: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.updater) || user, assignedInventory: (worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) == 'true' ? false : true, codOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.codOption) || false, paidAmount: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.paidAmount) || null, lmdOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.lmdOption) || false, lastMileDelivery: lmd || null, type: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.type) || 'b2b', packingOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) || false, courierOption: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.courierOption) || false, billingAddress: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress) || null, billingAddress2: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress2) || null, billingAddress3: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress3) || null, billingAddress4: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress4) || null, billingAddress5: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingAddress5) || null, billingCity: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingCity) || null, billingState: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingState) || null, billingPostalCode: (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingPostalCode) ? releaseGood.billingPostalCode : null, billingCountry: ((_c = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingCountry) === null || _c === void 0 ? void 0 : _c.toLowerCase()) == ((_d = geoCountry === null || geoCountry === void 0 ? void 0 : geoCountry.name) === null || _d === void 0 ? void 0 : _d.toLowerCase())
1202
+ ? geoCountry === null || geoCountry === void 0 ? void 0 : geoCountry.description
1203
+ : (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.billingCountry) || null });
1204
+ newReleaseGood = await tx.getRepository(release_good_1.ReleaseGood).save(newReleaseGood);
1205
+ /** Generate Shipping Order */
1206
+ if (shippingOrder) {
1207
+ shippingOrder.remark = shippingOrder.exportRemark;
1208
+ if (shippingOrder.containerClosureDate !== undefined) {
1209
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate);
1210
+ }
1211
+ delete shippingOrder.exportRemark;
1212
+ const createdSO = await tx.getRepository(shipping_order_1.ShippingOrder).save(Object.assign(Object.assign({}, shippingOrder), { name: utils_1.OrderNoGenerator.shippingOrder(), domain,
1213
+ bizplace, status: constants_1.ORDER_STATUS.PENDING, creator: user, updater: user }));
1214
+ newReleaseGood.shippingOrder = createdSO;
1215
+ }
1216
+ let finalOrderInventories = [];
1217
+ // pre assign inventory to orderInventories
1218
+ for (let oi of orderInventories) {
1219
+ if ((worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) !== 'true') {
1220
+ const pickingProductSetting = await tx.getRepository(setting_base_1.Setting).findOne({
1221
+ where: { domain, name: 'rule-for-picking-product' }
1222
+ });
1223
+ let locationSortingRules = [];
1224
+ if (pickingProductSetting) {
1225
+ let locationSetting = JSON.parse(pickingProductSetting.value);
1226
+ for (const key in locationSetting) {
1227
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true });
1228
+ }
1229
+ }
1230
+ let productDetail = (_e = oi.orderProduct) === null || _e === void 0 ? void 0 : _e.productDetail;
1231
+ let product = (_f = oi.orderProduct) === null || _f === void 0 ? void 0 : _f.product;
1232
+ if (!productDetail) {
1233
+ productDetail = await tx.getRepository(product_base_1.ProductDetail).findOne(oi.productDetailId, { relations: ['product'] });
1234
+ product = productDetail.product;
1235
+ }
1236
+ let assignedResult = await utils_1.InventoryUtil.autoAssignInventoryForRelease(oi, product, productDetail, locationSortingRules, bizplace, warehouseDomain, tx, oi.batchId, '', null, oi.cartonId, oi.expirationDate);
1237
+ finalOrderInventories.push(...assignedResult.map(itm => {
1238
+ return Object.assign(Object.assign({}, itm), { orderProduct: oi === null || oi === void 0 ? void 0 : oi.orderProduct });
1239
+ }));
1240
+ }
1241
+ else {
1242
+ finalOrderInventories.push(oi);
1243
+ }
1244
+ }
1245
+ for (let oi of finalOrderInventories) {
1246
+ let generatedOI = Object.assign(new order_inventory_1.OrderInventory(), oi);
1247
+ generatedOI = Object.assign(Object.assign({}, generatedOI), { domain: warehouseDomain, bizplace, status: constants_1.ORDER_INVENTORY_STATUS.PENDING, name: utils_1.OrderNoGenerator.orderInventory(), releaseGood: newReleaseGood, creator: (newReleaseGood === null || newReleaseGood === void 0 ? void 0 : newReleaseGood.creator) || user, updater: (newReleaseGood === null || newReleaseGood === void 0 ? void 0 : newReleaseGood.updater) || user });
1248
+ let newOrderProduct;
1249
+ if (!(oi === null || oi === void 0 ? void 0 : oi.orderProduct)) {
1250
+ newOrderProduct = {
1251
+ name: generatedOI.name,
1252
+ product: generatedOI.product || { id: generatedOI.productId },
1253
+ productDetail: generatedOI.productDetail || { id: generatedOI.productDetailId },
1254
+ batchId: generatedOI.batchId || '',
1255
+ packingType: generatedOI.packingType,
1256
+ packingSize: generatedOI.packingSize,
1257
+ uom: generatedOI.uom,
1258
+ domain: warehouseDomain,
1259
+ bizplace,
1260
+ releaseQty: generatedOI.releaseQty,
1261
+ releaseUomValue: generatedOI.releaseUomValue,
1262
+ packQty: 0,
1263
+ actualPackQty: 0,
1264
+ palletQty: 0,
1265
+ actualPalletQty: 0,
1266
+ status: constants_1.ORDER_PRODUCT_STATUS.ASSIGNED,
1267
+ releaseGood: newReleaseGood,
1268
+ creator: (newReleaseGood === null || newReleaseGood === void 0 ? void 0 : newReleaseGood.creator) || user,
1269
+ updater: (newReleaseGood === null || newReleaseGood === void 0 ? void 0 : newReleaseGood.updater) || user
1270
+ };
1271
+ newOrderProduct = await tx.getRepository(order_product_1.OrderProduct).save(newOrderProduct);
1272
+ }
1273
+ else {
1274
+ newOrderProduct = await tx.getRepository(order_product_1.OrderProduct).save(Object.assign(Object.assign({}, oi.orderProduct), { totalUomValue: `${oi.orderProduct.releaseUomValue} ${oi.orderProduct.uom}`, status: oi.orderProduct.status === 'partial-release'
1275
+ ? constants_1.ORDER_PRODUCT_STATUS.PARTIAL_RELEASED
1276
+ : constants_1.ORDER_PRODUCT_STATUS.ASSIGNED, updater: (newReleaseGood === null || newReleaseGood === void 0 ? void 0 : newReleaseGood.updater) || user, releaseGood: newReleaseGood }));
1277
+ }
1278
+ // update inventory locked qty and uom value
1279
+ if ((worksheetPickingAssignment === null || worksheetPickingAssignment === void 0 ? void 0 : worksheetPickingAssignment.value) !== 'true') {
1280
+ await tx.getRepository(order_inventory_1.OrderInventory).save(Object.assign(Object.assign({}, generatedOI), { orderProduct: newOrderProduct }));
1281
+ const result = await tx
1282
+ .getRepository(warehouse_base_1.Inventory)
1283
+ .createQueryBuilder()
1284
+ .update(warehouse_base_1.Inventory)
1285
+ .set({
1286
+ lockedQty: () => `COALESCE("locked_qty",0) + ${generatedOI.releaseQty}`,
1287
+ lockedUomValue: () => `COALESCE("locked_uom_value",0) + ${generatedOI.releaseUomValue}`,
1288
+ updater: user
1289
+ })
1290
+ .where(`id = :id AND qty >= COALESCE(locked_qty,0) + :newQty`, {
1291
+ id: oi.inventory.id,
1292
+ newQty: generatedOI.releaseQty
1293
+ })
1294
+ .execute();
1295
+ if (result.affected === 0) {
1296
+ throw new Error('Insufficient inventory qty');
1297
+ }
1298
+ }
1299
+ else {
1300
+ await tx
1301
+ .getRepository(warehouse_base_1.ProductDetailStock)
1302
+ .createQueryBuilder()
1303
+ .update(warehouse_base_1.ProductDetailStock)
1304
+ .set({
1305
+ unassignedQty: () => `"unassigned_qty" + ${generatedOI.releaseQty}`,
1306
+ unassignedUomValue: () => `"unassigned_uom_value" + ${generatedOI.releaseUomValue}`
1307
+ })
1308
+ .where({ productDetail: oi.productDetail ? oi.productDetail.id : oi.productDetailId })
1309
+ .execute();
1310
+ }
1311
+ }
1312
+ return newReleaseGood;
1313
+ }
1314
+ catch (error) {
1315
+ throw error;
1316
+ }
1317
+ }
1318
+ exports.bulkGenerateReleaseGood = bulkGenerateReleaseGood;
1319
+ async function bulkConfirmOrReceiveReleaseGoods(releaseGoodsNo, domain, user, context, partnerDirectReceiveSettingValue, tx) {
1320
+ var _a, _b, _c;
1321
+ let foundReleaseGoods = await tx.getRepository(release_good_1.ReleaseGood).find({
1322
+ where: { name: (0, typeorm_1.In)(releaseGoodsNo), status: constants_1.ORDER_STATUS.PENDING },
1323
+ relations: ['bizplace', 'lastMileDelivery']
1324
+ });
1325
+ if (!foundReleaseGoods.length)
1326
+ throw new Error(`release good order doesn't exists.`);
1327
+ let customerBizplace = foundReleaseGoods[0].bizplace;
1328
+ let foundOrderInventories = await tx.getRepository(order_inventory_1.OrderInventory).find({
1329
+ where: { domain, releaseGood: (0, typeorm_1.In)(foundReleaseGoods.map((rg) => rg.id)) }
1330
+ });
1331
+ let orderStatus = partnerDirectReceiveSettingValue == 1 ? constants_1.ORDER_STATUS.PENDING_RECEIVE : constants_1.ORDER_STATUS.PENDING_WORKSHEET;
1332
+ let orderInventoryStatus = partnerDirectReceiveSettingValue == 1
1333
+ ? constants_1.ORDER_INVENTORY_STATUS.PENDING_RECEIVE
1334
+ : constants_1.ORDER_INVENTORY_STATUS.PENDING_WORKSHEET;
1335
+ await tx
1336
+ .getRepository(release_good_1.ReleaseGood)
1337
+ .update({ id: (0, typeorm_1.In)(foundReleaseGoods.map(rg => rg.id)) }, { status: orderStatus, updater: user });
1338
+ await tx
1339
+ .getRepository(order_inventory_1.OrderInventory)
1340
+ .update({ id: (0, typeorm_1.In)(foundOrderInventories.map(oi => oi.id)) }, { status: orderInventoryStatus, updater: user });
1341
+ if (((_a = context === null || context === void 0 ? void 0 : context.state) === null || _a === void 0 ? void 0 : _a.type) != 'api') {
1342
+ const users = await tx
1343
+ .getRepository('users_roles')
1344
+ .createQueryBuilder('ur')
1345
+ .select('ur.users_id', 'id')
1346
+ .where(qb => {
1347
+ const subQuery = qb
1348
+ .subQuery()
1349
+ .select('role.id')
1350
+ .from(auth_base_1.Role, 'role')
1351
+ .where("role.name = 'Office Admin'")
1352
+ .andWhere('role.domain_id = :domain', { domain: domain.id })
1353
+ .getQuery();
1354
+ return 'ur.roles_id IN ' + subQuery;
1355
+ })
1356
+ .getRawMany();
1357
+ // send notification to Office Admin Users
1358
+ if ((users === null || users === void 0 ? void 0 : users.length) && ((_b = context.header) === null || _b === void 0 ? void 0 : _b.referer)) {
1359
+ const receivers = users.map(user => user.id);
1360
+ const message = {
1361
+ title: `New Release Order from ${customerBizplace.name}`,
1362
+ body: `New incoming bulk release orders are pending for receiving`,
1363
+ url: context.header.referer,
1364
+ data: { url: context.header.referer }
1365
+ };
1366
+ /**
1367
+ * @notes Temporary off sendNotification due to suspect of causing wms down
1368
+ */
1369
+ // await sendNotification({
1370
+ // receivers,
1371
+ // message
1372
+ // })
1373
+ }
1374
+ }
1375
+ let roTMS = foundReleaseGoods.filter(rg => {
1376
+ var _a;
1377
+ ((_a = rg.lastMileDelivery) === null || _a === void 0 ? void 0 : _a.isTms) && rg.lmdOption;
1378
+ });
1379
+ if (roTMS === null || roTMS === void 0 ? void 0 : roTMS.length) {
1380
+ const tmsService = (0, integration_lmd_2.getTmsService)((_c = roTMS[0].lastMileDelivery) === null || _c === void 0 ? void 0 : _c.platform);
1381
+ tmsService.createShipment(roTMS);
1382
+ }
1383
+ if (foundReleaseGoods)
1384
+ return Promise.all(foundReleaseGoods.map(async (releaseGood) => {
1385
+ return Object.assign(Object.assign({}, releaseGood), { orderInventories: await tx.getRepository(order_inventory_1.OrderInventory).find({ where: releaseGood }), status: orderStatus, updater: user });
1386
+ }));
1387
+ }
1388
+ exports.bulkConfirmOrReceiveReleaseGoods = bulkConfirmOrReceiveReleaseGoods;
1389
+ function extractRawReleaseGoods(rawReleaseGoods) {
1390
+ return rawReleaseGoods.reduce((releaseGoods, item) => {
1391
+ const idx = releaseGoods.findIndex(rg => {
1392
+ // consider these attributes if they are exist in "item"
1393
+ const comparison = [
1394
+ 'refNo2',
1395
+ 'refNo3',
1396
+ 'attentionTo',
1397
+ 'phone1',
1398
+ 'deliveryAddress1',
1399
+ 'deliveryAddress2',
1400
+ 'deliveryAddress3',
1401
+ 'deliveryAddress4',
1402
+ 'deliveryAddress5',
1403
+ 'postalCode'
1404
+ ];
1405
+ let a = {}, b = {};
1406
+ comparison.forEach(cc => {
1407
+ if (item[cc]) {
1408
+ a[cc] = item[cc];
1409
+ b[cc] = rg[cc];
1410
+ }
1411
+ });
1412
+ a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()));
1413
+ b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()));
1414
+ return rg.refNo == item.refNo && rg.releaseDate == item.releaseDate && a === b;
1415
+ });
1416
+ if (idx >= 0) {
1417
+ const duplicateSkuIdx = releaseGoods[idx].orderInventories.findIndex(oi => oi.sku === item.sku && oi.packingType === item.packingType && oi.packingSize === item.packingSize);
1418
+ // if there is duplicated SKU, merge them and sum up the releaseQty
1419
+ if (duplicateSkuIdx >= 0) {
1420
+ releaseGoods[idx].orderInventories[duplicateSkuIdx].releaseQty = safeDecimalOperation(releaseGoods[idx].orderInventories[duplicateSkuIdx].releaseQty, item.releaseQty, 'add');
1421
+ }
1422
+ else {
1423
+ releaseGoods[idx].orderInventories.push({
1424
+ sku: item.sku,
1425
+ productId: item.productId,
1426
+ packingType: item.packingType,
1427
+ packingSize: item.packingSize,
1428
+ uom: item.uom,
1429
+ releaseQty: Math.round(parseFloat(item.releaseQty) * 1000) / 1000,
1430
+ releaseUomValue: Math.round(parseFloat(item.releaseUomValue) * 1000) / 1000,
1431
+ });
1432
+ }
1433
+ }
1434
+ else {
1435
+ releaseGoods.push({
1436
+ releaseDate: item.releaseDate,
1437
+ refNo: item.refNo,
1438
+ refNo2: item.refNo2,
1439
+ refNo3: item.refNo3,
1440
+ attentionCompany: item.attentionCompany,
1441
+ attentionTo: item.attentionTo,
1442
+ phone1: item.phone1,
1443
+ deliveryAddress1: item.deliveryAddress1,
1444
+ deliveryAddress2: item.deliveryAddress2,
1445
+ deliveryAddress3: item.deliveryAddress3,
1446
+ deliveryAddress4: item.deliveryAddress4,
1447
+ deliveryAddress5: item.deliveryAddress5,
1448
+ billingAddress: item.billingAddress,
1449
+ billingAddress2: item.billingAddress2,
1450
+ billingAddress3: item.billingAddress3,
1451
+ billingAddress4: item.billingAddress4,
1452
+ billingAddress5: item.billingAddress5,
1453
+ billingCity: item.billingCity,
1454
+ billingState: item.billingState,
1455
+ billingCountry: item.billingCountry,
1456
+ billingPostalCode: item.billingPostalCode,
1457
+ city: item.city,
1458
+ postalCode: item.postalCode,
1459
+ state: item.state,
1460
+ country: item.country,
1461
+ codOption: (item === null || item === void 0 ? void 0 : item.codOption) || false,
1462
+ lmdOption: (item === null || item === void 0 ? void 0 : item.lmdOption) || false,
1463
+ paidAmount: (item === null || item === void 0 ? void 0 : item.paidAmount) || null,
1464
+ airwayBill: item === null || item === void 0 ? void 0 : item.airwayBill,
1465
+ invoice: item === null || item === void 0 ? void 0 : item.invoice,
1466
+ type: (item === null || item === void 0 ? void 0 : item.type) || 'b2b',
1467
+ packingOption: (item === null || item === void 0 ? void 0 : item.packingOption) || false,
1468
+ courierOption: (item === null || item === void 0 ? void 0 : item.courierOption) || false,
1469
+ orderInventories: [
1470
+ {
1471
+ sku: item.sku,
1472
+ productId: item.productId,
1473
+ packingType: item.packingType,
1474
+ packingSize: item.packingSize,
1475
+ uom: item.uom,
1476
+ releaseQty: item.releaseQty,
1477
+ releaseUomValue: item.releaseUomValue,
1478
+ batchId: (item === null || item === void 0 ? void 0 : item.batchId) || null,
1479
+ cartonId: (item === null || item === void 0 ? void 0 : item.cartonId) || null,
1480
+ expirationDate: (item === null || item === void 0 ? void 0 : item.expirationDate) || null
1481
+ }
1482
+ ]
1483
+ });
1484
+ }
1485
+ return releaseGoods;
1486
+ }, []);
1487
+ }
1488
+ function formRawReleaseGoods(releaseGood, errorMsg) {
1489
+ let rawReleaseGoods = [];
1490
+ for (let i = 0, l = releaseGood.orderInventories.length; i < l; i++) {
1491
+ let rawReleaseGood = Object.assign(Object.assign(Object.assign({}, releaseGood), releaseGood.orderInventories[i]), { errorMsg });
1492
+ delete rawReleaseGood.orderInventories;
1493
+ delete rawReleaseGood.product;
1494
+ rawReleaseGoods.push(rawReleaseGood);
1495
+ }
1496
+ return rawReleaseGoods;
1497
+ }
1498
+ async function autoAssignLmd(domain, countryId, postalCode, bizplace) {
1499
+ let lmdResult;
1500
+ const qb = (0, typeorm_1.getRepository)(integration_lmd_1.LastMileDelivery)
1501
+ .createQueryBuilder('lmd')
1502
+ .leftJoinAndSelect('lmd.lastMileDeliverySettings', 'lmds')
1503
+ .innerJoinAndSelect('lmds.geoCountry', 'gc')
1504
+ .leftJoinAndSelect(`lmd.lastMileDeliveryBizplaces`, `lmdb`)
1505
+ .leftJoinAndSelect('lmdb.bizplace', 'bz')
1506
+ .where('lmd.domain_id = :domainId', { domainId: domain.id })
1507
+ .andWhere('lower(lmd.status) = :status', { status: 'active' })
1508
+ .andWhere('gc.id = :gcId', { gcId: countryId })
1509
+ .andWhere('lmdb.bizplace_id = :bzId', { bzId: bizplace.id })
1510
+ .orderBy('lmdb.bizplace_id', 'ASC');
1511
+ let lmdList = await qb.getMany();
1512
+ if (lmdList.length > 1) {
1513
+ qb.andWhere('lmd.id IN (:...lmdIds)', {
1514
+ lmdIds: lmdList.map(lmd => {
1515
+ return lmd.id;
1516
+ })
1517
+ });
1518
+ }
1519
+ qb.andWhere(new typeorm_1.Brackets(qb => {
1520
+ qb.where(`lmds.include_postal_code = ''`)
1521
+ .orWhere('lmds.include_postal_code is null')
1522
+ .orWhere('lmds.include_postal_code like :includePostCode', { includePostCode: `%${postalCode}%` });
1523
+ }))
1524
+ .andWhere(new typeorm_1.Brackets(qb => {
1525
+ qb.where(`lmds.exclude_postal_code = ''`)
1526
+ .orWhere('lmds.exclude_postal_code is null')
1527
+ .orWhere('lmds.exclude_postal_code not like :excludePostCode', { excludePostCode: `%${postalCode}%` });
1528
+ }))
1529
+ .addOrderBy('lmds.include_postal_code')
1530
+ .addOrderBy('lmd.rank', 'ASC');
1531
+ lmdResult = await qb.getOne();
1532
+ if (!lmdResult) {
1533
+ const newQb = (0, typeorm_1.getRepository)(integration_lmd_1.LastMileDelivery)
1534
+ .createQueryBuilder('lmd')
1535
+ .leftJoinAndSelect('lmd.lastMileDeliverySettings', 'lmds')
1536
+ .innerJoinAndSelect('lmds.geoCountry', 'gc')
1537
+ .leftJoinAndSelect(`lmd.lastMileDeliveryBizplaces`, `lmdb`)
1538
+ .leftJoinAndSelect('lmdb.bizplace', 'bz')
1539
+ .where('lmd.domain_id = :domainId', { domainId: domain.id })
1540
+ .andWhere('lower(lmd.status) = :status', { status: 'active' })
1541
+ .andWhere('gc.id = :gcId', { gcId: countryId })
1542
+ .andWhere('lmdb.bizplace_id is null')
1543
+ .andWhere(new typeorm_1.Brackets(qb => {
1544
+ qb.where(`lmds.include_postal_code = ''`)
1545
+ .orWhere('lmds.include_postal_code is null')
1546
+ .orWhere('lmds.include_postal_code like :includePostCode', { includePostCode: `%${postalCode}%` });
1547
+ }))
1548
+ .andWhere(new typeorm_1.Brackets(qb => {
1549
+ qb.where(`lmds.exclude_postal_code = ''`)
1550
+ .orWhere('lmds.exclude_postal_code is null')
1551
+ .orWhere('lmds.exclude_postal_code not like :excludePostCode', { excludePostCode: `%${postalCode}%` });
1552
+ }))
1553
+ .orderBy('lmds.include_postal_code')
1554
+ .addOrderBy('lmd.rank', 'ASC');
1555
+ lmdResult = await newQb.getOne();
1556
+ }
1557
+ return lmdResult;
1558
+ }
1559
+ async function validateB2BLmdOrder(releaseGood, domain, tx, shippingOrderInfo) {
1560
+ const tms = await tx.getRepository(integration_lmd_1.LastMileDelivery).find({
1561
+ where: { domain, status: 'active', isTms: true }
1562
+ });
1563
+ if (tms.length > 0) {
1564
+ const checkShipmentFields = shippingOrderInfo => {
1565
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.deliveryAddress1) &&
1566
+ !(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.postalCode) &&
1567
+ !(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.state) &&
1568
+ !(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.city) &&
1569
+ !(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.attentionTo) &&
1570
+ !(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.phone1)) {
1571
+ throw new Error('please fill in the shipping information in shipment tab');
1572
+ }
1573
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.attentionTo)) {
1574
+ throw new Error('attention to is empty please fill in the data before proceed create order');
1575
+ }
1576
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.postalCode)) {
1577
+ throw new Error('zip/postal code is empty please fill in the data before proceed create order');
1578
+ }
1579
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.state)) {
1580
+ throw new Error('state is empty please fill in the data before proceed create order');
1581
+ }
1582
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.city)) {
1583
+ throw new Error('city is empty please fill in the data before proceed create order');
1584
+ }
1585
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.deliveryAddress1)) {
1586
+ throw new Error('delivery address is empty please fill in the data before proceed create order');
1587
+ }
1588
+ if (!(shippingOrderInfo === null || shippingOrderInfo === void 0 ? void 0 : shippingOrderInfo.phone1)) {
1589
+ throw new Error('contact is empty please fill in the data before proceed create order');
1590
+ }
1591
+ };
1592
+ checkShipmentFields(shippingOrderInfo);
1593
+ releaseGood.lmdOption = true;
1594
+ return releaseGood;
1595
+ }
1596
+ return releaseGood;
1597
+ }
1598
+ //# sourceMappingURL=release-good-mutation.js.map