@things-factory/operato-pms 4.3.595 → 4.3.601

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 (68) hide show
  1. package/client/pages/harvesting/harvesting-create-record.js +5 -2
  2. package/client/pages/loading/edit-loading-record.js +2 -0
  3. package/client/pages/report/report-daily-ffb-dispatch-and-production.js +19 -23
  4. package/dist-server/entities/daily-dispatch.js +2 -2
  5. package/dist-server/entities/daily-dispatch.js.map +1 -1
  6. package/dist-server/entities/ramp-block-history.js.map +1 -1
  7. package/dist-server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.js +49 -1
  8. package/dist-server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.js.map +1 -1
  9. package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js +124 -112
  10. package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js.map +1 -1
  11. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js +51 -2
  12. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js.map +1 -1
  13. package/dist-server/graphql/resolvers/daily-harvest/delete-daily-harvest.js +5 -7
  14. package/dist-server/graphql/resolvers/daily-harvest/delete-daily-harvest.js.map +1 -1
  15. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js +3 -3
  16. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js.map +1 -1
  17. package/dist-server/graphql/resolvers/daily-loading/delete-daily-loading.js +6 -0
  18. package/dist-server/graphql/resolvers/daily-loading/delete-daily-loading.js.map +1 -1
  19. package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js +68 -52
  20. package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js.map +1 -1
  21. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js +16 -22
  22. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js.map +1 -1
  23. package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js +50 -19
  24. package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js.map +1 -1
  25. package/dist-server/graphql/resolvers/report/daily-production-reports.js +96 -67
  26. package/dist-server/graphql/resolvers/report/daily-production-reports.js.map +1 -1
  27. package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js +1 -0
  28. package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js.map +1 -1
  29. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js +7 -2
  30. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js.map +1 -1
  31. package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js +11 -5
  32. package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js.map +1 -1
  33. package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js +21 -9
  34. package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js.map +1 -1
  35. package/dist-server/graphql/resolvers/report/monthly-production-reports.js +5 -2
  36. package/dist-server/graphql/resolvers/report/monthly-production-reports.js.map +1 -1
  37. package/dist-server/graphql/resolvers/report/yearly-production-reports.js +5 -2
  38. package/dist-server/graphql/resolvers/report/yearly-production-reports.js.map +1 -1
  39. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js +2 -0
  40. package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js.map +1 -1
  41. package/dist-server/utils/transaction-util.js +32 -53
  42. package/dist-server/utils/transaction-util.js.map +1 -1
  43. package/package.json +2 -2
  44. package/server/entities/daily-dispatch.ts +2 -2
  45. package/server/entities/ramp-block-history.ts +2 -5
  46. package/server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.ts +69 -2
  47. package/server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.ts +179 -141
  48. package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +68 -5
  49. package/server/graphql/resolvers/daily-harvest/delete-daily-harvest.ts +9 -26
  50. package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +3 -3
  51. package/server/graphql/resolvers/daily-loading/delete-daily-loading.ts +11 -1
  52. package/server/graphql/resolvers/daily-loading/generate-daily-loading.ts +95 -98
  53. package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +44 -47
  54. package/server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.ts +61 -26
  55. package/server/graphql/resolvers/report/daily-production-reports.ts +103 -72
  56. package/server/graphql/resolvers/report/daily-staff-harvest-reports.ts +5 -2
  57. package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +20 -9
  58. package/server/graphql/resolvers/report/monthly-dispatch-summary-reports.ts +16 -12
  59. package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +26 -12
  60. package/server/graphql/resolvers/report/monthly-production-reports.ts +5 -3
  61. package/server/graphql/resolvers/report/yearly-production-reports.ts +5 -2
  62. package/server/graphql/types/daily-loading-detail/daily-loading-detail-patch.ts +2 -0
  63. package/server/utils/transaction-util.ts +36 -56
  64. package/translations/en.json +1 -1
  65. package/translations/ja.json +1 -1
  66. package/translations/ko.json +1 -1
  67. package/translations/ms.json +1 -1
  68. package/translations/zh.json +1 -1
@@ -6,7 +6,7 @@ import { Block, Organization, Ramp } from '../../../entities'
6
6
  export const dailyFfbDispatchProductionReports = {
7
7
  async dailyFfbDispatchProductionReports(_: any, params: ListParam, context: any) {
8
8
  try {
9
- const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
9
+ const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
10
10
 
11
11
  let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
12
  let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
@@ -36,14 +36,16 @@ export const dailyFfbDispatchProductionReports = {
36
36
  where: { domain: domain.id, deletedAt: IsNull() }
37
37
  })
38
38
 
39
- let blocks = await tx.getRepository(Block).query(`
39
+ let blocks = await tx.getRepository(Block).query(
40
+ `
40
41
  SELECT b.id, b.name FROM ramps r
41
42
  INNER JOIN blocks b ON b.id = r.block_id
42
43
  WHERE b.deleted_at IS NULL
43
44
  AND r.domain_id = $1
44
45
  GROUP BY b.id, b.name
45
- `, [domain.id])
46
-
46
+ `,
47
+ [domain.id]
48
+ )
47
49
 
48
50
  // -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
49
51
  // [fromDateString, toDateString]
@@ -52,44 +54,67 @@ export const dailyFfbDispatchProductionReports = {
52
54
  await tx.query(
53
55
  `
54
56
  CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
55
- SELECT "name", "dispatch_at", sum(weight) AS weight FROM(
57
+ SELECT
58
+ "name",
59
+ "dispatch_at",
60
+ SUM(weight::numeric) AS weight
61
+ FROM (
56
62
  SELECT * FROM (
57
- SELECT dd.id,COALESCE(b.name, 'unknown') AS name, 1 AS "rank", dd.dispatch_at::date AS dispatch_at,
58
- COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0) AS weight
59
- FROM daily_dispatches dd
60
- INNER JOIN daily_dispatch_details ddd ON ddd.daily_dispatch_id = dd.id
61
- INNER JOIN ramps r ON r.id = ddd.ramp_id
62
- INNER JOIN blocks b ON b.id = r.block_id
63
- WHERE dd.dispatch_at::date between $1 and $2
64
- AND b.deleted_at is null
63
+ SELECT
64
+ rbh.id,
65
+ COALESCE(b.name, 'unknown') AS name,
66
+ 1 AS "rank",
67
+ rbh.transaction_date::date AS dispatch_at,
68
+ CASE
69
+ WHEN rbh.transaction_type = 'DISPATCH' AND rbh.weight < 0 THEN ABS(rbh.weight)
70
+ WHEN rbh.transaction_type IN ('REVERSE_DISPATCH', 'TONNAGE_VARIANCE') THEN ABS(rbh.weight)
71
+ ELSE 0
72
+ END AS weight
73
+ FROM ramp_block_histories rbh
74
+ INNER JOIN blocks b ON b.id = rbh.block_id
75
+ WHERE rbh.transaction_type IN ('DISPATCH', 'REVERSE_DISPATCH', 'TONNAGE_VARIANCE')
76
+ AND rbh.transaction_date::date BETWEEN $1 AND $2
77
+ AND b.deleted_at IS NULL
65
78
  UNION
66
- SELECT dd.id, COALESCE(c.name, 'unknown') AS name, CASE WHEN c.name IS NULL THEN 3 ELSE 2 END AS "rank", dd.dispatch_at::date AS dispatch_at,
67
- 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 weight
79
+ SELECT
80
+ dd.id,
81
+ COALESCE(c.name, 'unknown') AS name,
82
+ CASE WHEN c.name IS NULL THEN 3 ELSE 2 END AS "rank",
83
+ dd.dispatch_at::date AS dispatch_at,
84
+ COALESCE(
85
+ (SELECT SUM(COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0))
86
+ FROM daily_dispatch_details ddd
87
+ WHERE ddd.daily_dispatch_id = dd.id), 0
88
+ ) AS weight
68
89
  FROM daily_dispatches dd
69
90
  LEFT JOIN organizations c ON c.id = dd.dispatch_to_id
70
- WHERE dd.dispatch_at::date between $1 and $2
91
+ WHERE dd.dispatch_at::date BETWEEN $1 AND $2
92
+ AND dd.deleted_at IS NULL
71
93
  ) foo
72
94
  ORDER BY "rank", "name", "dispatch_at"
73
95
  ) foo
74
96
  GROUP BY "name", "dispatch_at"
75
97
  ORDER BY name, "dispatch_at"
76
- )
98
+ );
77
99
  `,
78
100
  [fromDateString, toDateString]
79
101
  )
80
102
 
81
- await tx.query(`
103
+ await tx.query(
104
+ `
82
105
  create temp table cross_column ON COMMIT DROP as (
83
- SELECT b.name FROM ramps r
84
- INNER JOIN blocks b ON b.id = r.block_id
85
- WHERE r.deleted_at IS NULL AND r.domain_id = $1
106
+ SELECT b.name FROM blocks b
107
+ WHERE 1=1
108
+ AND b.domain_id = $1
86
109
  AND b.deleted_at is null
87
110
  GROUP BY b.id, b.name
88
111
  UNION
89
112
  SELECT c.name FROM organizations c
90
113
  where c.deleted_at is null
91
114
  )
92
- `, [domain.id])
115
+ `,
116
+ [domain.id]
117
+ )
93
118
 
94
119
  let definedCrossColumn = await tx.query(`
95
120
  select string_agg(concat('"', name, '"'),',') as columns from cross_column
@@ -108,7 +133,12 @@ export const dailyFfbDispatchProductionReports = {
108
133
  $$
109
134
  SELECT name from cross_column
110
135
  $$
111
- ) AS (dispatch_at date, ${definedCrossColumn[0].columns.split(',').map(itm => { return itm + ' varchar' }).join(',')} )
136
+ ) AS (dispatch_at date, ${definedCrossColumn[0].columns
137
+ .split(',')
138
+ .map(itm => {
139
+ return itm + ' varchar'
140
+ })
141
+ .join(',')} )
112
142
  );
113
143
  `
114
144
  )
@@ -117,7 +147,12 @@ export const dailyFfbDispatchProductionReports = {
117
147
  `
118
148
  CREATE TEMP TABLE temp_monthly_production_data ON COMMIT DROP AS (
119
149
  SELECT TO_CHAR(md.dateDay:: DATE, 'dd/mm/yyyy') as "date"
120
- , row_to_json((SELECT d FROM (SELECT ${definedCrossColumn[0].columns.split(',').map(itm => { return 'pbd.' + itm }).join(',')}) d))::varchar as "blockData"
150
+ , row_to_json((SELECT d FROM (SELECT ${definedCrossColumn[0].columns
151
+ .split(',')
152
+ .map(itm => {
153
+ return 'pbd.' + itm
154
+ })
155
+ .join(',')}) d))::varchar as "blockData"
121
156
  , (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.dispatch_at = pbd.dispatch_at) AS "today"
122
157
  FROM (select generate_series((date '${fromDateString}')::timestamp, (date '${toDateString}')::timestamp, interval '1 day')::date as dateDay) as md
123
158
  LEFT JOIN pivot_block_dispatch pbd on pbd.dispatch_at::date = md.dateDay
@@ -138,13 +173,13 @@ export const dailyFfbDispatchProductionReports = {
138
173
  `
139
174
  )
140
175
 
141
-
142
176
  return {
143
177
  items: result.map(itm => {
144
178
  return {
145
179
  ...itm
146
180
  }
147
- }), total: total[0].count
181
+ }),
182
+ total: total[0].count
148
183
  }
149
184
  } catch (error) {
150
185
  throw error
@@ -32,7 +32,8 @@ export const dailyProductionReports = {
32
32
  .getRepository(Block)
33
33
  .findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
34
34
 
35
- await tx.query(`
35
+ await tx.query(
36
+ `
36
37
  CREATE TEMP TABLE temp_blocks on commit drop AS (
37
38
  WITH RECURSIVE b AS (
38
39
  SELECT $1::uuid as block_id, * FROM blocks b
@@ -45,23 +46,36 @@ export const dailyProductionReports = {
45
46
  )
46
47
  SELECT * FROM b
47
48
  );
48
- `, [block.id]
49
+ `,
50
+ [block.id]
49
51
  )
50
52
 
51
- await tx.query(`
53
+ await tx.query(
54
+ `
52
55
  CREATE TEMP TABLE temp_records on commit drop AS (
53
56
  SELECT *
54
57
  FROM (
55
- select blk.block_id, coalesce(sum(field_bunches),0) AS today_field_bunches,
58
+ select
59
+ blk.block_id,
60
+ COALESCE(
61
+ SUM(
62
+ CASE
63
+ WHEN transaction_type = 'HARVEST' THEN field_bunches
64
+ WHEN transaction_type IN ('LOADING', 'LOADING_ADJUSTMENT') THEN -field_bunches
65
+ ELSE 0
66
+ END
67
+ ), 0
68
+ ) AS today_field_bunches,
56
69
  round(coalesce(sum(ramp_weight),0)::numeric,4) AS today_ramp_weight,
57
- sum(case when transaction_type = 'HARVEST' then field_bunches else 0 end) as today_bunch_harvest,
58
- sum(case when transaction_type = 'LOADING' then -field_bunches else 0 end) as today_bunch_collected,
59
- round(sum(case when transaction_type = 'LOADING' then ramp_weight else 0 end)::numeric,4) as today_ramp_weight_collected,
70
+ sum(case when transaction_type = 'HARVEST' or transaction_type = 'BUNCHES_ADJUSTMENT' then field_bunches else 0 end) as today_bunch_harvest,
71
+ sum(case when transaction_type = 'LOADING' or transaction_type = 'LOADING_ADJUSTMENT' then -field_bunches else 0 end) as today_bunch_collected,
72
+ round(sum(case when transaction_type = 'LOADING' and transaction_type = 'LOADING_ADJUSTMENT' then ramp_weight else 0 end)::numeric,4) as today_ramp_weight_collected,
60
73
  --round(sum(case when transaction_type = 'DISPATCHMENT' then -ramp_weight else 0 end)::numeric,4) as today_weight_dispatch,
61
74
  transaction_date
62
75
  from record_transactions t2
63
76
  inner join temp_blocks blk on blk.id = t2.block_id
64
77
  where transaction_date <= $1
78
+ and t2.deleted_at is null
65
79
  group by blk.block_id, transaction_date
66
80
  ) src
67
81
  )
@@ -71,69 +85,87 @@ export const dailyProductionReports = {
71
85
 
72
86
  await tx.query(
73
87
  `
74
- create temp table temp_daily_production_data on commit drop as (
75
- select *,
76
- coalesce(sum(today_bunch_harvest) over (order by date_day asc rows between unbounded preceding and current row), 0) as to_date_bunch_harvest,
77
- coalesce(sum(today_bunch_collected) over (order by date_day asc rows between unbounded preceding and current row), 0) as to_date_bunch_collected,
78
- coalesce(sum(today_ramp_weight_collected) over (order by date_day asc rows between unbounded preceding and current row), 0) as to_date_ramp_weight_collected,
79
- coalesce(sum(today_weight_dispatch) over (order by date_day asc rows between unbounded preceding and current row), 0) as to_date_weight_dispatch,
80
- prev_bunch_bal_in_field + today_bunch_harvest as today_bunch_in_field,
81
- prev_bunch_bal_in_field + today_bunch_harvest - today_bunch_collected as today_bunch_bal_in_field,
82
- prev_weight_bal_in_ramp + today_ramp_weight_collected - today_weight_dispatch as today_weight_bal_in_ramp
88
+ CREATE TEMP TABLE temp_daily_production_data ON COMMIT DROP AS (
89
+ SELECT
90
+ *,
91
+ COALESCE(SUM(today_bunch_harvest) OVER (ORDER BY date_day ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS to_date_bunch_harvest,
92
+ COALESCE(SUM(today_bunch_collected) OVER (ORDER BY date_day ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS to_date_bunch_collected,
93
+ COALESCE(SUM(today_ramp_weight_collected) OVER (ORDER BY date_day ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS to_date_ramp_weight_collected,
94
+ COALESCE(SUM(today_weight_dispatch) OVER (ORDER BY date_day ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS to_date_weight_dispatch,
95
+ prev_bunch_bal_in_field + today_bunch_harvest AS today_bunch_in_field,
96
+ prev_bunch_bal_in_field + today_bunch_harvest + today_bunch_collected AS today_bunch_bal_in_field,
97
+ prev_weight_bal_in_ramp + today_ramp_weight_collected - today_weight_dispatch AS today_weight_bal_in_ramp
83
98
  FROM (
84
- select extract(day from md.dateDay) as date_day,
85
- coalesce(
86
- (
87
- select sum(today_field_bunches) from temp_records t2
88
- where transaction_date::timestamp < md.dateDay
89
- and transaction_date between $1 and $2
90
- )
91
- , 0) as prev_bunch_bal_in_field,
92
- coalesce(
93
- (
94
- select sum(today_ramp_weight) from temp_records t2
95
- where transaction_date::timestamp < md.dateDay
96
- and transaction_date between $1 and $2
97
- )
98
- , 0) as prev_weight_bal_in_ramp,
99
- coalesce(today_bunch_harvest, 0) as today_bunch_harvest,
100
- coalesce(today_bunch_collected, 0) as today_bunch_collected,
101
- coalesce(today_ramp_weight_collected, 0) as today_ramp_weight_collected,
102
- COALESCE(-(
103
- SELECT sum(weight) FROM ramp_block_histories rbh
104
- inner join temp_blocks blk on blk.id = rbh.block_id
105
- where rbh.transaction_date::timestamp = md.dateDay
106
- AND rbh.transaction_type='DISPATCH'
107
- ),0) AS today_weight_dispatch,
108
- coalesce(tot.today_out_turn, 0) as today_out_turn,
109
- coalesce(sum(tot.today_out_turn) over (order by dateDay asc rows between unbounded preceding and current row), 0) as to_date_out_turn,
110
- (select name from blocks b2 where id = $3) as block,
111
- coalesce(thr.today_harvesting_round, 0) as today_harvesting_round,
112
- coalesce(thr.today_hectare_cover, 0) as today_hectare_cover
113
- from
114
- (select generate_series((date '${fromDateString}')::timestamp, (date '${toDateString}')::timestamp, interval '1 day')::date as dateDay) as md
115
- left join (
116
- select * from temp_records trx
117
- where transaction_date between $1 and $2
118
- order by transaction_date
119
- ) as dt on dt.transaction_date::date = md.dateDay
99
+ SELECT
100
+ EXTRACT(DAY FROM md.dateDay) AS date_day,
101
+ COALESCE(
102
+ (SELECT SUM(today_field_bunches)
103
+ FROM temp_records t2
104
+ WHERE transaction_date::timestamp < md.dateDay
105
+ AND transaction_date BETWEEN $1 AND $2
106
+ ), 0
107
+ ) AS prev_bunch_bal_in_field,
108
+ COALESCE(
109
+ (SELECT SUM(today_ramp_weight)
110
+ FROM temp_records t2
111
+ WHERE transaction_date::timestamp < md.dateDay
112
+ AND transaction_date BETWEEN $1 AND $2
113
+ ), 0
114
+ ) AS prev_weight_bal_in_ramp,
115
+ COALESCE(today_bunch_harvest, 0) AS today_bunch_harvest,
116
+ COALESCE(today_bunch_collected, 0) AS today_bunch_collected,
117
+ COALESCE(today_ramp_weight_collected, 0) AS today_ramp_weight_collected,
118
+ COALESCE(
119
+ (SELECT SUM(
120
+ CASE
121
+ WHEN rbh.transaction_type = 'DISPATCH' AND rbh.weight < 0 THEN ABS(rbh.weight)
122
+ WHEN rbh.transaction_type IN ('REVERSE_DISPATCH', 'TONNAGE_VARIANCE') THEN ABS(rbh.weight)
123
+ ELSE 0
124
+ END
125
+ )
126
+ FROM ramp_block_histories rbh
127
+ INNER JOIN temp_blocks blk ON blk.id = rbh.block_id
128
+ WHERE rbh.transaction_date::timestamp = md.dateDay
129
+ AND rbh.transaction_type IN ('DISPATCH', 'REVERSE_DISPATCH', 'TONNAGE_VARIANCE')
130
+ ), 0
131
+ ) AS today_weight_dispatch,
132
+ COALESCE(tot.today_out_turn, 0) AS today_out_turn,
133
+ COALESCE(SUM(tot.today_out_turn) OVER (ORDER BY dateDay ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS to_date_out_turn,
134
+ (SELECT name FROM blocks b2 WHERE id = $3) AS block,
135
+ COALESCE(thr.today_harvesting_round, 0) AS today_harvesting_round,
136
+ COALESCE(thr.today_hectare_cover, 0) AS today_hectare_cover
137
+ FROM
138
+ (SELECT generate_series((DATE '${fromDateString}')::timestamp, (DATE '${toDateString}')::timestamp, INTERVAL '1 day')::date AS dateDay) AS md
139
+ LEFT JOIN (
140
+ SELECT *
141
+ FROM temp_records trx
142
+ WHERE transaction_date BETWEEN $1 AND $2
143
+ ORDER BY transaction_date
144
+ ) AS dt ON dt.transaction_date::date = md.dateDay
120
145
  LEFT JOIN (
121
- select sum(harvesting_round) AS today_harvesting_round, sum(coverage) AS today_hectare_cover, harvest_date
122
- from daily_harvests dh
123
- inner join temp_blocks blk on blk.id = dh.block_id
124
- where harvest_date between $1 and $2
125
- group by blk.block_id, harvest_date
126
- ) as thr ON thr.harvest_date::date = md.dateDay
146
+ SELECT
147
+ SUM(harvesting_round) AS today_harvesting_round,
148
+ SUM(coverage) AS today_hectare_cover,
149
+ harvest_date
150
+ FROM daily_harvests dh
151
+ INNER JOIN temp_blocks blk ON blk.id = dh.block_id
152
+ WHERE harvest_date BETWEEN $1 AND $2
153
+ AND dh.deleted_at IS NULL
154
+ GROUP BY blk.block_id, harvest_date
155
+ ) AS thr ON thr.harvest_date::date = md.dateDay
127
156
  LEFT JOIN (
128
- select count(*) AS today_out_turn, dh.harvest_date
129
- from daily_harvest_details dhd
130
- inner join daily_harvests dh on dh.id = dhd.daily_harvest_id
131
- inner join temp_blocks blk on blk.id = dh.block_id
132
- where dh.harvest_date between $1 and $2
157
+ SELECT
158
+ COUNT(*) AS today_out_turn,
159
+ dh.harvest_date
160
+ FROM daily_harvest_details dhd
161
+ INNER JOIN daily_harvests dh ON dh.id = dhd.daily_harvest_id
162
+ INNER JOIN temp_blocks blk ON blk.id = dh.block_id
163
+ WHERE dh.harvest_date BETWEEN $1 AND $2
164
+ AND dhd.deleted_at IS NULL
133
165
  GROUP BY blk.block_id, dh.harvest_date
134
- ) as tot ON tot.harvest_date::date = md.dateDay
166
+ ) AS tot ON tot.harvest_date::date = md.dateDay
135
167
  ) dt
136
- )`,
168
+ );`,
137
169
  [fromDateString, toDateString, block.id]
138
170
  )
139
171
 
@@ -174,7 +206,6 @@ export const dailyProductionReports = {
174
206
  }
175
207
  }
176
208
 
177
-
178
209
  // async function updateAllData() {
179
210
  // await getManager().transaction(async txMgr => {
180
211
  // let data = await txMgr.query(`
@@ -182,8 +213,8 @@ export const dailyProductionReports = {
182
213
  // SELECT uuid_generate_v4() AS id, DATE(dd.dispatch_at)::varchar AS transaction_date, 'DISPATCH' AS transaction_type, dd.dispatch_at AS created_at, dd.dispatch_at AS updated_at,
183
214
  // ddd.collected_ramp_weight AS dispatch_weight, '980f20a0-747c-4d04-a870-97a09f6ba807' AS domain_id, ddd.ramp_id, '0933baea-e099-494b-9791-3dfe805731f0' AS creator_id, '0933baea-e099-494b-9791-3dfe805731f0' AS updater_id,
184
215
  // dd.id as daily_dispatch_id
185
- // FROM daily_dispatch_details ddd
186
- // INNER JOIN daily_dispatches dd ON dd.id = ddd.daily_dispatch_id
216
+ // FROM daily_dispatch_details ddd
217
+ // INNER JOIN daily_dispatches dd ON dd.id = ddd.daily_dispatch_id
187
218
  // WHERE dd.dispatch_at >='2023-07-01 00:00:00.000'
188
219
  // AND dd.deleted_at IS null
189
220
  // ) src ORDER BY src.ramp_id, src.transaction_date
@@ -195,7 +226,7 @@ export const dailyProductionReports = {
195
226
 
196
227
  // let rampBlockHistory = await txMgr.query(`
197
228
  // SELECT * FROM (
198
- // SELECT *, ROW_NUMBER () OVER (PARTITION BY ramp_id, block_id ORDER BY transaction_date desc, transaction_type) AS rn FROM ramp_block_histories
229
+ // SELECT *, ROW_NUMBER () OVER (PARTITION BY ramp_id, block_id ORDER BY transaction_date desc, transaction_type) AS rn FROM ramp_block_histories
199
230
  // WHERE ramp_id =$1 AND transaction_date <= $2
200
231
  // ) foo WHERE rn = 1
201
232
  // `, [dt.ramp_id, dt.transaction_date])
@@ -215,7 +246,7 @@ export const dailyProductionReports = {
215
246
  // // insert into ramp_block_histories (id,transaction_type, creator_id, updater_id, transaction_date, created_at, updated_at, weight, domain_id, block_id, ramp_id)
216
247
  // let processedData = await txMgr.query(`
217
248
  // insert into ramp_block_histories (id, transaction_type, creator_id, updater_id, transaction_date, created_at, updated_at, domain_id, ramp_id, weight, previous_weight, current_weight, block_id, daily_dispatch_id)
218
- // SELECT uuid_generate_v4() AS id, 'DISPATCH' AS transaction_type,
249
+ // SELECT uuid_generate_v4() AS id, 'DISPATCH' AS transaction_type,
219
250
  // '0933baea-e099-494b-9791-3dfe805731f0' AS creator_id, '0933baea-e099-494b-9791-3dfe805731f0' AS updater_id,
220
251
  // $1 AS transaction_date, $2 AS created_at, $3 AS updated_at,
221
252
  // $4 AS domain_id, $5 AS ramp_id,
@@ -228,7 +259,7 @@ export const dailyProductionReports = {
228
259
 
229
260
  // // await txMgr.query(`
230
261
  // // SELECT * FROM (
231
- // // SELECT *, ROW_NUMBER () OVER (PARTITION BY ramp_id, block_id ORDER BY transaction_date desc) AS rn FROM ramp_block_histories
262
+ // // SELECT *, ROW_NUMBER () OVER (PARTITION BY ramp_id, block_id ORDER BY transaction_date desc) AS rn FROM ramp_block_histories
232
263
  // // WHERE ramp_id =$1 AND transaction_date <= $2
233
264
  // // ) foo WHERE rn = 1
234
265
  // // `, [dt.ramp_id, dt.transaction_date]
@@ -240,4 +271,4 @@ export const dailyProductionReports = {
240
271
  // };
241
272
 
242
273
  // })
243
- // }
274
+ // }
@@ -32,7 +32,8 @@ export const dailyStaffHarvestReports = {
32
32
  .getRepository(Block)
33
33
  .findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
34
34
 
35
- await tx.query(`
35
+ await tx.query(
36
+ `
36
37
  CREATE TEMP TABLE temp_blocks on commit drop AS (
37
38
  WITH RECURSIVE b AS (
38
39
  SELECT $1::uuid as block_id, * FROM blocks b
@@ -45,7 +46,8 @@ export const dailyStaffHarvestReports = {
45
46
  )
46
47
  SELECT * FROM b
47
48
  );
48
- `, [block.id]
49
+ `,
50
+ [block.id]
49
51
  )
50
52
 
51
53
  await tx.query(
@@ -60,6 +62,7 @@ export const dailyStaffHarvestReports = {
60
62
  inner join organization_staffs os on os.id = dhd.organization_staff_id
61
63
  inner join blocks b2 on b2.id = blk.block_id
62
64
  where dh.harvest_date::date between $1 and $2
65
+ and dhd.deleted_at is null
63
66
  ) as dt
64
67
  group by "harvestDate", "blockName", "staffName"
65
68
  order by "staffName", "harvestDate"
@@ -6,7 +6,7 @@ import { Block, Ramp } from '../../../entities'
6
6
  export const monthlyBlockDispatchReports = {
7
7
  async monthlyBlockDispatchReports(_: any, params: ListParam, context: any) {
8
8
  try {
9
- const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
9
+ const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
10
10
 
11
11
  let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
12
  let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
@@ -27,13 +27,16 @@ export const monthlyBlockDispatchReports = {
27
27
  String(toDate.getDate()).padStart(2, '0')
28
28
  ].join('-')
29
29
 
30
- let blocks = await tx.getRepository(Block).query(`
30
+ let blocks = await tx.getRepository(Block).query(
31
+ `
31
32
  SELECT b.id, b.name FROM ramps r
32
33
  INNER JOIN blocks b ON b.id = r.block_id
33
34
  WHERE b.deleted_at IS NULL
34
35
  AND r.domain_id = $1
35
36
  GROUP BY b.id, b.name
36
- `, [domain.id])
37
+ `,
38
+ [domain.id]
39
+ )
37
40
 
38
41
  // -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
39
42
  // [fromDateString, toDateString]
@@ -49,8 +52,11 @@ export const monthlyBlockDispatchReports = {
49
52
  INNER JOIN ramps r ON r.id = ddd.ramp_id
50
53
  INNER JOIN blocks b ON b.id = r.block_id
51
54
  WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
55
+ AND dd.deleted_at is null
56
+ AND ddd.deleted_at is null
52
57
  )
53
- `, [fromDateString, toDateString]
58
+ `,
59
+ [fromDateString, toDateString]
54
60
  )
55
61
 
56
62
  await tx.query(
@@ -58,10 +64,13 @@ export const monthlyBlockDispatchReports = {
58
64
  CREATE TEMP TABLE pivot_block_dispatch ON COMMIT DROP AS (
59
65
  SELECT * FROM crosstab(
60
66
  $$SELECT rbd.id, rbd.block_name, round(rbd.weight, 2 )::varchar FROM raw_block_dispatch rbd$$,
61
- $$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 = '${domain.id}' GROUP BY b.id, b.name$$
67
+ $$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 = '${
68
+ domain.id
69
+ }' GROUP BY b.id, b.name$$
62
70
  ) AS ("id" uuid, ${blocks.map(block => `"${block.name}" varchar`).join(',')})
63
71
  );
64
- `)
72
+ `
73
+ )
65
74
 
66
75
  await tx.query(
67
76
  `
@@ -75,7 +84,9 @@ export const monthlyBlockDispatchReports = {
75
84
  , dd.transport_no as "lorryNo"
76
85
  , dd.driver_identification as "driverIdentification"
77
86
  , TO_CHAR(dd.dispatch_at:: DATE, 'dd/mm/yyyy') as "date"
78
- , row_to_json((SELECT d FROM (SELECT ${blocks.map(block => `pbd."${block.name}"`).join(',')}) d))::varchar as "blockData"
87
+ , row_to_json((SELECT d FROM (SELECT ${blocks
88
+ .map(block => `pbd."${block.name}"`)
89
+ .join(',')}) d))::varchar as "blockData"
79
90
  , (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.id = dd.id) AS "today"
80
91
  FROM daily_dispatches dd
81
92
  INNER JOIN pivot_block_dispatch pbd ON pbd.id = dd.id
@@ -99,13 +110,13 @@ export const monthlyBlockDispatchReports = {
99
110
  `
100
111
  )
101
112
 
102
-
103
113
  return {
104
114
  items: result.map(itm => {
105
115
  return {
106
116
  ...itm
107
117
  }
108
- }), total: total[0].count
118
+ }),
119
+ total: total[0].count
109
120
  }
110
121
  } catch (error) {
111
122
  throw error
@@ -6,7 +6,7 @@ import { Organization } from '../../../entities'
6
6
  export const monthlyDispatchSummaryReports = {
7
7
  async monthlyDispatchSummaryReports(_: any, params: ListParam, context: any) {
8
8
  try {
9
- const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
9
+ const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
10
10
 
11
11
  let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
12
12
  let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
@@ -27,22 +27,26 @@ export const monthlyDispatchSummaryReports = {
27
27
  String(toDate.getDate()).padStart(2, '0')
28
28
  ].join('-')
29
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
-
30
+ const org = await tx.getRepository(Organization).findOneOrFail({
31
+ where: {
32
+ domain: domain.id,
33
+ deletedAt: IsNull(),
34
+ id: params.filters.filter(x => x.name == 'organization')[0].value
35
+ }
36
+ })
35
37
 
36
38
  await tx.query(
37
39
  `
38
40
  CREATE TEMP TABLE raw_dispatch ON COMMIT DROP AS (
39
41
  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
42
+ COALESCE((SELECT SUM(COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0)) FROM daily_dispatch_details ddd WHERE ddd.daily_dispatch_id = dd.id AND ddd.deleted_at is null),0) AS tonnage
41
43
  FROM daily_dispatches dd
42
44
  WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
43
45
  AND dd.dispatch_to_id = $3
46
+ AND dd.deleted_at is null
44
47
  );
45
- `, [fromDateString, toDateString, org.id]
48
+ `,
49
+ [fromDateString, toDateString, org.id]
46
50
  )
47
51
 
48
52
  await tx.query(
@@ -80,8 +84,8 @@ export const monthlyDispatchSummaryReports = {
80
84
  ORDER BY rbd.dispatch_to_id, rbd.dispatch_at
81
85
  ) src
82
86
  );
83
- `)
84
-
87
+ `
88
+ )
85
89
 
86
90
  const result: any = await tx.query(
87
91
  `
@@ -95,13 +99,13 @@ export const monthlyDispatchSummaryReports = {
95
99
  `
96
100
  )
97
101
 
98
-
99
102
  return {
100
103
  items: result.map(itm => {
101
104
  return {
102
105
  ...itm
103
106
  }
104
- }), total: total[0].count
107
+ }),
108
+ total: total[0].count
105
109
  }
106
110
  } catch (error) {
107
111
  throw error