@things-factory/operato-pms 6.1.83 → 6.1.85

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 (229) hide show
  1. package/dist-server/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +34 -34
  3. package/server/constants/block.ts +0 -4
  4. package/server/constants/index.ts +0 -8
  5. package/server/constants/inventory.ts +0 -9
  6. package/server/constants/master.ts +0 -9
  7. package/server/constants/organization.ts +0 -5
  8. package/server/constants/ramp.ts +0 -9
  9. package/server/constants/record.ts +0 -4
  10. package/server/constants/template.ts +0 -3
  11. package/server/constants/transaction.ts +0 -9
  12. package/server/controllers/index.ts +0 -1
  13. package/server/controllers/render-dispatchment.ts +0 -53
  14. package/server/entities/block-detail.ts +0 -59
  15. package/server/entities/block.ts +0 -49
  16. package/server/entities/daily-block-detail.ts +0 -54
  17. package/server/entities/daily-dispatch-detail.ts +0 -64
  18. package/server/entities/daily-dispatch.ts +0 -90
  19. package/server/entities/daily-harvest-detail.ts +0 -56
  20. package/server/entities/daily-harvest.ts +0 -89
  21. package/server/entities/daily-loading-detail.ts +0 -68
  22. package/server/entities/daily-loading-ramp.ts +0 -56
  23. package/server/entities/daily-loading.ts +0 -70
  24. package/server/entities/index.ts +0 -57
  25. package/server/entities/organization-staff.ts +0 -60
  26. package/server/entities/organization.ts +0 -43
  27. package/server/entities/plantation-inventory.ts +0 -56
  28. package/server/entities/plantation-setting.ts +0 -60
  29. package/server/entities/ramp.ts +0 -47
  30. package/server/entities/record-transaction.ts +0 -76
  31. package/server/entities/truck.ts +0 -58
  32. package/server/graphql/index.ts +0 -9
  33. package/server/graphql/resolvers/block/block-query.ts +0 -36
  34. package/server/graphql/resolvers/block/delete-blocks.ts +0 -39
  35. package/server/graphql/resolvers/block/index.ts +0 -11
  36. package/server/graphql/resolvers/block/update-multiple-block.ts +0 -69
  37. package/server/graphql/resolvers/block-detail/block-detail-query.ts +0 -55
  38. package/server/graphql/resolvers/block-detail/delete-block-details.ts +0 -20
  39. package/server/graphql/resolvers/block-detail/index.ts +0 -12
  40. package/server/graphql/resolvers/block-detail/update-multiple-block-detail.ts +0 -55
  41. package/server/graphql/resolvers/daily-block-detail/create-daily-block-detail.ts +0 -14
  42. package/server/graphql/resolvers/daily-block-detail/daily-block-detail-query.ts +0 -36
  43. package/server/graphql/resolvers/daily-block-detail/delete-daily-block-detail.ts +0 -14
  44. package/server/graphql/resolvers/daily-block-detail/delete-daily-block-details.ts +0 -17
  45. package/server/graphql/resolvers/daily-block-detail/index.ts +0 -18
  46. package/server/graphql/resolvers/daily-block-detail/update-daily-block-detail.ts +0 -17
  47. package/server/graphql/resolvers/daily-block-detail/update-multiple-daily-block-detail.ts +0 -44
  48. package/server/graphql/resolvers/daily-dispatch/daily-dispatch-query.ts +0 -48
  49. package/server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.ts +0 -34
  50. package/server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.ts +0 -131
  51. package/server/graphql/resolvers/daily-dispatch/index.ts +0 -14
  52. package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +0 -36
  53. package/server/graphql/resolvers/daily-dispatch-detail/daily-dispatch-detail-query.ts +0 -37
  54. package/server/graphql/resolvers/daily-dispatch-detail/index.ts +0 -6
  55. package/server/graphql/resolvers/daily-harvest/daily-harvest-query.ts +0 -46
  56. package/server/graphql/resolvers/daily-harvest/delete-daily-harvest.ts +0 -65
  57. package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +0 -205
  58. package/server/graphql/resolvers/daily-harvest/index.ts +0 -14
  59. package/server/graphql/resolvers/daily-harvest/update-daily-harvest.ts +0 -153
  60. package/server/graphql/resolvers/daily-harvest-detail/daily-harvest-detail-query.ts +0 -35
  61. package/server/graphql/resolvers/daily-harvest-detail/index.ts +0 -6
  62. package/server/graphql/resolvers/daily-loading/daily-loading-query.ts +0 -43
  63. package/server/graphql/resolvers/daily-loading/delete-daily-loading.ts +0 -38
  64. package/server/graphql/resolvers/daily-loading/generate-daily-loading.ts +0 -149
  65. package/server/graphql/resolvers/daily-loading/index.ts +0 -14
  66. package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +0 -154
  67. package/server/graphql/resolvers/daily-loading-detail/daily-loading-detail-query.ts +0 -35
  68. package/server/graphql/resolvers/daily-loading-detail/index.ts +0 -6
  69. package/server/graphql/resolvers/daily-loading-ramp/daily-loading-ramp-query.ts +0 -34
  70. package/server/graphql/resolvers/daily-loading-ramp/delete-daily-loading-ramp.ts +0 -15
  71. package/server/graphql/resolvers/daily-loading-ramp/index.ts +0 -12
  72. package/server/graphql/resolvers/daily-loading-ramp/update-daily-loading-ramp.ts +0 -18
  73. package/server/graphql/resolvers/dashboard/dashboard-query.ts +0 -245
  74. package/server/graphql/resolvers/dashboard/index.ts +0 -5
  75. package/server/graphql/resolvers/index.ts +0 -20
  76. package/server/graphql/resolvers/organization/delete-organizations.ts +0 -40
  77. package/server/graphql/resolvers/organization/index.ts +0 -11
  78. package/server/graphql/resolvers/organization/organization-query.ts +0 -35
  79. package/server/graphql/resolvers/organization/update-multiple-organization.ts +0 -48
  80. package/server/graphql/resolvers/organization-staff/delete-organization-staffs.ts +0 -20
  81. package/server/graphql/resolvers/organization-staff/index.ts +0 -12
  82. package/server/graphql/resolvers/organization-staff/organization-staff-query.ts +0 -43
  83. package/server/graphql/resolvers/organization-staff/update-multiple-organization-staff.ts +0 -60
  84. package/server/graphql/resolvers/plantation-inventory/index.ts +0 -6
  85. package/server/graphql/resolvers/plantation-inventory/plantation-inventory-query.ts +0 -43
  86. package/server/graphql/resolvers/plantation-setting/create-plantation-setting.ts +0 -16
  87. package/server/graphql/resolvers/plantation-setting/delete-plantation-setting.ts +0 -13
  88. package/server/graphql/resolvers/plantation-setting/delete-plantation-settings.ts +0 -18
  89. package/server/graphql/resolvers/plantation-setting/index.ts +0 -19
  90. package/server/graphql/resolvers/plantation-setting/plantation-setting-query.ts +0 -38
  91. package/server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.ts +0 -46
  92. package/server/graphql/resolvers/plantation-setting/update-plantation-setting.ts +0 -20
  93. package/server/graphql/resolvers/ramp/delete-ramps.ts +0 -24
  94. package/server/graphql/resolvers/ramp/index.ts +0 -12
  95. package/server/graphql/resolvers/ramp/ramp-query.ts +0 -34
  96. package/server/graphql/resolvers/ramp/update-multiple-ramp.ts +0 -61
  97. package/server/graphql/resolvers/record-transaction/index.ts +0 -6
  98. package/server/graphql/resolvers/record-transaction/record-transaction-query.ts +0 -34
  99. package/server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.ts +0 -149
  100. package/server/graphql/resolvers/report/daily-production-reports.ts +0 -167
  101. package/server/graphql/resolvers/report/daily-staff-harvest-reports.ts +0 -84
  102. package/server/graphql/resolvers/report/index.ts +0 -22
  103. package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +0 -122
  104. package/server/graphql/resolvers/report/monthly-dispatch-summary-reports.ts +0 -114
  105. package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +0 -111
  106. package/server/graphql/resolvers/report/monthly-production-reports.ts +0 -117
  107. package/server/graphql/resolvers/report/yearly-production-reports.ts +0 -101
  108. package/server/graphql/resolvers/truck/delete-trucks.ts +0 -21
  109. package/server/graphql/resolvers/truck/index.ts +0 -12
  110. package/server/graphql/resolvers/truck/truck-query.ts +0 -50
  111. package/server/graphql/resolvers/truck/update-multiple-truck.ts +0 -55
  112. package/server/graphql/types/block/block-list.ts +0 -8
  113. package/server/graphql/types/block/block-patch.ts +0 -13
  114. package/server/graphql/types/block/block.ts +0 -18
  115. package/server/graphql/types/block/index.ts +0 -18
  116. package/server/graphql/types/block/new-block.ts +0 -8
  117. package/server/graphql/types/block-detail/block-detail-list.ts +0 -8
  118. package/server/graphql/types/block-detail/block-detail-patch.ts +0 -16
  119. package/server/graphql/types/block-detail/block-detail.ts +0 -21
  120. package/server/graphql/types/block-detail/index.ts +0 -18
  121. package/server/graphql/types/block-detail/new-block-detail.ts +0 -13
  122. package/server/graphql/types/daily-block-detail/daily-block-detail-list.ts +0 -8
  123. package/server/graphql/types/daily-block-detail/daily-block-detail-patch.ts +0 -10
  124. package/server/graphql/types/daily-block-detail/daily-block-detail.ts +0 -18
  125. package/server/graphql/types/daily-block-detail/index.ts +0 -21
  126. package/server/graphql/types/daily-block-detail/new-daily-block-detail.ts +0 -8
  127. package/server/graphql/types/daily-dispatch/daily-dispatch-list.ts +0 -8
  128. package/server/graphql/types/daily-dispatch/daily-dispatch-patch.ts +0 -22
  129. package/server/graphql/types/daily-dispatch/daily-dispatch.ts +0 -27
  130. package/server/graphql/types/daily-dispatch/index.ts +0 -24
  131. package/server/graphql/types/daily-dispatch/new-daily-dispatch.ts +0 -20
  132. package/server/graphql/types/daily-dispatch-detail/daily-dispatch-detail-list.ts +0 -8
  133. package/server/graphql/types/daily-dispatch-detail/daily-dispatch-detail-patch.ts +0 -16
  134. package/server/graphql/types/daily-dispatch-detail/daily-dispatch-detail.ts +0 -21
  135. package/server/graphql/types/daily-dispatch-detail/index.ts +0 -14
  136. package/server/graphql/types/daily-dispatch-detail/new-daily-dispatch-detail.ts +0 -12
  137. package/server/graphql/types/daily-harvest/daily-harvest-list.ts +0 -8
  138. package/server/graphql/types/daily-harvest/daily-harvest-patch.ts +0 -17
  139. package/server/graphql/types/daily-harvest/daily-harvest.ts +0 -27
  140. package/server/graphql/types/daily-harvest/index.ts +0 -19
  141. package/server/graphql/types/daily-harvest/new-daily-harvest.ts +0 -15
  142. package/server/graphql/types/daily-harvest-detail/daily-harvest-detail-list.ts +0 -8
  143. package/server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.ts +0 -11
  144. package/server/graphql/types/daily-harvest-detail/daily-harvest-detail.ts +0 -20
  145. package/server/graphql/types/daily-harvest-detail/index.ts +0 -14
  146. package/server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.ts +0 -10
  147. package/server/graphql/types/daily-loading/daily-loading-list.ts +0 -8
  148. package/server/graphql/types/daily-loading/daily-loading-patch.ts +0 -8
  149. package/server/graphql/types/daily-loading/daily-loading.ts +0 -21
  150. package/server/graphql/types/daily-loading/index.ts +0 -19
  151. package/server/graphql/types/daily-loading/new-daily-loading.ts +0 -8
  152. package/server/graphql/types/daily-loading-detail/daily-loading-detail-list.ts +0 -8
  153. package/server/graphql/types/daily-loading-detail/daily-loading-detail-patch.ts +0 -14
  154. package/server/graphql/types/daily-loading-detail/daily-loading-detail.ts +0 -23
  155. package/server/graphql/types/daily-loading-detail/index.ts +0 -14
  156. package/server/graphql/types/daily-loading-detail/new-daily-loading-detail.ts +0 -13
  157. package/server/graphql/types/daily-loading-ramp/daily-loading-ramp-list.ts +0 -8
  158. package/server/graphql/types/daily-loading-ramp/daily-loading-ramp-patch.ts +0 -13
  159. package/server/graphql/types/daily-loading-ramp/daily-loading-ramp.ts +0 -17
  160. package/server/graphql/types/daily-loading-ramp/index.ts +0 -18
  161. package/server/graphql/types/daily-loading-ramp/new-daily-loading-ramp.ts +0 -11
  162. package/server/graphql/types/dashboard/bunches-count.ts +0 -9
  163. package/server/graphql/types/dashboard/index.ts +0 -17
  164. package/server/graphql/types/dashboard/productions-overview.ts +0 -9
  165. package/server/graphql/types/dashboard/tonnage-bunches-inventories.ts +0 -8
  166. package/server/graphql/types/dashboard/tonnage-production.ts +0 -11
  167. package/server/graphql/types/dashboard/yield-production.ts +0 -11
  168. package/server/graphql/types/index.ts +0 -20
  169. package/server/graphql/types/organization/index.ts +0 -18
  170. package/server/graphql/types/organization/new-organization.ts +0 -9
  171. package/server/graphql/types/organization/organization-list.ts +0 -8
  172. package/server/graphql/types/organization/organization-patch.ts +0 -11
  173. package/server/graphql/types/organization/organization.ts +0 -16
  174. package/server/graphql/types/organization-staff/index.ts +0 -19
  175. package/server/graphql/types/organization-staff/new-organization-staff.ts +0 -8
  176. package/server/graphql/types/organization-staff/organization-staff-list.ts +0 -8
  177. package/server/graphql/types/organization-staff/organization-staff-patch.ts +0 -15
  178. package/server/graphql/types/organization-staff/organization-staff.ts +0 -21
  179. package/server/graphql/types/plantation-inventory/index.ts +0 -14
  180. package/server/graphql/types/plantation-inventory/new-plantation-inventory.ts +0 -8
  181. package/server/graphql/types/plantation-inventory/plantation-inventory-list.ts +0 -8
  182. package/server/graphql/types/plantation-inventory/plantation-inventory-patch.ts +0 -10
  183. package/server/graphql/types/plantation-inventory/plantation-inventory.ts +0 -22
  184. package/server/graphql/types/plantation-setting/index.ts +0 -21
  185. package/server/graphql/types/plantation-setting/new-plantation-setting.ts +0 -10
  186. package/server/graphql/types/plantation-setting/plantation-setting-list.ts +0 -8
  187. package/server/graphql/types/plantation-setting/plantation-setting-patch.ts +0 -12
  188. package/server/graphql/types/plantation-setting/plantation-setting.ts +0 -16
  189. package/server/graphql/types/ramp/index.ts +0 -18
  190. package/server/graphql/types/ramp/new-ramp.ts +0 -8
  191. package/server/graphql/types/ramp/ramp-list.ts +0 -8
  192. package/server/graphql/types/ramp/ramp-patch.ts +0 -12
  193. package/server/graphql/types/ramp/ramp.ts +0 -17
  194. package/server/graphql/types/record-transaction/index.ts +0 -14
  195. package/server/graphql/types/record-transaction/new-record-transaction.ts +0 -8
  196. package/server/graphql/types/record-transaction/record-transaction-list.ts +0 -8
  197. package/server/graphql/types/record-transaction/record-transaction-patch.ts +0 -10
  198. package/server/graphql/types/record-transaction/record-transaction.ts +0 -24
  199. package/server/graphql/types/report/daily-ffb-dispatch-production-report-list.ts +0 -8
  200. package/server/graphql/types/report/daily-ffb-dispatch-production-report.ts +0 -9
  201. package/server/graphql/types/report/daily-production-report-list.ts +0 -8
  202. package/server/graphql/types/report/daily-production-report.ts +0 -23
  203. package/server/graphql/types/report/daily-staff-harvest-report-list.ts +0 -8
  204. package/server/graphql/types/report/daily-staff-harvest-report.ts +0 -10
  205. package/server/graphql/types/report/index.ts +0 -62
  206. package/server/graphql/types/report/monthly-block-dispatch-report-list.ts +0 -7
  207. package/server/graphql/types/report/monthly-block-dispatch-report.ts +0 -13
  208. package/server/graphql/types/report/monthly-dispatch-summary-report-list.ts +0 -7
  209. package/server/graphql/types/report/monthly-dispatch-summary-report.ts +0 -19
  210. package/server/graphql/types/report/monthly-ffb-sale-report-list.ts +0 -7
  211. package/server/graphql/types/report/monthly-ffb-sale-report.ts +0 -18
  212. package/server/graphql/types/report/monthly-production-report-list.ts +0 -8
  213. package/server/graphql/types/report/monthly-production-report.ts +0 -25
  214. package/server/graphql/types/report/yearly-production-report-list.ts +0 -8
  215. package/server/graphql/types/report/yearly-production-report.ts +0 -18
  216. package/server/graphql/types/truck/index.ts +0 -18
  217. package/server/graphql/types/truck/new-truck.ts +0 -8
  218. package/server/graphql/types/truck/truck-list.ts +0 -8
  219. package/server/graphql/types/truck/truck-patch.ts +0 -11
  220. package/server/graphql/types/truck/truck.ts +0 -16
  221. package/server/index.ts +0 -6
  222. package/server/middlewares/index.ts +0 -3
  223. package/server/migrations/index.ts +0 -9
  224. package/server/routes.ts +0 -7
  225. package/server/utils/core-values.ts +0 -98
  226. package/server/utils/datetime-util.ts +0 -39
  227. package/server/utils/index.ts +0 -4
  228. package/server/utils/no-generator.ts +0 -64
  229. package/server/utils/transaction-util.ts +0 -101
@@ -1,84 +0,0 @@
1
- import { ListParam } from '@things-factory/shell'
2
-
3
- import { Block } from '../../../entities'
4
-
5
- export const dailyStaffHarvestReports = {
6
- async dailyStaffHarvestReports(_: any, params: ListParam, context: ResolverContext) {
7
- try {
8
- const { tx } = context.state
9
-
10
- let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
11
- let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
12
-
13
- let fromDate = new Date(year, month - 1, 1)
14
- let toDate = new Date(year, month, 1)
15
- toDate.setDate(toDate.getDate() - 1)
16
-
17
- let fromDateString = [
18
- fromDate.getFullYear().toString(),
19
- String(fromDate.getMonth() + 1).padStart(2, '0'),
20
- '01'
21
- ].join('-')
22
-
23
- let toDateString = [
24
- toDate.getFullYear().toString(),
25
- String(toDate.getMonth() + 1).padStart(2, '0'),
26
- String(toDate.getDate()).padStart(2, '0')
27
- ].join('-')
28
-
29
- const block = await tx
30
- .getRepository(Block)
31
- .findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
32
-
33
- await tx.query(
34
- `
35
- CREATE TEMP TABLE temp_blocks on commit drop AS (
36
- WITH RECURSIVE b AS (
37
- SELECT $1::uuid as block_id, * FROM blocks b
38
- WHERE id = $1::uuid
39
- AND b.deleted_at IS null
40
- UNION ALL
41
- SELECT $1::uuid as block_id, cb.* FROM blocks cb
42
- INNER JOIN b ON b.id = cb.parent_block_id
43
- WHERE cb.deleted_at IS null
44
- )
45
- SELECT * FROM b
46
- );
47
- `,
48
- [block.id]
49
- )
50
-
51
- await tx.query(
52
- `
53
- create temp table temp_daily_staff_harvest_data on commit drop as (
54
- select "harvestDate"::varchar as "harvestDate", "blockName"::varchar, "staffName"::varchar, sum("totalBunchHarvested")::varchar as "totalBunchHarvested" from (
55
- select dh.harvest_date::date as "harvestDate", b2."name" as "blockName", os."name" as "staffName",
56
- dhd.total_bunch_harvested as "totalBunchHarvested"
57
- from daily_harvest_details dhd
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
60
- inner join organization_staffs os on os.id = dhd.organization_staff_id
61
- inner join blocks b2 on b2.id = blk.block_id
62
- where dh.harvest_date::date between $1 and $2
63
- ) as dt
64
- group by "harvestDate", "blockName", "staffName"
65
- order by "staffName", "harvestDate"
66
- )
67
- `,
68
- [fromDateString, toDateString]
69
- )
70
-
71
- const result: any = await tx.query(`
72
- select * from temp_daily_staff_harvest_data dt
73
- `)
74
-
75
- const total: any = await tx.query(`
76
- select count(*) from temp_daily_staff_harvest_data
77
- `)
78
-
79
- return { items: result, total: total[0].count }
80
- } catch (error) {
81
- throw error
82
- }
83
- }
84
- }
@@ -1,22 +0,0 @@
1
- import { dailyProductionReports } from './daily-production-reports'
2
- import { monthlyProductionReports } from './monthly-production-reports'
3
- import { monthlyDispatchSummaryReports } from './monthly-dispatch-summary-reports'
4
- import { yearlyProductionReports } from './yearly-production-reports'
5
- import { dailyStaffHarvestReports } from './daily-staff-harvest-reports'
6
- import { monthlyBlockDispatchReports } from './monthly-block-dispatch-reports'
7
- import { monthlyFfbSaleReports } from './monthly-ffb-sale-reports'
8
- import { dailyFfbDispatchProductionReports } from './daily-ffb-dispatch-production-reports'
9
-
10
- export const ReportResolver = {
11
- Query: {
12
- ...dailyProductionReports,
13
- ...monthlyProductionReports,
14
- ...monthlyDispatchSummaryReports,
15
- ...yearlyProductionReports,
16
- ...dailyStaffHarvestReports,
17
- ...monthlyBlockDispatchReports,
18
- ...monthlyFfbSaleReports,
19
- ...dailyFfbDispatchProductionReports
20
- },
21
- Mutation: {}
22
- }
@@ -1,122 +0,0 @@
1
- import { ListParam } from '@things-factory/shell'
2
-
3
- import { Block } from '../../../entities'
4
-
5
- export const monthlyBlockDispatchReports = {
6
- async monthlyBlockDispatchReports(_: any, params: ListParam, context: ResolverContext) {
7
- try {
8
- const { domain, tx } = context.state
9
-
10
- let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
11
- let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
12
-
13
- let fromDate = new Date(year, month - 1, 1)
14
- let toDate = new Date(year, month, 1)
15
- toDate.setDate(toDate.getDate() - 1)
16
-
17
- let fromDateString = [
18
- fromDate.getFullYear().toString(),
19
- String(fromDate.getMonth() + 1).padStart(2, '0'),
20
- '01'
21
- ].join('-')
22
-
23
- let toDateString = [
24
- toDate.getFullYear().toString(),
25
- String(toDate.getMonth() + 1).padStart(2, '0'),
26
- String(toDate.getDate()).padStart(2, '0')
27
- ].join('-')
28
-
29
- let blocks = await tx.getRepository(Block).query(
30
- `
31
- SELECT b.id, b.name FROM ramps r
32
- INNER JOIN blocks b ON b.id = r.block_id
33
- WHERE b.deleted_at IS NULL
34
- AND r.domain_id = $1
35
- GROUP BY b.id, b.name
36
- `,
37
- [domain.id]
38
- )
39
-
40
- // -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
41
- // [fromDateString, toDateString]
42
- await tx.query(`create extension if not exists tablefunc`)
43
-
44
- await tx.query(
45
- `
46
- CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
47
- SELECT dd.id, b.name AS block_name,
48
- COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0) AS weight
49
- FROM daily_dispatches dd
50
- INNER JOIN daily_dispatch_details ddd ON ddd.daily_dispatch_id = dd.id
51
- INNER JOIN ramps r ON r.id = ddd.ramp_id
52
- INNER JOIN blocks b ON b.id = r.block_id
53
- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
54
- )
55
- `,
56
- [fromDateString, toDateString]
57
- )
58
-
59
- await tx.query(
60
- `
61
- CREATE TEMP TABLE pivot_block_dispatch ON COMMIT DROP AS (
62
- SELECT * FROM crosstab(
63
- $$SELECT rbd.id, rbd.block_name, round(rbd.weight, 2 )::varchar FROM raw_block_dispatch rbd$$,
64
- $$SELECT b.name FROM ramps r INNER JOIN blocks b ON b.id = r.block_id WHERE r.deleted_at IS NULL AND r.domain_id = '${
65
- domain.id
66
- }' GROUP BY b.id, b.name$$
67
- ) AS ("id" uuid, ${blocks.map(block => `"${block.name}" varchar`).join(',')})
68
- );
69
- `
70
- )
71
-
72
- await tx.query(
73
- `
74
- CREATE TEMP TABLE temp_monthly_production_data ON COMMIT DROP AS (
75
- SELECT
76
- ROW_NUMBER() OVER(
77
- PARTITION BY dd.dispatch_at::date
78
- ORDER BY dd.dispatch_at
79
- ) as rn
80
- , dd.id, COALESCE(c.name, 'UNKNOWN') AS "dispatchTo"
81
- , dd.transport_no as "lorryNo"
82
- , dd.driver_identification as "driverIdentification"
83
- , TO_CHAR(dd.dispatch_at:: DATE, 'dd/mm/yyyy') as "date"
84
- , row_to_json((SELECT d FROM (SELECT ${blocks
85
- .map(block => `pbd."${block.name}"`)
86
- .join(',')}) d))::varchar as "blockData"
87
- , (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.id = dd.id) AS "today"
88
- FROM daily_dispatches dd
89
- INNER JOIN pivot_block_dispatch pbd ON pbd.id = dd.id
90
- LEFT JOIN organizations c ON c.id = dd.dispatch_to_id
91
- );
92
- `
93
- )
94
-
95
- const result: any = await tx.query(
96
- `
97
- select "id", "dispatchTo", "lorryNo", "driverIdentification",
98
- CASE WHEN "rn" = 1 THEN "date" ELSE '' END AS "date", "blockData", "today",
99
- coalesce(sum(today) over (order by date asc rows between unbounded preceding and current row), 0) as "todate"
100
- from temp_monthly_production_data dt
101
- `
102
- )
103
-
104
- const total: any = await tx.query(
105
- `
106
- select count(*) from temp_monthly_production_data
107
- `
108
- )
109
-
110
- return {
111
- items: result.map(itm => {
112
- return {
113
- ...itm
114
- }
115
- }),
116
- total: total[0].count
117
- }
118
- } catch (error) {
119
- throw error
120
- }
121
- }
122
- }
@@ -1,114 +0,0 @@
1
- import { IsNull } from 'typeorm'
2
-
3
- import { ListParam } from '@things-factory/shell'
4
-
5
- import { Organization } from '../../../entities'
6
-
7
- export const monthlyDispatchSummaryReports = {
8
- async monthlyDispatchSummaryReports(_: any, params: ListParam, context: ResolverContext) {
9
- try {
10
- const { domain, tx } = context.state
11
-
12
- let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
13
- let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
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
- const org = await tx.getRepository(Organization).findOneOrFail({
32
- where: {
33
- domain: { id: domain.id },
34
- deletedAt: IsNull(),
35
- id: params.filters.filter(x => x.name == 'organization')[0].value
36
- }
37
- })
38
-
39
- await tx.query(
40
- `
41
- CREATE TEMP TABLE raw_dispatch ON COMMIT DROP AS (
42
- SELECT dd.*,
43
- 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
44
- FROM daily_dispatches dd
45
- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
46
- AND dd.dispatch_to_id = $3
47
- );
48
- `,
49
- [fromDateString, toDateString, org.id]
50
- )
51
-
52
- await tx.query(
53
- `
54
- CREATE TEMP TABLE temp_monthly_dispatch_to_mill_data ON COMMIT DROP AS (
55
- SELECT "id", dispatch_at AS "dispatchAt", transport_no AS "lorryNo",
56
- driver_identification AS "driverIdentification", chit_no AS "chitNo", round(COALESCE(percentage,0)::numeric, 2)::varchar AS "percentage",
57
- COALESCE(diapatch_to_name, 'UNKNOWN') AS "dispatchTo", "tonnage",
58
- 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",
59
- 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",
60
- 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",
61
- 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"
62
- FROM (
63
- SELECT
64
- ROW_NUMBER() OVER(
65
- PARTITION BY rbd.dispatch_to_id, rbd.dispatch_at::date
66
- ORDER BY rbd.dispatch_at ASC
67
- ) as forward_rn
68
- , ROW_NUMBER() OVER(
69
- PARTITION BY rbd.dispatch_to_id, rbd.dispatch_at::date
70
- ORDER BY rbd.dispatch_at DESC
71
- ) as reverse_rn
72
- , rbd.id
73
- , rbd.dispatch_at
74
- , rbd.transport_no
75
- , rbd.driver_identification
76
- , rbd.external_driver
77
- , rbd.chit_no
78
- , rbd.percentage
79
- , rbd.dispatch_to_id
80
- , c.name AS diapatch_to_name
81
- , rbd.tonnage
82
- FROM raw_dispatch rbd
83
- LEFT JOIN organizations c ON c.id = rbd.dispatch_to_id
84
- ORDER BY rbd.dispatch_to_id, rbd.dispatch_at
85
- ) src
86
- );
87
- `
88
- )
89
-
90
- const result: any = await tx.query(
91
- `
92
- select * from temp_monthly_dispatch_to_mill_data dt
93
- `
94
- )
95
-
96
- const total: any = await tx.query(
97
- `
98
- select count(*) from temp_monthly_dispatch_to_mill_data
99
- `
100
- )
101
-
102
- return {
103
- items: result.map(itm => {
104
- return {
105
- ...itm
106
- }
107
- }),
108
- total: total[0].count
109
- }
110
- } catch (error) {
111
- throw error
112
- }
113
- }
114
- }
@@ -1,111 +0,0 @@
1
- import { ListParam } from '@things-factory/shell'
2
-
3
- export const monthlyFfbSaleReports = {
4
- async monthlyFfbSaleReports(_: any, params: ListParam, context: ResolverContext) {
5
- try {
6
- const { domain, tx } = context.state
7
-
8
- let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
9
- let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
10
- let organization = params.filters.find(x => x.name == 'organization')
11
-
12
- let fromDate = new Date(year, month - 1, 1)
13
- let toDate = new Date(year, month, 1)
14
- toDate.setDate(toDate.getDate() - 1)
15
-
16
- let fromDateString = [
17
- fromDate.getFullYear().toString(),
18
- String(fromDate.getMonth() + 1).padStart(2, '0'),
19
- '01'
20
- ].join('-')
21
-
22
- let toDateString = [
23
- toDate.getFullYear().toString(),
24
- String(toDate.getMonth() + 1).padStart(2, '0'),
25
- String(toDate.getDate()).padStart(2, '0')
26
- ].join('-')
27
-
28
- await tx.query(
29
- `
30
- CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
31
- SELECT dd.*,
32
- 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
33
- FROM daily_dispatches dd
34
- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
35
- ${
36
- organization
37
- ? organization.value == 'null'
38
- ? `AND dd.dispatch_to_id IS NULL`
39
- : `AND dd.dispatch_to_id = '${organization.value}'`
40
- : ''
41
- }
42
- );
43
- `,
44
- [fromDateString, toDateString]
45
- )
46
-
47
- await tx.query(
48
- `
49
- CREATE TEMP TABLE temp_monthly_dispatch_to_mill_data ON COMMIT DROP AS (
50
- SELECT "id", dispatch_at, transport_no AS "lorryNo",
51
- driver_identification AS "driverIdentification", chit_no AS "chitNo", round(COALESCE(percentage,0)::numeric, 2)::varchar AS "percentage",
52
- COALESCE(diapatch_to_name, 'UNKNOWN') AS "dispatchTo", round(COALESCE(tonnage,0), 2)::varchar AS "tonnage",
53
- CASE WHEN forward_rn = 1 THEN TO_CHAR(dispatch_at:: DATE, 'dd/mm/yyyy') ELSE '' END AS "dispatchAt",
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_at::date
62
- ORDER BY rbd.dispatch_at ASC
63
- ) as forward_rn
64
- , ROW_NUMBER() OVER(
65
- PARTITION BY 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_block_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
89
- ORDER BY "dispatch_at";
90
- `
91
- )
92
-
93
- const total: any = await tx.query(
94
- `
95
- select count(*) from temp_monthly_dispatch_to_mill_data;
96
- `
97
- )
98
-
99
- return {
100
- items: result.map(itm => {
101
- return {
102
- ...itm
103
- }
104
- }),
105
- total: total[0].count
106
- }
107
- } catch (error) {
108
- throw error
109
- }
110
- }
111
- }
@@ -1,117 +0,0 @@
1
- import { ListParam } from '@things-factory/shell'
2
-
3
- export const monthlyProductionReports = {
4
- async monthlyProductionReports(_: any, params: ListParam, context: ResolverContext) {
5
- try {
6
- const { tx } = context.state
7
-
8
- let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
9
- let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
10
-
11
- let fromDate = new Date(year, month - 1, 1)
12
- let toDate = new Date(year, month, 1)
13
- toDate.setDate(toDate.getDate() - 1)
14
-
15
- let fromDateString = [
16
- fromDate.getFullYear().toString(),
17
- String(fromDate.getMonth() + 1).padStart(2, '0'),
18
- '01'
19
- ].join('-')
20
-
21
- let toDateString = [
22
- toDate.getFullYear().toString(),
23
- String(toDate.getMonth() + 1).padStart(2, '0'),
24
- String(toDate.getDate()).padStart(2, '0')
25
- ].join('-')
26
-
27
- await tx.query(`
28
- CREATE TEMP TABLE temp_blocks on commit drop AS (
29
- WITH RECURSIVE b AS (
30
- SELECT b.id AS block_id, * FROM blocks b
31
- WHERE b.deleted_at IS null
32
- UNION ALL
33
- SELECT b.id AS block_id, cb.* FROM blocks cb
34
- INNER JOIN b ON b.id = cb.parent_block_id
35
- WHERE cb.deleted_at IS null
36
- )
37
- SELECT block_id, id, name FROM b GROUP BY block_id, id, name ORDER BY block_id, id, name
38
- );
39
- `)
40
-
41
- await tx.query(
42
- `
43
- create temp table temp_monthly_production_data on commit drop as (
44
- select b.id, b.name as "block",
45
- coalesce(harvest.total_harvester, 0) as "totalHarvester",
46
- coalesce(harvest.out_turn,0) as "totalOutTurn",
47
- coalesce(harvest.days_worked,0) as "daysWorked",
48
- round(coalesce((harvest.total_bunch_harvested),0)::DECIMAL, 1)::text as "totalBunchHarvested",
49
- round(coalesce((loading.total_weight_loaded),0)::DECIMAL, 4)::TEXT as "production",
50
- 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",
51
- 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",
52
- round(coalesce((harvest.total_bunch_harvested / harvest.total_harvest_coverage),0)::DECIMAL, 4)::TEXT as "bunchesPerHectar",
53
- round(coalesce((harvest.total_harvest_coverage / block_details.total_hectarage),0)::DECIMAL, 4)::TEXT as "harvestingRd",
54
- round(coalesce((loading.total_weight_loaded / harvest.out_turn),0)::DECIMAL, 4)::TEXT as "productivities",
55
- coalesce(block_details.total_hectarage::text, '') as "hectarage",
56
- round(coalesce((loading.total_bunch_loaded / block_details.total_hectarage),0)::DECIMAL, 4)::TEXT as "yieldPerHectar",
57
- round(coalesce((harvest.total_harvest_coverage / harvest.days_worked),0)::DECIMAL, 4)::TEXT as "coveragePerDay",
58
- round(coalesce((harvest.total_bunch_harvested / block_details.total_stand),0)::DECIMAL, 4)::TEXT as "bunchesPerPalm",
59
- coalesce(block_details.year_planted::text, '') as "yearPlanted",
60
- coalesce(block_details.total_stand::text, '') as "totalStand",
61
- '' as "rainfall"
62
- from blocks b
63
- left join(
64
- select blk.block_id,
65
- count(distinct dhd.organization_staff_id) as total_harvester,
66
- count(dhd.id) as out_turn,
67
- count(distinct concat(dh.block_id, dh.harvest_date)) as days_worked,
68
- sum(dhd.total_bunch_harvested) as total_bunch_harvested,
69
- sum(dh.coverage) as total_harvest_coverage
70
- from daily_harvests dh
71
- inner join temp_blocks blk on blk.id = dh.block_id
72
- inner join daily_harvest_details dhd on dhd.daily_harvest_id = dh.id
73
- where dh.harvest_date::timestamp between $1::timestamp and $2::timestamp
74
- group by blk.block_id
75
- ) as harvest on harvest.block_id = b.id
76
- left join(
77
- select blk.block_id, sum(total_weight) as total_weight_loaded, sum(total_bunch) as total_bunch_loaded
78
- from daily_loadings dl
79
- inner join daily_loading_details dld on dld.daily_loading_id = dl.id
80
- inner join temp_blocks blk on blk.id = dld.block_id
81
- where dl.loading_date::timestamp between $1::timestamp and $2::timestamp
82
- group by blk.block_id
83
- ) as loading on loading.block_id = b.id
84
- left join(
85
- SELECT DISTINCT ON (blk.block_id) bd.*
86
- FROM block_details bd
87
- inner join temp_blocks blk on blk.id = bd.block_id
88
- where valid_from::timestamp <= $1::timestamp
89
- ORDER BY blk.block_id, valid_from desc
90
- ) block_details on block_details.block_id = b.id
91
- order by b.name
92
- )`,
93
- [fromDateString, toDateString]
94
- )
95
-
96
- const result: any = await tx.query(`
97
- select * from temp_monthly_production_data dt
98
- `)
99
-
100
- const total: any = await tx.query(`
101
- select count(*) from temp_monthly_production_data
102
- `)
103
-
104
- return {
105
- items: result.map(itm => {
106
- return {
107
- ...itm,
108
- avgOutTurn: (parseFloat(itm.totalOutTurn) / parseFloat(itm.daysWorked) || 0).toFixed(4)
109
- }
110
- }),
111
- total: total[0].count
112
- }
113
- } catch (error) {
114
- throw error
115
- }
116
- }
117
- }
@@ -1,101 +0,0 @@
1
- import { ListParam } from '@things-factory/shell'
2
-
3
- export const yearlyProductionReports = {
4
- async yearlyProductionReports(_: any, params: ListParam, context: ResolverContext) {
5
- try {
6
- const { tx } = context.state
7
-
8
- let year = parseInt(params.filters.filter(x => x.name == 'year')[0].value)
9
- let fromDate = new Date(year, 0, 1)
10
-
11
- let pastYearDateString = [String(fromDate.getFullYear() - 1).toString(), '01', '01'].join('-')
12
-
13
- let thisYearDateString = [fromDate.getFullYear().toString(), '01', '01'].join('-')
14
-
15
- let nextYearDateString = [String(fromDate.getFullYear() + 1).toString(), '01', '01'].join('-')
16
-
17
- await tx.query(`
18
- CREATE TEMP TABLE temp_blocks on commit drop AS (
19
- WITH RECURSIVE b AS (
20
- SELECT b.id AS block_id, * FROM blocks b
21
- WHERE b.deleted_at IS null
22
- UNION ALL
23
- SELECT b.id AS block_id, cb.* FROM blocks cb
24
- INNER JOIN b ON b.id = cb.parent_block_id
25
- WHERE cb.deleted_at IS null
26
- )
27
- SELECT block_id, id, name FROM b GROUP BY block_id, id, name ORDER BY block_id, id, name
28
- );
29
- `)
30
-
31
- await tx.query(
32
- `
33
- create temp table temp_yearly_production_data on commit drop as (
34
- select
35
- b.name as "block",
36
- coalesce(bd.year_planted::varchar, '-') as "yearPlanted",
37
- '' as "estimatedLastFfb",
38
- round(coalesce(last_trans.total_ffb, 0)::DECIMAL, 4)::TEXT as "totalLastFfb",
39
- '' as "estimatedFfb",
40
- round(coalesce(trans.total_ffb, 0)::DECIMAL, 4)::TEXT as "totalFfb",
41
- 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",
42
- 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",
43
- coalesce(bd.matured_hectarage, 0) as "maturedHectarage",
44
- coalesce(harvest.total_coverage, 0) as "totalCoverage",
45
- 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",
46
- 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"
47
- from blocks b
48
- left join (
49
- SELECT DISTINCT ON (block_id) *
50
- FROM block_details bd
51
- where valid_from < $3::timestamp
52
- ORDER BY block_id, valid_from desc
53
- ) bd on bd.block_id = b.id
54
- left join (
55
- SELECT DISTINCT ON (block_id) *
56
- FROM block_details bd
57
- where valid_from < $2::timestamp
58
- ORDER BY block_id, valid_from desc
59
- ) last_bd on last_bd.block_id = b.id
60
- left join (
61
- select blk.block_id, sum(ramp_weight) as total_ffb
62
- from record_transactions t
63
- inner join temp_blocks blk on blk.id = t.block_id
64
- where transaction_type = 'LOADING'
65
- and transaction_date::timestamp between $2::timestamp and $3::timestamp
66
- group by blk.block_id
67
- ) trans on trans.block_id = b.id
68
- left join (
69
- select blk.block_id, sum(ramp_weight) as total_ffb
70
- from record_transactions t
71
- inner join temp_blocks blk on blk.id = t.block_id
72
- where transaction_type = 'LOADING'
73
- and transaction_date::timestamp between $1::timestamp and $2::timestamp
74
- group by blk.block_id
75
- ) last_trans on last_trans.block_id = b.id
76
- left join (
77
- select blk.block_id, sum(coverage) as total_coverage
78
- from daily_harvests dh
79
- inner join temp_blocks blk on blk.id = dh.block_id
80
- where harvest_date::timestamp between $2::timestamp and $3::timestamp
81
- group by blk.block_id
82
- ) harvest on harvest.block_id = b.id
83
- order by b.name
84
- )`,
85
- [pastYearDateString, thisYearDateString, nextYearDateString]
86
- )
87
-
88
- const result: any = await tx.query(`
89
- select * from temp_yearly_production_data dt
90
- `)
91
-
92
- const total: any = await tx.query(`
93
- select count(*) from temp_yearly_production_data
94
- `)
95
-
96
- return { items: result, total: total[0].count }
97
- } catch (error) {
98
- throw error
99
- }
100
- }
101
- }