67 lines
2.3 KiB
SQL
67 lines
2.3 KiB
SQL
create or replace function ems.fn_economics_monthly_chart(
|
|
p_site_id int,
|
|
p_month_start date,
|
|
p_month_end date
|
|
)
|
|
returns jsonb
|
|
language sql
|
|
stable
|
|
as $fn$
|
|
with base as (
|
|
select
|
|
r.day_local,
|
|
case when l.site_id is not null then l.total_balance_czk else r.total_balance_czk end as tb,
|
|
case when l.site_id is not null then l.net_cost_czk else r.net_cost_czk end as nc,
|
|
case when l.site_id is not null then l.green_bonus_czk else r.green_bonus_czk end as gb,
|
|
coalesce(l.grid_import_cashflow_czk, r.grid_import_cashflow_czk) as gic,
|
|
coalesce(l.grid_export_revenue_czk, r.grid_export_revenue_czk) as ger
|
|
from ems.fn_economics_daily_for_window(
|
|
p_site_id,
|
|
(p_month_start::timestamp at time zone 'Europe/Prague'),
|
|
(p_month_end::timestamp at time zone 'Europe/Prague')
|
|
) r
|
|
left join ems.audit_day_lock l
|
|
on l.site_id = r.site_id
|
|
and l.day_local = r.day_local
|
|
where r.site_id = p_site_id
|
|
and r.day_local >= p_month_start
|
|
and r.day_local < p_month_end
|
|
),
|
|
w as (
|
|
select
|
|
day_local,
|
|
round(tb::numeric, 2) as daily_balance_czk,
|
|
round((-nc)::numeric, 2) as daily_grid_balance_czk,
|
|
round(gb::numeric, 2) as daily_green_bonus_czk,
|
|
round(gic::numeric, 2) as daily_import_cost_czk,
|
|
round(ger::numeric, 2) as daily_export_revenue_czk,
|
|
sum(round(tb::numeric, 2)) over (
|
|
order by day_local rows between unbounded preceding and current row
|
|
) as cumb,
|
|
sum(round((-nc)::numeric, 2)) over (
|
|
order by day_local rows between unbounded preceding and current row
|
|
) as cumg
|
|
from base
|
|
)
|
|
select coalesce(
|
|
jsonb_agg(
|
|
jsonb_build_object(
|
|
'day', day_local,
|
|
'daily_balance_czk', daily_balance_czk,
|
|
'daily_grid_balance_czk', daily_grid_balance_czk,
|
|
'daily_green_bonus_czk', daily_green_bonus_czk,
|
|
'daily_import_cost_czk', daily_import_cost_czk,
|
|
'daily_export_revenue_czk', daily_export_revenue_czk,
|
|
'cumulative_balance_czk', round(cumb::numeric, 2),
|
|
'cumulative_grid_balance_czk', round(cumg::numeric, 2)
|
|
)
|
|
order by day_local
|
|
),
|
|
'[]'::jsonb
|
|
)
|
|
from w;
|
|
$fn$;
|
|
|
|
comment on function ems.fn_economics_monthly_chart(int, date, date) is
|
|
'Křivka měsíční bilance s běžícími součty (GET /economics/monthly-chart).';
|