INSERT INTO ctl_aplicativo SELECT 'frm_dashboard_evolucao_estoque', 'Evolução do Estoque - 12 Meses', 'ADM','C' FROM ctl_aplicativo WHERE aplinome = 'frm_bas_filial' AND (SELECT aplinome FROM ctl_aplicativo WHERE aplinome = 'frm_dashboard_evolucao_estoque') IS NULL LIMIT 1; DELETE FROM ctl_menu_nivel_dependencia WHERE aplicacao = 'menu_dashboard' AND aplicacao_nivel = 'frm_dashboard_evolucao_estoque'; INSERT INTO ctl_menu_nivel_dependencia VALUES ('menu_dashboard', 'frm_dashboard_evolucao_estoque'); INSERT INTO ctl_grupo_x_direito (grupousucod,aplinome,grupodireito ) SELECT grupousucod, 'frm_dashboard_evolucao_estoque', 'T' FROM ctl_grupo_x_direito WHERE grupousucod = 1 AND grupousucod NOT IN (SELECT grupousucod FROM ctl_grupo_x_direito WHERE aplinome = 'frm_dashboard_evolucao_estoque') GROUP BY grupousucod ORDER BY grupousucod; DROP TABLE IF EXISTS dashboard_stq_estoque_valor; CREATE TABLE dashboard_stq_estoque_valor( filial integer NOT NULL, ano integer NOT NULL, mes integer NOT NULL, vlr_estoque numeric(18,6) NOT NULL, CONSTRAINT pk_dashboard_stq_estoque_valor PRIMARY KEY (filial, ano, mes) ) TABLESPACE pg_default; ALTER TABLE dashboard_stq_estoque_valor OWNER to postgres; COMMENT ON TABLE dashboard_stq_estoque_valor IS 'Dashboard de Estoque'; DELETE FROM dashboard_stq_estoque_valor; INSERT INTO dashboard_stq_estoque_valor (filial, ano, mes, vlr_estoque) ( WITH meses AS ( SELECT date_trunc('month', current_date) - interval '1 month' * gs AS mes_inicio FROM generate_series(0, 11) AS gs ), saldos_base AS ( SELECT produto, date_trunc('month', data) AS mes, data, vlr_estoque FROM stq_saldo_estoque WHERE filial_stq = (select min(filial_par) from par_faturamento) ), produtos_meses AS ( SELECT DISTINCT p.produto, m.mes_inicio AS mes FROM (SELECT DISTINCT produto FROM saldos_base) p CROSS JOIN meses m ), saldos_mensais AS ( SELECT pm.produto, pm.mes, sb.vlr_estoque, ROW_NUMBER() OVER ( PARTITION BY pm.produto, pm.mes ORDER BY sb.data DESC ) AS rn FROM produtos_meses pm LEFT JOIN saldos_base sb ON sb.produto = pm.produto AND sb.data <= (pm.mes + interval '1 month - 1 day') ) , saldos_final AS ( SELECT produto, mes, vlr_estoque FROM saldos_mensais WHERE rn = 1 ) SELECT (select min(filial_par) from par_faturamento) AS filial, to_char(mes, 'YYYY')::integer AS ano, to_char(mes, 'mm')::integer AS mes, COALESCE(SUM(vlr_estoque), 0) AS vlr_estoque FROM saldos_final GROUP BY mes ORDER BY mes );