@things-factory/sales-base 7.0.1-beta.0 → 7.0.1-beta.12

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 (449) hide show
  1. package/dist-server/constants/attachment-type.d.ts +9 -0
  2. package/dist-server/constants/index.d.ts +7 -0
  3. package/dist-server/constants/load-type.d.ts +4 -0
  4. package/dist-server/constants/order.d.ts +191 -0
  5. package/dist-server/constants/product-group-type.d.ts +4 -0
  6. package/dist-server/constants/release-good.d.ts +8 -0
  7. package/dist-server/constants/release-good.js +1 -1
  8. package/dist-server/constants/release-good.js.map +1 -1
  9. package/dist-server/constants/transfer-order-type.d.ts +5 -0
  10. package/dist-server/constants/validation-error-code.d.ts +12 -0
  11. package/dist-server/constants/vas-target-type.d.ts +22 -0
  12. package/dist-server/controllers/ecommerce/ecommerce-controller.d.ts +6 -0
  13. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  14. package/dist-server/controllers/ecommerce/index.d.ts +2 -0
  15. package/dist-server/controllers/ecommerce/sellercraft-controller.d.ts +9 -0
  16. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  17. package/dist-server/controllers/index.d.ts +2 -0
  18. package/dist-server/controllers/order-controller.d.ts +109 -0
  19. package/dist-server/controllers/order-controller.js +2 -2
  20. package/dist-server/controllers/order-controller.js.map +1 -1
  21. package/dist-server/errors/index.d.ts +1 -0
  22. package/dist-server/errors/validation-error.d.ts +12 -0
  23. package/dist-server/index.d.ts +5 -0
  24. package/dist-server/migrations/index.d.ts +1 -0
  25. package/dist-server/service/arrival-notice/arrival-notice-mutation.d.ts +28 -0
  26. package/dist-server/service/arrival-notice/arrival-notice-mutation.js +55 -16
  27. package/dist-server/service/arrival-notice/arrival-notice-mutation.js.map +1 -1
  28. package/dist-server/service/arrival-notice/arrival-notice-query.d.ts +15 -0
  29. package/dist-server/service/arrival-notice/arrival-notice-query.js +2 -2
  30. package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -1
  31. package/dist-server/service/arrival-notice/arrival-notice-types.d.ts +107 -0
  32. package/dist-server/service/arrival-notice/arrival-notice-types.js +8 -8
  33. package/dist-server/service/arrival-notice/arrival-notice-types.js.map +1 -1
  34. package/dist-server/service/arrival-notice/arrival-notice.d.ts +56 -0
  35. package/dist-server/service/arrival-notice/arrival-notice.js +4 -5
  36. package/dist-server/service/arrival-notice/arrival-notice.js.map +1 -1
  37. package/dist-server/service/arrival-notice/index.d.ts +7 -0
  38. package/dist-server/service/claim/claim-mutation.d.ts +9 -0
  39. package/dist-server/service/claim/claim-mutation.js +2 -2
  40. package/dist-server/service/claim/claim-mutation.js.map +1 -1
  41. package/dist-server/service/claim/claim-query.d.ts +13 -0
  42. package/dist-server/service/claim/claim-query.js +2 -2
  43. package/dist-server/service/claim/claim-query.js.map +1 -1
  44. package/dist-server/service/claim/claim-types.d.ts +48 -0
  45. package/dist-server/service/claim/claim-types.js +6 -6
  46. package/dist-server/service/claim/claim-types.js.map +1 -1
  47. package/dist-server/service/claim/claim.d.ts +37 -0
  48. package/dist-server/service/claim/claim.js +5 -6
  49. package/dist-server/service/claim/claim.js.map +1 -1
  50. package/dist-server/service/claim/index.d.ts +7 -0
  51. package/dist-server/service/claim-detail/claim-detail-mutation.d.ts +9 -0
  52. package/dist-server/service/claim-detail/claim-detail-mutation.js +2 -2
  53. package/dist-server/service/claim-detail/claim-detail-mutation.js.map +1 -1
  54. package/dist-server/service/claim-detail/claim-detail-query.d.ts +11 -0
  55. package/dist-server/service/claim-detail/claim-detail-query.js +2 -2
  56. package/dist-server/service/claim-detail/claim-detail-query.js.map +1 -1
  57. package/dist-server/service/claim-detail/claim-detail-types.d.ts +19 -0
  58. package/dist-server/service/claim-detail/claim-detail-types.js +6 -6
  59. package/dist-server/service/claim-detail/claim-detail-types.js.map +1 -1
  60. package/dist-server/service/claim-detail/claim-detail.d.ts +21 -0
  61. package/dist-server/service/claim-detail/claim-detail.js +2 -2
  62. package/dist-server/service/claim-detail/claim-detail.js.map +1 -1
  63. package/dist-server/service/claim-detail/index.d.ts +7 -0
  64. package/dist-server/service/claim-order/claim-order-mutation.d.ts +9 -0
  65. package/dist-server/service/claim-order/claim-order-mutation.js +2 -2
  66. package/dist-server/service/claim-order/claim-order-mutation.js.map +1 -1
  67. package/dist-server/service/claim-order/claim-order-query.d.ts +11 -0
  68. package/dist-server/service/claim-order/claim-order-query.js +2 -2
  69. package/dist-server/service/claim-order/claim-order-query.js.map +1 -1
  70. package/dist-server/service/claim-order/claim-order-types.d.ts +15 -0
  71. package/dist-server/service/claim-order/claim-order-types.js +6 -6
  72. package/dist-server/service/claim-order/claim-order-types.js.map +1 -1
  73. package/dist-server/service/claim-order/claim-order.d.ts +21 -0
  74. package/dist-server/service/claim-order/claim-order.js +2 -2
  75. package/dist-server/service/claim-order/claim-order.js.map +1 -1
  76. package/dist-server/service/claim-order/index.d.ts +7 -0
  77. package/dist-server/service/collection-order/collection-order-mutation.d.ts +13 -0
  78. package/dist-server/service/collection-order/collection-order-mutation.js +2 -2
  79. package/dist-server/service/collection-order/collection-order-mutation.js.map +1 -1
  80. package/dist-server/service/collection-order/collection-order-query.d.ts +12 -0
  81. package/dist-server/service/collection-order/collection-order-query.js +2 -2
  82. package/dist-server/service/collection-order/collection-order-query.js.map +1 -1
  83. package/dist-server/service/collection-order/collection-order-types.d.ts +60 -0
  84. package/dist-server/service/collection-order/collection-order-types.js +8 -8
  85. package/dist-server/service/collection-order/collection-order-types.js.map +1 -1
  86. package/dist-server/service/collection-order/collection-order.d.ts +39 -0
  87. package/dist-server/service/collection-order/collection-order.js +5 -6
  88. package/dist-server/service/collection-order/collection-order.js.map +1 -1
  89. package/dist-server/service/collection-order/index.d.ts +7 -0
  90. package/dist-server/service/delivery-order/delivery-order-mutation.d.ts +38 -0
  91. package/dist-server/service/delivery-order/delivery-order-mutation.js +3 -3
  92. package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -1
  93. package/dist-server/service/delivery-order/delivery-order-query.d.ts +20 -0
  94. package/dist-server/service/delivery-order/delivery-order-query.js +2 -2
  95. package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -1
  96. package/dist-server/service/delivery-order/delivery-order-types.d.ts +96 -0
  97. package/dist-server/service/delivery-order/delivery-order-types.js +8 -8
  98. package/dist-server/service/delivery-order/delivery-order-types.js.map +1 -1
  99. package/dist-server/service/delivery-order/delivery-order.d.ts +73 -0
  100. package/dist-server/service/delivery-order/delivery-order.js +5 -6
  101. package/dist-server/service/delivery-order/delivery-order.js.map +1 -1
  102. package/dist-server/service/delivery-order/index.d.ts +7 -0
  103. package/dist-server/service/draft-release-good/draft-release-good-mutation.d.ts +21 -0
  104. package/dist-server/service/draft-release-good/draft-release-good-mutation.js +5 -5
  105. package/dist-server/service/draft-release-good/draft-release-good-mutation.js.map +1 -1
  106. package/dist-server/service/draft-release-good/draft-release-good-query.d.ts +10 -0
  107. package/dist-server/service/draft-release-good/draft-release-good-query.js +2 -2
  108. package/dist-server/service/draft-release-good/draft-release-good-query.js.map +1 -1
  109. package/dist-server/service/draft-release-good/draft-release-good-type.d.ts +91 -0
  110. package/dist-server/service/draft-release-good/draft-release-good-type.js +6 -6
  111. package/dist-server/service/draft-release-good/draft-release-good-type.js.map +1 -1
  112. package/dist-server/service/draft-release-good/draft-release-good.d.ts +66 -0
  113. package/dist-server/service/draft-release-good/draft-release-good.js +4 -5
  114. package/dist-server/service/draft-release-good/draft-release-good.js.map +1 -1
  115. package/dist-server/service/draft-release-good/index.d.ts +7 -0
  116. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.d.ts +16 -0
  117. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.js +2 -2
  118. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.js.map +1 -1
  119. package/dist-server/service/goods-receival-note/goods-receival-note-query.d.ts +11 -0
  120. package/dist-server/service/goods-receival-note/goods-receival-note-query.js +2 -2
  121. package/dist-server/service/goods-receival-note/goods-receival-note-query.js.map +1 -1
  122. package/dist-server/service/goods-receival-note/goods-receival-note-types.d.ts +39 -0
  123. package/dist-server/service/goods-receival-note/goods-receival-note-types.js +8 -8
  124. package/dist-server/service/goods-receival-note/goods-receival-note-types.js.map +1 -1
  125. package/dist-server/service/goods-receival-note/goods-receival-note.d.ts +36 -0
  126. package/dist-server/service/goods-receival-note/goods-receival-note.js +3 -4
  127. package/dist-server/service/goods-receival-note/goods-receival-note.js.map +1 -1
  128. package/dist-server/service/goods-receival-note/index.d.ts +7 -0
  129. package/dist-server/service/index.d.ts +119 -0
  130. package/dist-server/service/inventory-check/index.d.ts +7 -0
  131. package/dist-server/service/inventory-check/inventory-check-mutation.d.ts +14 -0
  132. package/dist-server/service/inventory-check/inventory-check-mutation.js +2 -2
  133. package/dist-server/service/inventory-check/inventory-check-mutation.js.map +1 -1
  134. package/dist-server/service/inventory-check/inventory-check-query.d.ts +11 -0
  135. package/dist-server/service/inventory-check/inventory-check-query.js +2 -2
  136. package/dist-server/service/inventory-check/inventory-check-query.js.map +1 -1
  137. package/dist-server/service/inventory-check/inventory-check-types.d.ts +20 -0
  138. package/dist-server/service/inventory-check/inventory-check-types.js +6 -6
  139. package/dist-server/service/inventory-check/inventory-check-types.js.map +1 -1
  140. package/dist-server/service/inventory-check/inventory-check.d.ts +24 -0
  141. package/dist-server/service/inventory-check/inventory-check.js +3 -4
  142. package/dist-server/service/inventory-check/inventory-check.js.map +1 -1
  143. package/dist-server/service/invoice/index.d.ts +7 -0
  144. package/dist-server/service/invoice/invoice-mutation.d.ts +11 -0
  145. package/dist-server/service/invoice/invoice-mutation.js +2 -2
  146. package/dist-server/service/invoice/invoice-mutation.js.map +1 -1
  147. package/dist-server/service/invoice/invoice-query.d.ts +11 -0
  148. package/dist-server/service/invoice/invoice-query.js +2 -2
  149. package/dist-server/service/invoice/invoice-query.js.map +1 -1
  150. package/dist-server/service/invoice/invoice-types.d.ts +97 -0
  151. package/dist-server/service/invoice/invoice-types.js +6 -6
  152. package/dist-server/service/invoice/invoice-types.js.map +1 -1
  153. package/dist-server/service/invoice/invoice.d.ts +58 -0
  154. package/dist-server/service/invoice/invoice.js +2 -2
  155. package/dist-server/service/invoice/invoice.js.map +1 -1
  156. package/dist-server/service/invoice-product/index.d.ts +7 -0
  157. package/dist-server/service/invoice-product/invoice-product-mutation.d.ts +7 -0
  158. package/dist-server/service/invoice-product/invoice-product-mutation.js +2 -2
  159. package/dist-server/service/invoice-product/invoice-product-mutation.js.map +1 -1
  160. package/dist-server/service/invoice-product/invoice-product-query.d.ts +11 -0
  161. package/dist-server/service/invoice-product/invoice-product-query.js +2 -2
  162. package/dist-server/service/invoice-product/invoice-product-query.js.map +1 -1
  163. package/dist-server/service/invoice-product/invoice-product-types.d.ts +32 -0
  164. package/dist-server/service/invoice-product/invoice-product-types.js +8 -8
  165. package/dist-server/service/invoice-product/invoice-product-types.js.map +1 -1
  166. package/dist-server/service/invoice-product/invoice-product.d.ts +26 -0
  167. package/dist-server/service/invoice-product/invoice-product.js +3 -4
  168. package/dist-server/service/invoice-product/invoice-product.js.map +1 -1
  169. package/dist-server/service/job-sheet/index.d.ts +7 -0
  170. package/dist-server/service/job-sheet/job-sheet-mutation.d.ts +10 -0
  171. package/dist-server/service/job-sheet/job-sheet-mutation.js +2 -2
  172. package/dist-server/service/job-sheet/job-sheet-mutation.js.map +1 -1
  173. package/dist-server/service/job-sheet/job-sheet-query.d.ts +11 -0
  174. package/dist-server/service/job-sheet/job-sheet-query.js +2 -2
  175. package/dist-server/service/job-sheet/job-sheet-query.js.map +1 -1
  176. package/dist-server/service/job-sheet/job-sheet-types.d.ts +27 -0
  177. package/dist-server/service/job-sheet/job-sheet-types.js +6 -6
  178. package/dist-server/service/job-sheet/job-sheet-types.js.map +1 -1
  179. package/dist-server/service/job-sheet/job-sheet.d.ts +27 -0
  180. package/dist-server/service/job-sheet/job-sheet.js +3 -4
  181. package/dist-server/service/job-sheet/job-sheet.js.map +1 -1
  182. package/dist-server/service/manifest/index.d.ts +5 -0
  183. package/dist-server/service/manifest/manifest-mutation.d.ts +9 -0
  184. package/dist-server/service/manifest/manifest-mutation.js +2 -2
  185. package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
  186. package/dist-server/service/manifest/manifest-query.d.ts +11 -0
  187. package/dist-server/service/manifest/manifest-query.js +2 -2
  188. package/dist-server/service/manifest/manifest-query.js.map +1 -1
  189. package/dist-server/service/manifest/manifest-type.d.ts +33 -0
  190. package/dist-server/service/manifest/manifest-type.js +10 -10
  191. package/dist-server/service/manifest/manifest-type.js.map +1 -1
  192. package/dist-server/service/manifest/manifest.d.ts +27 -0
  193. package/dist-server/service/manifest/manifest.js +3 -3
  194. package/dist-server/service/manifest/manifest.js.map +1 -1
  195. package/dist-server/service/order-inventory/index.d.ts +7 -0
  196. package/dist-server/service/order-inventory/order-inventory-mutation.d.ts +7 -0
  197. package/dist-server/service/order-inventory/order-inventory-mutation.js +2 -2
  198. package/dist-server/service/order-inventory/order-inventory-mutation.js.map +1 -1
  199. package/dist-server/service/order-inventory/order-inventory-query.d.ts +18 -0
  200. package/dist-server/service/order-inventory/order-inventory-query.js +2 -2
  201. package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -1
  202. package/dist-server/service/order-inventory/order-inventory-types.d.ts +84 -0
  203. package/dist-server/service/order-inventory/order-inventory-types.js +8 -9
  204. package/dist-server/service/order-inventory/order-inventory-types.js.map +1 -1
  205. package/dist-server/service/order-inventory/order-inventory.d.ts +114 -0
  206. package/dist-server/service/order-inventory/order-inventory.js +8 -9
  207. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  208. package/dist-server/service/order-product/index.d.ts +7 -0
  209. package/dist-server/service/order-product/order-product-mutation.d.ts +7 -0
  210. package/dist-server/service/order-product/order-product-mutation.js +2 -2
  211. package/dist-server/service/order-product/order-product-mutation.js.map +1 -1
  212. package/dist-server/service/order-product/order-product-query.d.ts +11 -0
  213. package/dist-server/service/order-product/order-product-query.js +2 -2
  214. package/dist-server/service/order-product/order-product-query.js.map +1 -1
  215. package/dist-server/service/order-product/order-product-types.d.ts +116 -0
  216. package/dist-server/service/order-product/order-product-types.js +8 -8
  217. package/dist-server/service/order-product/order-product-types.js.map +1 -1
  218. package/dist-server/service/order-product/order-product.d.ts +95 -0
  219. package/dist-server/service/order-product/order-product.js +24 -13
  220. package/dist-server/service/order-product/order-product.js.map +1 -1
  221. package/dist-server/service/order-tote/index.d.ts +7 -0
  222. package/dist-server/service/order-tote/order-tote-mutation.d.ts +4 -0
  223. package/dist-server/service/order-tote/order-tote-mutation.js +2 -2
  224. package/dist-server/service/order-tote/order-tote-mutation.js.map +1 -1
  225. package/dist-server/service/order-tote/order-tote-query.d.ts +8 -0
  226. package/dist-server/service/order-tote/order-tote-query.js +2 -2
  227. package/dist-server/service/order-tote/order-tote-query.js.map +1 -1
  228. package/dist-server/service/order-tote/order-tote-types.d.ts +19 -0
  229. package/dist-server/service/order-tote/order-tote-types.js +6 -6
  230. package/dist-server/service/order-tote/order-tote-types.js.map +1 -1
  231. package/dist-server/service/order-tote/order-tote.d.ts +20 -0
  232. package/dist-server/service/order-tote/order-tote.js +3 -4
  233. package/dist-server/service/order-tote/order-tote.js.map +1 -1
  234. package/dist-server/service/order-tote-item/index.d.ts +7 -0
  235. package/dist-server/service/order-tote-item/order-tote-item-mutation.d.ts +4 -0
  236. package/dist-server/service/order-tote-item/order-tote-item-mutation.js +2 -2
  237. package/dist-server/service/order-tote-item/order-tote-item-mutation.js.map +1 -1
  238. package/dist-server/service/order-tote-item/order-tote-item-query.d.ts +7 -0
  239. package/dist-server/service/order-tote-item/order-tote-item-query.js +2 -2
  240. package/dist-server/service/order-tote-item/order-tote-item-query.js.map +1 -1
  241. package/dist-server/service/order-tote-item/order-tote-item-types.d.ts +22 -0
  242. package/dist-server/service/order-tote-item/order-tote-item-types.js +6 -6
  243. package/dist-server/service/order-tote-item/order-tote-item-types.js.map +1 -1
  244. package/dist-server/service/order-tote-item/order-tote-item.d.ts +23 -0
  245. package/dist-server/service/order-tote-item/order-tote-item.js +2 -2
  246. package/dist-server/service/order-tote-item/order-tote-item.js.map +1 -1
  247. package/dist-server/service/order-tote-seal/index.d.ts +7 -0
  248. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.d.ts +4 -0
  249. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.js +2 -2
  250. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.js.map +1 -1
  251. package/dist-server/service/order-tote-seal/order-tote-seal-query.d.ts +12 -0
  252. package/dist-server/service/order-tote-seal/order-tote-seal-query.js +2 -2
  253. package/dist-server/service/order-tote-seal/order-tote-seal-query.js.map +1 -1
  254. package/dist-server/service/order-tote-seal/order-tote-seal-types.d.ts +17 -0
  255. package/dist-server/service/order-tote-seal/order-tote-seal-types.js +6 -6
  256. package/dist-server/service/order-tote-seal/order-tote-seal-types.js.map +1 -1
  257. package/dist-server/service/order-tote-seal/order-tote-seal.d.ts +14 -0
  258. package/dist-server/service/order-tote-seal/order-tote-seal.js +2 -2
  259. package/dist-server/service/order-tote-seal/order-tote-seal.js.map +1 -1
  260. package/dist-server/service/order-vas/index.d.ts +7 -0
  261. package/dist-server/service/order-vas/order-vas-mutation.d.ts +5 -0
  262. package/dist-server/service/order-vas/order-vas-mutation.js +2 -2
  263. package/dist-server/service/order-vas/order-vas-mutation.js.map +1 -1
  264. package/dist-server/service/order-vas/order-vas-query.d.ts +11 -0
  265. package/dist-server/service/order-vas/order-vas-query.js +2 -2
  266. package/dist-server/service/order-vas/order-vas-query.js.map +1 -1
  267. package/dist-server/service/order-vas/order-vas-types.d.ts +57 -0
  268. package/dist-server/service/order-vas/order-vas-types.js +6 -6
  269. package/dist-server/service/order-vas/order-vas-types.js.map +1 -1
  270. package/dist-server/service/order-vas/order-vas.d.ts +65 -0
  271. package/dist-server/service/order-vas/order-vas.js +8 -10
  272. package/dist-server/service/order-vas/order-vas.js.map +1 -1
  273. package/dist-server/service/others/index.d.ts +3 -0
  274. package/dist-server/service/others/other-query.d.ts +10 -0
  275. package/dist-server/service/others/other-query.js +41 -11
  276. package/dist-server/service/others/other-query.js.map +1 -1
  277. package/dist-server/service/others/other-types.d.ts +40 -0
  278. package/dist-server/service/others/other-types.js +5 -6
  279. package/dist-server/service/others/other-types.js.map +1 -1
  280. package/dist-server/service/purchase-order/index.d.ts +7 -0
  281. package/dist-server/service/purchase-order/purchase-order-mutation.d.ts +18 -0
  282. package/dist-server/service/purchase-order/purchase-order-mutation.js +11 -21
  283. package/dist-server/service/purchase-order/purchase-order-mutation.js.map +1 -1
  284. package/dist-server/service/purchase-order/purchase-order-query.d.ts +54 -0
  285. package/dist-server/service/purchase-order/purchase-order-query.js +2 -2
  286. package/dist-server/service/purchase-order/purchase-order-query.js.map +1 -1
  287. package/dist-server/service/purchase-order/purchase-order-types.d.ts +56 -0
  288. package/dist-server/service/purchase-order/purchase-order-types.js +6 -6
  289. package/dist-server/service/purchase-order/purchase-order-types.js.map +1 -1
  290. package/dist-server/service/purchase-order/purchase-order.d.ts +46 -0
  291. package/dist-server/service/purchase-order/purchase-order.js +5 -6
  292. package/dist-server/service/purchase-order/purchase-order.js.map +1 -1
  293. package/dist-server/service/purchase-order-other-charge/index.d.ts +7 -0
  294. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.d.ts +4 -0
  295. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.js +2 -2
  296. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.js.map +1 -1
  297. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.d.ts +11 -0
  298. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.js +2 -2
  299. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.js.map +1 -1
  300. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.d.ts +18 -0
  301. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.js +6 -6
  302. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.js.map +1 -1
  303. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.d.ts +20 -0
  304. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.js +2 -2
  305. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.js.map +1 -1
  306. package/dist-server/service/release-good/index.d.ts +7 -0
  307. package/dist-server/service/release-good/release-good-mutation.d.ts +26 -0
  308. package/dist-server/service/release-good/release-good-mutation.js +3 -3
  309. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  310. package/dist-server/service/release-good/release-good-query.d.ts +17 -0
  311. package/dist-server/service/release-good/release-good-query.js +2 -2
  312. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  313. package/dist-server/service/release-good/release-good-types.d.ts +233 -0
  314. package/dist-server/service/release-good/release-good-types.js +21 -22
  315. package/dist-server/service/release-good/release-good-types.js.map +1 -1
  316. package/dist-server/service/release-good/release-good.d.ts +121 -0
  317. package/dist-server/service/release-good/release-good.js +5 -6
  318. package/dist-server/service/release-good/release-good.js.map +1 -1
  319. package/dist-server/service/retail-replenishment-order/index.d.ts +7 -0
  320. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.d.ts +16 -0
  321. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.js +2 -2
  322. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.js.map +1 -1
  323. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.d.ts +11 -0
  324. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.js +2 -2
  325. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.js.map +1 -1
  326. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.d.ts +39 -0
  327. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.js +6 -6
  328. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.js.map +1 -1
  329. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.d.ts +29 -0
  330. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.js +3 -4
  331. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.js.map +1 -1
  332. package/dist-server/service/return-order/index.d.ts +7 -0
  333. package/dist-server/service/return-order/return-order-mutation.d.ts +18 -0
  334. package/dist-server/service/return-order/return-order-mutation.js +3 -3
  335. package/dist-server/service/return-order/return-order-mutation.js.map +1 -1
  336. package/dist-server/service/return-order/return-order-query.d.ts +13 -0
  337. package/dist-server/service/return-order/return-order-query.js +2 -2
  338. package/dist-server/service/return-order/return-order-query.js.map +1 -1
  339. package/dist-server/service/return-order/return-order-types.d.ts +76 -0
  340. package/dist-server/service/return-order/return-order-types.js +10 -11
  341. package/dist-server/service/return-order/return-order-types.js.map +1 -1
  342. package/dist-server/service/return-order/return-order.d.ts +33 -0
  343. package/dist-server/service/return-order/return-order.js +3 -4
  344. package/dist-server/service/return-order/return-order.js.map +1 -1
  345. package/dist-server/service/reverse-kitting-order/index.d.ts +7 -0
  346. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.d.ts +14 -0
  347. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js +2 -2
  348. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js.map +1 -1
  349. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.d.ts +14 -0
  350. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js +2 -2
  351. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js.map +1 -1
  352. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.d.ts +61 -0
  353. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js +15 -16
  354. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js.map +1 -1
  355. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.d.ts +34 -0
  356. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js +5 -6
  357. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js.map +1 -1
  358. package/dist-server/service/reverse-kitting-order-inventory/index.d.ts +7 -0
  359. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.d.ts +9 -0
  360. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js +2 -2
  361. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js.map +1 -1
  362. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.d.ts +11 -0
  363. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.js +2 -2
  364. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.js.map +1 -1
  365. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.d.ts +35 -0
  366. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js +6 -6
  367. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js.map +1 -1
  368. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.d.ts +39 -0
  369. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js +5 -6
  370. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js.map +1 -1
  371. package/dist-server/service/shipping-order/index.d.ts +7 -0
  372. package/dist-server/service/shipping-order/shipping-order-mutation.d.ts +7 -0
  373. package/dist-server/service/shipping-order/shipping-order-mutation.js +2 -2
  374. package/dist-server/service/shipping-order/shipping-order-mutation.js.map +1 -1
  375. package/dist-server/service/shipping-order/shipping-order-query.d.ts +11 -0
  376. package/dist-server/service/shipping-order/shipping-order-query.js +2 -2
  377. package/dist-server/service/shipping-order/shipping-order-query.js.map +1 -1
  378. package/dist-server/service/shipping-order/shipping-order-types.d.ts +33 -0
  379. package/dist-server/service/shipping-order/shipping-order-types.js +6 -6
  380. package/dist-server/service/shipping-order/shipping-order-types.js.map +1 -1
  381. package/dist-server/service/shipping-order/shipping-order.d.ts +33 -0
  382. package/dist-server/service/shipping-order/shipping-order.js +3 -4
  383. package/dist-server/service/shipping-order/shipping-order.js.map +1 -1
  384. package/dist-server/service/transfer-order/index.d.ts +7 -0
  385. package/dist-server/service/transfer-order/transfer-order-mutation.d.ts +16 -0
  386. package/dist-server/service/transfer-order/transfer-order-mutation.js +3 -3
  387. package/dist-server/service/transfer-order/transfer-order-mutation.js.map +1 -1
  388. package/dist-server/service/transfer-order/transfer-order-query.d.ts +11 -0
  389. package/dist-server/service/transfer-order/transfer-order-query.js +2 -2
  390. package/dist-server/service/transfer-order/transfer-order-query.js.map +1 -1
  391. package/dist-server/service/transfer-order/transfer-order-types.d.ts +37 -0
  392. package/dist-server/service/transfer-order/transfer-order-types.js +6 -6
  393. package/dist-server/service/transfer-order/transfer-order-types.js.map +1 -1
  394. package/dist-server/service/transfer-order/transfer-order.d.ts +30 -0
  395. package/dist-server/service/transfer-order/transfer-order.js +3 -4
  396. package/dist-server/service/transfer-order/transfer-order.js.map +1 -1
  397. package/dist-server/service/vas/index.d.ts +7 -0
  398. package/dist-server/service/vas/vas-mutation.d.ts +9 -0
  399. package/dist-server/service/vas/vas-mutation.js +2 -2
  400. package/dist-server/service/vas/vas-mutation.js.map +1 -1
  401. package/dist-server/service/vas/vas-query.d.ts +11 -0
  402. package/dist-server/service/vas/vas-query.js +2 -2
  403. package/dist-server/service/vas/vas-query.js.map +1 -1
  404. package/dist-server/service/vas/vas-types.d.ts +27 -0
  405. package/dist-server/service/vas/vas-types.js +6 -6
  406. package/dist-server/service/vas/vas-types.js.map +1 -1
  407. package/dist-server/service/vas/vas.d.ts +22 -0
  408. package/dist-server/service/vas/vas.js +2 -2
  409. package/dist-server/service/vas/vas.js.map +1 -1
  410. package/dist-server/service/vas-order/index.d.ts +7 -0
  411. package/dist-server/service/vas-order/vas-order-mutation.d.ts +9 -0
  412. package/dist-server/service/vas-order/vas-order-mutation.js +2 -2
  413. package/dist-server/service/vas-order/vas-order-mutation.js.map +1 -1
  414. package/dist-server/service/vas-order/vas-order-query.d.ts +12 -0
  415. package/dist-server/service/vas-order/vas-order-query.js +2 -2
  416. package/dist-server/service/vas-order/vas-order-query.js.map +1 -1
  417. package/dist-server/service/vas-order/vas-order-types.d.ts +21 -0
  418. package/dist-server/service/vas-order/vas-order-types.js +6 -6
  419. package/dist-server/service/vas-order/vas-order-types.js.map +1 -1
  420. package/dist-server/service/vas-order/vas-order.d.ts +22 -0
  421. package/dist-server/service/vas-order/vas-order.js +3 -4
  422. package/dist-server/service/vas-order/vas-order.js.map +1 -1
  423. package/dist-server/tsconfig.tsbuildinfo +1 -1
  424. package/dist-server/utils/datetime-util.d.ts +7 -0
  425. package/dist-server/utils/datetime-util.js.map +1 -1
  426. package/dist-server/utils/index.d.ts +3 -0
  427. package/dist-server/utils/inventory-util.d.ts +75 -0
  428. package/dist-server/utils/inventory-util.js +2 -2
  429. package/dist-server/utils/inventory-util.js.map +1 -1
  430. package/dist-server/utils/order-no-generator.d.ts +25 -0
  431. package/package.json +13 -13
  432. package/server/controllers/order-controller.ts +1 -1
  433. package/server/service/arrival-notice/arrival-notice-mutation.ts +123 -26
  434. package/server/service/claim/claim-mutation.ts +3 -3
  435. package/server/service/delivery-order/delivery-order-mutation.ts +6 -6
  436. package/server/service/draft-release-good/draft-release-good-mutation.ts +11 -10
  437. package/server/service/draft-release-good/draft-release-good-query.ts +1 -1
  438. package/server/service/inventory-check/inventory-check-mutation.ts +1 -1
  439. package/server/service/order-inventory/order-inventory-query.ts +1 -1
  440. package/server/service/order-product/order-product.ts +26 -4
  441. package/server/service/others/other-query.ts +78 -19
  442. package/server/service/purchase-order/purchase-order-mutation.ts +5 -4
  443. package/server/service/release-good/release-good-mutation.ts +7 -7
  444. package/server/service/release-good/release-good-query.ts +16 -16
  445. package/server/service/return-order/return-order-mutation.ts +3 -3
  446. package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +5 -5
  447. package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +1 -1
  448. package/server/service/transfer-order/transfer-order-mutation.ts +3 -3
  449. package/server/utils/inventory-util.ts +20 -20
@@ -0,0 +1,7 @@
1
+ export declare class DateGenerator {
2
+ static generateDate(): string;
3
+ }
4
+ export declare class DateTimeConverter {
5
+ static date(dateTime: any): string;
6
+ static datetime(dateTime: any, timezone: any): string;
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"datetime-util.js","sourceRoot":"","sources":["../../server/utils/datetime-util.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IACxB,MAAM,CAAC,YAAY;QACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE3B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC;CACF;AAbD,sCAaC;AAED,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ;QAClB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE;YACZ,MAAM,cAAc,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/C,IAAI,IAAI,GAAG,cAAc,CAAC,WAAW,EAAE,CAAA;YAEvC,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;YACtD,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA;YAE9C,IAAI,GAAG,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;YAC7C,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;YAEtC,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;SAC5C;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ;QAChC,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;YACvC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAEpF,IAAI,aAAa,GAAQ,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEjD,mBAAmB;YACnB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAE/C,kBAAkB;YAClB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAE7C,UAAU,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;SACvC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;CACF;AAtCD,8CAsCC","sourcesContent":["export class DateGenerator {\n static generateDate() {\n const today = new Date()\n const year = today.getFullYear()\n const month = today.getMonth()\n const day = today.getDate()\n\n const yy = String(year).substr(String(year).length - 2)\n const mm = String(month + 1).padStart(2, '0')\n const dd = String(day).padStart(2, '0')\n\n return yy + mm + dd\n }\n}\n\nexport class DateTimeConverter {\n static date(dateTime) {\n let unloadDate = ''\n if (dateTime) {\n const unloadDateTime: Date = new Date(dateTime)\n var year = unloadDateTime.getFullYear()\n\n var month = (1 + unloadDateTime.getMonth()).toString()\n month = month.length > 1 ? month : '0' + month\n\n var day = unloadDateTime.getDate().toString()\n day = day.length > 1 ? day : '0' + day\n\n unloadDate = day + '-' + month + '-' + year\n }\n return unloadDate\n }\n\n static datetime(dateTime, timezone) {\n let unloadDate = ''\n if (dateTime) {\n const datetime = Number(dateTime)\n const timezoneOffset = timezone * 60000\n const newUnloadDate = new Date(datetime - timezoneOffset).toISOString().slice(0, -1)\n\n var dateTimeParts: any = newUnloadDate.split('T')\n\n //handle date parts\n var dateParts = dateTimeParts[0].split('-')\n var newDate = DateTimeConverter.date(dateParts)\n\n //handle time part\n var timeParts = dateTimeParts[1].slice(0, -7)\n\n unloadDate = newDate + ' ' + timeParts\n }\n return unloadDate\n }\n}\n"]}
1
+ {"version":3,"file":"datetime-util.js","sourceRoot":"","sources":["../../server/utils/datetime-util.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IACxB,MAAM,CAAC,YAAY;QACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE3B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC;CACF;AAbD,sCAaC;AAED,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ;QAClB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,cAAc,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/C,IAAI,IAAI,GAAG,cAAc,CAAC,WAAW,EAAE,CAAA;YAEvC,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;YACtD,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA;YAE9C,IAAI,GAAG,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;YAC7C,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;YAEtC,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;QAC7C,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ;QAChC,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;YACvC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAEpF,IAAI,aAAa,GAAQ,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEjD,mBAAmB;YACnB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAE/C,kBAAkB;YAClB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAE7C,UAAU,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;QACxC,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;CACF;AAtCD,8CAsCC","sourcesContent":["export class DateGenerator {\n static generateDate() {\n const today = new Date()\n const year = today.getFullYear()\n const month = today.getMonth()\n const day = today.getDate()\n\n const yy = String(year).substr(String(year).length - 2)\n const mm = String(month + 1).padStart(2, '0')\n const dd = String(day).padStart(2, '0')\n\n return yy + mm + dd\n }\n}\n\nexport class DateTimeConverter {\n static date(dateTime) {\n let unloadDate = ''\n if (dateTime) {\n const unloadDateTime: Date = new Date(dateTime)\n var year = unloadDateTime.getFullYear()\n\n var month = (1 + unloadDateTime.getMonth()).toString()\n month = month.length > 1 ? month : '0' + month\n\n var day = unloadDateTime.getDate().toString()\n day = day.length > 1 ? day : '0' + day\n\n unloadDate = day + '-' + month + '-' + year\n }\n return unloadDate\n }\n\n static datetime(dateTime, timezone) {\n let unloadDate = ''\n if (dateTime) {\n const datetime = Number(dateTime)\n const timezoneOffset = timezone * 60000\n const newUnloadDate = new Date(datetime - timezoneOffset).toISOString().slice(0, -1)\n\n var dateTimeParts: any = newUnloadDate.split('T')\n\n //handle date parts\n var dateParts = dateTimeParts[0].split('-')\n var newDate = DateTimeConverter.date(dateParts)\n\n //handle time part\n var timeParts = dateTimeParts[1].slice(0, -7)\n\n unloadDate = newDate + ' ' + timeParts\n }\n return unloadDate\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './order-no-generator';
2
+ export * from './inventory-util';
3
+ export * from './datetime-util';
@@ -0,0 +1,75 @@
1
+ import { EntityManager } from 'typeorm';
2
+ import { User } from '@things-factory/auth-base';
3
+ import { Bizplace } from '@things-factory/biz-base';
4
+ import { Product } from '@things-factory/product-base';
5
+ import { Domain, ListParam } from '@things-factory/shell';
6
+ import { Inventory, Location } from '@things-factory/warehouse-base';
7
+ import { ArrivalNotice, DeliveryOrder, InventoryCheck, OrderInventory, ReleaseGood, ReturnOrder, ReverseKittingOrder, VasOrder } from '../service';
8
+ export type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder | ReverseKittingOrder;
9
+ export declare const InventoryUtil: {
10
+ /**
11
+ * Get all available product belonging to list of bizplaces
12
+ * @param {[Object]} bizplaces
13
+ * @param {Object} params
14
+ * @param {Object} context
15
+ * @param {Object} trxMgr
16
+ * @returns { object } {items, total}
17
+ */
18
+ bizplaceProductInventory(bizplaces: Bizplace[], params: ListParam, context: ResolverContext, trxMgr: EntityManager): Promise<{
19
+ items: any[];
20
+ total: any;
21
+ }>;
22
+ /**
23
+ * Get all available product belonging to list of bizplaces
24
+ * @param {[Object]} bizplaces
25
+ * @param {Object} params
26
+ * @param {Object} context
27
+ * @param {Object} trxMgr
28
+ * @returns { object } {items, total}
29
+ */
30
+ bizplaceInventoryProductGroup(bizplaces: Bizplace[], params: ListParam, context: ResolverContext, trxMgr: EntityManager): Promise<{
31
+ items: any[];
32
+ total: any;
33
+ }>;
34
+ inventoryProductGroupOpenAPI(bizplaces: Bizplace[], params: ListParam, context: ResolverContext, trxMgr: EntityManager): Promise<{
35
+ items: any[];
36
+ total: any;
37
+ }>;
38
+ /**
39
+ * Validate warehouse partners product quantity
40
+ * @param {Object} warehouseDomain -
41
+ * @param {Object} partnerBizplace - {id}
42
+ * @param {Object} orderInventories - [{id, qty}]
43
+ * @param {Object} context
44
+ * @param {Object} trxMgr
45
+ */
46
+ validateWarehousePartnersProductsQuantity(warehouseDomain: Domain, partnerBizplace: Bizplace, orderInventories: OrderInventory[], context: any, trxMgr?: EntityManager): Promise<void>;
47
+ checkPalletDuplication(palletId: string, warehouseDomain: Domain, trxMgr: EntityManager): Promise<void>;
48
+ /**
49
+ * To pre-assign inventories automatically for orderInventories in Release Goods
50
+ * @param product
51
+ * @param orderInventory
52
+ * @param packingType
53
+ * @param locationSortingRules
54
+ * @param customerBizplace
55
+ * @param domain
56
+ * @param trxMgr
57
+ * @returns orderInventories
58
+ */
59
+ autoAssignInventoryForRelease(product: Product, orderInventory: OrderInventory, packingType: string, locationSortingRules: any, customerBizplace: Bizplace, domain: Domain, trxMgr: EntityManager, batchId?: string): Promise<OrderInventory[]>;
60
+ /**
61
+ * @summary Do transaction on inventory record
62
+ * @description It will update inventory after set a temp (domain, updater)
63
+ * and then generate inventory history based on current changes
64
+ */
65
+ transactionInventory(inventory: Inventory, referenceOrder: ReferenceOrderType, changedQty: number, changedWeight: number, transactionType: string, user: User, trxMgr: EntityManager): Promise<Inventory>;
66
+ };
67
+ /**
68
+ * @description: Check location emptiness and update status of location
69
+ * @param domain
70
+ * @param location
71
+ * @param updater
72
+ * @param trxMgr
73
+ */
74
+ export declare function switchLocationStatus(domain: Domain, location: Location, updater: User, trxMgr?: EntityManager): Promise<Location>;
75
+ export declare function _composeTargetInventories(product: Product, record: any, inventories: Inventory[]): OrderInventory[];
@@ -571,10 +571,10 @@ exports.InventoryUtil = {
571
571
  */
572
572
  async transactionInventory(inventory, referenceOrder, changedQty, changedWeight, transactionType, user, trxMgr) {
573
573
  if (inventory.id) {
574
- inventory = await updateInventory(inventory, trxMgr);
574
+ inventory = (await updateInventory(inventory, trxMgr));
575
575
  }
576
576
  else {
577
- inventory = await createInventory(inventory, trxMgr);
577
+ inventory = (await createInventory(inventory, trxMgr));
578
578
  }
579
579
  await generateInventoryHistory(inventory, referenceOrder, transactionType, changedQty, changedWeight, user, trxMgr);
580
580
  return inventory;
@@ -1 +1 @@
1
- {"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, Equal, In, Not, Raw, Repository, SelectQueryBuilder } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Product, ProductBundle } from '@things-factory/product-base'\nimport { Domain, Filter, getRepository, ListParam } from '@things-factory/shell'\nimport {\n Inventory,\n INVENTORY_STATUS,\n InventoryHistory,\n InventoryNoGenerator,\n Location,\n LOCATION_STATUS,\n LOCATION_TYPE,\n Pallet\n} from '@things-factory/warehouse-base'\n\nimport { ORDER_TYPES } from '../constants'\nimport { ValidationError } from '../errors'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n OrderInventory,\n ReleaseGood,\n ReturnOrder,\n ReverseKittingOrder,\n VasOrder\n} from '../service'\n\nexport type ReferenceOrderType =\n | ArrivalNotice\n | ReleaseGood\n | VasOrder\n | InventoryCheck\n | DeliveryOrder\n | ReturnOrder\n | ReverseKittingOrder\n\nexport const InventoryUtil = {\n /**\n * Get all available product belonging to list of bizplaces\n * @param {[Object]} bizplaces\n * @param {Object} params\n * @param {Object} context\n * @param {Object} trxMgr\n * @returns { object } {items, total}\n */\n async bizplaceProductInventory(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n\n const { domain } = context.state\n\n const { bizplaceIds, productWhereClause, bundleWhereClause, whereClause, batchBundle, productDetailWhereClause } =\n await getConditions(bizplaces, filters, trxMgr, false)\n\n let productFilter = filters.find(itm => itm.name == 'productName')\n let inventoryBizplaceFilter = filters.find(itm => itm.name == 'bizplaceId')\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group ON COMMIT DROP AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n pd.packing_type AS \"packingType\",\n pd.packing_size AS \"packingSize\",\n pd.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) - MAX(COALESCE(bp.bundle_product_release_qty, 0)),0) AS \"remainQty\",\n COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)),0) AS \"remainUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)), ' ', pd.uom) AS \"remainUomValueWithUom\",\n 'SINGLE' AS \"groupType\"\n FROM products p\n INNER join product_details pd on pd.product_id = p.id\n LEFT JOIN (\n SELECT i.* FROM inventories i \n INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n WHERE l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n AND i.domain_id = $1 AND i.status = 'STORED'\n ${inventoryBizplaceFilter ? `AND i.bizplace_id = '${inventoryBizplaceFilter.value}'` : ``}\n ) i ON i.product_id = pd.product_id\n AND i.packing_type = pd.packing_type \n and i.packing_size = pd.packing_size \n and i.uom = pd.uom \n LEFT JOIN oi ON i.batch_id = oi.batch_id AND p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN (\n SELECT pbs.product_id, SUM(pbs.bundle_qty * src.release_qty) AS bundle_product_release_qty, SUM(pbs.bundle_qty * src.release_uom_value) AS bundle_product_release_uom_value \n FROM product_bundle_settings pbs\n INNER JOIN json_populate_recordset(NULL::order_inventories, '${batchBundle}') src ON src.product_id = pbs.product_bundle_id\n GROUP BY pbs.product_id\n ) bp on i.product_id = bp.product_id\n WHERE p.bizplace_id IN (${bizplaceIds})\n ${productDetailWhereClause}\n ${\n productFilter\n ? `AND (\n lower(p.sku) ilike '${productFilter.value}'\n OR lower(p.name) ilike '${productFilter.value}'\n OR lower(p.description) ilike '${productFilter.value}'\n )\n `\n : ``\n }\n GROUP BY\n p.id,\n pd.packing_type,\n pd.packing_size,\n pd.uom\n UNION \n SELECT packing_type, packing_size,'UNIT' AS \"uom\", name AS \"productName\", sku AS \"productSKU\", '-' AS \"productBrand\", id AS \"productId\",\n COALESCE(MIN(FLOOR(pbs.\"availableQty\")),0) AS \"remainQty\", \n COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0) AS \"remainUomValue\", \n CONCAT(COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0),' UNIT') AS \"remainUomValueWithUom\", \n 'BUNDLE' AS \"groupType\"\n FROM product_bundles pb\n LEFT JOIN (\n SELECT pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i2.qty, 0)) - SUM(COALESCE(i2.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i2.uom_value, 0)) - SUM(COALESCE(i2.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i2 ON i2.product_id = pbs.product_id AND i2.domain_id = $1 AND i2.status = 'STORED'\n INNER JOIN locations l2 ON i2.location_id = l2.id \n LEFT JOIN oi ON oi.product_id = i2.product_id\n WHERE l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${inventoryBizplaceFilter ? `AND i2.bizplace_id = '${inventoryBizplaceFilter.value}'` : ``}\n GROUP BY \n pbs.product_id, \n pbs.product_bundle_id\n ) pbs ON pbs.product_bundle_id = pb.id\n ${bundleWhereClause}\n AND pb.bizplace_id IN (${bizplaceIds}) \n ${\n productFilter\n ? `AND (\n lower(pb.sku) ilike '${productFilter.value}'\n OR lower(pb.name) ilike '${productFilter.value}'\n OR lower(pb.description) ilike '${productFilter.value}'\n )\n `\n : ``\n }\n GROUP BY \n pb.packing_type, \n pb.packing_size, \n pb.name, \n pb.sku, \n pb.id\n )\n AS inv_prod_grp \n ${whereClause}\n order by \"productSKU\", \"productName\"\n )\n `\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(`select count(*) as total from temp_inventory_product_group`)\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(`select * from temp_inventory_product_group OFFSET $1 LIMIT $2`, [\n (params.pagination.page - 1) * params.pagination.limit,\n params.pagination.limit\n ])\n } else {\n items = await trxMgr.query(`select * from temp_inventory_product_group`)\n }\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n /**\n * Get all available product belonging to list of bizplaces\n * @param {[Object]} bizplaces\n * @param {Object} params\n * @param {Object} context\n * @param {Object} trxMgr\n * @returns { object } {items, total}\n */\n async bizplaceInventoryProductGroup(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n const { domain } = context.state\n\n const { bizplaceIds, productWhereClause, bundleWhereClause, whereClause, batchBundle } = await getConditions(\n bizplaces,\n filters,\n trxMgr\n )\n\n const _groupType = filters.find(res => res.name == 'groupType')\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n round(cast(SUM(oi.release_qty) as numeric), 3) AS release_qty,\n round(cast(SUM(oi.release_uom_value) as numeric), 3) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n i.batch_id AS \"batchId\",\n i.batch_id_ref AS \"batchIdRef\",\n i.packing_type AS \"packingType\",\n i.packing_size AS \"packingSize\",\n i.pallet_id as \"palletId\",\n i.created_at as \"createdAt\",\n i.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n ROUND(cast(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) - MAX(COALESCE(bp.bundle_product_release_qty, 0)) as numeric), 3) AS \"remainQty\",\n ROUND(cast(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)) as numeric), 3) AS \"remainUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)), ' ', i.uom) AS \"remainUomValueWithUom\",\n 'SINGLE' AS \"groupType\",\n i.expiration_date as \"expirationDate\"\n FROM\n inventories i\n LEFT JOIN products p ON i.product_id = p.id\n LEFT JOIN oi ON i.batch_id = oi.batch_id AND p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n LEFT JOIN (\n SELECT pbs.product_id, SUM(pbs.bundle_qty * src.release_qty) AS bundle_product_release_qty, SUM(pbs.bundle_qty * src.release_uom_value) AS bundle_product_release_uom_value \n FROM product_bundle_settings pbs\n INNER JOIN json_populate_recordset(NULL::order_inventories,'${batchBundle}') src ON src.product_id = pbs.product_bundle_id\n GROUP BY pbs.product_id\n ) bp on i.product_id = bp.product_id\n WHERE i.domain_id = $1\n AND l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${productWhereClause}\n GROUP BY\n i.batch_id,\n i.batch_id_ref,\n p.id,\n i.packing_type,\n i.packing_size,\n i.expiration_date,\n i.pallet_id,\n i.created_at,\n i.uom\n UNION \n SELECT 'BUNDLE' AS \"batchId\", null as \"batchIdRef\", packing_type, packing_size, null AS \"palletId\", null AS \"createdAt\", 'UNIT' AS \"uom\", name AS \"productName\", sku AS \"productSKU\", 'brand' AS \"productBrand\", id AS \"productId\",\n MIN(FLOOR(pbs.\"availableQty\")) AS \"remainQty\", \n MIN(FLOOR(pbs.\"availableUomValue\")) AS \"remainUomValue\", \n CONCAT(MIN(FLOOR(pbs.\"availableUomValue\")),' UNIT') AS \"remainUomValueWithUom\",\n 'BUNDLE' AS \"groupType\",\n pbs.\"expirationDate\" as \"expirationDate\"\n FROM product_bundles pb\n INNER JOIN (\n SELECT pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i2.qty, 0)) - SUM(COALESCE(i2.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i2.uom_value, 0)) - SUM(COALESCE(i2.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\", i2.expiration_date as \"expirationDate\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i2 ON i2.product_id = pbs.product_id AND i2.domain_id = $1\n AND i2.bizplace_id IN (${bizplaceIds})\n AND i2.status = 'STORED'\n LEFT JOIN oi ON oi.product_id = i2.product_id\n GROUP BY pbs.product_id, pbs.product_bundle_id, i2.expiration_date\n ) pbs ON pbs.product_bundle_id = pb.id\n ${bundleWhereClause}\n GROUP BY pb.packing_type, pb.packing_size, pb.name, pb.sku, pb.id, pbs.\"expirationDate\"\n )\n AS inv_prod_grp\n ${whereClause}\n )\n `\n\n let filterGroupTypeQuery\n\n if (_groupType) {\n if (_groupType.value === 'SINGLE') {\n filterGroupTypeQuery = `where \"groupType\"= 'SINGLE' `\n } else {\n filterGroupTypeQuery = `where \"groupType\"= 'BUNDLE' `\n }\n }\n\n let sortingArr = params.sortings || []\n\n let sortedBy = []\n\n if (sortingArr.length > 0) {\n sortingArr.forEach(element => {\n if (element.desc) {\n sortedBy.push(`\"${element.name}\" DESC `)\n } else {\n sortedBy.push(`\"${element.name}\" `)\n }\n })\n }\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(\n `select count(*) as total from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''}`\n )\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(\n `select * from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''} ${\n sortingArr.length > 0 ? ' Order by ' + sortedBy.toString() : ''\n } OFFSET $1 LIMIT $2`,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n } else {\n items = await trxMgr.query(\n `select * from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''} ${\n sortingArr.length > 0 ? ' Order by ' + sortedBy.toString() : ''\n }`\n )\n }\n\n await trxMgr.query(`drop table temp_inventory_product_group`)\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n async inventoryProductGroupOpenAPI(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n const { domain } = context.state\n\n const { apiWhereClause } = await getConditions(bizplaces, filters, trxMgr)\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group_open_api AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n i.packing_type AS \"packingType\",\n i.packing_size AS \"packingSize\",\n i.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) AS \"remainQty\",\n SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) AS \"remainUomValue\",\n SUM(COALESCE(i.qty, 0)) AS \"totalQty\",\n SUM(COALESCE(i.uom_value, 0)) AS \"totalUomValue\",\n SUM(COALESCE(i.locked_qty, 0)) + MAX(COALESCE(oi.release_qty, 0)) AS \"totalLockedQty\",\n SUM(COALESCE(i.locked_uom_value, 0)) + MAX(COALESCE(oi.release_uom_value, 0)) AS \"totalLockedUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)), ' ', i.uom) AS \"remainUomValueWithUom\"\n FROM inventories i\n LEFT JOIN products p ON i.product_id = p.id\n LEFT JOIN oi ON p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n WHERE i.domain_id = $1\n AND l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${apiWhereClause}\n GROUP BY\n p.id,\n i.packing_type,\n i.packing_size,\n i.uom\n )\n AS inv_prod_grp\n )\n `\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(`select count(*) as total from temp_inventory_product_group_open_api`)\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(`select * from temp_inventory_product_group_open_api OFFSET $1 LIMIT $2`, [\n (params.pagination.page - 1) * params.pagination.limit,\n params.pagination.limit\n ])\n } else {\n items = await trxMgr.query(`select * from temp_inventory_product_group_open_api`)\n }\n\n await trxMgr.query(`drop table temp_inventory_product_group_open_api`)\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n /**\n * Validate warehouse partners product quantity\n * @param {Object} warehouseDomain -\n * @param {Object} partnerBizplace - {id}\n * @param {Object} orderInventories - [{id, qty}]\n * @param {Object} context\n * @param {Object} trxMgr\n */\n async validateWarehousePartnersProductsQuantity(\n warehouseDomain: Domain,\n partnerBizplace: Bizplace,\n orderInventories: OrderInventory[],\n context: any,\n trxMgr?: EntityManager\n ): Promise<Inventory> {\n let json_oi = JSON.stringify(\n orderInventories.map(x => {\n return {\n product_id: x.product.id,\n batch_id: x.batchId,\n packing_type: x.packingType,\n release_qty: x.releaseQty,\n uom: x.uom\n }\n })\n )\n\n let resultQb = await trxMgr.query(\n `\n select joi.product_id as \"productId\", joi.batch_id as \"batchId\", joi.packing_type as \"packingType\", joi.uom as \"uom\", joi.release_qty as \"releaseQty\",\n ROUND(cast(sum(i.qty - coalesce(i.locked_qty,0)) - coalesce(\n (\n select sum(oi.release_qty) from order_inventories oi \n where (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n and oi.inventory_id IS null\n and oi.product_id = joi.product_id\n and oi.batch_id = joi.batch_id\n and oi.packing_type = joi.packing_type\n and oi.uom = joi.uom\n and oi.domain_id = $1\n and oi.bizplace_id = $2\n ),0) as numeric), 3) as \"availableQty\",\n ROUND(cast(sum(i.uom_value - coalesce(i.locked_uom_value ,0)) - coalesce(\n (\n select sum(oi.release_uom_value) from order_inventories oi \n where (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n and oi.inventory_id IS null\n and oi.product_id = joi.product_id\n and oi.batch_id = joi.batch_id\n and oi.packing_type = joi.packing_type\n and oi.uom = joi.uom\n and oi.domain_id = $1\n and oi.bizplace_id = $2\n ),0) as numeric), 3) as \"availableUomValue\"\n from json_populate_recordset(NULL::order_inventories,'${json_oi}') joi\n left join inventories i on joi.product_id = i.product_id \n and joi.batch_id = i.batch_id\n and joi.packing_type = i.packing_type and i.status ='STORED'\n and joi.uom = i.uom\n and i.domain_id = $1\n and i.bizplace_id = $2\n group by joi.product_id, joi.batch_id, joi.packing_type, joi.release_qty, joi.uom\n `,\n [warehouseDomain.id, partnerBizplace.id]\n )\n\n resultQb.forEach(itm => {\n if (itm.releaseQty > itm.availableQty) {\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.RELEASE_QTY_OVER_LIMIT,\n detail: { data: JSON.stringify(resultQb) }\n })\n }\n })\n },\n\n async checkPalletDuplication(palletId: string, warehouseDomain: Domain, trxMgr: EntityManager): Promise<void> {\n const duplicatedPalletCnt: number = await trxMgr.getRepository(Inventory).countBy({\n domain: { id: warehouseDomain.id },\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(palletId + ` exists`)\n\n const duplicatedReusablePalletCnt: number = await trxMgr.getRepository(Pallet).count({\n where: {\n domain: { id: warehouseDomain.id },\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(palletId + ` exists`)\n },\n\n /**\n * To pre-assign inventories automatically for orderInventories in Release Goods\n * @param product\n * @param orderInventory\n * @param packingType\n * @param locationSortingRules\n * @param customerBizplace\n * @param domain\n * @param trxMgr\n * @returns orderInventories\n */\n async autoAssignInventoryForRelease(\n product: Product,\n orderInventory: OrderInventory,\n packingType: string,\n locationSortingRules: any = [],\n customerBizplace: Bizplace,\n domain: Domain,\n trxMgr: EntityManager,\n batchId?: string\n ): Promise<OrderInventory[]> {\n let qb: SelectQueryBuilder<Inventory> = trxMgr.getRepository(Inventory).createQueryBuilder('iv')\n qb.leftJoinAndSelect('iv.location', 'loc')\n .andWhere('\"iv\".\"domain_id\" = :domainId')\n .andWhere('\"iv\".\"bizplace_id\" = :bizplaceId')\n .andWhere('\"iv\".\"packing_type\" = :packingType')\n .andWhere('\"iv\".\"product_id\" = :productId')\n .andWhere('\"iv\".\"status\" = :status')\n .andWhere('\"iv\".\"qty\" - COALESCE(\"iv\".\"locked_qty\", 0) > 0')\n .andWhere('\"loc\".\"type\" NOT IN (:...locationTypes)')\n .setParameters({\n domainId: domain.id,\n bizplaceId: customerBizplace.id,\n packingType: packingType,\n productId: product.id,\n status: INVENTORY_STATUS.STORED,\n locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]\n })\n\n if (batchId) {\n qb.andWhere('\"iv\".\"batch_id\" = :batchId', { batchId: batchId })\n }\n\n let locationSorting = function (qb: SelectQueryBuilder<Inventory>, locationSortingRules) {\n if (locationSortingRules?.length) {\n locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {\n idx === 0\n ? qb.addOrderBy(`loc.${rule.name}`, rule.desc ? 'DESC' : 'ASC')\n : qb.addOrderBy(`loc.${rule.name}`, rule.desc ? 'DESC' : 'ASC')\n })\n } else {\n qb.addOrderBy('\"loc\".\"name\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n }\n return qb\n }\n\n switch (product?.pickingStrategy) {\n case 'FIFO':\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'LIFO':\n qb.addOrderBy('\"iv\".\"created_at\"', 'DESC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'FEFO':\n qb.addOrderBy('\"iv\".\"expiration_date\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'FMFO':\n qb.addOrderBy('\"iv\".\"manufacture_date\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'LOCATION':\n qb = locationSorting(qb, locationSortingRules)\n break\n default:\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n }\n\n let inventories: Inventory[] = await qb.getMany()\n if (!inventories?.length) throw new Error(`no inventories found for ${product.sku}`)\n\n inventories = inventories.map(inventory => {\n return {\n ...inventory,\n remainQty: inventory.qty - (inventory?.lockedQty || 0),\n remainUomValue: inventory.uomValue - (inventory?.lockedUomValue || 0)\n }\n })\n\n return _composeTargetInventories(product, orderInventory, inventories)\n },\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Partial<Inventory>,\n referenceOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string,\n user: User,\n trxMgr: EntityManager\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = await updateInventory(inventory, trxMgr)\n } else {\n inventory = await createInventory(inventory, trxMgr)\n }\n\n await generateInventoryHistory(inventory, referenceOrder, transactionType, changedQty, changedWeight, user, trxMgr)\n\n return inventory\n }\n}\n\ninterface Conditions {\n bizplaceIds: string\n productWhereClause: string\n bundleWhereClause: string\n whereClause: string\n batchBundle: string\n apiWhereClause: string\n productDetailWhereClause: string\n}\n\nasync function getConditions(\n bizplaces: Bizplace[],\n filters: Filter[],\n trxMgr: EntityManager,\n hasRemainingQty: Boolean = true\n): Promise<Conditions> {\n let bizplaceIds = bizplaces.map((bizplace: Bizplace) => `'${bizplace.id}'`).join()\n\n let productWhereClause = `\n AND i.status = 'STORED'\n AND i.bizplace_id IN (${bizplaceIds})\n `\n let apiWhereClause = `\n AND i.bizplace_id IN (${bizplaceIds})\n `\n let bundleWhereClause = `\n WHERE pb.status = 'ACTIVATED'\n `\n\n let whereClause = hasRemainingQty ? ` WHERE \"remainQty\" > 0` : ` WHERE 1 = 1`\n\n let productDetailWhereClause = ``\n\n let batchBundle: string\n if (filters?.length) {\n await Promise.all(\n filters.map(async (filter: { name: string; operator: string; value: any }) => {\n const name = filter.name\n const operator = filter.operator.toLowerCase()\n let value = filter.value\n\n switch (name) {\n case 'productId':\n if (operator == 'in')\n whereClause += `AND \"productId\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(itm => {\n return `'${itm}'`\n })\n .join(',')})`\n break\n\n case 'productBundleId':\n if (operator == 'in')\n whereClause += `AND \"productId\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(itm => {\n return `'${itm}'`\n })\n .join(',')})`\n break\n\n case 'batchId':\n whereClause += `AND LOWER(\"batchId\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'batchIdRef':\n whereClause += `AND LOWER(\"batchIdRef\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'productBrand':\n whereClause += `AND LOWER(\"productBrand\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'productSKU':\n whereClause += `AND LOWER(\"productSKU\") LIKE '${value.toLowerCase()}'`\n\n case 'productName':\n const products: Product[] = await trxMgr.getRepository(Product).find({\n select: ['id'],\n where: [\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n name: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n sku: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n description: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n }\n ]\n })\n\n const productIds: string = products\n .map((product: Product) => product.id)\n .map((id: string) => `'${id}'`)\n .join()\n\n if (productIds.length) {\n productWhereClause += `AND i.product_id IN (${productIds})`\n } else {\n productWhereClause += `AND i.product_id ISNULL`\n }\n\n // filter product bundle as product info\n const productBundles: ProductBundle[] = await trxMgr.getRepository(ProductBundle).find({\n select: ['id'],\n where: [\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n name: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n sku: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n description: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n }\n ]\n })\n\n const productBundleIds: string = productBundles\n .map((bundle: ProductBundle) => bundle.id)\n .map((id: string) => `'${id}'`)\n .join()\n\n if (productBundleIds.length) {\n bundleWhereClause += `AND pb.id IN (${productBundleIds})`\n } else {\n bundleWhereClause += `AND pb.id ISNULL`\n }\n break\n\n case 'packingType':\n whereClause += `AND LOWER(\"packingType\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'showBundle':\n whereClause += `AND LOWER(\"groupType\") LIKE 'bundle'`\n break\n\n case 'hideBundle':\n whereClause += `AND LOWER(\"groupType\") LIKE 'single'`\n break\n\n case 'batch_product':\n productWhereClause += `\n AND (i.batch_id, p.id, i.packing_type, i.packing_size) ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(\n (v: { batchId: string; productId: string; packingType: string; packingSize: string }) =>\n `('${v.batchId}', '${v.productId}', '${v.packingType}', '${v.packingSize}')`\n )\n .join()})\n `\n break\n\n case 'batch_bundle':\n bundleWhereClause += `\n ${bundleWhereClause == '' ? 'WHERE' : 'AND'} pb.id ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map((v: { productId: string }) => `('${v.productId}')`)\n .join()})\n `\n break\n\n case 'product':\n productDetailWhereClause += `\n AND (pd.product_id, pd.packing_type, pd.packing_size, pd.uom) ${\n operator === 'in' ? 'IN' : 'NOT IN'\n } (${value\n .map(\n (v: { productId: string; packingType: string; packingSize: string; uom: string }) =>\n `('${v.productId}', '${v.packingType}', '${v.packingSize}', '${v.uom}')`\n )\n .join()})\n `\n break\n }\n })\n )\n\n batchBundle = JSON.stringify(\n filters\n .find(filter => filter.name === 'batch_bundle')\n ?.value.map(itm => {\n return {\n product_id: itm.productId,\n release_qty: itm?.releaseQty || 0,\n release_uom_value: itm?.releaseUomValue || 0\n }\n }) || []\n )\n }\n\n return {\n bizplaceIds,\n productWhereClause,\n apiWhereClause,\n bundleWhereClause,\n whereClause,\n batchBundle,\n productDetailWhereClause\n }\n}\n\nasync function createInventory(\n inventory: Partial<Inventory> | Partial<Inventory>[],\n trxMgr: EntityManager\n): Promise<Inventory | Inventory[]> {\n return await trxMgr.getRepository(Inventory).save(inventory)\n}\n\n/**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\nasync function updateInventory(\n inventory: Partial<Inventory> | Partial<Inventory>[],\n trxMgr: EntityManager\n): Promise<Inventory | Inventory[]> {\n if (!inventory.id) throw new Error(`Target doesn't have ID`)\n return await trxMgr.getRepository(Inventory).save(inventory)\n}\n\nasync function generateInventoryHistory(\n inventory: Inventory,\n refOrder: any,\n transactionType: string,\n qty: number,\n uomValue: number,\n user: User,\n trxMgr?: EntityManager\n): Promise<InventoryHistory> {\n const invHistoryRepo: Repository<InventoryHistory> =\n trxMgr?.getRepository(InventoryHistory) || getRepository(InventoryHistory)\n const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)\n\n if (!inventory?.id) throw new Error(`Can't find out ID of inventory.`)\n if (!refOrder?.id || !refOrder.name) throw new Error(`Can't find out ID or Name of Reference Order`)\n if (\n !inventory?.domain ||\n !inventory?.bizplace ||\n !inventory?.product?.id ||\n !inventory?.warehouse?.id ||\n !inventory?.location?.id\n ) {\n inventory = await invRepo.findOne({\n where: { id: inventory.id },\n relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']\n })\n }\n\n const domain: Domain = inventory.domain\n const location: Location = inventory.location\n\n const seq: number = await invHistoryRepo.countBy({\n domain: { id: inventory.domain.id },\n palletId: inventory.palletId\n })\n let openingQty: number = 0\n let openingUomValue: number = 0\n\n if (seq) {\n const lastInvHistory: InventoryHistory = await invHistoryRepo.findOneBy({\n domain: { id: inventory.domain.id },\n palletId: inventory.palletId,\n seq: seq - 1\n })\n openingQty = lastInvHistory.openingQty + lastInvHistory.qty\n openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue\n }\n\n let inventoryHistory: InventoryHistory = new InventoryHistory()\n inventoryHistory.name = InventoryNoGenerator.inventoryHistoryName()\n inventoryHistory.description = inventory.description\n inventoryHistory.seq = seq\n inventoryHistory.palletId = inventory.palletId\n inventoryHistory.cartonId = inventory.cartonId\n inventoryHistory.batchId = inventory.batchId\n inventoryHistory.batchIdRef = inventory.batchIdRef\n inventoryHistory.status = inventory.status\n inventoryHistory.transactionType = transactionType\n inventoryHistory.refOrderId = refOrder?.id || null\n inventoryHistory.orderNo = refOrder?.name || null\n inventoryHistory.orderRefNo = refOrder?.refNo || null\n inventoryHistory.inventory = inventory\n inventoryHistory.product = inventory.product\n inventoryHistory.reusablePallet = inventory.reusablePallet\n inventoryHistory.zone = inventory.zone\n inventoryHistory.warehouse = inventory.warehouse\n inventoryHistory.location = inventory.location\n inventoryHistory.expirationDate = inventory.expirationDate\n inventoryHistory.packingType = inventory.packingType\n inventoryHistory.packingSize = inventory.packingSize\n inventoryHistory.uom = inventory.uom\n inventoryHistory.qty = qty\n inventoryHistory.openingQty = openingQty\n inventoryHistory.uomValue = uomValue\n inventoryHistory.openingUomValue = openingUomValue\n inventoryHistory.unitCost = inventory.unitCost\n inventoryHistory.domain = inventory.domain\n inventoryHistory.bizplace = inventory.bizplace\n inventoryHistory.creator = user\n inventoryHistory.updater = user\n\n inventoryHistory = await invHistoryRepo.save(inventoryHistory)\n\n if (inventory.lastSeq !== seq) {\n await invRepo.save({\n ...inventory,\n lastSeq: inventoryHistory.seq,\n updater: user\n })\n }\n\n await switchLocationStatus(domain, location, user, trxMgr)\n return inventoryHistory\n}\n\n/**\n * @description: Check location emptiness and update status of location\n * @param domain\n * @param location\n * @param updater\n * @param trxMgr\n */\nexport async function switchLocationStatus(\n domain: Domain,\n location: Location,\n updater: User,\n trxMgr?: EntityManager\n): Promise<Location> {\n const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)\n const locationRepo: Repository<Location> = trxMgr?.getRepository(Location) || getRepository(Location)\n const allocatedItemsCnt: number = await invRepo.countBy({\n domain: { id: domain.id },\n status: INVENTORY_STATUS.STORED,\n location: { id: location.id }\n })\n\n if (!allocatedItemsCnt && location.status !== LOCATION_STATUS.EMPTY) {\n location = await locationRepo.save({\n ...location,\n status: LOCATION_STATUS.EMPTY,\n updater\n })\n } else if (allocatedItemsCnt && location.status === LOCATION_STATUS.EMPTY) {\n location = await locationRepo.save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED,\n updater\n })\n }\n\n return location\n}\n\nexport function _composeTargetInventories(product: Product, record: any, inventories: Inventory[]): OrderInventory[] {\n let leftReleaseQty: number = record.releaseQty\n let leftReleaseUomValue: number = record.releaseUomValue\n let compReleaseQty: number = 0\n let compReleaseUomValue: number = 0\n let totalInventoryQty: number = inventories.reduce((total, inventory) => total + inventory.remainQty, 0)\n\n if (totalInventoryQty < record.releaseQty) {\n throw new Error(`invalid release qty for ${product?.sku}`)\n }\n\n let orderInventories: Partial<OrderInventory[]> = []\n let idx = 0\n while (compReleaseQty < record.releaseQty) {\n const inventory = inventories[idx]\n const {\n packingType,\n packingSize,\n batchId,\n batchIdRef,\n uom\n }: { packingType: string; packingSize: number; batchId: string; batchIdRef: string; uom: string } = inventory\n\n let orderInventory: OrderInventory = new OrderInventory()\n\n if (inventory.remainQty > leftReleaseQty) {\n const uomValuePerQty: number = Math.round((inventory.remainUomValue / inventory.remainQty) * 100) / 100\n\n compReleaseQty += leftReleaseQty\n compReleaseUomValue += leftReleaseUomValue\n\n orderInventory = {\n ...orderInventory,\n releaseQty: leftReleaseQty,\n releaseUomValue: Math.round(leftReleaseQty * uomValuePerQty * 100) / 100\n }\n } else {\n compReleaseQty += inventory.remainQty\n compReleaseUomValue += inventory.remainUomValue\n leftReleaseQty -= inventory.remainQty\n leftReleaseUomValue -= inventory.remainUomValue\n\n orderInventory = {\n ...orderInventory,\n releaseQty: inventory.remainQty,\n releaseUomValue: inventory.remainUomValue\n }\n }\n\n orderInventories.push({\n ...orderInventory,\n inventory,\n packingType,\n packingSize,\n batchId,\n batchIdRef,\n uom,\n product,\n type: ORDER_TYPES.RELEASE_OF_GOODS\n })\n\n idx++\n }\n\n return orderInventories\n}\n"]}
1
+ {"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, Equal, In, Not, Raw, Repository, SelectQueryBuilder } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Product, ProductBundle } from '@things-factory/product-base'\nimport { Domain, Filter, getRepository, ListParam } from '@things-factory/shell'\nimport {\n Inventory,\n INVENTORY_STATUS,\n InventoryHistory,\n InventoryNoGenerator,\n Location,\n LOCATION_STATUS,\n LOCATION_TYPE,\n Pallet\n} from '@things-factory/warehouse-base'\n\nimport { ORDER_TYPES } from '../constants'\nimport { ValidationError } from '../errors'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n OrderInventory,\n ReleaseGood,\n ReturnOrder,\n ReverseKittingOrder,\n VasOrder\n} from '../service'\n\nexport type ReferenceOrderType =\n | ArrivalNotice\n | ReleaseGood\n | VasOrder\n | InventoryCheck\n | DeliveryOrder\n | ReturnOrder\n | ReverseKittingOrder\n\nexport const InventoryUtil = {\n /**\n * Get all available product belonging to list of bizplaces\n * @param {[Object]} bizplaces\n * @param {Object} params\n * @param {Object} context\n * @param {Object} trxMgr\n * @returns { object } {items, total}\n */\n async bizplaceProductInventory(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n\n const { domain } = context.state\n\n const { bizplaceIds, productWhereClause, bundleWhereClause, whereClause, batchBundle, productDetailWhereClause } =\n await getConditions(bizplaces, filters, trxMgr, false)\n\n let productFilter = filters.find(itm => itm.name == 'productName')\n let inventoryBizplaceFilter = filters.find(itm => itm.name == 'bizplaceId')\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group ON COMMIT DROP AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n pd.packing_type AS \"packingType\",\n pd.packing_size AS \"packingSize\",\n pd.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) - MAX(COALESCE(bp.bundle_product_release_qty, 0)),0) AS \"remainQty\",\n COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)),0) AS \"remainUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)), ' ', pd.uom) AS \"remainUomValueWithUom\",\n 'SINGLE' AS \"groupType\"\n FROM products p\n INNER join product_details pd on pd.product_id = p.id\n LEFT JOIN (\n SELECT i.* FROM inventories i \n INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n WHERE l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n AND i.domain_id = $1 AND i.status = 'STORED'\n ${inventoryBizplaceFilter ? `AND i.bizplace_id = '${inventoryBizplaceFilter.value}'` : ``}\n ) i ON i.product_id = pd.product_id\n AND i.packing_type = pd.packing_type \n and i.packing_size = pd.packing_size \n and i.uom = pd.uom \n LEFT JOIN oi ON i.batch_id = oi.batch_id AND p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN (\n SELECT pbs.product_id, SUM(pbs.bundle_qty * src.release_qty) AS bundle_product_release_qty, SUM(pbs.bundle_qty * src.release_uom_value) AS bundle_product_release_uom_value \n FROM product_bundle_settings pbs\n INNER JOIN json_populate_recordset(NULL::order_inventories, '${batchBundle}') src ON src.product_id = pbs.product_bundle_id\n GROUP BY pbs.product_id\n ) bp on i.product_id = bp.product_id\n WHERE p.bizplace_id IN (${bizplaceIds})\n ${productDetailWhereClause}\n ${\n productFilter\n ? `AND (\n lower(p.sku) ilike '${productFilter.value}'\n OR lower(p.name) ilike '${productFilter.value}'\n OR lower(p.description) ilike '${productFilter.value}'\n )\n `\n : ``\n }\n GROUP BY\n p.id,\n pd.packing_type,\n pd.packing_size,\n pd.uom\n UNION \n SELECT packing_type, packing_size,'UNIT' AS \"uom\", name AS \"productName\", sku AS \"productSKU\", '-' AS \"productBrand\", id AS \"productId\",\n COALESCE(MIN(FLOOR(pbs.\"availableQty\")),0) AS \"remainQty\", \n COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0) AS \"remainUomValue\", \n CONCAT(COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0),' UNIT') AS \"remainUomValueWithUom\", \n 'BUNDLE' AS \"groupType\"\n FROM product_bundles pb\n LEFT JOIN (\n SELECT pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i2.qty, 0)) - SUM(COALESCE(i2.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i2.uom_value, 0)) - SUM(COALESCE(i2.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i2 ON i2.product_id = pbs.product_id AND i2.domain_id = $1 AND i2.status = 'STORED'\n INNER JOIN locations l2 ON i2.location_id = l2.id \n LEFT JOIN oi ON oi.product_id = i2.product_id\n WHERE l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${inventoryBizplaceFilter ? `AND i2.bizplace_id = '${inventoryBizplaceFilter.value}'` : ``}\n GROUP BY \n pbs.product_id, \n pbs.product_bundle_id\n ) pbs ON pbs.product_bundle_id = pb.id\n ${bundleWhereClause}\n AND pb.bizplace_id IN (${bizplaceIds}) \n ${\n productFilter\n ? `AND (\n lower(pb.sku) ilike '${productFilter.value}'\n OR lower(pb.name) ilike '${productFilter.value}'\n OR lower(pb.description) ilike '${productFilter.value}'\n )\n `\n : ``\n }\n GROUP BY \n pb.packing_type, \n pb.packing_size, \n pb.name, \n pb.sku, \n pb.id\n )\n AS inv_prod_grp \n ${whereClause}\n order by \"productSKU\", \"productName\"\n )\n `\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(`select count(*) as total from temp_inventory_product_group`)\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(`select * from temp_inventory_product_group OFFSET $1 LIMIT $2`, [\n (params.pagination.page - 1) * params.pagination.limit,\n params.pagination.limit\n ])\n } else {\n items = await trxMgr.query(`select * from temp_inventory_product_group`)\n }\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n /**\n * Get all available product belonging to list of bizplaces\n * @param {[Object]} bizplaces\n * @param {Object} params\n * @param {Object} context\n * @param {Object} trxMgr\n * @returns { object } {items, total}\n */\n async bizplaceInventoryProductGroup(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n const { domain } = context.state\n\n const { bizplaceIds, productWhereClause, bundleWhereClause, whereClause, batchBundle } = await getConditions(\n bizplaces,\n filters,\n trxMgr\n )\n\n const _groupType = filters.find(res => res.name == 'groupType')\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n round(cast(SUM(oi.release_qty) as numeric), 3) AS release_qty,\n round(cast(SUM(oi.release_uom_value) as numeric), 3) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n i.batch_id AS \"batchId\",\n i.batch_id_ref AS \"batchIdRef\",\n i.packing_type AS \"packingType\",\n i.packing_size AS \"packingSize\",\n i.pallet_id as \"palletId\",\n i.created_at as \"createdAt\",\n i.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n ROUND(cast(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) - MAX(COALESCE(bp.bundle_product_release_qty, 0)) as numeric), 3) AS \"remainQty\",\n ROUND(cast(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)) as numeric), 3) AS \"remainUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)), ' ', i.uom) AS \"remainUomValueWithUom\",\n 'SINGLE' AS \"groupType\",\n i.expiration_date as \"expirationDate\"\n FROM\n inventories i\n LEFT JOIN products p ON i.product_id = p.id\n LEFT JOIN oi ON i.batch_id = oi.batch_id AND p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n LEFT JOIN (\n SELECT pbs.product_id, SUM(pbs.bundle_qty * src.release_qty) AS bundle_product_release_qty, SUM(pbs.bundle_qty * src.release_uom_value) AS bundle_product_release_uom_value \n FROM product_bundle_settings pbs\n INNER JOIN json_populate_recordset(NULL::order_inventories,'${batchBundle}') src ON src.product_id = pbs.product_bundle_id\n GROUP BY pbs.product_id\n ) bp on i.product_id = bp.product_id\n WHERE i.domain_id = $1\n AND l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${productWhereClause}\n GROUP BY\n i.batch_id,\n i.batch_id_ref,\n p.id,\n i.packing_type,\n i.packing_size,\n i.expiration_date,\n i.pallet_id,\n i.created_at,\n i.uom\n UNION \n SELECT 'BUNDLE' AS \"batchId\", null as \"batchIdRef\", packing_type, packing_size, null AS \"palletId\", null AS \"createdAt\", 'UNIT' AS \"uom\", name AS \"productName\", sku AS \"productSKU\", 'brand' AS \"productBrand\", id AS \"productId\",\n MIN(FLOOR(pbs.\"availableQty\")) AS \"remainQty\", \n MIN(FLOOR(pbs.\"availableUomValue\")) AS \"remainUomValue\", \n CONCAT(MIN(FLOOR(pbs.\"availableUomValue\")),' UNIT') AS \"remainUomValueWithUom\",\n 'BUNDLE' AS \"groupType\",\n pbs.\"expirationDate\" as \"expirationDate\"\n FROM product_bundles pb\n INNER JOIN (\n SELECT pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i2.qty, 0)) - SUM(COALESCE(i2.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i2.uom_value, 0)) - SUM(COALESCE(i2.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\", i2.expiration_date as \"expirationDate\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i2 ON i2.product_id = pbs.product_id AND i2.domain_id = $1\n AND i2.bizplace_id IN (${bizplaceIds})\n AND i2.status = 'STORED'\n LEFT JOIN oi ON oi.product_id = i2.product_id\n GROUP BY pbs.product_id, pbs.product_bundle_id, i2.expiration_date\n ) pbs ON pbs.product_bundle_id = pb.id\n ${bundleWhereClause}\n GROUP BY pb.packing_type, pb.packing_size, pb.name, pb.sku, pb.id, pbs.\"expirationDate\"\n )\n AS inv_prod_grp\n ${whereClause}\n )\n `\n\n let filterGroupTypeQuery\n\n if (_groupType) {\n if (_groupType.value === 'SINGLE') {\n filterGroupTypeQuery = `where \"groupType\"= 'SINGLE' `\n } else {\n filterGroupTypeQuery = `where \"groupType\"= 'BUNDLE' `\n }\n }\n\n let sortingArr = params.sortings || []\n\n let sortedBy = []\n\n if (sortingArr.length > 0) {\n sortingArr.forEach(element => {\n if (element.desc) {\n sortedBy.push(`\"${element.name}\" DESC `)\n } else {\n sortedBy.push(`\"${element.name}\" `)\n }\n })\n }\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(\n `select count(*) as total from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''}`\n )\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(\n `select * from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''} ${\n sortingArr.length > 0 ? ' Order by ' + sortedBy.toString() : ''\n } OFFSET $1 LIMIT $2`,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n } else {\n items = await trxMgr.query(\n `select * from temp_inventory_product_group ${filterGroupTypeQuery ? filterGroupTypeQuery : ''} ${\n sortingArr.length > 0 ? ' Order by ' + sortedBy.toString() : ''\n }`\n )\n }\n\n await trxMgr.query(`drop table temp_inventory_product_group`)\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n async inventoryProductGroupOpenAPI(\n bizplaces: Bizplace[],\n params: ListParam,\n context: ResolverContext,\n trxMgr: EntityManager\n ) {\n try {\n let filters = params.filters\n const { domain } = context.state\n\n const { apiWhereClause } = await getConditions(bizplaces, filters, trxMgr)\n\n let queryStrings = `\n CREATE TEMP TABLE temp_inventory_product_group_open_api AS (\n SELECT * FROM (\n WITH oi as (\n SELECT\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.product_id,\n p.name AS product_name,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n LEFT JOIN\n products p\n ON\n oi.product_id = p.id\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom,\n p.name\n )\n SELECT\n i.packing_type AS \"packingType\",\n i.packing_size AS \"packingSize\",\n i.uom AS \"uom\",\n concat(p.name, ' (', p.description, ')') AS \"productName\",\n coalesce(p.sku, '') AS \"productSKU\",\n coalesce(p.brand, '') AS \"productBrand\",\n p.id AS \"productId\",\n SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) AS \"remainQty\",\n SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) AS \"remainUomValue\",\n SUM(COALESCE(i.qty, 0)) AS \"totalQty\",\n SUM(COALESCE(i.uom_value, 0)) AS \"totalUomValue\",\n SUM(COALESCE(i.locked_qty, 0)) + MAX(COALESCE(oi.release_qty, 0)) AS \"totalLockedQty\",\n SUM(COALESCE(i.locked_uom_value, 0)) + MAX(COALESCE(oi.release_uom_value, 0)) AS \"totalLockedUomValue\",\n concat(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)), ' ', i.uom) AS \"remainUomValueWithUom\"\n FROM inventories i\n LEFT JOIN products p ON i.product_id = p.id\n LEFT JOIN oi ON p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n LEFT JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id\n WHERE i.domain_id = $1\n AND l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')\n ${apiWhereClause}\n GROUP BY\n p.id,\n i.packing_type,\n i.packing_size,\n i.uom\n )\n AS inv_prod_grp\n )\n `\n\n await trxMgr.query(queryStrings, [domain.id])\n\n const [{ total }]: any = await trxMgr.query(`select count(*) as total from temp_inventory_product_group_open_api`)\n let items: any[] = []\n\n if (params?.pagination) {\n items = await trxMgr.query(`select * from temp_inventory_product_group_open_api OFFSET $1 LIMIT $2`, [\n (params.pagination.page - 1) * params.pagination.limit,\n params.pagination.limit\n ])\n } else {\n items = await trxMgr.query(`select * from temp_inventory_product_group_open_api`)\n }\n\n await trxMgr.query(`drop table temp_inventory_product_group_open_api`)\n\n return { items, total }\n } catch (error) {\n throw error\n }\n },\n\n /**\n * Validate warehouse partners product quantity\n * @param {Object} warehouseDomain -\n * @param {Object} partnerBizplace - {id}\n * @param {Object} orderInventories - [{id, qty}]\n * @param {Object} context\n * @param {Object} trxMgr\n */\n async validateWarehousePartnersProductsQuantity(\n warehouseDomain: Domain,\n partnerBizplace: Bizplace,\n orderInventories: OrderInventory[],\n context: any,\n trxMgr?: EntityManager\n ): Promise<void> {\n let json_oi = JSON.stringify(\n orderInventories.map(x => {\n return {\n product_id: x.product.id,\n batch_id: x.batchId,\n packing_type: x.packingType,\n release_qty: x.releaseQty,\n uom: x.uom\n }\n })\n )\n\n let resultQb = await trxMgr.query(\n `\n select joi.product_id as \"productId\", joi.batch_id as \"batchId\", joi.packing_type as \"packingType\", joi.uom as \"uom\", joi.release_qty as \"releaseQty\",\n ROUND(cast(sum(i.qty - coalesce(i.locked_qty,0)) - coalesce(\n (\n select sum(oi.release_qty) from order_inventories oi \n where (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n and oi.inventory_id IS null\n and oi.product_id = joi.product_id\n and oi.batch_id = joi.batch_id\n and oi.packing_type = joi.packing_type\n and oi.uom = joi.uom\n and oi.domain_id = $1\n and oi.bizplace_id = $2\n ),0) as numeric), 3) as \"availableQty\",\n ROUND(cast(sum(i.uom_value - coalesce(i.locked_uom_value ,0)) - coalesce(\n (\n select sum(oi.release_uom_value) from order_inventories oi \n where (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n and oi.inventory_id IS null\n and oi.product_id = joi.product_id\n and oi.batch_id = joi.batch_id\n and oi.packing_type = joi.packing_type\n and oi.uom = joi.uom\n and oi.domain_id = $1\n and oi.bizplace_id = $2\n ),0) as numeric), 3) as \"availableUomValue\"\n from json_populate_recordset(NULL::order_inventories,'${json_oi}') joi\n left join inventories i on joi.product_id = i.product_id \n and joi.batch_id = i.batch_id\n and joi.packing_type = i.packing_type and i.status ='STORED'\n and joi.uom = i.uom\n and i.domain_id = $1\n and i.bizplace_id = $2\n group by joi.product_id, joi.batch_id, joi.packing_type, joi.release_qty, joi.uom\n `,\n [warehouseDomain.id, partnerBizplace.id]\n )\n\n resultQb.forEach(itm => {\n if (itm.releaseQty > itm.availableQty) {\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.RELEASE_QTY_OVER_LIMIT,\n detail: { data: JSON.stringify(resultQb) }\n })\n }\n })\n },\n\n async checkPalletDuplication(palletId: string, warehouseDomain: Domain, trxMgr: EntityManager): Promise<void> {\n const duplicatedPalletCnt: number = await trxMgr.getRepository(Inventory).countBy({\n domain: { id: warehouseDomain.id },\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(palletId + ` exists`)\n\n const duplicatedReusablePalletCnt: number = await trxMgr.getRepository(Pallet).count({\n where: {\n domain: { id: warehouseDomain.id },\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(palletId + ` exists`)\n },\n\n /**\n * To pre-assign inventories automatically for orderInventories in Release Goods\n * @param product\n * @param orderInventory\n * @param packingType\n * @param locationSortingRules\n * @param customerBizplace\n * @param domain\n * @param trxMgr\n * @returns orderInventories\n */\n async autoAssignInventoryForRelease(\n product: Product,\n orderInventory: OrderInventory,\n packingType: string,\n locationSortingRules: any = [],\n customerBizplace: Bizplace,\n domain: Domain,\n trxMgr: EntityManager,\n batchId?: string\n ): Promise<OrderInventory[]> {\n let qb: SelectQueryBuilder<Inventory> = trxMgr.getRepository(Inventory).createQueryBuilder('iv')\n qb.leftJoinAndSelect('iv.location', 'loc')\n .andWhere('\"iv\".\"domain_id\" = :domainId')\n .andWhere('\"iv\".\"bizplace_id\" = :bizplaceId')\n .andWhere('\"iv\".\"packing_type\" = :packingType')\n .andWhere('\"iv\".\"product_id\" = :productId')\n .andWhere('\"iv\".\"status\" = :status')\n .andWhere('\"iv\".\"qty\" - COALESCE(\"iv\".\"locked_qty\", 0) > 0')\n .andWhere('\"loc\".\"type\" NOT IN (:...locationTypes)')\n .setParameters({\n domainId: domain.id,\n bizplaceId: customerBizplace.id,\n packingType: packingType,\n productId: product.id,\n status: INVENTORY_STATUS.STORED,\n locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]\n })\n\n if (batchId) {\n qb.andWhere('\"iv\".\"batch_id\" = :batchId', { batchId: batchId })\n }\n\n let locationSorting = function (qb: SelectQueryBuilder<Inventory>, locationSortingRules) {\n if (locationSortingRules?.length) {\n locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {\n idx === 0\n ? qb.addOrderBy(`loc.${rule.name}`, rule.desc ? 'DESC' : 'ASC')\n : qb.addOrderBy(`loc.${rule.name}`, rule.desc ? 'DESC' : 'ASC')\n })\n } else {\n qb.addOrderBy('\"loc\".\"name\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n }\n return qb\n }\n\n switch (product?.pickingStrategy) {\n case 'FIFO':\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'LIFO':\n qb.addOrderBy('\"iv\".\"created_at\"', 'DESC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'FEFO':\n qb.addOrderBy('\"iv\".\"expiration_date\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'FMFO':\n qb.addOrderBy('\"iv\".\"manufacture_date\"', 'ASC')\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n case 'LOCATION':\n qb = locationSorting(qb, locationSortingRules)\n break\n default:\n qb.addOrderBy('\"iv\".\"created_at\"', 'ASC')\n qb = locationSorting(qb, locationSortingRules)\n break\n }\n\n let inventories: Inventory[] = await qb.getMany()\n if (!inventories?.length) throw new Error(`no inventories found for ${product.sku}`)\n\n inventories = inventories.map(inventory => {\n return {\n ...inventory,\n remainQty: inventory.qty - (inventory?.lockedQty || 0),\n remainUomValue: inventory.uomValue - (inventory?.lockedUomValue || 0)\n }\n })\n\n return _composeTargetInventories(product, orderInventory, inventories)\n },\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Inventory,\n referenceOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string,\n user: User,\n trxMgr: EntityManager\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = (await updateInventory(inventory, trxMgr)) as any\n } else {\n inventory = (await createInventory(inventory, trxMgr)) as any\n }\n\n await generateInventoryHistory(inventory, referenceOrder, transactionType, changedQty, changedWeight, user, trxMgr)\n\n return inventory\n }\n}\n\ninterface Conditions {\n bizplaceIds: string\n productWhereClause: string\n bundleWhereClause: string\n whereClause: string\n batchBundle: string\n apiWhereClause: string\n productDetailWhereClause: string\n}\n\nasync function getConditions(\n bizplaces: Bizplace[],\n filters: Filter[],\n trxMgr: EntityManager,\n hasRemainingQty: Boolean = true\n): Promise<Conditions> {\n let bizplaceIds = bizplaces.map((bizplace: Bizplace) => `'${bizplace.id}'`).join()\n\n let productWhereClause = `\n AND i.status = 'STORED'\n AND i.bizplace_id IN (${bizplaceIds})\n `\n let apiWhereClause = `\n AND i.bizplace_id IN (${bizplaceIds})\n `\n let bundleWhereClause = `\n WHERE pb.status = 'ACTIVATED'\n `\n\n let whereClause = hasRemainingQty ? ` WHERE \"remainQty\" > 0` : ` WHERE 1 = 1`\n\n let productDetailWhereClause = ``\n\n let batchBundle: string\n if (filters?.length) {\n await Promise.all(\n filters.map(async (filter: { name: string; operator: string; value: any }) => {\n const name = filter.name\n const operator = filter.operator.toLowerCase()\n let value = filter.value\n\n switch (name) {\n case 'productId':\n if (operator == 'in')\n whereClause += `AND \"productId\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(itm => {\n return `'${itm}'`\n })\n .join(',')})`\n break\n\n case 'productBundleId':\n if (operator == 'in')\n whereClause += `AND \"productId\" ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(itm => {\n return `'${itm}'`\n })\n .join(',')})`\n break\n\n case 'batchId':\n whereClause += `AND LOWER(\"batchId\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'batchIdRef':\n whereClause += `AND LOWER(\"batchIdRef\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'productBrand':\n whereClause += `AND LOWER(\"productBrand\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'productSKU':\n whereClause += `AND LOWER(\"productSKU\") LIKE '${value.toLowerCase()}'`\n\n case 'productName':\n const products: Product[] = await trxMgr.getRepository(Product).find({\n select: ['id'],\n where: [\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n name: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n sku: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n description: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n }\n ]\n })\n\n const productIds: string = products\n .map((product: Product) => product.id)\n .map((id: string) => `'${id}'`)\n .join()\n\n if (productIds.length) {\n productWhereClause += `AND i.product_id IN (${productIds})`\n } else {\n productWhereClause += `AND i.product_id ISNULL`\n }\n\n // filter product bundle as product info\n const productBundles: ProductBundle[] = await trxMgr.getRepository(ProductBundle).find({\n select: ['id'],\n where: [\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n name: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n sku: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n },\n {\n bizplace: In(bizplaces.map((bizplace: Bizplace) => bizplace.id)),\n description: Raw(\n (alias: string) => `LOWER(${alias}) LIKE '${value.toLowerCase().trim().replace(/'/g, \"''\")}'`\n )\n }\n ]\n })\n\n const productBundleIds: string = productBundles\n .map((bundle: ProductBundle) => bundle.id)\n .map((id: string) => `'${id}'`)\n .join()\n\n if (productBundleIds.length) {\n bundleWhereClause += `AND pb.id IN (${productBundleIds})`\n } else {\n bundleWhereClause += `AND pb.id ISNULL`\n }\n break\n\n case 'packingType':\n whereClause += `AND LOWER(\"packingType\") LIKE '${value.toLowerCase()}'`\n break\n\n case 'showBundle':\n whereClause += `AND LOWER(\"groupType\") LIKE 'bundle'`\n break\n\n case 'hideBundle':\n whereClause += `AND LOWER(\"groupType\") LIKE 'single'`\n break\n\n case 'batch_product':\n productWhereClause += `\n AND (i.batch_id, p.id, i.packing_type, i.packing_size) ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map(\n (v: { batchId: string; productId: string; packingType: string; packingSize: string }) =>\n `('${v.batchId}', '${v.productId}', '${v.packingType}', '${v.packingSize}')`\n )\n .join()})\n `\n break\n\n case 'batch_bundle':\n bundleWhereClause += `\n ${bundleWhereClause == '' ? 'WHERE' : 'AND'} pb.id ${operator === 'in' ? 'IN' : 'NOT IN'} (${value\n .map((v: { productId: string }) => `('${v.productId}')`)\n .join()})\n `\n break\n\n case 'product':\n productDetailWhereClause += `\n AND (pd.product_id, pd.packing_type, pd.packing_size, pd.uom) ${\n operator === 'in' ? 'IN' : 'NOT IN'\n } (${value\n .map(\n (v: { productId: string; packingType: string; packingSize: string; uom: string }) =>\n `('${v.productId}', '${v.packingType}', '${v.packingSize}', '${v.uom}')`\n )\n .join()})\n `\n break\n }\n })\n )\n\n batchBundle = JSON.stringify(\n filters\n .find(filter => filter.name === 'batch_bundle')\n ?.value.map(itm => {\n return {\n product_id: itm.productId,\n release_qty: itm?.releaseQty || 0,\n release_uom_value: itm?.releaseUomValue || 0\n }\n }) || []\n )\n }\n\n return {\n bizplaceIds,\n productWhereClause,\n apiWhereClause,\n bundleWhereClause,\n whereClause,\n batchBundle,\n productDetailWhereClause\n }\n}\n\nasync function createInventory(\n inventory: Partial<Inventory> | Partial<Inventory>[],\n trxMgr: EntityManager\n): Promise<Inventory | Inventory[]> {\n return await trxMgr.getRepository(Inventory).save(inventory as Inventory)\n}\n\n/**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\nasync function updateInventory(\n inventory: Partial<Inventory> | Partial<Inventory>[],\n trxMgr: EntityManager\n): Promise<Partial<Inventory> | Partial<Inventory>[]> {\n if (!(inventory as any).id) throw new Error(`Target doesn't have ID`)\n return await trxMgr.getRepository(Inventory).save(inventory as Inventory)\n}\n\nasync function generateInventoryHistory(\n inventory: Inventory,\n refOrder: any,\n transactionType: string,\n qty: number,\n uomValue: number,\n user: User,\n trxMgr?: EntityManager\n): Promise<InventoryHistory> {\n const invHistoryRepo: Repository<InventoryHistory> =\n trxMgr?.getRepository(InventoryHistory) || getRepository(InventoryHistory)\n const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)\n\n if (!inventory?.id) throw new Error(`Can't find out ID of inventory.`)\n if (!refOrder?.id || !refOrder.name) throw new Error(`Can't find out ID or Name of Reference Order`)\n if (\n !inventory?.domain ||\n !inventory?.bizplace ||\n !inventory?.product?.id ||\n !inventory?.warehouse?.id ||\n !inventory?.location?.id\n ) {\n inventory = await invRepo.findOne({\n where: { id: inventory.id },\n relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']\n })\n }\n\n const domain: Domain = inventory.domain\n const location: Location = inventory.location\n\n const seq: number = await invHistoryRepo.countBy({\n domain: { id: inventory.domain.id },\n palletId: inventory.palletId\n })\n let openingQty: number = 0\n let openingUomValue: number = 0\n\n if (seq) {\n const lastInvHistory: InventoryHistory = await invHistoryRepo.findOneBy({\n domain: { id: inventory.domain.id },\n palletId: inventory.palletId,\n seq: seq - 1\n })\n openingQty = lastInvHistory.openingQty + lastInvHistory.qty\n openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue\n }\n\n let inventoryHistory: InventoryHistory = new InventoryHistory()\n inventoryHistory.name = InventoryNoGenerator.inventoryHistoryName()\n inventoryHistory.description = inventory.description\n inventoryHistory.seq = seq\n inventoryHistory.palletId = inventory.palletId\n inventoryHistory.cartonId = inventory.cartonId\n inventoryHistory.batchId = inventory.batchId\n inventoryHistory.batchIdRef = inventory.batchIdRef\n inventoryHistory.status = inventory.status\n inventoryHistory.transactionType = transactionType\n inventoryHistory.refOrderId = refOrder?.id || null\n inventoryHistory.orderNo = refOrder?.name || null\n inventoryHistory.orderRefNo = refOrder?.refNo || null\n inventoryHistory.inventory = inventory\n inventoryHistory.product = inventory.product\n inventoryHistory.reusablePallet = inventory.reusablePallet\n inventoryHistory.zone = inventory.zone\n inventoryHistory.warehouse = inventory.warehouse\n inventoryHistory.location = inventory.location\n inventoryHistory.expirationDate = inventory.expirationDate\n inventoryHistory.packingType = inventory.packingType\n inventoryHistory.packingSize = inventory.packingSize\n inventoryHistory.uom = inventory.uom\n inventoryHistory.qty = qty\n inventoryHistory.openingQty = openingQty\n inventoryHistory.uomValue = uomValue\n inventoryHistory.openingUomValue = openingUomValue\n inventoryHistory.unitCost = inventory.unitCost\n inventoryHistory.domain = inventory.domain\n inventoryHistory.bizplace = inventory.bizplace\n inventoryHistory.creator = user\n inventoryHistory.updater = user\n\n inventoryHistory = await invHistoryRepo.save(inventoryHistory)\n\n if (inventory.lastSeq !== seq) {\n await invRepo.save({\n ...inventory,\n lastSeq: inventoryHistory.seq,\n updater: user\n })\n }\n\n await switchLocationStatus(domain, location, user, trxMgr)\n return inventoryHistory\n}\n\n/**\n * @description: Check location emptiness and update status of location\n * @param domain\n * @param location\n * @param updater\n * @param trxMgr\n */\nexport async function switchLocationStatus(\n domain: Domain,\n location: Location,\n updater: User,\n trxMgr?: EntityManager\n): Promise<Location> {\n const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)\n const locationRepo: Repository<Location> = trxMgr?.getRepository(Location) || getRepository(Location)\n const allocatedItemsCnt: number = await invRepo.countBy({\n domain: { id: domain.id },\n status: INVENTORY_STATUS.STORED,\n location: { id: location.id }\n })\n\n if (!allocatedItemsCnt && location.status !== LOCATION_STATUS.EMPTY) {\n location = await locationRepo.save({\n ...location,\n status: LOCATION_STATUS.EMPTY,\n updater\n })\n } else if (allocatedItemsCnt && location.status === LOCATION_STATUS.EMPTY) {\n location = await locationRepo.save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED,\n updater\n })\n }\n\n return location\n}\n\nexport function _composeTargetInventories(product: Product, record: any, inventories: Inventory[]): OrderInventory[] {\n let leftReleaseQty: number = record.releaseQty\n let leftReleaseUomValue: number = record.releaseUomValue\n let compReleaseQty: number = 0\n let compReleaseUomValue: number = 0\n let totalInventoryQty: number = inventories.reduce((total, inventory) => total + inventory.remainQty, 0)\n\n if (totalInventoryQty < record.releaseQty) {\n throw new Error(`invalid release qty for ${product?.sku}`)\n }\n\n let orderInventories: Partial<OrderInventory[]> = []\n let idx = 0\n while (compReleaseQty < record.releaseQty) {\n const inventory = inventories[idx]\n const {\n packingType,\n packingSize,\n batchId,\n batchIdRef,\n uom\n }: { packingType: string; packingSize: number; batchId: string; batchIdRef: string; uom: string } = inventory\n\n let orderInventory: OrderInventory = new OrderInventory()\n\n if (inventory.remainQty > leftReleaseQty) {\n const uomValuePerQty: number = Math.round((inventory.remainUomValue / inventory.remainQty) * 100) / 100\n\n compReleaseQty += leftReleaseQty\n compReleaseUomValue += leftReleaseUomValue\n\n orderInventory = {\n ...orderInventory,\n releaseQty: leftReleaseQty,\n releaseUomValue: Math.round(leftReleaseQty * uomValuePerQty * 100) / 100\n }\n } else {\n compReleaseQty += inventory.remainQty\n compReleaseUomValue += inventory.remainUomValue\n leftReleaseQty -= inventory.remainQty\n leftReleaseUomValue -= inventory.remainUomValue\n\n orderInventory = {\n ...orderInventory,\n releaseQty: inventory.remainQty,\n releaseUomValue: inventory.remainUomValue\n }\n }\n\n orderInventories.push({\n ...orderInventory,\n inventory,\n packingType,\n packingSize,\n batchId,\n batchIdRef,\n uom,\n product,\n type: ORDER_TYPES.RELEASE_OF_GOODS\n })\n\n idx++\n }\n\n return orderInventories\n}\n"]}
@@ -0,0 +1,25 @@
1
+ export declare class OrderNoGenerator {
2
+ static arrivalNotice(): string;
3
+ static collectionOrder(): string;
4
+ static cycleCount(): string;
5
+ static deliveryOrder(): string;
6
+ static goodsReceiveNote(): string;
7
+ static jobSheet(domainName: any): string;
8
+ static manifest(): string;
9
+ static orderInventory(): any;
10
+ static orderProduct(): string;
11
+ static invoiceProduct(): string;
12
+ static orderVas(): string;
13
+ static orderToteItem(): string;
14
+ static purchaseOrder(): string;
15
+ static releaseGood(): string;
16
+ static draftReleaseGood(): string;
17
+ static releaseVas(): any;
18
+ static retailReplenishmentOrder(): string;
19
+ static returnOrder(): string;
20
+ static shippingOrder(): string;
21
+ static stockTake(): string;
22
+ static transferOrder(): string;
23
+ static vasOrder(): string;
24
+ static invoice(): string;
25
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/sales-base",
3
- "version": "7.0.1-beta.0",
3
+ "version": "7.0.1-beta.12",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,17 +24,17 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/attachment-base": "^7.0.1-beta.0",
28
- "@things-factory/auth-base": "^7.0.1-beta.0",
29
- "@things-factory/biz-base": "^7.0.1-beta.0",
30
- "@things-factory/code-base": "^7.0.1-beta.0",
31
- "@things-factory/integration-sftp": "^7.0.1-beta.0",
32
- "@things-factory/notification": "^7.0.1-beta.0",
33
- "@things-factory/product-base": "^7.0.1-beta.0",
34
- "@things-factory/setting-base": "^7.0.1-beta.0",
35
- "@things-factory/shell": "^7.0.1-beta.0",
36
- "@things-factory/transport-base": "^7.0.1-beta.0",
37
- "@things-factory/warehouse-base": "^7.0.1-beta.0"
27
+ "@things-factory/attachment-base": "^7.0.1-beta.12",
28
+ "@things-factory/auth-base": "^7.0.1-beta.12",
29
+ "@things-factory/biz-base": "^7.0.1-beta.12",
30
+ "@things-factory/code-base": "^7.0.1-beta.12",
31
+ "@things-factory/integration-sftp": "^7.0.1-beta.12",
32
+ "@things-factory/notification": "^7.0.1-beta.12",
33
+ "@things-factory/product-base": "^7.0.1-beta.12",
34
+ "@things-factory/setting-base": "^7.0.1-beta.12",
35
+ "@things-factory/shell": "^7.0.1-beta.12",
36
+ "@things-factory/transport-base": "^7.0.1-beta.12",
37
+ "@things-factory/warehouse-base": "^7.0.1-beta.12"
38
38
  },
39
- "gitHead": "8cf78ecf64a78972b184dd06788825fc8c56352d"
39
+ "gitHead": "67cd821227d77dea748ef46dbc54b0f9858e312c"
40
40
  }
@@ -219,7 +219,7 @@ export class OrderController {
219
219
  * If you want to generate inventory history automatically you would better to use transactionInventory function
220
220
  */
221
221
  async updateInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {
222
- if (!inventory.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)
222
+ if (!(inventory as any).id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)
223
223
  inventory = this.setStamp(inventory)
224
224
  return await this.trxMgr.getRepository(Inventory).save(inventory)
225
225
  }