@things-factory/operato-pms 3.8.0 → 3.8.13

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 (305) hide show
  1. package/client/bootstrap.js +20 -7
  2. package/client/component/block-selector-popup.js +125 -24
  3. package/client/component/driver-selector-popup.js +223 -0
  4. package/client/component/mill-selector-popup.js +200 -0
  5. package/client/component/tracked-plantation-setting.js +113 -0
  6. package/client/component/truck-selector-popup.js +202 -0
  7. package/client/menu.js +34 -2
  8. package/client/pages/constants/index.js +1 -0
  9. package/client/pages/constants/organization.js +5 -0
  10. package/client/pages/dispatchment/daily-dispatch-detail.js +57 -18
  11. package/client/pages/dispatchment/dispatchment-create-record.js +140 -13
  12. package/client/pages/dispatchment/dispatchment-list.js +26 -34
  13. package/client/pages/harvesting/daily-harvesting-detail.js +55 -18
  14. package/client/pages/harvesting/edit-harvesting-record.js +89 -23
  15. package/client/pages/harvesting/harvesting-create-record.js +102 -16
  16. package/client/pages/harvesting/harvesting-list.js +58 -12
  17. package/client/pages/inventory/inventory-field-bunches.js +6 -4
  18. package/client/pages/loading/daily-loading-detail.js +47 -93
  19. package/client/pages/loading/edit-loading-record.js +75 -294
  20. package/client/pages/loading/loading-create-record.js +52 -329
  21. package/client/pages/loading/loading-list.js +20 -83
  22. package/client/pages/master/block.js +1 -0
  23. package/client/pages/master/company.js +26 -13
  24. package/client/pages/master/home.js +67 -65
  25. package/client/pages/master/ramp.js +1 -0
  26. package/client/pages/master/staff.js +54 -3
  27. package/client/pages/master/truck.js +416 -0
  28. package/client/pages/report/home.js +72 -65
  29. package/client/pages/report/report-daily-ffb-dispatch-and-production.js +393 -0
  30. package/client/pages/report/report-daily-production.js +38 -6
  31. package/client/pages/report/report-daily-staff-harvest.js +50 -5
  32. package/client/pages/report/report-ffb-tonnage-between-individual-block.js +393 -0
  33. package/client/pages/report/report-monthly-ffb-sale.js +413 -0
  34. package/client/pages/report/report-monthly-production.js +33 -4
  35. package/client/pages/report/report-yearly-production.js +24 -8
  36. package/client/pages/setting/home.js +107 -0
  37. package/client/pages/setting/plantation-setting.js +109 -0
  38. package/client/route.js +25 -0
  39. package/dist-server/constants/index.js +1 -0
  40. package/dist-server/constants/index.js.map +1 -1
  41. package/dist-server/constants/organization.js +9 -0
  42. package/dist-server/constants/organization.js.map +1 -0
  43. package/dist-server/controllers/render-dispatchment.js +1 -1
  44. package/dist-server/controllers/render-dispatchment.js.map +1 -1
  45. package/dist-server/entities/daily-dispatch.js +19 -4
  46. package/dist-server/entities/daily-dispatch.js.map +1 -1
  47. package/dist-server/entities/daily-harvest-detail.js +9 -11
  48. package/dist-server/entities/daily-harvest-detail.js.map +1 -1
  49. package/dist-server/entities/daily-harvest.js +16 -6
  50. package/dist-server/entities/daily-harvest.js.map +1 -1
  51. package/dist-server/entities/daily-loading-detail.js +14 -6
  52. package/dist-server/entities/daily-loading-detail.js.map +1 -1
  53. package/dist-server/entities/daily-loading.js +3 -11
  54. package/dist-server/entities/daily-loading.js.map +1 -1
  55. package/dist-server/entities/index.js +7 -1
  56. package/dist-server/entities/index.js.map +1 -1
  57. package/dist-server/entities/organization-staff.js +5 -1
  58. package/dist-server/entities/organization-staff.js.map +1 -1
  59. package/dist-server/entities/plantation-inventory.js +4 -10
  60. package/dist-server/entities/plantation-inventory.js.map +1 -1
  61. package/dist-server/entities/plantation-setting.js +76 -0
  62. package/dist-server/entities/plantation-setting.js.map +1 -0
  63. package/dist-server/entities/truck.js +77 -0
  64. package/dist-server/entities/truck.js.map +1 -0
  65. package/dist-server/graphql/resolvers/daily-dispatch/daily-dispatch-query.js +13 -2
  66. package/dist-server/graphql/resolvers/daily-dispatch/daily-dispatch-query.js.map +1 -1
  67. package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js +25 -11
  68. package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js.map +1 -1
  69. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js +3 -2
  70. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js.map +1 -1
  71. package/dist-server/graphql/resolvers/daily-harvest/daily-harvest-query.js +3 -1
  72. package/dist-server/graphql/resolvers/daily-harvest/daily-harvest-query.js.map +1 -1
  73. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js +21 -2
  74. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js.map +1 -1
  75. package/dist-server/graphql/resolvers/daily-harvest/update-daily-harvest.js +8 -2
  76. package/dist-server/graphql/resolvers/daily-harvest/update-daily-harvest.js.map +1 -1
  77. package/dist-server/graphql/resolvers/daily-loading/daily-loading-query.js +4 -6
  78. package/dist-server/graphql/resolvers/daily-loading/daily-loading-query.js.map +1 -1
  79. package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js +20 -54
  80. package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js.map +1 -1
  81. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js +17 -105
  82. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js.map +1 -1
  83. package/dist-server/graphql/resolvers/dashboard/dashboard-query.js +82 -0
  84. package/dist-server/graphql/resolvers/dashboard/dashboard-query.js.map +1 -0
  85. package/dist-server/graphql/resolvers/dashboard/index.js +8 -0
  86. package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -0
  87. package/dist-server/graphql/resolvers/index.js +9 -6
  88. package/dist-server/graphql/resolvers/index.js.map +1 -1
  89. package/dist-server/graphql/resolvers/organization-staff/organization-staff-query.js +7 -3
  90. package/dist-server/graphql/resolvers/organization-staff/organization-staff-query.js.map +1 -1
  91. package/dist-server/graphql/resolvers/plantation-setting/create-plantation-setting.js +12 -0
  92. package/dist-server/graphql/resolvers/plantation-setting/create-plantation-setting.js.map +1 -0
  93. package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-setting.js +13 -0
  94. package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-setting.js.map +1 -0
  95. package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-settings.js +16 -0
  96. package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-settings.js.map +1 -0
  97. package/dist-server/graphql/resolvers/plantation-setting/index.js +15 -0
  98. package/dist-server/graphql/resolvers/plantation-setting/index.js.map +1 -0
  99. package/dist-server/graphql/resolvers/plantation-setting/plantation-setting-query.js +33 -0
  100. package/dist-server/graphql/resolvers/plantation-setting/plantation-setting-query.js.map +1 -0
  101. package/dist-server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.js +31 -0
  102. package/dist-server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.js.map +1 -0
  103. package/dist-server/graphql/resolvers/plantation-setting/update-plantation-setting.js +16 -0
  104. package/dist-server/graphql/resolvers/plantation-setting/update-plantation-setting.js.map +1 -0
  105. package/dist-server/graphql/resolvers/report/daily-production-reports.js +46 -33
  106. package/dist-server/graphql/resolvers/report/daily-production-reports.js.map +1 -1
  107. package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js +21 -10
  108. package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js.map +1 -1
  109. package/dist-server/graphql/resolvers/report/index.js +4 -1
  110. package/dist-server/graphql/resolvers/report/index.js.map +1 -1
  111. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js +89 -0
  112. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js.map +1 -0
  113. package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js +89 -0
  114. package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js.map +1 -0
  115. package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js +87 -0
  116. package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js.map +1 -0
  117. package/dist-server/graphql/resolvers/report/monthly-production-reports.js +46 -31
  118. package/dist-server/graphql/resolvers/report/monthly-production-reports.js.map +1 -1
  119. package/dist-server/graphql/resolvers/report/yearly-production-reports.js +38 -28
  120. package/dist-server/graphql/resolvers/report/yearly-production-reports.js.map +1 -1
  121. package/dist-server/graphql/resolvers/truck/delete-trucks.js +18 -0
  122. package/dist-server/graphql/resolvers/truck/delete-trucks.js.map +1 -0
  123. package/dist-server/graphql/resolvers/truck/index.js +12 -0
  124. package/dist-server/graphql/resolvers/truck/index.js.map +1 -0
  125. package/dist-server/graphql/resolvers/truck/truck-query.js +46 -0
  126. package/dist-server/graphql/resolvers/truck/truck-query.js.map +1 -0
  127. package/dist-server/graphql/resolvers/truck/update-multiple-truck.js +40 -0
  128. package/dist-server/graphql/resolvers/truck/update-multiple-truck.js.map +1 -0
  129. package/dist-server/graphql/types/daily-dispatch/daily-dispatch-patch.js +4 -1
  130. package/dist-server/graphql/types/daily-dispatch/daily-dispatch-patch.js.map +1 -1
  131. package/dist-server/graphql/types/daily-dispatch/daily-dispatch.js +4 -1
  132. package/dist-server/graphql/types/daily-dispatch/daily-dispatch.js.map +1 -1
  133. package/dist-server/graphql/types/daily-dispatch/index.js +6 -1
  134. package/dist-server/graphql/types/daily-dispatch/index.js.map +1 -1
  135. package/dist-server/graphql/types/daily-dispatch/new-daily-dispatch.js +4 -1
  136. package/dist-server/graphql/types/daily-dispatch/new-daily-dispatch.js.map +1 -1
  137. package/dist-server/graphql/types/daily-harvest/daily-harvest-patch.js +5 -2
  138. package/dist-server/graphql/types/daily-harvest/daily-harvest-patch.js.map +1 -1
  139. package/dist-server/graphql/types/daily-harvest/daily-harvest.js +3 -0
  140. package/dist-server/graphql/types/daily-harvest/daily-harvest.js.map +1 -1
  141. package/dist-server/graphql/types/daily-harvest/new-daily-harvest.js +4 -1
  142. package/dist-server/graphql/types/daily-harvest/new-daily-harvest.js.map +1 -1
  143. package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.js +1 -0
  144. package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.js.map +1 -1
  145. package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail.js +1 -0
  146. package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail.js.map +1 -1
  147. package/dist-server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.js +1 -0
  148. package/dist-server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.js.map +1 -1
  149. package/dist-server/graphql/types/daily-loading/daily-loading-patch.js +0 -2
  150. package/dist-server/graphql/types/daily-loading/daily-loading-patch.js.map +1 -1
  151. package/dist-server/graphql/types/daily-loading/daily-loading.js +0 -2
  152. package/dist-server/graphql/types/daily-loading/daily-loading.js.map +1 -1
  153. package/dist-server/graphql/types/daily-loading/new-daily-loading.js +0 -2
  154. package/dist-server/graphql/types/daily-loading/new-daily-loading.js.map +1 -1
  155. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js +6 -3
  156. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js.map +1 -1
  157. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail.js +3 -0
  158. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail.js.map +1 -1
  159. package/dist-server/graphql/types/daily-loading-detail/new-daily-loading-detail.js +6 -3
  160. package/dist-server/graphql/types/daily-loading-detail/new-daily-loading-detail.js.map +1 -1
  161. package/dist-server/graphql/types/dashboard/bunches-count.js +15 -0
  162. package/dist-server/graphql/types/dashboard/bunches-count.js.map +1 -0
  163. package/dist-server/graphql/types/dashboard/index.js +32 -0
  164. package/dist-server/graphql/types/dashboard/index.js.map +1 -0
  165. package/dist-server/graphql/types/dashboard/productions-overview.js +15 -0
  166. package/dist-server/graphql/types/dashboard/productions-overview.js.map +1 -0
  167. package/dist-server/graphql/types/dashboard/tonnage-bunches-inventories.js +14 -0
  168. package/dist-server/graphql/types/dashboard/tonnage-bunches-inventories.js.map +1 -0
  169. package/dist-server/graphql/types/dashboard/tonnage-production.js +17 -0
  170. package/dist-server/graphql/types/dashboard/tonnage-production.js.map +1 -0
  171. package/dist-server/graphql/types/dashboard/yield-production.js +17 -0
  172. package/dist-server/graphql/types/dashboard/yield-production.js.map +1 -0
  173. package/dist-server/graphql/types/index.js +9 -6
  174. package/dist-server/graphql/types/index.js.map +1 -1
  175. package/dist-server/graphql/types/organization-staff/organization-staff-patch.js +2 -0
  176. package/dist-server/graphql/types/organization-staff/organization-staff-patch.js.map +1 -1
  177. package/dist-server/graphql/types/organization-staff/organization-staff.js +3 -0
  178. package/dist-server/graphql/types/organization-staff/organization-staff.js.map +1 -1
  179. package/dist-server/graphql/types/plantation-setting/index.js +36 -0
  180. package/dist-server/graphql/types/plantation-setting/index.js.map +1 -0
  181. package/dist-server/graphql/types/plantation-setting/new-plantation-setting.js +16 -0
  182. package/dist-server/graphql/types/plantation-setting/new-plantation-setting.js.map +1 -0
  183. package/dist-server/graphql/types/plantation-setting/plantation-setting-list.js +14 -0
  184. package/dist-server/graphql/types/plantation-setting/plantation-setting-list.js.map +1 -0
  185. package/dist-server/graphql/types/plantation-setting/plantation-setting-patch.js +18 -0
  186. package/dist-server/graphql/types/plantation-setting/plantation-setting-patch.js.map +1 -0
  187. package/dist-server/graphql/types/plantation-setting/plantation-setting.js +22 -0
  188. package/dist-server/graphql/types/plantation-setting/plantation-setting.js.map +1 -0
  189. package/dist-server/graphql/types/report/index.js +20 -0
  190. package/dist-server/graphql/types/report/index.js.map +1 -1
  191. package/dist-server/graphql/types/report/monthly-block-dispatch-report-list.js +14 -0
  192. package/dist-server/graphql/types/report/monthly-block-dispatch-report-list.js.map +1 -0
  193. package/dist-server/graphql/types/report/monthly-block-dispatch-report.js +19 -0
  194. package/dist-server/graphql/types/report/monthly-block-dispatch-report.js.map +1 -0
  195. package/dist-server/graphql/types/report/monthly-dispatch-summary-report-list.js +14 -0
  196. package/dist-server/graphql/types/report/monthly-dispatch-summary-report-list.js.map +1 -0
  197. package/dist-server/graphql/types/report/monthly-dispatch-summary-report.js +25 -0
  198. package/dist-server/graphql/types/report/monthly-dispatch-summary-report.js.map +1 -0
  199. package/dist-server/graphql/types/report/monthly-ffb-sale-report-list.js +14 -0
  200. package/dist-server/graphql/types/report/monthly-ffb-sale-report-list.js.map +1 -0
  201. package/dist-server/graphql/types/report/monthly-ffb-sale-report.js +24 -0
  202. package/dist-server/graphql/types/report/monthly-ffb-sale-report.js.map +1 -0
  203. package/dist-server/graphql/types/truck/index.js +33 -0
  204. package/dist-server/graphql/types/truck/index.js.map +1 -0
  205. package/dist-server/graphql/types/truck/new-truck.js +14 -0
  206. package/dist-server/graphql/types/truck/new-truck.js.map +1 -0
  207. package/dist-server/graphql/types/truck/truck-list.js +14 -0
  208. package/dist-server/graphql/types/truck/truck-list.js.map +1 -0
  209. package/dist-server/graphql/types/truck/truck-patch.js +17 -0
  210. package/dist-server/graphql/types/truck/truck-patch.js.map +1 -0
  211. package/dist-server/graphql/types/truck/truck.js +22 -0
  212. package/dist-server/graphql/types/truck/truck.js.map +1 -0
  213. package/package.json +2 -2
  214. package/server/constants/index.ts +1 -0
  215. package/server/constants/organization.ts +5 -0
  216. package/server/controllers/render-dispatchment.ts +1 -1
  217. package/server/entities/daily-dispatch.ts +21 -5
  218. package/server/entities/daily-harvest-detail.ts +10 -11
  219. package/server/entities/daily-harvest.ts +16 -7
  220. package/server/entities/daily-loading-detail.ts +14 -6
  221. package/server/entities/daily-loading.ts +7 -11
  222. package/server/entities/index.ts +6 -0
  223. package/server/entities/organization-staff.ts +6 -1
  224. package/server/entities/plantation-inventory.ts +6 -10
  225. package/server/entities/plantation-setting.ts +60 -0
  226. package/server/entities/truck.ts +58 -0
  227. package/server/graphql/resolvers/daily-dispatch/daily-dispatch-query.ts +15 -2
  228. package/server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.ts +40 -14
  229. package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +6 -2
  230. package/server/graphql/resolvers/daily-harvest/daily-harvest-query.ts +7 -2
  231. package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +50 -4
  232. package/server/graphql/resolvers/daily-harvest/update-daily-harvest.ts +12 -2
  233. package/server/graphql/resolvers/daily-loading/daily-loading-query.ts +6 -6
  234. package/server/graphql/resolvers/daily-loading/generate-daily-loading.ts +27 -109
  235. package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +27 -213
  236. package/server/graphql/resolvers/dashboard/dashboard-query.ts +96 -0
  237. package/server/graphql/resolvers/dashboard/index.ts +5 -0
  238. package/server/graphql/resolvers/index.ts +10 -6
  239. package/server/graphql/resolvers/organization-staff/organization-staff-query.ts +13 -4
  240. package/server/graphql/resolvers/plantation-setting/create-plantation-setting.ts +16 -0
  241. package/server/graphql/resolvers/plantation-setting/delete-plantation-setting.ts +13 -0
  242. package/server/graphql/resolvers/plantation-setting/delete-plantation-settings.ts +16 -0
  243. package/server/graphql/resolvers/plantation-setting/index.ts +19 -0
  244. package/server/graphql/resolvers/plantation-setting/plantation-setting-query.ts +38 -0
  245. package/server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.ts +46 -0
  246. package/server/graphql/resolvers/plantation-setting/update-plantation-setting.ts +19 -0
  247. package/server/graphql/resolvers/report/daily-production-reports.ts +55 -44
  248. package/server/graphql/resolvers/report/daily-staff-harvest-reports.ts +28 -20
  249. package/server/graphql/resolvers/report/index.ts +7 -1
  250. package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +112 -0
  251. package/server/graphql/resolvers/report/monthly-dispatch-summary-reports.ts +110 -0
  252. package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +107 -0
  253. package/server/graphql/resolvers/report/monthly-production-reports.ts +54 -40
  254. package/server/graphql/resolvers/report/yearly-production-reports.ts +43 -38
  255. package/server/graphql/resolvers/truck/delete-trucks.ts +21 -0
  256. package/server/graphql/resolvers/truck/index.ts +12 -0
  257. package/server/graphql/resolvers/truck/truck-query.ts +52 -0
  258. package/server/graphql/resolvers/truck/update-multiple-truck.ts +55 -0
  259. package/server/graphql/types/daily-dispatch/daily-dispatch-patch.ts +4 -1
  260. package/server/graphql/types/daily-dispatch/daily-dispatch.ts +4 -1
  261. package/server/graphql/types/daily-dispatch/index.ts +6 -1
  262. package/server/graphql/types/daily-dispatch/new-daily-dispatch.ts +4 -1
  263. package/server/graphql/types/daily-harvest/daily-harvest-patch.ts +5 -2
  264. package/server/graphql/types/daily-harvest/daily-harvest.ts +3 -0
  265. package/server/graphql/types/daily-harvest/new-daily-harvest.ts +4 -1
  266. package/server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.ts +1 -0
  267. package/server/graphql/types/daily-harvest-detail/daily-harvest-detail.ts +1 -0
  268. package/server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.ts +1 -0
  269. package/server/graphql/types/daily-loading/daily-loading-patch.ts +0 -2
  270. package/server/graphql/types/daily-loading/daily-loading.ts +0 -2
  271. package/server/graphql/types/daily-loading/new-daily-loading.ts +0 -2
  272. package/server/graphql/types/daily-loading-detail/daily-loading-detail-patch.ts +6 -3
  273. package/server/graphql/types/daily-loading-detail/daily-loading-detail.ts +3 -0
  274. package/server/graphql/types/daily-loading-detail/new-daily-loading-detail.ts +6 -3
  275. package/server/graphql/types/dashboard/bunches-count.ts +9 -0
  276. package/server/graphql/types/dashboard/index.ts +17 -0
  277. package/server/graphql/types/dashboard/productions-overview.ts +9 -0
  278. package/server/graphql/types/dashboard/tonnage-bunches-inventories.ts +8 -0
  279. package/server/graphql/types/dashboard/tonnage-production.ts +11 -0
  280. package/server/graphql/types/dashboard/yield-production.ts +11 -0
  281. package/server/graphql/types/index.ts +10 -6
  282. package/server/graphql/types/organization-staff/organization-staff-patch.ts +2 -0
  283. package/server/graphql/types/organization-staff/organization-staff.ts +3 -0
  284. package/server/graphql/types/plantation-setting/index.ts +21 -0
  285. package/server/graphql/types/plantation-setting/new-plantation-setting.ts +10 -0
  286. package/server/graphql/types/plantation-setting/plantation-setting-list.ts +8 -0
  287. package/server/graphql/types/plantation-setting/plantation-setting-patch.ts +12 -0
  288. package/server/graphql/types/plantation-setting/plantation-setting.ts +16 -0
  289. package/server/graphql/types/report/index.ts +20 -0
  290. package/server/graphql/types/report/monthly-block-dispatch-report-list.ts +7 -0
  291. package/server/graphql/types/report/monthly-block-dispatch-report.ts +13 -0
  292. package/server/graphql/types/report/monthly-dispatch-summary-report-list.ts +7 -0
  293. package/server/graphql/types/report/monthly-dispatch-summary-report.ts +19 -0
  294. package/server/graphql/types/report/monthly-ffb-sale-report-list.ts +7 -0
  295. package/server/graphql/types/report/monthly-ffb-sale-report.ts +18 -0
  296. package/server/graphql/types/truck/index.ts +18 -0
  297. package/server/graphql/types/truck/new-truck.ts +8 -0
  298. package/server/graphql/types/truck/truck-list.ts +8 -0
  299. package/server/graphql/types/truck/truck-patch.ts +11 -0
  300. package/server/graphql/types/truck/truck.ts +16 -0
  301. package/things-factory.config.js +27 -1
  302. package/translations/en.json +78 -16
  303. package/translations/ko.json +77 -48
  304. package/translations/ms.json +74 -45
  305. package/translations/zh.json +77 -48
@@ -1,5 +1,7 @@
1
- import { ListParam } from '@things-factory/shell'
2
1
  import { EntityManager } from 'typeorm'
2
+
3
+ import { ListParam } from '@things-factory/shell'
4
+
3
5
  import { Block } from '../../../entities'
4
6
 
5
7
  export const dailyProductionReports = {
@@ -31,25 +33,42 @@ export const dailyProductionReports = {
31
33
  .findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
32
34
 
33
35
  await tx.query(`
34
- CREATE TEMP TABLE temp_records AS (
35
- select block_id, coalesce(sum(field_bunches),0) AS today_field_bunches,
36
- coalesce(sum(ramp_weight),0) AS today_ramp_weight,
36
+ CREATE TEMP TABLE temp_blocks on commit drop AS (
37
+ WITH RECURSIVE b AS (
38
+ SELECT $1::uuid as block_id, * FROM blocks b
39
+ WHERE id = $1::uuid
40
+ AND b.deleted_at IS null
41
+ UNION ALL
42
+ SELECT $1::uuid as block_id, cb.* FROM blocks cb
43
+ INNER JOIN b ON b.id = cb.parent_block_id
44
+ WHERE cb.deleted_at IS null
45
+ )
46
+ SELECT * FROM b
47
+ );
48
+ `, [block.id]
49
+ )
50
+
51
+ await tx.query(`
52
+ CREATE TEMP TABLE temp_records on commit drop AS (
53
+ select blk.block_id, coalesce(sum(field_bunches),0) AS today_field_bunches,
54
+ round(coalesce(sum(ramp_weight),0)::numeric,4) AS today_ramp_weight,
37
55
  sum(case when transaction_type = 'HARVEST' then field_bunches else 0 end) as today_bunch_harvest,
38
56
  sum(case when transaction_type = 'LOADING' then -field_bunches else 0 end) as today_bunch_collected,
39
- sum(case when transaction_type = 'LOADING' then ramp_weight else 0 end) as today_ramp_weight_collected,
40
- sum(case when transaction_type = 'DISPATCHMENT' then -ramp_weight else 0 end) as today_weight_dispatch,
57
+ round(sum(case when transaction_type = 'LOADING' then ramp_weight else 0 end)::numeric,4) as today_ramp_weight_collected,
58
+ round(sum(case when transaction_type = 'DISPATCHMENT' then -ramp_weight else 0 end)::numeric,4) as today_weight_dispatch,
41
59
  transaction_date
42
- from record_transactions t2
60
+ from record_transactions t2
61
+ inner join temp_blocks blk on blk.id = t2.block_id
43
62
  where transaction_date <= $1
44
- and block_id = $2
45
- group by block_id, transaction_date
63
+ group by blk.block_id, transaction_date
46
64
  )
47
- `,
48
- [toDateString, block.id])
65
+ `,
66
+ [toDateString]
67
+ )
49
68
 
50
69
  await tx.query(
51
70
  `
52
- create temp table temp_daily_production_data as (
71
+ create temp table temp_daily_production_data on commit drop as (
53
72
  select *,
54
73
  prev_bunch_bal_in_field + today_bunch_harvest as today_bunch_in_field,
55
74
  prev_bunch_bal_in_field + today_bunch_harvest - today_bunch_collected as today_bunch_bal_in_field,
@@ -88,60 +107,52 @@ export const dailyProductionReports = {
88
107
  order by transaction_date
89
108
  ) as dt on dt.transaction_date::date = md.dateDay
90
109
  LEFT JOIN (
91
- select sum(harvesting_round) AS today_harvesting_round, sum(coverage) AS today_hectare_cover, harvest_date from daily_harvests dh
110
+ select sum(harvesting_round) AS today_harvesting_round, sum(coverage) AS today_hectare_cover, harvest_date
111
+ from daily_harvests dh
112
+ inner join temp_blocks blk on blk.id = dh.block_id
92
113
  where harvest_date between $1 and $2
93
- and block_id = $3
94
- group by block_id, harvest_date
114
+ group by blk.block_id, harvest_date
95
115
  ) as thr ON thr.harvest_date::date = md.dateDay
96
116
  LEFT JOIN (
97
- select count(*) AS today_out_turn, dh.harvest_date from daily_harvest_details dhd
117
+ select count(*) AS today_out_turn, dh.harvest_date
118
+ from daily_harvest_details dhd
98
119
  inner join daily_harvests dh on dh.id = dhd.daily_harvest_id
120
+ inner join temp_blocks blk on blk.id = dh.block_id
99
121
  where dh.harvest_date between $1 and $2
100
- and block_id = $3
101
- GROUP BY dh.block_id, dh.harvest_date
122
+ GROUP BY blk.block_id, dh.harvest_date
102
123
  ) as tot ON tot.harvest_date::date = md.dateDay
103
124
  ) dt
104
125
  )`,
105
126
  [fromDateString, toDateString, block.id]
106
127
  )
107
128
 
108
- const result: any = await tx.query(
109
- `
129
+ const result: any = await tx.query(`
110
130
  select * from temp_daily_production_data dt
111
- `
112
- )
131
+ `)
113
132
 
114
- const total: any = await tx.query(
115
- `
133
+ const total: any = await tx.query(`
116
134
  select count(*) from temp_daily_production_data
117
- `
118
- )
119
-
120
- await tx.query(
121
- `
122
- drop table temp_daily_production_data, temp_records
123
- `
124
- )
135
+ `)
125
136
 
126
137
  let items = result.map(itm => {
127
138
  return {
128
139
  block: itm.block,
129
140
  dateDay: itm.date_day,
130
- diffInBunches: itm.diff_in_bunches,
131
- prevBunchBalInField: itm.prev_bunch_bal_in_field,
132
- prevWeightBalInRamp: itm.prev_weight_bal_in_ramp,
133
- toDateBunchHarvest: itm.to_date_bunch_harvest,
141
+ diffInBunches: parseFloat(itm.diff_in_bunches).toFixed(1),
142
+ prevBunchBalInField: parseFloat(itm.prev_bunch_bal_in_field).toFixed(1),
143
+ prevWeightBalInRamp: parseFloat(itm.prev_weight_bal_in_ramp).toFixed(4),
144
+ toDateBunchHarvest: parseFloat(itm.to_date_bunch_harvest).toFixed(1),
134
145
  toDateOutTurn: itm.to_date_out_turn,
135
- toDateWeightDispatch: itm.to_date_weight_dispatch,
136
- todayBunchBalInField: itm.today_bunch_bal_in_field,
137
- todayBunchCollected: itm.today_bunch_collected,
138
- todayBunchHarvest: itm.today_bunch_harvest,
139
- todayBunchInField: itm.today_bunch_in_field,
146
+ toDateWeightDispatch: parseFloat(itm.to_date_weight_dispatch).toFixed(4),
147
+ todayBunchBalInField: parseFloat(itm.today_bunch_bal_in_field).toFixed(1),
148
+ todayBunchCollected: parseFloat(itm.today_bunch_collected).toFixed(1),
149
+ todayBunchHarvest: parseFloat(itm.today_bunch_harvest).toFixed(1),
150
+ todayBunchInField: parseFloat(itm.today_bunch_in_field).toFixed(1),
140
151
  todayHarvestingRound: itm.today_harvesting_round,
141
- todayHectareCover: itm.today_hectare_cover,
152
+ todayHectareCover: parseFloat(itm.today_hectare_cover).toFixed(4),
142
153
  todayOutTurn: itm.today_out_turn,
143
- todayWeightBalInRamp: itm.today_weight_bal_in_ramp,
144
- todayWeightDispatch: itm.today_weight_dispatch
154
+ todayWeightBalInRamp: parseFloat(itm.today_weight_bal_in_ramp).toFixed(4),
155
+ todayWeightDispatch: parseFloat(itm.today_weight_dispatch).toFixed(4)
145
156
  }
146
157
  })
147
158
 
@@ -1,5 +1,7 @@
1
- import { ListParam } from '@things-factory/shell'
2
1
  import { EntityManager } from 'typeorm'
2
+
3
+ import { ListParam } from '@things-factory/shell'
4
+
3
5
  import { Block } from '../../../entities'
4
6
 
5
7
  export const dailyStaffHarvestReports = {
@@ -30,43 +32,49 @@ export const dailyStaffHarvestReports = {
30
32
  .getRepository(Block)
31
33
  .findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
32
34
 
35
+ await tx.query(`
36
+ CREATE TEMP TABLE temp_blocks on commit drop AS (
37
+ WITH RECURSIVE b AS (
38
+ SELECT $1::uuid as block_id, * FROM blocks b
39
+ WHERE id = $1::uuid
40
+ AND b.deleted_at IS null
41
+ UNION ALL
42
+ SELECT $1::uuid as block_id, cb.* FROM blocks cb
43
+ INNER JOIN b ON b.id = cb.parent_block_id
44
+ WHERE cb.deleted_at IS null
45
+ )
46
+ SELECT * FROM b
47
+ );
48
+ `, [block.id]
49
+ )
50
+
33
51
  await tx.query(
34
52
  `
35
- create temp table temp_daily_staff_harvest_data as (
53
+ create temp table temp_daily_staff_harvest_data on commit drop as (
36
54
  select "harvestDate"::varchar as "harvestDate", "blockName"::varchar, "staffName"::varchar, sum("totalBunchHarvested")::varchar as "totalBunchHarvested" from (
37
55
  select dh.harvest_date::date as "harvestDate", b2."name" as "blockName", os."name" as "staffName",
38
56
  dhd.total_bunch_harvested as "totalBunchHarvested"
39
57
  from daily_harvest_details dhd
40
58
  inner join daily_harvests dh on dh.id = dhd.daily_harvest_id
59
+ inner join temp_blocks blk on blk.id = dh.block_id
41
60
  inner join organization_staffs os on os.id = dhd.organization_staff_id
42
- inner join blocks b2 on b2.id = dh.block_id
43
- where dh.block_id = $1
44
- and dh.harvest_date::date between $2 and $3
61
+ inner join blocks b2 on b2.id = blk.block_id
62
+ where dh.harvest_date::date between $1 and $2
45
63
  ) as dt
46
64
  group by "harvestDate", "blockName", "staffName"
47
65
  order by "staffName", "harvestDate"
48
66
  )
49
67
  `,
50
- [block.id, fromDateString, toDateString]
68
+ [fromDateString, toDateString]
51
69
  )
52
70
 
53
- const result: any = await tx.query(
54
- `
71
+ const result: any = await tx.query(`
55
72
  select * from temp_daily_staff_harvest_data dt
56
- `
57
- )
73
+ `)
58
74
 
59
- const total: any = await tx.query(
60
- `
75
+ const total: any = await tx.query(`
61
76
  select count(*) from temp_daily_staff_harvest_data
62
- `
63
- )
64
-
65
- await tx.query(
66
- `
67
- drop table temp_daily_staff_harvest_data
68
- `
69
- )
77
+ `)
70
78
 
71
79
  return { items: result, total: total[0].count }
72
80
  } catch (error) {
@@ -1,14 +1,20 @@
1
1
  import { dailyProductionReports } from './daily-production-reports'
2
2
  import { monthlyProductionReports } from './monthly-production-reports'
3
+ import { monthlyDispatchSummaryReports } from './monthly-dispatch-summary-reports'
3
4
  import { yearlyProductionReports } from './yearly-production-reports'
4
5
  import { dailyStaffHarvestReports } from './daily-staff-harvest-reports'
6
+ import { monthlyBlockDispatchReports } from './monthly-block-dispatch-reports'
7
+ import { monthlyFfbSaleReports } from './monthly-ffb-sale-reports'
5
8
 
6
9
  export const ReportResolver = {
7
10
  Query: {
8
11
  ...dailyProductionReports,
9
12
  ...monthlyProductionReports,
13
+ ...monthlyDispatchSummaryReports,
10
14
  ...yearlyProductionReports,
11
- ...dailyStaffHarvestReports
15
+ ...dailyStaffHarvestReports,
16
+ ...monthlyBlockDispatchReports,
17
+ ...monthlyFfbSaleReports
12
18
  },
13
19
  Mutation: {}
14
20
  }
@@ -0,0 +1,112 @@
1
+ import { EntityManager, getRepository, Not, IsNull } from 'typeorm'
2
+
3
+ import { ListParam, Domain } from '@things-factory/shell'
4
+ import { Ramp } from '../../../entities'
5
+
6
+ export const monthlyBlockDispatchReports = {
7
+ async monthlyBlockDispatchReports(_: any, params: ListParam, context: any) {
8
+ try {
9
+ const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
10
+
11
+ let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
+ let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
13
+
14
+ let fromDate = new Date(year, month - 1, 1)
15
+ let toDate = new Date(year, month, 1)
16
+ toDate.setDate(toDate.getDate() - 1)
17
+
18
+ let fromDateString = [
19
+ fromDate.getFullYear().toString(),
20
+ String(fromDate.getMonth() + 1).padStart(2, '0'),
21
+ '01'
22
+ ].join('-')
23
+
24
+ let toDateString = [
25
+ toDate.getFullYear().toString(),
26
+ String(toDate.getMonth() + 1).padStart(2, '0'),
27
+ String(toDate.getDate()).padStart(2, '0')
28
+ ].join('-')
29
+
30
+ let ramps = await getRepository(Ramp).find({
31
+ where: { domain: domain.id, deletedAt: IsNull() },
32
+ relations: ['block']
33
+ })
34
+
35
+
36
+ // -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
37
+ // [fromDateString, toDateString]
38
+ await tx.query(`create extension if not exists tablefunc`)
39
+
40
+ await tx.query(
41
+ `
42
+ CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
43
+ SELECT dd.id, b.name AS block_name,
44
+ COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0) AS weight
45
+ FROM daily_dispatches dd
46
+ INNER JOIN daily_dispatch_details ddd ON ddd.daily_dispatch_id = dd.id
47
+ INNER JOIN ramps r ON r.id = ddd.ramp_id
48
+ INNER JOIN blocks b ON b.id = r.block_id
49
+ WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
50
+ )
51
+ `, [fromDateString, toDateString]
52
+ )
53
+
54
+ await tx.query(
55
+ `
56
+ CREATE TEMP TABLE pivot_block_dispatch ON COMMIT DROP AS (
57
+ SELECT * FROM crosstab(
58
+ $$SELECT rbd.id, rbd.block_name, round(rbd.weight, 2 )::varchar FROM raw_block_dispatch rbd$$,
59
+ $$SELECT b.name FROM ramps r INNER JOIN blocks b ON b.id = r.block_id WHERE r.deleted_at IS NULL$$
60
+ ) AS ("id" uuid, ${ramps.map(ramp => `"${ramp.block.name}" varchar`).join(',')})
61
+ );
62
+ `)
63
+
64
+ await tx.query(
65
+ `
66
+ CREATE TEMP TABLE temp_monthly_production_data ON COMMIT DROP AS (
67
+ SELECT
68
+ ROW_NUMBER() OVER(
69
+ PARTITION BY dd.dispatch_at::date
70
+ ORDER BY dd.dispatch_at
71
+ ) as rn
72
+ , dd.id, COALESCE(c.name, 'UNKNOWN') AS "dispatchTo"
73
+ , dd.transport_no as "lorryNo"
74
+ , dd.driver_identification as "driverIdentification"
75
+ , TO_CHAR(dd.dispatch_at:: DATE, 'dd/mm/yyyy') as "date"
76
+ , row_to_json((SELECT d FROM (SELECT ${ramps.map(ramp => `pbd."${ramp.block.name}"`).join(',')}) d))::varchar as "blockData"
77
+ , (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.id = dd.id) AS "today"
78
+ FROM daily_dispatches dd
79
+ INNER JOIN pivot_block_dispatch pbd ON pbd.id = dd.id
80
+ LEFT JOIN organizations c ON c.id = dd.dispatch_to_id
81
+ );
82
+ `
83
+ )
84
+
85
+ const result: any = await tx.query(
86
+ `
87
+ select "id", "dispatchTo", "lorryNo", "driverIdentification",
88
+ CASE WHEN "rn" = 1 THEN "date" ELSE '' END AS "date", "blockData", "today",
89
+ coalesce(sum(today) over (order by date asc rows between unbounded preceding and current row), 0) as "todate"
90
+ from temp_monthly_production_data dt
91
+ `
92
+ )
93
+
94
+ const total: any = await tx.query(
95
+ `
96
+ select count(*) from temp_monthly_production_data
97
+ `
98
+ )
99
+
100
+
101
+ return {
102
+ items: result.map(itm => {
103
+ return {
104
+ ...itm
105
+ }
106
+ }), total: total[0].count
107
+ }
108
+ } catch (error) {
109
+ throw error
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,110 @@
1
+ import { EntityManager, getRepository, Not, IsNull } from 'typeorm'
2
+
3
+ import { ListParam, Domain } from '@things-factory/shell'
4
+ import { Organization } from '../../../entities'
5
+
6
+ export const monthlyDispatchSummaryReports = {
7
+ async monthlyDispatchSummaryReports(_: any, params: ListParam, context: any) {
8
+ try {
9
+ const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
10
+
11
+ let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
+ let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
13
+
14
+ let fromDate = new Date(year, month - 1, 1)
15
+ let toDate = new Date(year, month, 1)
16
+ toDate.setDate(toDate.getDate() - 1)
17
+
18
+ let fromDateString = [
19
+ fromDate.getFullYear().toString(),
20
+ String(fromDate.getMonth() + 1).padStart(2, '0'),
21
+ '01'
22
+ ].join('-')
23
+
24
+ let toDateString = [
25
+ toDate.getFullYear().toString(),
26
+ String(toDate.getMonth() + 1).padStart(2, '0'),
27
+ String(toDate.getDate()).padStart(2, '0')
28
+ ].join('-')
29
+
30
+
31
+ const org = await tx
32
+ .getRepository(Organization)
33
+ .findOneOrFail({ where: { domain: domain.id, deletedAt: IsNull(), id: params.filters.filter(x => x.name == 'organization')[0].value } })
34
+
35
+
36
+ await tx.query(
37
+ `
38
+ CREATE TEMP TABLE raw_dispatch ON COMMIT DROP AS (
39
+ SELECT dd.*,
40
+ COALESCE((SELECT SUM(COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0)) FROM daily_dispatch_details ddd WHERE ddd.daily_dispatch_id = dd.id),0) AS tonnage
41
+ FROM daily_dispatches dd
42
+ WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
43
+ AND dd.dispatch_to_id = $3
44
+ );
45
+ `, [fromDateString, toDateString, org.id]
46
+ )
47
+
48
+ await tx.query(
49
+ `
50
+ CREATE TEMP TABLE temp_monthly_dispatch_to_mill_data ON COMMIT DROP AS (
51
+ SELECT "id", dispatch_at AS "dispatchAt", transport_no AS "lorryNo",
52
+ driver_identification AS "driverIdentification", chit_no AS "chitNo", round(COALESCE(percentage,0)::numeric, 2)::varchar AS "percentage",
53
+ COALESCE(diapatch_to_name, 'UNKNOWN') AS "dispatchTo", "tonnage",
54
+ CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todayAvg",
55
+ CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todateAvg",
56
+ CASE WHEN reverse_rn = 1 THEN round(coalesce(sum(tonnage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0),2)::varchar ELSE '' END AS "today",
57
+ CASE WHEN reverse_rn = 1 THEN round(coalesce(sum(tonnage) over (PARTITION BY dispatch_to_id ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0),2)::varchar ELSE '' END AS "todate"
58
+ FROM (
59
+ SELECT
60
+ ROW_NUMBER() OVER(
61
+ PARTITION BY rbd.dispatch_to_id, rbd.dispatch_at::date
62
+ ORDER BY rbd.dispatch_at ASC
63
+ ) as forward_rn
64
+ , ROW_NUMBER() OVER(
65
+ PARTITION BY rbd.dispatch_to_id, rbd.dispatch_at::date
66
+ ORDER BY rbd.dispatch_at DESC
67
+ ) as reverse_rn
68
+ , rbd.id
69
+ , rbd.dispatch_at
70
+ , rbd.transport_no
71
+ , rbd.driver_identification
72
+ , rbd.external_driver
73
+ , rbd.chit_no
74
+ , rbd.percentage
75
+ , rbd.dispatch_to_id
76
+ , c.name AS diapatch_to_name
77
+ , rbd.tonnage
78
+ FROM raw_dispatch rbd
79
+ LEFT JOIN organizations c ON c.id = rbd.dispatch_to_id
80
+ ORDER BY rbd.dispatch_to_id, rbd.dispatch_at
81
+ ) src
82
+ );
83
+ `)
84
+
85
+
86
+ const result: any = await tx.query(
87
+ `
88
+ select * from temp_monthly_dispatch_to_mill_data dt
89
+ `
90
+ )
91
+
92
+ const total: any = await tx.query(
93
+ `
94
+ select count(*) from temp_monthly_dispatch_to_mill_data
95
+ `
96
+ )
97
+
98
+
99
+ return {
100
+ items: result.map(itm => {
101
+ return {
102
+ ...itm
103
+ }
104
+ }), total: total[0].count
105
+ }
106
+ } catch (error) {
107
+ throw error
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,107 @@
1
+ import { EntityManager, getRepository, Not, IsNull } from 'typeorm'
2
+
3
+ import { ListParam, Domain } from '@things-factory/shell'
4
+ import { Ramp } from '../../../entities'
5
+
6
+ export const monthlyFfbSaleReports = {
7
+ async monthlyFfbSaleReports(_: any, params: ListParam, context: any) {
8
+ try {
9
+ const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
10
+
11
+ let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
+ let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
13
+ let organization = params.filters.find(x => x.name == 'organization')
14
+
15
+ let fromDate = new Date(year, month - 1, 1)
16
+ let toDate = new Date(year, month, 1)
17
+ toDate.setDate(toDate.getDate() - 1)
18
+
19
+ let fromDateString = [
20
+ fromDate.getFullYear().toString(),
21
+ String(fromDate.getMonth() + 1).padStart(2, '0'),
22
+ '01'
23
+ ].join('-')
24
+
25
+ let toDateString = [
26
+ toDate.getFullYear().toString(),
27
+ String(toDate.getMonth() + 1).padStart(2, '0'),
28
+ String(toDate.getDate()).padStart(2, '0')
29
+ ].join('-')
30
+
31
+ await tx.query(
32
+ `
33
+ CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
34
+ SELECT dd.*,
35
+ COALESCE((SELECT SUM(COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0)) FROM daily_dispatch_details ddd WHERE ddd.daily_dispatch_id = dd.id),0) AS tonnage
36
+ FROM daily_dispatches dd
37
+ WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
38
+ ${organization ? organization.value == 'null' ? `AND dd.dispatch_to_id IS NULL` : `AND dd.dispatch_to_id = '${organization.value}'` : ''}
39
+ );
40
+ `, [fromDateString, toDateString]
41
+ )
42
+
43
+ await tx.query(
44
+ `
45
+ CREATE TEMP TABLE temp_monthly_dispatch_to_mill_data ON COMMIT DROP AS (
46
+ SELECT "id", dispatch_at, transport_no AS "lorryNo",
47
+ driver_identification AS "driverIdentification", chit_no AS "chitNo", round(COALESCE(percentage,0)::numeric, 2)::varchar AS "percentage",
48
+ COALESCE(diapatch_to_name, 'UNKNOWN') AS "dispatchTo", round(COALESCE(tonnage,0), 2)::varchar AS "tonnage",
49
+ CASE WHEN forward_rn = 1 THEN dispatch_at::date::varchar ELSE '' END AS "dispatchAt",
50
+ CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todayAvg",
51
+ CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todateAvg",
52
+ CASE WHEN reverse_rn = 1 THEN round(coalesce(sum(tonnage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0),2)::varchar ELSE '' END AS "today",
53
+ CASE WHEN reverse_rn = 1 THEN round(coalesce(sum(tonnage) over (PARTITION BY dispatch_to_id ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0),2)::varchar ELSE '' END AS "todate"
54
+ FROM (
55
+ SELECT
56
+ ROW_NUMBER() OVER(
57
+ PARTITION BY rbd.dispatch_at::date
58
+ ORDER BY rbd.dispatch_at ASC
59
+ ) as forward_rn
60
+ , ROW_NUMBER() OVER(
61
+ PARTITION BY rbd.dispatch_at::date
62
+ ORDER BY rbd.dispatch_at DESC
63
+ ) as reverse_rn
64
+ , rbd.id
65
+ , rbd.dispatch_at
66
+ , rbd.transport_no
67
+ , rbd.driver_identification
68
+ , rbd.external_driver
69
+ , rbd.chit_no
70
+ , rbd.percentage
71
+ , rbd.dispatch_to_id
72
+ , c.name AS diapatch_to_name
73
+ , rbd.tonnage
74
+ FROM raw_block_dispatch rbd
75
+ LEFT JOIN organizations c ON c.id = rbd.dispatch_to_id
76
+ ORDER BY rbd.dispatch_to_id, rbd.dispatch_at
77
+ ) src
78
+ );
79
+ `
80
+ )
81
+
82
+ const result: any = await tx.query(
83
+ `
84
+ SELECT * FROM temp_monthly_dispatch_to_mill_data
85
+ ORDER BY "dispatch_at";
86
+ `
87
+ )
88
+
89
+ const total: any = await tx.query(
90
+ `
91
+ select count(*) from temp_monthly_dispatch_to_mill_data;
92
+ `
93
+ )
94
+
95
+
96
+ return {
97
+ items: result.map(itm => {
98
+ return {
99
+ ...itm
100
+ }
101
+ }), total: total[0].count
102
+ }
103
+ } catch (error) {
104
+ throw error
105
+ }
106
+ }
107
+ }