@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.
- package/client/pages/harvesting/harvesting-create-record.js +5 -2
- package/client/pages/loading/edit-loading-record.js +2 -0
- package/client/pages/report/report-daily-ffb-dispatch-and-production.js +19 -23
- package/dist-server/entities/daily-dispatch.js +2 -2
- package/dist-server/entities/daily-dispatch.js.map +1 -1
- package/dist-server/entities/ramp-block-history.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.js +49 -1
- package/dist-server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js +124 -112
- package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js +51 -2
- package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-harvest/delete-daily-harvest.js +5 -7
- package/dist-server/graphql/resolvers/daily-harvest/delete-daily-harvest.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js +3 -3
- package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/delete-daily-loading.js +6 -0
- package/dist-server/graphql/resolvers/daily-loading/delete-daily-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js +68 -52
- package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js +16 -22
- package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js +50 -19
- package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/daily-production-reports.js +96 -67
- package/dist-server/graphql/resolvers/report/daily-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js +1 -0
- package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js +7 -2
- package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js +11 -5
- package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js +21 -9
- package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/monthly-production-reports.js +5 -2
- package/dist-server/graphql/resolvers/report/monthly-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/yearly-production-reports.js +5 -2
- package/dist-server/graphql/resolvers/report/yearly-production-reports.js.map +1 -1
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js +2 -0
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js.map +1 -1
- package/dist-server/utils/transaction-util.js +32 -53
- package/dist-server/utils/transaction-util.js.map +1 -1
- package/package.json +2 -2
- package/server/entities/daily-dispatch.ts +2 -2
- package/server/entities/ramp-block-history.ts +2 -5
- package/server/graphql/resolvers/daily-dispatch/delete-daily-dispatch.ts +69 -2
- package/server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.ts +179 -141
- package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +68 -5
- package/server/graphql/resolvers/daily-harvest/delete-daily-harvest.ts +9 -26
- package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +3 -3
- package/server/graphql/resolvers/daily-loading/delete-daily-loading.ts +11 -1
- package/server/graphql/resolvers/daily-loading/generate-daily-loading.ts +95 -98
- package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +44 -47
- package/server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.ts +61 -26
- package/server/graphql/resolvers/report/daily-production-reports.ts +103 -72
- package/server/graphql/resolvers/report/daily-staff-harvest-reports.ts +5 -2
- package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +20 -9
- package/server/graphql/resolvers/report/monthly-dispatch-summary-reports.ts +16 -12
- package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +26 -12
- package/server/graphql/resolvers/report/monthly-production-reports.ts +5 -3
- package/server/graphql/resolvers/report/yearly-production-reports.ts +5 -2
- package/server/graphql/types/daily-loading-detail/daily-loading-detail-patch.ts +2 -0
- package/server/utils/transaction-util.ts +36 -56
- package/translations/en.json +1 -1
- package/translations/ja.json +1 -1
- package/translations/ko.json +1 -1
- package/translations/ms.json +1 -1
- 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
|
|
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
|
-
`,
|
|
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
|
|
57
|
+
SELECT
|
|
58
|
+
"name",
|
|
59
|
+
"dispatch_at",
|
|
60
|
+
SUM(weight::numeric) AS weight
|
|
61
|
+
FROM (
|
|
56
62
|
SELECT * FROM (
|
|
57
|
-
SELECT
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
67
|
-
|
|
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
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
`,
|
|
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
|
|
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
|
|
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
|
-
}),
|
|
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
|
-
`,
|
|
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
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
)
|
|
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
|
-
`,
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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 = '${
|
|
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
|
|
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
|
-
}),
|
|
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
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
`,
|
|
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
|
-
}),
|
|
107
|
+
}),
|
|
108
|
+
total: total[0].count
|
|
105
109
|
}
|
|
106
110
|
} catch (error) {
|
|
107
111
|
throw error
|