@things-factory/operato-pms 3.7.5 → 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 +29 -29
  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
@@ -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
+ }
@@ -1,6 +1,7 @@
1
- import { ListParam } from '@things-factory/shell'
2
1
  import { EntityManager } from 'typeorm'
3
2
 
3
+ import { ListParam } from '@things-factory/shell'
4
+
4
5
  export const monthlyProductionReports = {
5
6
  async monthlyProductionReports(_: any, params: ListParam, context: any) {
6
7
  try {
@@ -25,79 +26,92 @@ export const monthlyProductionReports = {
25
26
  String(toDate.getDate()).padStart(2, '0')
26
27
  ].join('-')
27
28
 
29
+ await tx.query(`
30
+ CREATE TEMP TABLE temp_blocks on commit drop AS (
31
+ WITH RECURSIVE b AS (
32
+ SELECT b.id AS block_id, * FROM blocks b
33
+ WHERE b.deleted_at IS null
34
+ UNION ALL
35
+ SELECT b.id AS block_id, cb.* FROM blocks cb
36
+ INNER JOIN b ON b.id = cb.parent_block_id
37
+ WHERE cb.deleted_at IS null
38
+ )
39
+ SELECT block_id, id, name FROM b GROUP BY block_id, id, name ORDER BY block_id, id, name
40
+ );
41
+ `)
42
+
28
43
  await tx.query(
29
44
  `
30
- create temp table temp_monthly_production_data as (
45
+ create temp table temp_monthly_production_data on commit drop as (
31
46
  select b.id, b.name as "block",
32
47
  coalesce(harvest.total_harvester, 0) as "totalHarvester",
33
48
  coalesce(harvest.out_turn,0) as "totalOutTurn",
34
49
  coalesce(harvest.days_worked,0) as "daysWorked",
35
- round(coalesce((harvest.out_turn / harvest.days_worked),0)::DECIMAL, 2)::TEXT as "avgOutTurn",
36
- round(coalesce((harvest.total_bunch_harvested),0)::DECIMAL, 2)::text as "totalBunchHarvested",
37
- round(coalesce((loading.total_weight_loaded),0)::DECIMAL, 2)::TEXT as "production",
38
- round(case when loading.total_weight_loaded <> 0 then (loading.total_bunch_loaded / loading.total_weight_loaded * 1000) else '0' end::DECIMAL, 2)::TEXT as "bunchesPerTon",
39
- round(case when loading.total_bunch_loaded <> 0 then (loading.total_weight_loaded / loading.total_bunch_loaded * 1000) else '0' end::DECIMAL, 2)::TEXT as "bunchesWt",
40
- round(coalesce((harvest.total_bunch_harvested / harvest.total_harvest_coverage),0)::DECIMAL, 2)::TEXT as "bunchesPerHectar",
41
- round(coalesce((harvest.total_harvest_coverage / block_details.total_hectarage),0)::DECIMAL, 2)::TEXT as "harvestingRd",
42
- round(coalesce((loading.total_weight_loaded / harvest.out_turn),0)::DECIMAL, 2)::TEXT as "productivities",
43
- coalesce(block_details.total_hectarage::text, '-') as "hectarage",
44
- round(coalesce((loading.total_bunch_loaded / block_details.total_hectarage),0)::DECIMAL, 2)::TEXT as "yieldPerHectar",
45
- round(coalesce((harvest.total_harvest_coverage / harvest.days_worked),0)::DECIMAL, 2)::TEXT as "coveragePerDay",
46
- '-' as "rainfall",
47
- round(coalesce((harvest.total_bunch_harvested / block_details.total_stand),0)::DECIMAL, 2)::TEXT as "bunchesPerPalm",
48
- coalesce(block_details.year_planted::text, '-') as "yearPlanted",
49
- coalesce(block_details.total_stand::text, '-') as "totalStand"
50
+ round(coalesce((harvest.total_bunch_harvested),0)::DECIMAL, 1)::text as "totalBunchHarvested",
51
+ round(coalesce((loading.total_weight_loaded),0)::DECIMAL, 4)::TEXT as "production",
52
+ round(case when loading.total_weight_loaded <> 0 then (loading.total_bunch_loaded / loading.total_weight_loaded) else '0' end::DECIMAL, 4)::TEXT as "bunchesPerTon",
53
+ round(case when loading.total_bunch_loaded <> 0 then (loading.total_weight_loaded / loading.total_bunch_loaded) else '0' end::DECIMAL, 4)::TEXT as "bunchesWt",
54
+ round(coalesce((harvest.total_bunch_harvested / harvest.total_harvest_coverage),0)::DECIMAL, 4)::TEXT as "bunchesPerHectar",
55
+ round(coalesce((harvest.total_harvest_coverage / block_details.total_hectarage),0)::DECIMAL, 4)::TEXT as "harvestingRd",
56
+ round(coalesce((loading.total_weight_loaded / harvest.out_turn),0)::DECIMAL, 4)::TEXT as "productivities",
57
+ coalesce(block_details.total_hectarage::text, '') as "hectarage",
58
+ round(coalesce((loading.total_bunch_loaded / block_details.total_hectarage),0)::DECIMAL, 4)::TEXT as "yieldPerHectar",
59
+ round(coalesce((harvest.total_harvest_coverage / harvest.days_worked),0)::DECIMAL, 4)::TEXT as "coveragePerDay",
60
+ round(coalesce((harvest.total_bunch_harvested / block_details.total_stand),0)::DECIMAL, 4)::TEXT as "bunchesPerPalm",
61
+ coalesce(block_details.year_planted::text, '') as "yearPlanted",
62
+ coalesce(block_details.total_stand::text, '') as "totalStand",
63
+ '' as "rainfall"
50
64
  from blocks b
51
65
  left join(
52
- select dh.block_id,
66
+ select blk.block_id,
53
67
  count(distinct dhd.organization_staff_id) as total_harvester,
54
68
  count(dhd.id) as out_turn,
55
69
  count(distinct concat(dh.block_id, dh.harvest_date)) as days_worked,
56
70
  sum(dhd.total_bunch_harvested) as total_bunch_harvested,
57
71
  sum(dh.coverage) as total_harvest_coverage
58
72
  from daily_harvests dh
73
+ inner join temp_blocks blk on blk.id = dh.block_id
59
74
  inner join daily_harvest_details dhd on dhd.daily_harvest_id = dh.id
60
75
  where dh.harvest_date::timestamp between $1::timestamp and $2::timestamp
61
- group by dh.block_id
76
+ group by blk.block_id
62
77
  ) as harvest on harvest.block_id = b.id
63
78
  left join(
64
- select dl.block_id, sum(total_weight) as total_weight_loaded, sum(total_bunch) as total_bunch_loaded
79
+ select blk.block_id, sum(total_weight) as total_weight_loaded, sum(total_bunch) as total_bunch_loaded
65
80
  from daily_loadings dl
81
+ inner join temp_blocks blk on blk.id = dl.block_id
66
82
  inner join daily_loading_details dld on dld.daily_loading_id = dl.id
67
83
  where dl.loading_date::timestamp between $1::timestamp and $2::timestamp
68
- group by dl.block_id
84
+ group by blk.block_id
69
85
  ) as loading on loading.block_id = b.id
70
86
  left join(
71
- SELECT DISTINCT ON (block_id)
72
- *
87
+ SELECT DISTINCT ON (blk.block_id) bd.*
73
88
  FROM block_details bd
89
+ inner join temp_blocks blk on blk.id = bd.block_id
74
90
  where valid_from::timestamp <= $1::timestamp
75
- ORDER BY block_id, valid_from desc
91
+ ORDER BY blk.block_id, valid_from desc
76
92
  ) block_details on block_details.block_id = b.id
77
93
  order by b.name
78
94
  )`,
79
95
  [fromDateString, toDateString]
80
96
  )
81
97
 
82
- const result: any = await tx.query(
83
- `
84
- select * from temp_monthly_production_data dt
85
- `
86
- )
98
+ const result: any = await tx.query(`
99
+ select * from temp_monthly_production_data dt
100
+ `)
87
101
 
88
- const total: any = await tx.query(
89
- `
90
- select count(*) from temp_monthly_production_data
91
- `
92
- )
102
+ const total: any = await tx.query(`
103
+ select count(*) from temp_monthly_production_data
104
+ `)
93
105
 
94
- await tx.query(
95
- `
96
- drop table temp_monthly_production_data
97
- `
98
- )
99
106
 
100
- return { items: result, total: total[0].count }
107
+ return {
108
+ items: result.map(itm => {
109
+ return {
110
+ ...itm,
111
+ avgOutTurn: ((parseFloat(itm.totalOutTurn) / parseFloat(itm.daysWorked)) || 0).toFixed(4)
112
+ }
113
+ }), total: total[0].count
114
+ }
101
115
  } catch (error) {
102
116
  throw error
103
117
  }
@@ -1,6 +1,7 @@
1
- import { ListParam } from '@things-factory/shell'
2
1
  import { EntityManager } from 'typeorm'
3
2
 
3
+ import { ListParam } from '@things-factory/shell'
4
+
4
5
  export const yearlyProductionReports = {
5
6
  async yearlyProductionReports(_: any, params: ListParam, context: any) {
6
7
  try {
@@ -15,80 +16,84 @@ export const yearlyProductionReports = {
15
16
 
16
17
  let nextYearDateString = [String(fromDate.getFullYear() + 1).toString(), '01', '01'].join('-')
17
18
 
19
+ await tx.query(`
20
+ CREATE TEMP TABLE temp_blocks on commit drop AS (
21
+ WITH RECURSIVE b AS (
22
+ SELECT b.id AS block_id, * FROM blocks b
23
+ WHERE b.deleted_at IS null
24
+ UNION ALL
25
+ SELECT b.id AS block_id, cb.* FROM blocks cb
26
+ INNER JOIN b ON b.id = cb.parent_block_id
27
+ WHERE cb.deleted_at IS null
28
+ )
29
+ SELECT block_id, id, name FROM b GROUP BY block_id, id, name ORDER BY block_id, id, name
30
+ );
31
+ `)
32
+
18
33
  await tx.query(
19
34
  `
20
- create temp table temp_yearly_production_data as (
35
+ create temp table temp_yearly_production_data on commit drop as (
21
36
  select
22
37
  b.name as "block",
23
38
  coalesce(bd.year_planted::varchar, '-') as "yearPlanted",
24
- '-' as "estimatedLastFfb",
25
- coalesce(last_trans.total_ffb, 0) as "totalLastFfb",
26
- '-' as "estimatedFfb",
27
- coalesce(trans.total_ffb, 0) as "totalFfb",
28
- case when last_bd.matured_hectarage is not null then coalesce(last_trans.total_ffb, 0) / last_bd.matured_hectarage else 0 end as "lastYieldPerHectarage",
29
- case when bd.matured_hectarage is not null then coalesce(trans.total_ffb, 0) / bd.matured_hectarage else 0 end as "yieldPerHectarage",
39
+ '' as "estimatedLastFfb",
40
+ round(coalesce(last_trans.total_ffb, 0)::DECIMAL, 4)::TEXT as "totalLastFfb",
41
+ '' as "estimatedFfb",
42
+ round(coalesce(trans.total_ffb, 0)::DECIMAL, 4)::TEXT as "totalFfb",
43
+ round((case when last_bd.matured_hectarage is not null AND last_bd.matured_hectarage <> 0 then coalesce(last_trans.total_ffb, 0) / last_bd.matured_hectarage else 0 end)::DECIMAL, 4)::TEXT as "lastYieldPerHectarage",
44
+ round((case when bd.matured_hectarage is not null AND bd.matured_hectarage <> 0 then coalesce(trans.total_ffb, 0) / bd.matured_hectarage else 0 end)::DECIMAL, 4)::TEXT as "yieldPerHectarage",
30
45
  coalesce(bd.matured_hectarage, 0) as "maturedHectarage",
31
46
  coalesce(harvest.total_coverage, 0) as "totalCoverage",
32
- case when bd.matured_hectarage is not null then coalesce(harvest.total_coverage, 0)/ bd.matured_hectarage else 0 end as "totalHarvestingRd",
33
- (1 - abs(case when last_trans.total_ffb is not null then coalesce(trans.total_ffb, 0)/last_trans.total_ffb else 1 end)) * 100 as "actualAgainstLast"
47
+ round((case when bd.matured_hectarage is not null AND bd.matured_hectarage <> 0 then coalesce(harvest.total_coverage, 0)/ bd.matured_hectarage else 0 end)::DECIMAL, 4)::TEXT as "totalHarvestingRd",
48
+ round(((1 - abs(case when last_trans.total_ffb is not null AND last_trans.total_ffb <> 0 then coalesce(trans.total_ffb, 0)/last_trans.total_ffb else 1 end)) * 100)::DECIMAL, 4)::TEXT as "actualAgainstLast"
34
49
  from blocks b
35
50
  left join (
36
- SELECT DISTINCT ON (block_id)
37
- *
51
+ SELECT DISTINCT ON (block_id) *
38
52
  FROM block_details bd
39
53
  where valid_from < $3::timestamp
40
54
  ORDER BY block_id, valid_from desc
41
55
  ) bd on bd.block_id = b.id
42
56
  left join (
43
- SELECT DISTINCT ON (block_id)
44
- *
57
+ SELECT DISTINCT ON (block_id) *
45
58
  FROM block_details bd
46
59
  where valid_from < $2::timestamp
47
60
  ORDER BY block_id, valid_from desc
48
61
  ) last_bd on last_bd.block_id = b.id
49
62
  left join (
50
- select t.block_id, sum(ramp_weight) as total_ffb
51
- from record_transactions t
63
+ select blk.block_id, sum(ramp_weight) as total_ffb
64
+ from record_transactions t
65
+ inner join temp_blocks blk on blk.id = t.block_id
52
66
  where transaction_type = 'LOADING'
53
67
  and transaction_date::timestamp between $2::timestamp and $3::timestamp
54
- group by block_id
68
+ group by blk.block_id
55
69
  ) trans on trans.block_id = b.id
56
70
  left join (
57
- select t.block_id, sum(ramp_weight) as total_ffb
71
+ select blk.block_id, sum(ramp_weight) as total_ffb
58
72
  from record_transactions t
73
+ inner join temp_blocks blk on blk.id = t.block_id
59
74
  where transaction_type = 'LOADING'
60
75
  and transaction_date::timestamp between $1::timestamp and $2::timestamp
61
- group by block_id
76
+ group by blk.block_id
62
77
  ) last_trans on last_trans.block_id = b.id
63
78
  left join (
64
- select dh.block_id, sum(coverage) as total_coverage
79
+ select blk.block_id, sum(coverage) as total_coverage
65
80
  from daily_harvests dh
81
+ inner join temp_blocks blk on blk.id = dh.block_id
66
82
  where harvest_date::timestamp between $2::timestamp and $3::timestamp
67
- group by block_id
83
+ group by blk.block_id
68
84
  ) harvest on harvest.block_id = b.id
69
- where b.has_children = false
70
85
  order by b.name
71
86
  )`,
72
87
  [pastYearDateString, thisYearDateString, nextYearDateString]
73
88
  )
74
89
 
75
- const result: any = await tx.query(
76
- `
77
- select * from temp_yearly_production_data dt
78
- `
79
- )
90
+ const result: any = await tx.query(`
91
+ select * from temp_yearly_production_data dt
92
+ `)
80
93
 
81
- const total: any = await tx.query(
82
- `
83
- select count(*) from temp_yearly_production_data
84
- `
85
- )
86
-
87
- await tx.query(
88
- `
89
- drop table temp_yearly_production_data
90
- `
91
- )
94
+ const total: any = await tx.query(`
95
+ select count(*) from temp_yearly_production_data
96
+ `)
92
97
 
93
98
  return { items: result, total: total[0].count }
94
99
  } catch (error) {
@@ -0,0 +1,21 @@
1
+ import { In } from 'typeorm'
2
+
3
+ import { Truck } from '../../../entities'
4
+
5
+ export const deleteTrucks = {
6
+ async deleteTrucks(_: any, { ids }, context: any) {
7
+ const { domain, tx } = context.state
8
+
9
+ await tx.getRepository(Truck).update(
10
+ {
11
+ domain,
12
+ id: In(ids)
13
+ },
14
+ {
15
+ deletedAt: new Date()
16
+ }
17
+ )
18
+
19
+ return true
20
+ }
21
+ }
@@ -0,0 +1,12 @@
1
+ import { deleteTrucks } from './delete-trucks'
2
+ import { Query, Truck } from './truck-query'
3
+ import { updateMultipleTruck } from './update-multiple-truck'
4
+
5
+ export const TruckResolver = {
6
+ Truck,
7
+ Query,
8
+ Mutation: {
9
+ ...updateMultipleTruck,
10
+ ...deleteTrucks
11
+ }
12
+ }
@@ -0,0 +1,52 @@
1
+ import { EntityManager, getRepository } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { buildQuery, Domain, ListParam } from '@things-factory/shell'
5
+
6
+ import { Truck as TruckEntity } from '../../../entities'
7
+
8
+ export const Query = {
9
+ async truck(_: any, { name }, context: any) {
10
+ const { domain, tx } = context.state
11
+ const repository = await tx.getRepository(TruckEntity)
12
+
13
+ return await repository.findOne({
14
+ where: { domain, name },
15
+ relations: ['domain', 'organization', 'creator', 'updater']
16
+ })
17
+ },
18
+
19
+ async trucks(_: any, params: ListParam, context: any) {
20
+ const { tx }: { tx: EntityManager } = context.state
21
+
22
+ const queryBuilder = await tx.getRepository(TruckEntity).createQueryBuilder()
23
+ buildQuery(queryBuilder, params, context)
24
+
25
+ queryBuilder
26
+ .leftJoinAndSelect('Truck.domain', 'Domain')
27
+ .leftJoinAndSelect('Truck.organization', 'Organization')
28
+ .leftJoinAndSelect('Truck.creator', 'Creator')
29
+ .leftJoinAndSelect('Truck.updater', 'Updater')
30
+
31
+ if (params.filters?.length > 0) queryBuilder.andWhere('Truck.deletedAt IS NULL')
32
+ else queryBuilder.where('Truck.deletedAt IS NULL')
33
+
34
+ const [items, total] = await queryBuilder.getManyAndCount()
35
+
36
+ return { items, total }
37
+ }
38
+ }
39
+
40
+ export const Truck = {
41
+ async domain(truck) {
42
+ return await getRepository(Domain).findOne(truck.domainId)
43
+ },
44
+
45
+ async creator(truck) {
46
+ return await getRepository(User).findOne(truck.creatorId)
47
+ },
48
+
49
+ async updater(truck) {
50
+ return await getRepository(User).findOne(truck.updaterId)
51
+ }
52
+ }
@@ -0,0 +1,55 @@
1
+ import { Organization, Truck } from '../../../entities'
2
+
3
+ export const updateMultipleTruck = {
4
+ async updateMultipleTruck(_: any, { patches }, context: any) {
5
+ const { domain, user, tx } = context.state
6
+
7
+ let results = []
8
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
9
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
10
+ const truckRepo = tx.getRepository(Truck)
11
+
12
+ if (_createRecords.length > 0) {
13
+ for (let i = 0; i < _createRecords.length; i++) {
14
+ const newRecord = _createRecords[i]
15
+
16
+ const organization = await tx.getRepository(Organization).findOneOrFail({
17
+ where: { id: newRecord?.organization?.id }
18
+ })
19
+
20
+ const result = await truckRepo.save({
21
+ ...newRecord,
22
+ domain: domain,
23
+ creator: user,
24
+ updater: user
25
+ })
26
+
27
+ results.push({ ...result, cuFlag: '+' })
28
+ }
29
+ }
30
+
31
+ if (_updateRecords.length > 0) {
32
+ for (let i = 0; i < _updateRecords.length; i++) {
33
+ let newRecord = _updateRecords[i]
34
+ const truck = await truckRepo.findOne({ domain, id: newRecord.id })
35
+
36
+ if (newRecord?.organization?.id) {
37
+ const organization = await tx.getRepository(Organization).findOneOrFail({
38
+ where: { id: newRecord?.organization?.id }
39
+ })
40
+ newRecord = { ...newRecord, organization }
41
+ }
42
+
43
+ const result = await truckRepo.save({
44
+ ...truck,
45
+ ...newRecord,
46
+ updater: user
47
+ })
48
+
49
+ results.push({ ...result, cuFlag: 'M' })
50
+ }
51
+ }
52
+
53
+ return results
54
+ }
55
+ }
@@ -5,10 +5,13 @@ export const DailyDispatchPatch = gql`
5
5
  id: String
6
6
  name: String
7
7
  description: String
8
+ transport: ObjectRef
8
9
  transportNo: String
10
+ chitNo: String
11
+ percentage: Float
9
12
  driverIdentification: String
10
13
  totalTonnageRelease: Float
11
- dispatchTo: String
14
+ dispatchTo: ObjectRef
12
15
  dispatchAt: String
13
16
  externalDriver: String
14
17
  driver: ObjectRef
@@ -6,8 +6,11 @@ export const DailyDispatch = gql`
6
6
  name: String
7
7
  domain: Domain
8
8
  dispatchAt: String
9
- dispatchTo: String
9
+ dispatchTo: Organization
10
10
  driverIdentification: String
11
+ chitNo: String
12
+ percentage: Float
13
+ transport: Truck
11
14
  transportNo: String
12
15
  driver: OrganizationStaff
13
16
  externalDriver: String