@things-factory/warehouse-base 4.0.0-alpha.8 → 4.0.0-beta.2

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 (562) hide show
  1. package/dist-server/constants/index.js +1 -1
  2. package/dist-server/constants/inventory.js +4 -1
  3. package/dist-server/constants/inventory.js.map +1 -1
  4. package/dist-server/controllers/ecommerce/ecommerce-controller.js +10 -4
  5. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  6. package/dist-server/controllers/ecommerce/index.js +2 -1
  7. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  8. package/dist-server/controllers/ecommerce/sellercraft-controller.js +48 -0
  9. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -0
  10. package/dist-server/controllers/index.js +1 -1
  11. package/dist-server/controllers/warehouse-controller.js +42 -3
  12. package/dist-server/controllers/warehouse-controller.js.map +1 -1
  13. package/dist-server/entities/inventory-change.js +30 -30
  14. package/dist-server/entities/inventory-change.js.map +1 -1
  15. package/dist-server/entities/inventory-history.js +49 -41
  16. package/dist-server/entities/inventory-history.js.map +1 -1
  17. package/dist-server/entities/inventory.js +44 -44
  18. package/dist-server/entities/inventory.js.map +1 -1
  19. package/dist-server/entities/location.js +18 -18
  20. package/dist-server/entities/location.js.map +1 -1
  21. package/dist-server/entities/movement.js +13 -13
  22. package/dist-server/entities/movement.js.map +1 -1
  23. package/dist-server/entities/pallet-count.js +11 -11
  24. package/dist-server/entities/pallet-count.js.map +1 -1
  25. package/dist-server/entities/pallet-history.js +15 -15
  26. package/dist-server/entities/pallet-history.js.map +1 -1
  27. package/dist-server/entities/pallet.js +16 -16
  28. package/dist-server/entities/pallet.js.map +1 -1
  29. package/dist-server/entities/reduced-inventory-history.js +35 -34
  30. package/dist-server/entities/reduced-inventory-history.js.map +1 -1
  31. package/dist-server/entities/warehouse.js +14 -14
  32. package/dist-server/entities/warehouse.js.map +1 -1
  33. package/dist-server/graphql/index.js +1 -1
  34. package/dist-server/graphql/resolvers/index.js +1 -1
  35. package/dist-server/graphql/resolvers/inventory/check-carton-identicality.js +1 -1
  36. package/dist-server/graphql/resolvers/inventory/check-carton-identicality.js.map +1 -1
  37. package/dist-server/graphql/resolvers/inventory/check-inventory-owner.js +2 -2
  38. package/dist-server/graphql/resolvers/inventory/check-inventory-owner.js.map +1 -1
  39. package/dist-server/graphql/resolvers/inventory/check-product-identicality.js +2 -2
  40. package/dist-server/graphql/resolvers/inventory/check-product-identicality.js.map +1 -1
  41. package/dist-server/graphql/resolvers/inventory/delete-inventories.js +1 -1
  42. package/dist-server/graphql/resolvers/inventory/delete-inventories.js.map +1 -1
  43. package/dist-server/graphql/resolvers/inventory/inventories-by-bundle.js +4 -4
  44. package/dist-server/graphql/resolvers/inventory/inventories-by-bundle.js.map +1 -1
  45. package/dist-server/graphql/resolvers/inventory/inventories-by-product.js +3 -3
  46. package/dist-server/graphql/resolvers/inventory/inventories-by-product.js.map +1 -1
  47. package/dist-server/graphql/resolvers/inventory/inventories-by-strategy.js +38 -4
  48. package/dist-server/graphql/resolvers/inventory/inventories-by-strategy.js.map +1 -1
  49. package/dist-server/graphql/resolvers/inventory/inventories.js +4 -4
  50. package/dist-server/graphql/resolvers/inventory/inventories.js.map +1 -1
  51. package/dist-server/graphql/resolvers/inventory/inventory-by-pallet.js +2 -2
  52. package/dist-server/graphql/resolvers/inventory/inventory-by-pallet.js.map +1 -1
  53. package/dist-server/graphql/resolvers/inventory/inventory-transfer.js +1 -1
  54. package/dist-server/graphql/resolvers/inventory/inventory-transfer.js.map +1 -1
  55. package/dist-server/graphql/resolvers/inventory/inventory.js +1 -1
  56. package/dist-server/graphql/resolvers/inventory/inventory.js.map +1 -1
  57. package/dist-server/graphql/resolvers/inventory/update-multiple-inventory.js +1 -1
  58. package/dist-server/graphql/resolvers/inventory/update-multiple-inventory.js.map +1 -1
  59. package/dist-server/graphql/resolvers/inventory-change/approve-inventory-changes.js +35 -13
  60. package/dist-server/graphql/resolvers/inventory-change/approve-inventory-changes.js.map +1 -1
  61. package/dist-server/graphql/resolvers/inventory-change/delete-inventory-changes.js +1 -1
  62. package/dist-server/graphql/resolvers/inventory-change/delete-inventory-changes.js.map +1 -1
  63. package/dist-server/graphql/resolvers/inventory-change/inventory-change.js +1 -1
  64. package/dist-server/graphql/resolvers/inventory-change/inventory-change.js.map +1 -1
  65. package/dist-server/graphql/resolvers/inventory-change/inventory-changes.js +3 -3
  66. package/dist-server/graphql/resolvers/inventory-change/inventory-changes.js.map +1 -1
  67. package/dist-server/graphql/resolvers/inventory-change/reject-inventory-changes.js +1 -1
  68. package/dist-server/graphql/resolvers/inventory-change/reject-inventory-changes.js.map +1 -1
  69. package/dist-server/graphql/resolvers/inventory-change/submit-inventory-changes.js.map +1 -1
  70. package/dist-server/graphql/resolvers/inventory-history/bizplace-inventory-histories.js +9 -9
  71. package/dist-server/graphql/resolvers/inventory-history/bizplace-inventory-histories.js.map +1 -1
  72. package/dist-server/graphql/resolvers/inventory-history/delete-inventory-histories.js +1 -1
  73. package/dist-server/graphql/resolvers/inventory-history/delete-inventory-histories.js.map +1 -1
  74. package/dist-server/graphql/resolvers/inventory-history/inventory-histories.js +3 -3
  75. package/dist-server/graphql/resolvers/inventory-history/inventory-histories.js.map +1 -1
  76. package/dist-server/graphql/resolvers/inventory-history/inventory-history-pallet-report.js +1 -1
  77. package/dist-server/graphql/resolvers/inventory-history/inventory-history-pallet-report.js.map +1 -1
  78. package/dist-server/graphql/resolvers/inventory-history/inventory-history-summary-report.js +12 -11
  79. package/dist-server/graphql/resolvers/inventory-history/inventory-history-summary-report.js.map +1 -1
  80. package/dist-server/graphql/resolvers/inventory-history/inventory-history.js +1 -1
  81. package/dist-server/graphql/resolvers/inventory-history/inventory-history.js.map +1 -1
  82. package/dist-server/graphql/resolvers/inventory-history/onhand-inventories.js +7 -4
  83. package/dist-server/graphql/resolvers/inventory-history/onhand-inventories.js.map +1 -1
  84. package/dist-server/graphql/resolvers/location/index.js +2 -1
  85. package/dist-server/graphql/resolvers/location/index.js.map +1 -1
  86. package/dist-server/graphql/resolvers/location/location-by-name.js +1 -1
  87. package/dist-server/graphql/resolvers/location/location-by-name.js.map +1 -1
  88. package/dist-server/graphql/resolvers/location/location-occupancies.js +15 -28
  89. package/dist-server/graphql/resolvers/location/location-occupancies.js.map +1 -1
  90. package/dist-server/graphql/resolvers/location/location-with-inventories.js +75 -0
  91. package/dist-server/graphql/resolvers/location/location-with-inventories.js.map +1 -0
  92. package/dist-server/graphql/resolvers/location/location.js +3 -2
  93. package/dist-server/graphql/resolvers/location/location.js.map +1 -1
  94. package/dist-server/graphql/resolvers/location/locations-by-group.js +2 -2
  95. package/dist-server/graphql/resolvers/location/locations-by-group.js.map +1 -1
  96. package/dist-server/graphql/resolvers/location/locations.js +2 -2
  97. package/dist-server/graphql/resolvers/location/locations.js.map +1 -1
  98. package/dist-server/graphql/resolvers/location/update-multiple-location.js +2 -2
  99. package/dist-server/graphql/resolvers/location/update-multiple-location.js.map +1 -1
  100. package/dist-server/graphql/resolvers/movement/create-movement.js +1 -1
  101. package/dist-server/graphql/resolvers/movement/create-movement.js.map +1 -1
  102. package/dist-server/graphql/resolvers/movement/delete-movement.js +1 -1
  103. package/dist-server/graphql/resolvers/movement/delete-movement.js.map +1 -1
  104. package/dist-server/graphql/resolvers/movement/inbound-movements-counter.js +7 -9
  105. package/dist-server/graphql/resolvers/movement/inbound-movements-counter.js.map +1 -1
  106. package/dist-server/graphql/resolvers/movement/movement.js +2 -2
  107. package/dist-server/graphql/resolvers/movement/movement.js.map +1 -1
  108. package/dist-server/graphql/resolvers/movement/movements.js +3 -3
  109. package/dist-server/graphql/resolvers/movement/movements.js.map +1 -1
  110. package/dist-server/graphql/resolvers/movement/outbound-movements-counter.js +7 -9
  111. package/dist-server/graphql/resolvers/movement/outbound-movements-counter.js.map +1 -1
  112. package/dist-server/graphql/resolvers/movement/update-movement.js +4 -4
  113. package/dist-server/graphql/resolvers/movement/update-movement.js.map +1 -1
  114. package/dist-server/graphql/resolvers/movement/weekly-movements-counter.js +16 -34
  115. package/dist-server/graphql/resolvers/movement/weekly-movements-counter.js.map +1 -1
  116. package/dist-server/graphql/resolvers/pallet/delete-pallets.js +1 -1
  117. package/dist-server/graphql/resolvers/pallet/delete-pallets.js.map +1 -1
  118. package/dist-server/graphql/resolvers/pallet/pallet-by-status.js +1 -1
  119. package/dist-server/graphql/resolvers/pallet/pallet-by-status.js.map +1 -1
  120. package/dist-server/graphql/resolvers/pallet/pallet-inbound-validate.js +1 -1
  121. package/dist-server/graphql/resolvers/pallet/pallet-inbound-validate.js.map +1 -1
  122. package/dist-server/graphql/resolvers/pallet/pallet-outbound-validate.js +1 -1
  123. package/dist-server/graphql/resolvers/pallet/pallet-outbound-validate.js.map +1 -1
  124. package/dist-server/graphql/resolvers/pallet/pallet.js +1 -1
  125. package/dist-server/graphql/resolvers/pallet/pallet.js.map +1 -1
  126. package/dist-server/graphql/resolvers/pallet/pallets.js +2 -2
  127. package/dist-server/graphql/resolvers/pallet/pallets.js.map +1 -1
  128. package/dist-server/graphql/resolvers/pallet-count/delete-pallet-counts.js +1 -1
  129. package/dist-server/graphql/resolvers/pallet-count/delete-pallet-counts.js.map +1 -1
  130. package/dist-server/graphql/resolvers/pallet-count/pallet-count.js +1 -1
  131. package/dist-server/graphql/resolvers/pallet-count/pallet-count.js.map +1 -1
  132. package/dist-server/graphql/resolvers/pallet-count/pallet-counts.js +2 -2
  133. package/dist-server/graphql/resolvers/pallet-count/pallet-counts.js.map +1 -1
  134. package/dist-server/graphql/resolvers/pallet-count/update-pallet-count-seq.js +2 -2
  135. package/dist-server/graphql/resolvers/pallet-count/update-pallet-count-seq.js.map +1 -1
  136. package/dist-server/graphql/resolvers/pallet-history/delete-pallet-histories.js +1 -1
  137. package/dist-server/graphql/resolvers/pallet-history/delete-pallet-histories.js.map +1 -1
  138. package/dist-server/graphql/resolvers/pallet-history/pallet-histories.js +2 -2
  139. package/dist-server/graphql/resolvers/pallet-history/pallet-histories.js.map +1 -1
  140. package/dist-server/graphql/resolvers/pallet-history/pallet-history.js +1 -1
  141. package/dist-server/graphql/resolvers/pallet-history/pallet-history.js.map +1 -1
  142. package/dist-server/graphql/resolvers/warehouse/update-multiple-warehouse.js +2 -2
  143. package/dist-server/graphql/resolvers/warehouse/update-multiple-warehouse.js.map +1 -1
  144. package/dist-server/graphql/resolvers/warehouse/warehouse.js +1 -1
  145. package/dist-server/graphql/resolvers/warehouse/warehouse.js.map +1 -1
  146. package/dist-server/graphql/resolvers/warehouse/warehouses.js +2 -2
  147. package/dist-server/graphql/resolvers/warehouse/warehouses.js.map +1 -1
  148. package/dist-server/graphql/types/index.js +1 -1
  149. package/dist-server/graphql/types/inventory/index.js +1 -1
  150. package/dist-server/graphql/types/inventory/inventory-bundle-group-detail.js +1 -1
  151. package/dist-server/graphql/types/inventory/inventory-bundle-group-detail.js.map +1 -1
  152. package/dist-server/graphql/types/inventory/inventory-bundle-group.js +1 -1
  153. package/dist-server/graphql/types/inventory/inventory-bundle-group.js.map +1 -1
  154. package/dist-server/graphql/types/inventory/inventory-list.js +1 -1
  155. package/dist-server/graphql/types/inventory/inventory-list.js.map +1 -1
  156. package/dist-server/graphql/types/inventory/inventory-patch.js +2 -1
  157. package/dist-server/graphql/types/inventory/inventory-patch.js.map +1 -1
  158. package/dist-server/graphql/types/inventory/inventory.js +1 -1
  159. package/dist-server/graphql/types/inventory/inventory.js.map +1 -1
  160. package/dist-server/graphql/types/inventory/new-inventory.js +1 -1
  161. package/dist-server/graphql/types/inventory/new-inventory.js.map +1 -1
  162. package/dist-server/graphql/types/inventory-change/inventory-change-list.js +1 -1
  163. package/dist-server/graphql/types/inventory-change/inventory-change-list.js.map +1 -1
  164. package/dist-server/graphql/types/inventory-change/inventory-change-patch.js +1 -1
  165. package/dist-server/graphql/types/inventory-change/inventory-change-patch.js.map +1 -1
  166. package/dist-server/graphql/types/inventory-change/inventory-change.js +2 -1
  167. package/dist-server/graphql/types/inventory-change/inventory-change.js.map +1 -1
  168. package/dist-server/graphql/types/inventory-change/new-inventory-change.js +1 -1
  169. package/dist-server/graphql/types/inventory-change/new-inventory-change.js.map +1 -1
  170. package/dist-server/graphql/types/inventory-history/inventory-history-list.js +1 -1
  171. package/dist-server/graphql/types/inventory-history/inventory-history-list.js.map +1 -1
  172. package/dist-server/graphql/types/inventory-history/inventory-history-pallet-report-list.js +1 -1
  173. package/dist-server/graphql/types/inventory-history/inventory-history-pallet-report-list.js.map +1 -1
  174. package/dist-server/graphql/types/inventory-history/inventory-history-pallet-report.js +1 -1
  175. package/dist-server/graphql/types/inventory-history/inventory-history-pallet-report.js.map +1 -1
  176. package/dist-server/graphql/types/inventory-history/inventory-history-patch.js +2 -1
  177. package/dist-server/graphql/types/inventory-history/inventory-history-patch.js.map +1 -1
  178. package/dist-server/graphql/types/inventory-history/inventory-history-summary-list.js +1 -1
  179. package/dist-server/graphql/types/inventory-history/inventory-history-summary-list.js.map +1 -1
  180. package/dist-server/graphql/types/inventory-history/inventory-history-summary.js +1 -1
  181. package/dist-server/graphql/types/inventory-history/inventory-history-summary.js.map +1 -1
  182. package/dist-server/graphql/types/inventory-history/inventory-history.js +3 -2
  183. package/dist-server/graphql/types/inventory-history/inventory-history.js.map +1 -1
  184. package/dist-server/graphql/types/inventory-history/new-inventory-history.js +2 -1
  185. package/dist-server/graphql/types/inventory-history/new-inventory-history.js.map +1 -1
  186. package/dist-server/graphql/types/location/index.js +14 -3
  187. package/dist-server/graphql/types/location/index.js.map +1 -1
  188. package/dist-server/graphql/types/location/location-inventories.js +14 -0
  189. package/dist-server/graphql/types/location/location-inventories.js.map +1 -0
  190. package/dist-server/graphql/types/location/location-inventory.js +27 -0
  191. package/dist-server/graphql/types/location/location-inventory.js.map +1 -0
  192. package/dist-server/graphql/types/location/location-list.js +1 -1
  193. package/dist-server/graphql/types/location/location-list.js.map +1 -1
  194. package/dist-server/graphql/types/location/location-occupancy.js +1 -1
  195. package/dist-server/graphql/types/location/location-occupancy.js.map +1 -1
  196. package/dist-server/graphql/types/location/location-patch.js +1 -1
  197. package/dist-server/graphql/types/location/location-patch.js.map +1 -1
  198. package/dist-server/graphql/types/location/location.js +1 -1
  199. package/dist-server/graphql/types/location/location.js.map +1 -1
  200. package/dist-server/graphql/types/location/new-location.js +1 -1
  201. package/dist-server/graphql/types/location/new-location.js.map +1 -1
  202. package/dist-server/graphql/types/movement/movement-count.js +1 -1
  203. package/dist-server/graphql/types/movement/movement-count.js.map +1 -1
  204. package/dist-server/graphql/types/movement/movement-list.js +1 -1
  205. package/dist-server/graphql/types/movement/movement-list.js.map +1 -1
  206. package/dist-server/graphql/types/movement/movement-patch.js +1 -1
  207. package/dist-server/graphql/types/movement/movement-patch.js.map +1 -1
  208. package/dist-server/graphql/types/movement/movement.js +1 -1
  209. package/dist-server/graphql/types/movement/movement.js.map +1 -1
  210. package/dist-server/graphql/types/movement/new-movement.js +1 -1
  211. package/dist-server/graphql/types/movement/new-movement.js.map +1 -1
  212. package/dist-server/graphql/types/pallet/new-pallet.js +1 -1
  213. package/dist-server/graphql/types/pallet/new-pallet.js.map +1 -1
  214. package/dist-server/graphql/types/pallet/pallet-list.js +1 -1
  215. package/dist-server/graphql/types/pallet/pallet-list.js.map +1 -1
  216. package/dist-server/graphql/types/pallet/pallet-patch.js +1 -1
  217. package/dist-server/graphql/types/pallet/pallet-patch.js.map +1 -1
  218. package/dist-server/graphql/types/pallet/pallet-validate.js +1 -1
  219. package/dist-server/graphql/types/pallet/pallet-validate.js.map +1 -1
  220. package/dist-server/graphql/types/pallet/pallet.js +1 -1
  221. package/dist-server/graphql/types/pallet/pallet.js.map +1 -1
  222. package/dist-server/graphql/types/pallet-count/new-pallet-count.js +1 -1
  223. package/dist-server/graphql/types/pallet-count/new-pallet-count.js.map +1 -1
  224. package/dist-server/graphql/types/pallet-count/pallet-count-list.js +1 -1
  225. package/dist-server/graphql/types/pallet-count/pallet-count-list.js.map +1 -1
  226. package/dist-server/graphql/types/pallet-count/pallet-count-patch.js +1 -1
  227. package/dist-server/graphql/types/pallet-count/pallet-count-patch.js.map +1 -1
  228. package/dist-server/graphql/types/pallet-count/pallet-count.js +1 -1
  229. package/dist-server/graphql/types/pallet-count/pallet-count.js.map +1 -1
  230. package/dist-server/graphql/types/pallet-history/new-pallet-history.js +1 -1
  231. package/dist-server/graphql/types/pallet-history/new-pallet-history.js.map +1 -1
  232. package/dist-server/graphql/types/pallet-history/pallet-history-list.js +1 -1
  233. package/dist-server/graphql/types/pallet-history/pallet-history-list.js.map +1 -1
  234. package/dist-server/graphql/types/pallet-history/pallet-history-patch.js +1 -1
  235. package/dist-server/graphql/types/pallet-history/pallet-history-patch.js.map +1 -1
  236. package/dist-server/graphql/types/pallet-history/pallet-history.js +1 -1
  237. package/dist-server/graphql/types/pallet-history/pallet-history.js.map +1 -1
  238. package/dist-server/graphql/types/warehouse/index.js.map +1 -1
  239. package/dist-server/graphql/types/warehouse/new-warehouse.js +1 -1
  240. package/dist-server/graphql/types/warehouse/new-warehouse.js.map +1 -1
  241. package/dist-server/graphql/types/warehouse/warehouse-list.js +1 -1
  242. package/dist-server/graphql/types/warehouse/warehouse-list.js.map +1 -1
  243. package/dist-server/graphql/types/warehouse/warehouse-patch.js +1 -1
  244. package/dist-server/graphql/types/warehouse/warehouse-patch.js.map +1 -1
  245. package/dist-server/graphql/types/warehouse/warehouse.js +1 -1
  246. package/dist-server/graphql/types/warehouse/warehouse.js.map +1 -1
  247. package/dist-server/index.js +13 -13
  248. package/dist-server/index.js.map +1 -1
  249. package/dist-server/service/index.js +71 -0
  250. package/dist-server/service/index.js.map +1 -0
  251. package/dist-server/service/inventory/index.js +9 -0
  252. package/dist-server/service/inventory/index.js.map +1 -0
  253. package/dist-server/service/inventory/inventory-mutation.js +324 -0
  254. package/dist-server/service/inventory/inventory-mutation.js.map +1 -0
  255. package/dist-server/service/inventory/inventory-query.js +678 -0
  256. package/dist-server/service/inventory/inventory-query.js.map +1 -0
  257. package/dist-server/service/inventory/inventory-types.js +405 -0
  258. package/dist-server/service/inventory/inventory-types.js.map +1 -0
  259. package/dist-server/service/inventory/inventory.js +284 -0
  260. package/dist-server/service/inventory/inventory.js.map +1 -0
  261. package/dist-server/service/inventory-change/index.js +9 -0
  262. package/dist-server/service/inventory-change/index.js.map +1 -0
  263. package/dist-server/service/inventory-change/inventory-change-mutation.js +530 -0
  264. package/dist-server/service/inventory-change/inventory-change-mutation.js.map +1 -0
  265. package/dist-server/service/inventory-change/inventory-change-query.js +121 -0
  266. package/dist-server/service/inventory-change/inventory-change-query.js.map +1 -0
  267. package/dist-server/service/inventory-change/inventory-change-types.js +65 -0
  268. package/dist-server/service/inventory-change/inventory-change-types.js.map +1 -0
  269. package/dist-server/service/inventory-change/inventory-change.js +185 -0
  270. package/dist-server/service/inventory-change/inventory-change.js.map +1 -0
  271. package/dist-server/service/inventory-history/index.js +9 -0
  272. package/dist-server/service/inventory-history/index.js.map +1 -0
  273. package/dist-server/service/inventory-history/inventory-history-mutation.js +121 -0
  274. package/dist-server/service/inventory-history/inventory-history-mutation.js.map +1 -0
  275. package/dist-server/service/inventory-history/inventory-history-query.js +1283 -0
  276. package/dist-server/service/inventory-history/inventory-history-query.js.map +1 -0
  277. package/dist-server/service/inventory-history/inventory-history-types.js +382 -0
  278. package/dist-server/service/inventory-history/inventory-history-types.js.map +1 -0
  279. package/dist-server/service/inventory-history/inventory-history.js +233 -0
  280. package/dist-server/service/inventory-history/inventory-history.js.map +1 -0
  281. package/dist-server/service/location/index.js +9 -0
  282. package/dist-server/service/location/index.js.map +1 -0
  283. package/dist-server/service/location/location-mutation.js +157 -0
  284. package/dist-server/service/location/location-mutation.js.map +1 -0
  285. package/dist-server/service/location/location-query.js +247 -0
  286. package/dist-server/service/location/location-query.js.map +1 -0
  287. package/dist-server/service/location/location-types.js +223 -0
  288. package/dist-server/service/location/location-types.js.map +1 -0
  289. package/dist-server/service/location/location.js +125 -0
  290. package/dist-server/service/location/location.js.map +1 -0
  291. package/dist-server/service/movement/index.js +9 -0
  292. package/dist-server/service/movement/index.js.map +1 -0
  293. package/dist-server/service/movement/movement-mutation.js +80 -0
  294. package/dist-server/service/movement/movement-mutation.js.map +1 -0
  295. package/dist-server/service/movement/movement-query.js +286 -0
  296. package/dist-server/service/movement/movement-query.js.map +1 -0
  297. package/dist-server/service/movement/movement-types.js +117 -0
  298. package/dist-server/service/movement/movement-types.js.map +1 -0
  299. package/dist-server/service/movement/movement.js +101 -0
  300. package/dist-server/service/movement/movement.js.map +1 -0
  301. package/dist-server/service/pallet/index.js +9 -0
  302. package/dist-server/service/pallet/index.js.map +1 -0
  303. package/dist-server/service/pallet/pallet-mutation.js +192 -0
  304. package/dist-server/service/pallet/pallet-mutation.js.map +1 -0
  305. package/dist-server/service/pallet/pallet-query.js +164 -0
  306. package/dist-server/service/pallet/pallet-query.js.map +1 -0
  307. package/dist-server/service/pallet/pallet-types.js +109 -0
  308. package/dist-server/service/pallet/pallet-types.js.map +1 -0
  309. package/dist-server/service/pallet/pallet.js +112 -0
  310. package/dist-server/service/pallet/pallet.js.map +1 -0
  311. package/dist-server/service/pallet-count/index.js +9 -0
  312. package/dist-server/service/pallet-count/index.js.map +1 -0
  313. package/dist-server/service/pallet-count/pallet-count-mutation.js +156 -0
  314. package/dist-server/service/pallet-count/pallet-count-mutation.js.map +1 -0
  315. package/dist-server/service/pallet-count/pallet-count-query.js +86 -0
  316. package/dist-server/service/pallet-count/pallet-count-query.js.map +1 -0
  317. package/dist-server/service/pallet-count/pallet-count-types.js +65 -0
  318. package/dist-server/service/pallet-count/pallet-count-types.js.map +1 -0
  319. package/dist-server/service/pallet-count/pallet-count.js +89 -0
  320. package/dist-server/service/pallet-count/pallet-count.js.map +1 -0
  321. package/dist-server/service/pallet-history/index.js +9 -0
  322. package/dist-server/service/pallet-history/index.js.map +1 -0
  323. package/dist-server/service/pallet-history/pallet-history-mutation.js +120 -0
  324. package/dist-server/service/pallet-history/pallet-history-mutation.js.map +1 -0
  325. package/dist-server/service/pallet-history/pallet-history-query.js +87 -0
  326. package/dist-server/service/pallet-history/pallet-history-query.js.map +1 -0
  327. package/dist-server/service/pallet-history/pallet-history-types.js +65 -0
  328. package/dist-server/service/pallet-history/pallet-history-types.js.map +1 -0
  329. package/dist-server/service/pallet-history/pallet-history.js +107 -0
  330. package/dist-server/service/pallet-history/pallet-history.js.map +1 -0
  331. package/dist-server/service/reduced-inventory-history/index.js +6 -0
  332. package/dist-server/service/reduced-inventory-history/index.js.map +1 -0
  333. package/dist-server/service/reduced-inventory-history/reduced-inventory-history.js +133 -0
  334. package/dist-server/service/reduced-inventory-history/reduced-inventory-history.js.map +1 -0
  335. package/dist-server/service/warehouse/index.js +9 -0
  336. package/dist-server/service/warehouse/index.js.map +1 -0
  337. package/dist-server/service/warehouse/warehouse-mutation.js +135 -0
  338. package/dist-server/service/warehouse/warehouse-mutation.js.map +1 -0
  339. package/dist-server/service/warehouse/warehouse-query.js +91 -0
  340. package/dist-server/service/warehouse/warehouse-query.js.map +1 -0
  341. package/dist-server/service/warehouse/warehouse-types.js +82 -0
  342. package/dist-server/service/warehouse/warehouse-types.js.map +1 -0
  343. package/dist-server/service/warehouse/warehouse.js +102 -0
  344. package/dist-server/service/warehouse/warehouse.js.map +1 -0
  345. package/dist-server/utils/index.js +1 -1
  346. package/dist-server/utils/inventory-no-generator.js +2 -2
  347. package/dist-server/utils/inventory-no-generator.js.map +1 -1
  348. package/dist-server/utils/inventory-util.js +47 -13
  349. package/dist-server/utils/inventory-util.js.map +1 -1
  350. package/package.json +8 -7
  351. package/server/constants/inventory.ts +4 -1
  352. package/server/controllers/ecommerce/ecommerce-controller.ts +14 -4
  353. package/server/controllers/ecommerce/index.ts +1 -0
  354. package/server/controllers/ecommerce/sellercraft-controller.ts +58 -0
  355. package/server/controllers/warehouse-controller.ts +54 -2
  356. package/server/index.ts +8 -4
  357. package/server/service/index.ts +61 -0
  358. package/server/service/inventory/index.ts +6 -0
  359. package/server/{graphql/resolvers/inventory/update-multiple-inventory.ts → service/inventory/inventory-mutation.ts} +158 -7
  360. package/server/service/inventory/inventory-query.ts +745 -0
  361. package/server/service/inventory/inventory-types.ts +289 -0
  362. package/server/{entities → service/inventory}/inventory.ts +86 -8
  363. package/server/service/inventory-change/index.ts +6 -0
  364. package/server/{graphql/resolvers/inventory-change/approve-inventory-changes.ts → service/inventory-change/inventory-change-mutation.ts} +303 -13
  365. package/server/{graphql/resolvers/inventory-change/inventory-changes.ts → service/inventory-change/inventory-change-query.ts} +35 -4
  366. package/server/service/inventory-change/inventory-change-types.ts +36 -0
  367. package/server/{entities → service/inventory-change}/inventory-change.ts +56 -6
  368. package/server/service/inventory-history/index.ts +6 -0
  369. package/server/service/inventory-history/inventory-history-mutation.ts +119 -0
  370. package/server/service/inventory-history/inventory-history-query.ts +1435 -0
  371. package/server/service/inventory-history/inventory-history-types.ts +269 -0
  372. package/server/{entities → service/inventory-history}/inventory-history.ts +74 -15
  373. package/server/service/location/index.ts +6 -0
  374. package/server/service/location/location-mutation.ts +134 -0
  375. package/server/service/location/location-query.ts +205 -0
  376. package/server/service/location/location-types.ts +151 -0
  377. package/server/{entities → service/location}/location.ts +40 -3
  378. package/server/service/movement/index.ts +6 -0
  379. package/server/service/movement/movement-mutation.ts +61 -0
  380. package/server/service/movement/movement-query.ts +258 -0
  381. package/server/service/movement/movement-types.ts +74 -0
  382. package/server/{entities → service/movement}/movement.ts +35 -2
  383. package/server/service/pallet/index.ts +6 -0
  384. package/server/service/pallet/pallet-mutation.ts +244 -0
  385. package/server/service/pallet/pallet-query.ts +101 -0
  386. package/server/service/pallet/pallet-types.ts +68 -0
  387. package/server/{entities → service/pallet}/pallet.ts +31 -4
  388. package/server/service/pallet-count/index.ts +6 -0
  389. package/server/service/pallet-count/pallet-count-mutation.ts +148 -0
  390. package/server/service/pallet-count/pallet-count-query.ts +46 -0
  391. package/server/service/pallet-count/pallet-count-types.ts +36 -0
  392. package/server/service/pallet-count/pallet-count.ts +70 -0
  393. package/server/service/pallet-history/index.ts +6 -0
  394. package/server/service/pallet-history/pallet-history-mutation.ts +114 -0
  395. package/server/service/pallet-history/pallet-history-query.ts +46 -0
  396. package/server/service/pallet-history/pallet-history-types.ts +36 -0
  397. package/server/{entities → service/pallet-history}/pallet-history.ts +34 -12
  398. package/server/service/reduced-inventory-history/index.ts +3 -0
  399. package/server/{entities → service/reduced-inventory-history}/reduced-inventory-history.ts +7 -12
  400. package/server/service/warehouse/index.ts +6 -0
  401. package/server/service/warehouse/warehouse-mutation.ts +114 -0
  402. package/server/service/warehouse/warehouse-query.ts +51 -0
  403. package/server/service/warehouse/warehouse-types.ts +50 -0
  404. package/server/{entities → service/warehouse}/warehouse.ts +29 -4
  405. package/server/utils/inventory-util.ts +58 -4
  406. package/server/entities/index.ts +0 -36
  407. package/server/entities/pallet-count.ts +0 -40
  408. package/server/graphql/index.ts +0 -7
  409. package/server/graphql/resolvers/index.ts +0 -33
  410. package/server/graphql/resolvers/inventory/check-carton-identicality.ts +0 -32
  411. package/server/graphql/resolvers/inventory/check-inventory-owner.ts +0 -26
  412. package/server/graphql/resolvers/inventory/check-product-identicality.ts +0 -24
  413. package/server/graphql/resolvers/inventory/create-inventory.ts +0 -15
  414. package/server/graphql/resolvers/inventory/delete-inventories.ts +0 -14
  415. package/server/graphql/resolvers/inventory/delete-inventory.ts +0 -10
  416. package/server/graphql/resolvers/inventory/index.ts +0 -38
  417. package/server/graphql/resolvers/inventory/inventories-by-bundle.ts +0 -168
  418. package/server/graphql/resolvers/inventory/inventories-by-product.ts +0 -164
  419. package/server/graphql/resolvers/inventory/inventories-by-strategy.ts +0 -106
  420. package/server/graphql/resolvers/inventory/inventories.ts +0 -129
  421. package/server/graphql/resolvers/inventory/inventory-by-pallet.ts +0 -15
  422. package/server/graphql/resolvers/inventory/inventory-transfer.ts +0 -50
  423. package/server/graphql/resolvers/inventory/inventory.ts +0 -14
  424. package/server/graphql/resolvers/inventory/update-inventory-remark.ts +0 -19
  425. package/server/graphql/resolvers/inventory/update-inventory.ts +0 -31
  426. package/server/graphql/resolvers/inventory-change/create-inventory-change.ts +0 -17
  427. package/server/graphql/resolvers/inventory-change/delete-inventory-change.ts +0 -12
  428. package/server/graphql/resolvers/inventory-change/delete-inventory-changes.ts +0 -15
  429. package/server/graphql/resolvers/inventory-change/index.ts +0 -27
  430. package/server/graphql/resolvers/inventory-change/inventory-change.ts +0 -14
  431. package/server/graphql/resolvers/inventory-change/reject-inventory-changes.ts +0 -42
  432. package/server/graphql/resolvers/inventory-change/submit-inventory-changes.ts +0 -101
  433. package/server/graphql/resolvers/inventory-change/update-inventory-change.ts +0 -21
  434. package/server/graphql/resolvers/inventory-change/update-multiple-inventory-change.ts +0 -47
  435. package/server/graphql/resolvers/inventory-history/bizplace-inventory-histories.ts +0 -81
  436. package/server/graphql/resolvers/inventory-history/create-inventory-history.ts +0 -17
  437. package/server/graphql/resolvers/inventory-history/delete-inventory-histories.ts +0 -15
  438. package/server/graphql/resolvers/inventory-history/delete-inventory-history.ts +0 -12
  439. package/server/graphql/resolvers/inventory-history/index.ts +0 -34
  440. package/server/graphql/resolvers/inventory-history/inventory-histories.ts +0 -62
  441. package/server/graphql/resolvers/inventory-history/inventory-history-pallet-detail-report.ts +0 -166
  442. package/server/graphql/resolvers/inventory-history/inventory-history-pallet-report.ts +0 -133
  443. package/server/graphql/resolvers/inventory-history/inventory-history-pallet-storage-report.ts +0 -146
  444. package/server/graphql/resolvers/inventory-history/inventory-history-report.ts +0 -233
  445. package/server/graphql/resolvers/inventory-history/inventory-history-summary-report.ts +0 -317
  446. package/server/graphql/resolvers/inventory-history/inventory-history.ts +0 -13
  447. package/server/graphql/resolvers/inventory-history/onhand-inventories.ts +0 -233
  448. package/server/graphql/resolvers/inventory-history/update-inventory-history.ts +0 -21
  449. package/server/graphql/resolvers/inventory-history/update-multiple-inventory-history.ts +0 -48
  450. package/server/graphql/resolvers/location/create-location.ts +0 -25
  451. package/server/graphql/resolvers/location/delete-all-locations.ts +0 -12
  452. package/server/graphql/resolvers/location/delete-location.ts +0 -16
  453. package/server/graphql/resolvers/location/delete-locations.ts +0 -16
  454. package/server/graphql/resolvers/location/index.ts +0 -30
  455. package/server/graphql/resolvers/location/location-by-name.ts +0 -17
  456. package/server/graphql/resolvers/location/location-occupancies.ts +0 -45
  457. package/server/graphql/resolvers/location/location.ts +0 -10
  458. package/server/graphql/resolvers/location/locations-by-group.ts +0 -29
  459. package/server/graphql/resolvers/location/locations.ts +0 -18
  460. package/server/graphql/resolvers/location/update-location.ts +0 -27
  461. package/server/graphql/resolvers/location/update-multiple-location.ts +0 -29
  462. package/server/graphql/resolvers/movement/create-movement.ts +0 -13
  463. package/server/graphql/resolvers/movement/delete-movement.ts +0 -9
  464. package/server/graphql/resolvers/movement/inbound-movements-counter.ts +0 -68
  465. package/server/graphql/resolvers/movement/index.ts +0 -23
  466. package/server/graphql/resolvers/movement/movement.ts +0 -16
  467. package/server/graphql/resolvers/movement/movements.ts +0 -17
  468. package/server/graphql/resolvers/movement/outbound-movements-counter.ts +0 -70
  469. package/server/graphql/resolvers/movement/update-movement.ts +0 -25
  470. package/server/graphql/resolvers/movement/weekly-movements-counter.ts +0 -94
  471. package/server/graphql/resolvers/pallet/create-pallet.ts +0 -18
  472. package/server/graphql/resolvers/pallet/delete-pallet.ts +0 -13
  473. package/server/graphql/resolvers/pallet/delete-pallets.ts +0 -44
  474. package/server/graphql/resolvers/pallet/index.ts +0 -29
  475. package/server/graphql/resolvers/pallet/pallet-by-status.ts +0 -16
  476. package/server/graphql/resolvers/pallet/pallet-inbound-validate.ts +0 -21
  477. package/server/graphql/resolvers/pallet/pallet-outbound-validate.ts +0 -21
  478. package/server/graphql/resolvers/pallet/pallet-return.ts +0 -57
  479. package/server/graphql/resolvers/pallet/pallet.ts +0 -15
  480. package/server/graphql/resolvers/pallet/pallets.ts +0 -22
  481. package/server/graphql/resolvers/pallet/update-multiple-pallet.ts +0 -95
  482. package/server/graphql/resolvers/pallet/update-pallet.ts +0 -21
  483. package/server/graphql/resolvers/pallet-count/create-pallet-count.ts +0 -17
  484. package/server/graphql/resolvers/pallet-count/delete-pallet-count.ts +0 -12
  485. package/server/graphql/resolvers/pallet-count/delete-pallet-counts.ts +0 -15
  486. package/server/graphql/resolvers/pallet-count/index.ts +0 -23
  487. package/server/graphql/resolvers/pallet-count/pallet-count.ts +0 -14
  488. package/server/graphql/resolvers/pallet-count/pallet-counts.ts +0 -14
  489. package/server/graphql/resolvers/pallet-count/update-multiple-pallet-count.ts +0 -47
  490. package/server/graphql/resolvers/pallet-count/update-pallet-count-seq.ts +0 -44
  491. package/server/graphql/resolvers/pallet-count/update-pallet-count.ts +0 -21
  492. package/server/graphql/resolvers/pallet-history/create-pallet-history.ts +0 -17
  493. package/server/graphql/resolvers/pallet-history/delete-pallet-histories.ts +0 -16
  494. package/server/graphql/resolvers/pallet-history/delete-pallet-history.ts +0 -13
  495. package/server/graphql/resolvers/pallet-history/index.ts +0 -21
  496. package/server/graphql/resolvers/pallet-history/pallet-histories.ts +0 -14
  497. package/server/graphql/resolvers/pallet-history/pallet-history.ts +0 -14
  498. package/server/graphql/resolvers/pallet-history/update-multiple-pallet-history.ts +0 -46
  499. package/server/graphql/resolvers/pallet-history/update-pallet-history.ts +0 -21
  500. package/server/graphql/resolvers/warehouse/create-warehouse.ts +0 -22
  501. package/server/graphql/resolvers/warehouse/delete-warehouse.ts +0 -16
  502. package/server/graphql/resolvers/warehouse/delete-warehouses.ts +0 -16
  503. package/server/graphql/resolvers/warehouse/index.ts +0 -22
  504. package/server/graphql/resolvers/warehouse/update-multiple-warehouse.ts +0 -29
  505. package/server/graphql/resolvers/warehouse/update-warehouse.ts +0 -23
  506. package/server/graphql/resolvers/warehouse/warehouse.ts +0 -17
  507. package/server/graphql/resolvers/warehouse/warehouses.ts +0 -16
  508. package/server/graphql/types/index.ts +0 -45
  509. package/server/graphql/types/inventory/index.ts +0 -61
  510. package/server/graphql/types/inventory/inventory-bundle-group-detail.ts +0 -8
  511. package/server/graphql/types/inventory/inventory-bundle-group.ts +0 -33
  512. package/server/graphql/types/inventory/inventory-list.ts +0 -8
  513. package/server/graphql/types/inventory/inventory-patch.ts +0 -41
  514. package/server/graphql/types/inventory/inventory.ts +0 -50
  515. package/server/graphql/types/inventory/new-inventory.ts +0 -29
  516. package/server/graphql/types/inventory-change/index.ts +0 -47
  517. package/server/graphql/types/inventory-change/inventory-change-list.ts +0 -8
  518. package/server/graphql/types/inventory-change/inventory-change-patch.ts +0 -10
  519. package/server/graphql/types/inventory-change/inventory-change.ts +0 -32
  520. package/server/graphql/types/inventory-change/new-inventory-change.ts +0 -8
  521. package/server/graphql/types/inventory-history/index.ts +0 -54
  522. package/server/graphql/types/inventory-history/inventory-history-list.ts +0 -8
  523. package/server/graphql/types/inventory-history/inventory-history-pallet-report-list.ts +0 -9
  524. package/server/graphql/types/inventory-history/inventory-history-pallet-report.ts +0 -13
  525. package/server/graphql/types/inventory-history/inventory-history-patch.ts +0 -36
  526. package/server/graphql/types/inventory-history/inventory-history-summary-list.ts +0 -10
  527. package/server/graphql/types/inventory-history/inventory-history-summary.ts +0 -17
  528. package/server/graphql/types/inventory-history/inventory-history.ts +0 -55
  529. package/server/graphql/types/inventory-history/new-inventory-history.ts +0 -28
  530. package/server/graphql/types/location/index.ts +0 -42
  531. package/server/graphql/types/location/location-list.ts +0 -8
  532. package/server/graphql/types/location/location-occupancy.ts +0 -10
  533. package/server/graphql/types/location/location-patch.ts +0 -17
  534. package/server/graphql/types/location/location.ts +0 -21
  535. package/server/graphql/types/location/new-location.ts +0 -15
  536. package/server/graphql/types/movement/index.ts +0 -31
  537. package/server/graphql/types/movement/movement-count.ts +0 -11
  538. package/server/graphql/types/movement/movement-list.ts +0 -8
  539. package/server/graphql/types/movement/movement-patch.ts +0 -12
  540. package/server/graphql/types/movement/movement.ts +0 -17
  541. package/server/graphql/types/movement/new-movement.ts +0 -12
  542. package/server/graphql/types/pallet/index.ts +0 -48
  543. package/server/graphql/types/pallet/new-pallet.ts +0 -11
  544. package/server/graphql/types/pallet/pallet-list.ts +0 -8
  545. package/server/graphql/types/pallet/pallet-patch.ts +0 -14
  546. package/server/graphql/types/pallet/pallet-validate.ts +0 -8
  547. package/server/graphql/types/pallet/pallet.ts +0 -18
  548. package/server/graphql/types/pallet-count/index.ts +0 -38
  549. package/server/graphql/types/pallet-count/new-pallet-count.ts +0 -8
  550. package/server/graphql/types/pallet-count/pallet-count-list.ts +0 -8
  551. package/server/graphql/types/pallet-count/pallet-count-patch.ts +0 -10
  552. package/server/graphql/types/pallet-count/pallet-count.ts +0 -14
  553. package/server/graphql/types/pallet-history/index.ts +0 -34
  554. package/server/graphql/types/pallet-history/new-pallet-history.ts +0 -8
  555. package/server/graphql/types/pallet-history/pallet-history-list.ts +0 -8
  556. package/server/graphql/types/pallet-history/pallet-history-patch.ts +0 -10
  557. package/server/graphql/types/pallet-history/pallet-history.ts +0 -14
  558. package/server/graphql/types/warehouse/index.ts +0 -35
  559. package/server/graphql/types/warehouse/new-warehouse.ts +0 -10
  560. package/server/graphql/types/warehouse/warehouse-list.ts +0 -8
  561. package/server/graphql/types/warehouse/warehouse-patch.ts +0 -12
  562. package/server/graphql/types/warehouse/warehouse.ts +0 -17
@@ -0,0 +1,745 @@
1
+ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { Brackets, EntityManager, Equal, getRepository, Not, Repository, SelectQueryBuilder } from 'typeorm'
3
+
4
+ import { User } from '@things-factory/auth-base'
5
+ import { Bizplace, getPartnersCompanyBizplaces, getPermittedBizplaceIds } from '@things-factory/biz-base'
6
+ import { Product, ProductBundleSetting } from '@things-factory/product-base'
7
+ import { Setting } from '@things-factory/setting-base'
8
+ import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
9
+
10
+ import { INVENTORY_STATUS } from '../../constants'
11
+ import { InventoryChange } from '../inventory-change/inventory-change'
12
+ import { Inventory } from './inventory'
13
+ import { InventoryBundleGroupDetail, InventoryList } from './inventory-types'
14
+
15
+ @Resolver(Inventory)
16
+ export class InventoryQuery {
17
+ @Directive('@privilege(category: "inventory", privilege: "query")')
18
+ @Query(returns => InventoryList)
19
+ async inventories(
20
+ @Ctx() context: any,
21
+ @Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
22
+ @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
23
+ @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[],
24
+ @Arg('locationSortingRules', type => [Sorting], { nullable: true }) locationSortingRules?: Sorting[]
25
+ ): Promise<InventoryList> {
26
+ const { domain, user }: { domain: Domain; user: User } = context.state
27
+
28
+ const productFilters = filters.find(x => x.name == 'product_info')
29
+ filters = filters.filter(x => x.name != 'product_info')
30
+ const params = { filters, pagination }
31
+
32
+ if (!params.filters.find((filter: any) => filter.name === 'bizplace')) {
33
+ params.filters.push({
34
+ name: 'bizplace',
35
+ operator: 'in',
36
+ value: await getPermittedBizplaceIds(domain, user),
37
+ relation: true
38
+ })
39
+ }
40
+
41
+ const remainOnlyParam: { name: string; operator: string; value: boolean } = params?.filters?.find(
42
+ (f: { name: string; operator: string; value: any }) => f.name === 'remainOnly'
43
+ )
44
+
45
+ let remainOnly: boolean = false
46
+ if (typeof remainOnlyParam?.value !== 'undefined') {
47
+ remainOnly = remainOnlyParam.value
48
+ params.filters = params.filters.filter(
49
+ (f: { name: string; operator: string; value: any }) => f.name !== 'remainOnly'
50
+ )
51
+ }
52
+
53
+ const unlockOnlyParam: { name: string; operator: string; value: boolean } = params?.filters?.find(
54
+ (f: { name: string; operator: string; value: any }) => f.name === 'unlockOnly'
55
+ )
56
+
57
+ let unlockOnly: boolean = false
58
+ if (typeof unlockOnlyParam?.value !== 'undefined') {
59
+ unlockOnly = unlockOnlyParam.value
60
+ params.filters = params.filters.filter(
61
+ (f: { name: string; operator: string; value: any }) => f.name !== 'unlockOnly'
62
+ )
63
+ }
64
+
65
+ const qb: SelectQueryBuilder<Inventory> = getRepository(Inventory).createQueryBuilder('iv')
66
+ buildQuery(qb, params, context)
67
+
68
+ qb.leftJoinAndSelect('iv.domain', 'domain')
69
+ .leftJoinAndSelect('iv.bizplace', 'bizplace')
70
+ .leftJoinAndSelect('iv.product', 'product')
71
+ .leftJoinAndSelect('iv.warehouse', 'warehouse')
72
+ .leftJoinAndSelect('iv.location', 'location')
73
+ .leftJoinAndSelect('iv.creator', 'creator')
74
+ .leftJoinAndSelect('iv.updater', 'updater')
75
+
76
+ if (remainOnly) {
77
+ qb.andWhere('iv.qty > 0')
78
+ .andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0')
79
+ .andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0')
80
+ }
81
+
82
+ if (unlockOnly) {
83
+ qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END = 0')
84
+ }
85
+
86
+ if (productFilters) {
87
+ let productFilterValue = `%${productFilters.value.toLowerCase()}%`
88
+ qb.andWhere(qb => {
89
+ const subQuery = qb
90
+ .subQuery()
91
+ .select()
92
+ .from(Product, `products`)
93
+ .where(`products.id = iv.product_id`)
94
+ .andWhere(
95
+ new Brackets(qb => {
96
+ qb.where('Lower(products.sku) LIKE :productInfo', { productInfo: productFilterValue })
97
+ .orWhere('Lower(products.name) LIKE :productInfo', { productInfo: productFilterValue })
98
+ .orWhere('Lower(products.description) LIKE :productInfo', { productInfo: productFilterValue })
99
+ })
100
+ )
101
+ .getQuery()
102
+ return `EXISTS ${subQuery}`
103
+ })
104
+ }
105
+
106
+ if (sortings?.length !== 0) {
107
+ const arrChildSortData = ['bizplace', 'product', 'location', 'warehouse', 'zone']
108
+ const sort = (sortings || []).reduce(
109
+ (acc, sort) => ({
110
+ ...acc,
111
+ [arrChildSortData.indexOf(sort.name) >= 0 ? sort.name + '.name' : 'iv.' + sort.name]: sort.desc
112
+ ? 'DESC'
113
+ : 'ASC'
114
+ }),
115
+ {}
116
+ )
117
+ qb.orderBy(sort)
118
+ }
119
+
120
+ if (locationSortingRules?.length > 0) {
121
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }) => {
122
+ qb.addOrderBy(`location.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
123
+ })
124
+ }
125
+
126
+ let [items, total] = await qb.getManyAndCount()
127
+
128
+ items = await Promise.all(
129
+ items.map(async (item: Inventory) => {
130
+ let inventoryChangeCount = await getRepository(InventoryChange).count({
131
+ where: { inventory: item.id }
132
+ })
133
+
134
+ const selectedQty = item.lockedQty ? item.lockedQty : 0
135
+ const selectedUomValue = item.lockedUomValue ? item.lockedUomValue : 0
136
+
137
+ return {
138
+ ...item,
139
+ changeCount: inventoryChangeCount,
140
+ remainQty: item.qty - selectedQty,
141
+ remainUomValue: item.uomValue - selectedUomValue
142
+ }
143
+ })
144
+ )
145
+
146
+ return { items, total }
147
+ }
148
+
149
+ @Directive('@privilege(category: "inventory", privilege: "query")')
150
+ @Query(returns => Inventory)
151
+ async inventory(@Arg('palletId') palletId: string, @Ctx() context: any): Promise<Inventory> {
152
+ const { domain }: { domain: Domain } = context.state
153
+
154
+ return await getRepository(Inventory).findOne({
155
+ where: { domain: domain, palletId },
156
+ relations: ['domain', 'bizplace', 'product', 'location', 'warehouse', 'creator', 'updater']
157
+ })
158
+ }
159
+
160
+ @Directive('@privilege(category: "inventory", privilege: "query")')
161
+ @Query(returns => Inventory)
162
+ async inventoryByPallet(@Arg('palletId') palletId: string, @Ctx() context: any): Promise<Inventory> {
163
+ const { domain }: { domain: Domain } = context.state
164
+
165
+ return await getRepository(Inventory).findOne({
166
+ where: { domain, palletId, status: Not(Equal(INVENTORY_STATUS.TERMINATED)) },
167
+ relations: ['domain', 'bizplace', 'product', 'location', 'warehouse', 'creator', 'updater']
168
+ })
169
+ }
170
+
171
+ @Directive('@privilege(category: "inventory", privilege: "query")')
172
+ @Directive('@transaction')
173
+ @Query(returns => InventoryList)
174
+ async inventoriesByProduct(@Args() params: ListParam, @Ctx() context: any): Promise<InventoryList> {
175
+ try {
176
+ const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state
177
+ let permittedBizplaceIds: string[] = await getPermittedBizplaceIds(domain, user)
178
+ const partnersCompanyBizplaces: Bizplace[] = await getPartnersCompanyBizplaces(domain, user)
179
+
180
+ const page = params.pagination.page
181
+ const limit = params.pagination.limit
182
+
183
+ let bizplaceFilter = params.filters.find(filter => filter.name == 'bizplace')
184
+ let productFilter = params.filters.find(filter => filter.name == 'product')
185
+ let productTypeFilter = params.filters.find(filter => filter.name == 'type')
186
+ let availableStockFilter = params.filters.find(filter => filter.name == 'availableStock')
187
+ let lowStockFilter = params.filters.find(filter => filter.name == 'lowStock')
188
+ let overStockFilter = params.filters.find(filter => filter.name == 'overStock')
189
+
190
+ if (bizplaceFilter) {
191
+ const bizplaceQueryBuilder: SelectQueryBuilder<Bizplace> = getRepository(Bizplace).createQueryBuilder('b')
192
+ bizplaceQueryBuilder
193
+ .innerJoin('companies', 'c2', ' c2.domain_id = b.domain_id')
194
+ .innerJoin('bizplaces', 'b2', 'b2.company_id = c2.id')
195
+ .where('b2.id = :bizplaceId', { bizplaceId: bizplaceFilter.value })
196
+
197
+ let bizplaceList = await bizplaceQueryBuilder.getMany()
198
+
199
+ permittedBizplaceIds = [
200
+ ...permittedBizplaceIds.filter(itm => itm == bizplaceFilter.value),
201
+ ...bizplaceList.map(bz => bz.id),
202
+ ...partnersCompanyBizplaces.map(biz => biz.id)
203
+ ]
204
+ }
205
+
206
+ let bizplaceQuery = ''
207
+ if (permittedBizplaceIds.length > 0) {
208
+ bizplaceQuery = `AND EXISTS (
209
+ SELECT * FROM (VALUES ${permittedBizplaceIds.map(id => `('${id}')`).join(',')})
210
+ AS bizFilter(bizplace_id)
211
+ WHERE bizFilter.bizplace_id::uuid = "Inventory"."bizplace_id"
212
+ )`
213
+ } else {
214
+ bizplaceQuery = `1 = 0`
215
+ }
216
+
217
+ let productQuery = ''
218
+ if (productFilter) {
219
+ let productValue = productFilter.value
220
+ .toLowerCase()
221
+ .split(',')
222
+ .map(prod => {
223
+ return "'%" + prod.trim().replace(/'/g, "''") + "%'"
224
+ })
225
+ .join(',')
226
+ productQuery = `AND (
227
+ Lower("Product"."name") LIKE ANY(ARRAY[${productValue}])
228
+ OR Lower("Product"."sku") LIKE ANY(ARRAY[${productValue}])
229
+ OR Lower("Product"."description") LIKE ANY(ARRAY[${productValue}])
230
+ OR Lower("ProductRef"."name") LIKE ANY(ARRAY[${productValue}])
231
+ OR Lower("ProductRef"."sku") LIKE ANY(ARRAY[${productValue}])
232
+ OR Lower("ProductRef"."description") LIKE ANY(ARRAY[${productValue}])
233
+ )`
234
+ }
235
+
236
+ if (productTypeFilter) {
237
+ let productTypeValue = productTypeFilter.value
238
+ .toLowerCase()
239
+ .split(',')
240
+ .map(prod => {
241
+ return "'%" + prod.trim().replace(/'/g, "''") + "%'"
242
+ })
243
+ .join(',')
244
+ productQuery =
245
+ productQuery +
246
+ ` AND (
247
+ Lower("Product"."type") LIKE ANY(ARRAY[${productTypeValue}])
248
+ )`
249
+ }
250
+
251
+ let availableStockQuery = ''
252
+ if (availableStockFilter?.value) {
253
+ availableStockQuery = ` AND SUM("Inventory"."qty") > 0`
254
+ }
255
+
256
+ let thresholdQuery = ''
257
+ if (lowStockFilter?.value) {
258
+ thresholdQuery = `AND COALESCE("ProductDetailBizplaceSetting"."min_qty", "Product"."min_qty",0) > SUM("Inventory"."qty")`
259
+ }
260
+
261
+ if (overStockFilter?.value) {
262
+ thresholdQuery = `AND COALESCE("ProductDetailBizplaceSetting"."max_qty", "Product"."max_qty",0) > 0 AND
263
+ COALESCE("ProductDetailBizplaceSetting"."max_qty", "Product"."max_qty",0) < SUM("Inventory"."qty")`
264
+ }
265
+
266
+ await tx.query(
267
+ `
268
+ create temp table temp_inv_history AS
269
+ (
270
+ SELECT "Product"."id" AS "id", "Product"."sku" AS "sku", "Product"."name" AS "name", "Product"."type" AS "type", "Product"."description" AS "description",
271
+ "Product"."weight" AS "weight", "ProductRef"."name" AS "productRefName",
272
+ "ProductRef"."description" AS "productRefDesciption", "Bizplace"."name" AS "bizplaceName", SUM("Inventory"."qty") AS "qty" ,
273
+ CASE WHEN SUM("Inventory"."qty") > 0 THEN SUM(COALESCE("Inventory"."unit_cost", 0) * "Inventory"."qty")/ SUM("Inventory"."qty") ELSE 0 END AS "averageUnitCost",
274
+ COALESCE("ProductDetailBizplaceSetting"."min_qty", "Product"."min_qty",0) AS "minQty",
275
+ COALESCE("ProductDetailBizplaceSetting"."max_qty", "Product"."max_qty",0) AS "maxQty"
276
+ FROM "inventories" "Inventory"
277
+ LEFT JOIN "products" "Product" ON "Product"."id"="Inventory"."product_id"
278
+ LEFT JOIN "product_details" "ProductDetails" ON "ProductDetails"."product_id" = "Product"."id"
279
+ AND "ProductDetails"."is_default"
280
+ LEFT JOIN "product_detail_bizplace_settings" "ProductDetailBizplaceSetting" ON "ProductDetailBizplaceSetting"."product_detail_id" = "ProductDetails"."id"
281
+ AND "ProductDetailBizplaceSetting"."domain_id" = "Inventory"."domain_id"
282
+ LEFT JOIN "products" "ProductRef" ON "ProductRef"."id"="Product"."product_ref_id"
283
+ INNER JOIN "bizplaces" "Bizplace" ON "Bizplace"."id"="Inventory"."bizplace_id"
284
+ WHERE "Inventory"."qty" >= 0
285
+ AND "Inventory"."domain_id" = $1
286
+ ${bizplaceQuery}
287
+ ${productQuery}
288
+ GROUP BY "Product"."id", "ProductRef"."id", "Bizplace"."id", "ProductDetailBizplaceSetting"."id"
289
+ HAVING 1 = 1
290
+ ${availableStockQuery}
291
+ ${thresholdQuery}
292
+ )`,
293
+ [domain.id]
294
+ )
295
+
296
+ const results: any = await tx.query(
297
+ `
298
+ SELECT * FROM temp_inv_history
299
+ ORDER BY "bizplaceName", "sku"
300
+ OFFSET $1 LIMIT $2
301
+ `,
302
+ [(page - 1) * limit, limit]
303
+ )
304
+
305
+ const total: any = await tx.query(`SELECT COUNT(*) FROM temp_inv_history`)
306
+
307
+ tx.query(`drop table temp_inv_history`)
308
+
309
+ return {
310
+ items: results.map((item: any) => {
311
+ return {
312
+ product: {
313
+ id: item.id,
314
+ name: item.name,
315
+ sku: item.sku,
316
+ description: item.description,
317
+ type: item.type,
318
+ weight: item.weight,
319
+ productRef: { name: item.productRefName, description: item.productRefDesciption },
320
+ bizplace: { name: item.bizplaceName },
321
+ minQty: item.minQty,
322
+ maxQty: item.maxQty
323
+ },
324
+ averageUnitCost: item.averageUnitCost,
325
+ qty: item.qty
326
+ }
327
+ }),
328
+ total: total[0].count
329
+ }
330
+ } catch (error) {
331
+ throw error
332
+ }
333
+ }
334
+
335
+ @Directive('@transaction')
336
+ @Query(returns => InventoryList)
337
+ async inventoriesByStratege(
338
+ @Arg('worksheetId') worksheetId: string,
339
+ @Arg('batchId') batchId: string,
340
+ @Arg('bizplaceId') bizplaceId: string,
341
+ @Arg('productName') productName: string,
342
+ @Arg('productSku') productSku: string,
343
+ @Arg('packingType') packingType: string,
344
+ @Arg('pickingStrategy') pickingStrategy: string,
345
+ @Arg('locationSortingRules', type => [Sorting]) locationSortingRules: Sorting[],
346
+ @Ctx() context: any
347
+ ): Promise<InventoryList> {
348
+ const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
349
+
350
+ const inventoryAssignmentSetting: Setting = await tx.getRepository(Setting).findOne({
351
+ where: { domain, name: 'rule-for-inventory-assignment' }
352
+ })
353
+
354
+ if (!locationSortingRules && inventoryAssignmentSetting) {
355
+ locationSortingRules = []
356
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value)
357
+ for (const key in locationSetting) {
358
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })
359
+ }
360
+ }
361
+
362
+ return inventoriesByStrategy(
363
+ { worksheetId, batchId, bizplaceId, productName, productSku, packingType, pickingStrategy, locationSortingRules },
364
+ tx
365
+ )
366
+ }
367
+
368
+ @Directive('@transaction')
369
+ @Query(returns => Boolean)
370
+ async checkProductIdenticality(
371
+ @Arg('palletA') palletA: string,
372
+ @Arg('palletB') palletB: string,
373
+ @Ctx() context: any
374
+ ): Promise<Boolean> {
375
+ const { tx }: { tx: EntityManager } = context.state
376
+ const invRepo: Repository<Inventory> = tx.getRepository(Inventory)
377
+ const invA: Inventory = await invRepo.findOne({
378
+ where: { domain: context.state.domain, palletId: palletA, status: INVENTORY_STATUS.STORED },
379
+ relations: ['product']
380
+ })
381
+
382
+ const invB: Inventory = await invRepo.findOne({
383
+ where: { domain: context.state.domain, palletId: palletB, status: INVENTORY_STATUS.STORED },
384
+ relations: ['product']
385
+ })
386
+
387
+ return (
388
+ invA?.batchId === invB?.batchId &&
389
+ invA?.product?.id === invB?.product?.id &&
390
+ invA?.packingType === invB?.packingType
391
+ )
392
+ }
393
+
394
+ @Query(returns => Boolean)
395
+ async checkCartonIdenticality(
396
+ @Arg('cartonA') cartonA: string,
397
+ @Arg('palletA') palletA: string,
398
+ @Arg('cartonB') cartonB: string,
399
+ @Ctx() context: any
400
+ ) {
401
+ const invRepo: Repository<Inventory> = getRepository(Inventory)
402
+ const invA: Inventory = await invRepo.findOne({
403
+ where: { domain: context.state.domain, palletId: palletA, cartonId: cartonA, status: INVENTORY_STATUS.STORED },
404
+ relations: ['product']
405
+ })
406
+
407
+ const invB: Inventory = await invRepo.findOne({
408
+ where: {
409
+ domain: context.state.domain,
410
+ packingType: invA.packingType,
411
+ packingSize: invA.packingSize,
412
+ product: invA.product,
413
+ cartonId: cartonB,
414
+ status: INVENTORY_STATUS.STORED
415
+ },
416
+ relations: ['product']
417
+ })
418
+
419
+ return (
420
+ invA?.expirationDate === invB?.expirationDate &&
421
+ invA?.product?.id === invB?.product?.id &&
422
+ invA?.packingType === invB?.packingType &&
423
+ invA?.packingSize === invB?.packingSize
424
+ )
425
+ }
426
+
427
+ @Query(returns => Boolean)
428
+ async checkInventoryOwner(
429
+ @Arg('palletId') palletId: string,
430
+ @Arg('bizplaceName') bizplaceName: string,
431
+ @Ctx() context: any
432
+ ): Promise<Boolean> {
433
+ const invRepo: Repository<Inventory> = getRepository(Inventory)
434
+ const bizRepo: Repository<Bizplace> = getRepository(Bizplace)
435
+
436
+ const inventory: Inventory = await invRepo.findOne({
437
+ where: { domain: context.state.domain, palletId, status: INVENTORY_STATUS.STORED },
438
+ relations: ['bizplace']
439
+ })
440
+
441
+ if (!inventory) throw new Error('This inventory status is not stored.')
442
+
443
+ const ownerBizplace: Bizplace = await bizRepo.findOne({
444
+ where: { name: bizplaceName }
445
+ })
446
+
447
+ const foundBizplace: Bizplace = inventory.bizplace
448
+
449
+ return Boolean(ownerBizplace.id === foundBizplace.id)
450
+ }
451
+
452
+ @Directive('@privilege(category: "inventory", privilege: "query")')
453
+ @Query(returns => InventoryBundleGroupDetail)
454
+ async inventoriesByBundle(
455
+ @Ctx() context: any,
456
+ @Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
457
+ @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
458
+ @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
459
+ ): Promise<InventoryBundleGroupDetail> {
460
+ const { domain, user }: { domain: Domain; user: User } = context.state
461
+
462
+ const params = { filters, pagination }
463
+
464
+ const productBundleId = params.filters.filter(x => x.name === 'productBundleId')[0].value
465
+ if (!productBundleId) {
466
+ throw new Error('params product bundle is missing')
467
+ }
468
+
469
+ const bundleReleaseQty: number = params.filters.filter(x => x.name === 'bundleReleaseQty')[0].value
470
+
471
+ // remove productBundleId and bundleReleaseQty from params.filters
472
+ params.filters = params.filters.filter(x => x.name !== 'productBundleId' && x.name !== 'bundleReleaseQty')
473
+
474
+ if (!params.filters.find((filter: any) => filter.name === 'bizplace_id')) {
475
+ params.filters.push({
476
+ name: 'bizplace_id',
477
+ operator: 'in',
478
+ value: await getPermittedBizplaceIds(domain, user),
479
+ relation: true
480
+ })
481
+ }
482
+
483
+ const remainOnlyParam: { name: string; operator: string; value: boolean } = params?.filters?.find(
484
+ (f: { name: string; operator: string; value: any }) => f.name === 'remainOnly'
485
+ )
486
+
487
+ let remainOnly: boolean = false
488
+ if (typeof remainOnlyParam?.value !== 'undefined') {
489
+ remainOnly = remainOnlyParam.value
490
+ params.filters = params.filters.filter(
491
+ (f: { name: string; operator: string; value: any }) => f.name !== 'remainOnly'
492
+ )
493
+ }
494
+
495
+ const unlockOnlyParam: { name: string; operator: string; value: boolean } = params?.filters?.find(
496
+ (f: { name: string; operator: string; value: any }) => f.name === 'unlockOnly'
497
+ )
498
+
499
+ let unlockOnly: boolean = false
500
+ if (typeof unlockOnlyParam?.value !== 'undefined') {
501
+ unlockOnly = unlockOnlyParam.value
502
+ params.filters = params.filters.filter(
503
+ (f: { name: string; operator: string; value: any }) => f.name !== 'unlockOnly'
504
+ )
505
+ }
506
+
507
+ const productBundleSettings: ProductBundleSetting[] = await getRepository(ProductBundleSetting).find({
508
+ where: { productBundle: productBundleId },
509
+ relations: ['product', 'productBundle']
510
+ })
511
+
512
+ if (!productBundleSettings.length) {
513
+ throw new Error('product bundle settings is not found')
514
+ }
515
+
516
+ const qb: SelectQueryBuilder<Inventory> = getRepository(Inventory).createQueryBuilder('iv')
517
+ buildQuery(qb, params, context)
518
+
519
+ qb.select('iv.product_id', 'productId')
520
+ .addSelect('iv.batch_id', 'batchId')
521
+ .addSelect('iv.batch_id_ref', 'batchIdRef')
522
+ .addSelect('iv.packing_type', 'packingType')
523
+ .addSelect('SUM(iv.qty)', 'qty')
524
+ .addSelect('SUM(iv.locked_qty)', 'lockedQty')
525
+ .addSelect('SUM(iv.uom_value)', 'uomValue')
526
+ .addSelect('SUM(iv.locked_uom_value)', 'lockedUomValue')
527
+ .addSelect('prd.sku', 'productSku')
528
+ .addSelect('prd.name', 'productName')
529
+ .addSelect('prd.description', 'productDescription')
530
+ .addSelect('prd.type', 'productType')
531
+ .addSelect('prd.primary_unit', 'uom')
532
+ .leftJoin('iv.product', 'prd')
533
+
534
+ if (remainOnly) {
535
+ qb.andWhere('iv.qty > 0')
536
+ .andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0')
537
+ .andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0')
538
+ }
539
+
540
+ if (unlockOnly) {
541
+ qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END = 0')
542
+ }
543
+
544
+ qb.andWhere('iv.product_id IN (:...productIds)', {
545
+ productIds: productBundleSettings.map(productBundle => productBundle.product.id)
546
+ })
547
+ .groupBy('iv.product_id')
548
+ .addGroupBy('iv.batch_id')
549
+ .addGroupBy('iv.batch_id_ref')
550
+ .addGroupBy('iv.packing_type')
551
+ .addGroupBy('prd.sku')
552
+ .addGroupBy('prd.name')
553
+ .addGroupBy('prd.description')
554
+ .addGroupBy('prd.type')
555
+ .addOrderBy('prd.name')
556
+ .addGroupBy('prd.primary_unit')
557
+ .addOrderBy('iv.batch_id')
558
+
559
+ let bundleGroup = await qb.getRawMany()
560
+
561
+ bundleGroup = bundleGroup.map((item: any) => {
562
+ return {
563
+ ...item,
564
+ bundleId: productBundleId,
565
+ remainQty: item.qty - (item.lockedQty ? item.lockedQty : 0),
566
+ remainUomValue: item.uomValue - (item.lockedUomValue ? item.lockedUomValue : 0),
567
+ uom: item.uom,
568
+ bundleQty: productBundleSettings.filter(pbs => pbs.product.id === item.productId)[0].bundleQty
569
+ }
570
+ })
571
+
572
+ const bundleSetting = productBundleSettings.map(pbs => {
573
+ return {
574
+ id: pbs.id,
575
+ productId: pbs.product.id,
576
+ bundleId: pbs.productBundle.id,
577
+ bundleQty: pbs.bundleQty,
578
+ releaseQty: bundleReleaseQty * pbs.bundleQty,
579
+ productReleaseQty: 0,
580
+ productReleaseUomValue: 0
581
+ }
582
+ })
583
+
584
+ /** ************************ **/
585
+ bundleGroup = bundleGroup
586
+ .map(group => {
587
+ const uomValue = group.remainUomValue / group.remainQty
588
+
589
+ bundleSetting.forEach(setting => {
590
+ let assigned = false
591
+ let releaseQty = 0
592
+ let releaseUomValue = 0
593
+
594
+ if (group.productId === setting.productId) {
595
+ if (setting.productReleaseQty < setting.releaseQty) {
596
+ assigned = true
597
+ const leftQty = setting.releaseQty - setting.productReleaseQty
598
+ releaseQty = leftQty > group.remainQty ? group.remainQty : leftQty
599
+ releaseUomValue = Math.round(releaseQty * uomValue * 100) / 100
600
+ setting.productReleaseQty += releaseQty
601
+ setting.productReleaseUomValue += releaseUomValue
602
+ }
603
+
604
+ group.assigned = assigned
605
+ group.releaseQty = releaseQty
606
+ group.releaseUomValue = releaseUomValue
607
+ group.releaseUomValueWithUom = `${releaseUomValue} ${group.uom}`
608
+ }
609
+ })
610
+
611
+ return group
612
+ })
613
+ .filter(group => group.assigned)
614
+ /** ************************ **/
615
+
616
+ return { bundleGroup, bundleSetting }
617
+ }
618
+
619
+ @FieldResolver(type => Domain)
620
+ async domain(@Root() inventory: Inventory) {
621
+ return await getRepository(Domain).findOne(inventory.domainId)
622
+ }
623
+
624
+ @FieldResolver(type => User)
625
+ async updater(@Root() inventory: Inventory) {
626
+ return await getRepository(User).findOne(inventory.updaterId)
627
+ }
628
+
629
+ @FieldResolver(type => User)
630
+ async creator(@Root() inventory: Inventory) {
631
+ return await getRepository(User).findOne(inventory.creatorId)
632
+ }
633
+ }
634
+
635
+ export async function inventoriesByStrategy(
636
+ { worksheetId, batchId, bizplaceId, productName, productSku, packingType, pickingStrategy, locationSortingRules },
637
+ trxMgr: EntityManager
638
+ ) {
639
+ const qb = await trxMgr.getRepository(Inventory).createQueryBuilder('INV')
640
+ qb.leftJoinAndSelect('INV.product', 'PROD')
641
+ .leftJoinAndSelect('INV.location', 'LOC')
642
+ .addSelect(subQuery =>
643
+ subQuery
644
+ .select('COALESCE(SUM(release_qty), 0)', 'releaseQty')
645
+ .from('order_inventories', 'OI')
646
+ .where('"OI"."inventory_id" = "INV"."id"')
647
+ .andWhere("\"OI\".\"status\" IN ('PENDING', 'PENDING_RECEIVE', 'PENDING_WORKSHEET', 'PENDING_SPLIT')")
648
+ .andWhere('"OI"."ref_worksheet_id" <> :worksheetId', { worksheetId: worksheetId })
649
+ )
650
+ .addSelect(subQuery =>
651
+ subQuery
652
+ .select('COALESCE(SUM(release_uom_value), 0)', 'releaseUomValue')
653
+ .from('order_inventories', 'OI')
654
+ .where('"OI"."inventory_id" = "INV"."id"')
655
+ .andWhere("\"OI\".\"status\" IN ('PENDING', 'PENDING_RECEIVE', 'PENDING_WORKSHEET', 'PENDING_SPLIT')")
656
+ .andWhere('"OI"."ref_worksheet_id" <> :worksheetId', { worksheetId: worksheetId })
657
+ )
658
+ .andWhere('"PROD"."name" = :productName')
659
+ .andWhere('"PROD"."sku" = :productSku')
660
+ .andWhere('"INV"."packing_type" = :packingType')
661
+ .andWhere('"INV"."status" = :status', { status: 'STORED' })
662
+ .setParameters({
663
+ productName,
664
+ productSku,
665
+ packingType
666
+ })
667
+
668
+ if (batchId !== '') {
669
+ qb.andWhere('"INV"."batch_id" = :batchId', { batchId })
670
+ }
671
+
672
+ if (bizplaceId) {
673
+ qb.andWhere('"INV"."bizplace_id" = :bizplaceId', { bizplaceId: bizplaceId })
674
+ }
675
+
676
+ switch (pickingStrategy.toUpperCase()) {
677
+ case 'FIFO':
678
+ qb.orderBy('"INV"."created_at"', 'ASC')
679
+ if (locationSortingRules?.length > 0) {
680
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {
681
+ idx === 0
682
+ ? qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
683
+ : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
684
+ })
685
+ }
686
+ break
687
+
688
+ case 'LIFO':
689
+ qb.orderBy('"INV"."created_at"', 'DESC')
690
+ if (locationSortingRules?.length > 0) {
691
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {
692
+ idx === 0
693
+ ? qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
694
+ : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
695
+ })
696
+ }
697
+ break
698
+
699
+ case 'FEFO':
700
+ qb.orderBy('"INV"."expiration_date"', 'ASC')
701
+ if (locationSortingRules?.length > 0) {
702
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {
703
+ idx === 0
704
+ ? qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
705
+ : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
706
+ })
707
+ }
708
+ break
709
+
710
+ case 'LOCATION':
711
+ if (locationSortingRules?.length > 0) {
712
+ locationSortingRules.forEach((rule: { name: string; desc: boolean }, idx: number) => {
713
+ idx === 0
714
+ ? qb.orderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
715
+ : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
716
+ })
717
+ } else qb.orderBy('"LOC"."name"', 'DESC')
718
+ break
719
+ default:
720
+ qb.orderBy('"INV"."created_at"', 'ASC')
721
+
722
+ break
723
+ }
724
+
725
+ const { entities, raw } = await qb.getRawAndEntities()
726
+ const items = entities
727
+ .map((inv: Inventory, idx: number) => {
728
+ const qty: number = inv?.qty > 0 ? inv.qty : 0
729
+ const uomValue: number = inv?.uomValue > 0 ? inv.uomValue : 0
730
+ const lockedQty: number = inv.lockedQty || 0
731
+ const lockedUomValue: number = inv.lockedUomValue || 0
732
+ const releaseQty: number = parseInt(raw[idx].releaseQty) || 0
733
+ const releaseUomValue: number = parseFloat(raw[idx].releaseUomValue) || 0
734
+
735
+ return {
736
+ ...inv,
737
+ qty: qty - lockedQty - releaseQty,
738
+ uomValue: uomValue - lockedUomValue - releaseUomValue
739
+ }
740
+ })
741
+ .filter((inv: Inventory) => inv.qty)
742
+
743
+ const total: number = await qb.getCount()
744
+ return { items, total }
745
+ }