<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc57257 extends AbstractMigration
{
    public function up(): void
    {
        
        $this->execute(<<<SQL
        DROP MATERIALIZED VIEW sumario.relatorio_vendas
        SQL
    );


        $this->execute(<<<SQL
        CREATE MATERIALIZED VIEW sumario.relatorio_vendas AS (
        SELECT pr.id AS id_proposta,
        pr.id_proposta_renovada,
        pr.id_versao,
        pr2.id_secao,
        pr.nr_endosso,
        pr.nr_apolice,
        pr.dt_vigencia_inicio,
        pr.dt_vigencia_fim,
        pr.id_status,
        pr.vl_custo_apolice,
        pr.id_usuario_criacao,
        pr.dt_vigencia_inicio_original,
        pr.id_proposta_mae,
        (((((((pg.id_ramo || '.'::text) || pd.id_seguradora) || '.'::text) || pr.id_produto) || '.'::text) || pr2.id) || '-'::text) || pr2.nr_digito_verificador AS id_proposta_composto,
        CASE
        WHEN seguro.nr_endosso(pr.id, pr.id_endosso) > 0::double precision THEN to_char(pr2.dt_transmissao, 'DD/MM/YYYY'::text)
        ELSE pr.dt_transmissao
        END AS dt_transmissao,
        po.ds_coordenadas,
        CASE
        WHEN pg.id = 41 THEN 'FRUTAS E HORTALIÇAS'::character varying
        WHEN pg.id_tipo_produto = 2 THEN
        CASE
        WHEN pg.tp_epoca_cultivo = 'I'::bpchar THEN ptp.ds_tipo_produto::text || ' RN - INVERNO'::text
        ELSE ptp.ds_tipo_produto::text || ' RN - VERÃO'::text
        END::character varying
        WHEN pg.id_tipo_produto = 3 THEN
        CASE
        WHEN pg.tp_epoca_cultivo = 'I'::bpchar THEN 'GRÃOS PG - INVERNO'::text
        ELSE 'GRÃOS PG - VERÃO'::text
        END::character varying
        ELSE ptp.ds_tipo_produto::character varying
        END AS tipo_produto,
        sp.id AS id_proponente,
        co.ds_nome_abreviado AS ds_nome_fantasia,
        pc.vl_comissao,
        pd.ds_nome_produto,
        sf.ds_nome_safra,
        c.ds_nome_cultura,
        st.ds_status,
        pb.nu_boleto,
        cr.ds_nome as ds_nome_contrato,
        CASE
        WHEN pb.fl_pago = true THEN 'Pago'::text
        ELSE 'Pendente'::text
        END AS fl_boleto_pago,
        u.tp_usuario,
        pre.ds_nome_preposto,
        ist.vl_area AS total_area,
        ist.vl_lmga AS total_lmga,
        m1.ds_nome_municipio AS municipio_propriedade,
        e1.ds_sigla AS estado_propriedade,
        m1.nr_ibge,
        pat.valor_total,
        pat.valor_segurado,
        pat.valor_subvencao_federal,
        pat.valor_subvencao_estadual,
        CASE
        WHEN pat.valor_subvencao_federal > 0::numeric THEN
        CASE
        WHEN pca.fl_sucesso = true THEN 'Sim'::text
        ELSE 'Não'::text
        END
        ELSE ''::text
        END AS subvencao_concedida,
        tmp_adicional.premio_adicional,
        tmp_pg_segurado.premio_pago_segurado,
        pco.vl_premio AS premio_principal,
        pco.vl_franquia AS valor_franquia,
        v_parcela.valor_primeira_parcela,
        v_parcela.vencto_primeira_parcela,
        q_pronamp.quest_pronamp,
        q_organico.quest_organico,
        CASE
        WHEN q_sub_est.quest_sub_estadual = ''::text OR q_sub_est.quest_sub_estadual IS NULL THEN 'Não'::text
        ELSE q_sub_est.quest_sub_estadual
        END AS quest_sub_estadual,
        pd.id_safra
        FROM seguro.propostas_endosso pe
        JOIN sumario.relatorio_propostas_canceladas_propostas pr ON pe.id_proposta = pr.id
        JOIN seguro.propostas pr2 ON pr2.id = pr.id_proposta_mae
        JOIN seguro.propostas_propriedades po ON po.id_proposta = pr.id
        JOIN sumario.itens_segurados ist ON ist.id_proposta = pr.id
        JOIN sumario.relatorio_vendas_sumario_parcelas pat ON pat.id_endosso = pr.id_endosso
        JOIN seguro.propostas_proponentes pp ON pp.id_proposta = pr.id
        JOIN seguro.proponentes sp ON sp.cpf_cnpj::text = pp.cpf_cnpj::text
        JOIN seguro.propostas_corretores pc ON pc.id_proposta = pr.id
        JOIN sistema.corretores co ON co.id_usuario = pc.id_usuario
        JOIN produto.produtos pd ON pd.id = pr.id_produto
        JOIN produto.produtos_geral pg ON pg.id = pd.id_produto_geral
        JOIN produto.tipo_produto ptp ON ptp.id = pg.id_tipo_produto
        JOIN produto.culturas c ON c.id = pg.id_cultura
        JOIN produto.safras sf ON sf.id = pd.id_safra
        JOIN sistema.municipios m1 ON m1.id = po.id_municipio
        JOIN sistema.estados e1 ON e1.id = m1.id_estado
        JOIN sistema.status st ON st.id = pr.id_status
        JOIN sistema.usuarios u ON pr.id_usuario_criacao = u.id
        LEFT JOIN sumario.relatorio_vendas_premio_pago_segurado tmp_pg_segurado ON tmp_pg_segurado.id_endosso = pr.id_endosso
        LEFT JOIN seguro.propostas_consulta_cadin pca ON pca.fl_ativo = true AND pca.id_proposta = pr.id_proposta_mae
        LEFT JOIN seguro.proposta_boletos pb ON pb.id_proposta = pr.id AND pb.fl_ativo = true AND pb.id_versao = pr.id_versao AND pb.nr_parcela = 1
        LEFT JOIN ( SELECT
        CASE
        WHEN propostas_questionario.ds_resposta::text = '1'::text THEN 'Sim'::text
        ELSE 'Não'::text
        END AS quest_pronamp,
        propostas_questionario.id_proposta
        FROM seguro.propostas_questionario
        WHERE propostas_questionario.id_atributo_rn = 145) q_pronamp ON q_pronamp.id_proposta = pr.id
        LEFT JOIN ( SELECT
        CASE
        WHEN propostas_questionario.ds_resposta::text = '1'::text THEN 'Sim'::text
        ELSE 'Não'::text
        END AS quest_organico,
        propostas_questionario.id_proposta
        FROM seguro.propostas_questionario
        WHERE propostas_questionario.id_atributo_rn = 146) q_organico ON q_organico.id_proposta = pr.id
        LEFT JOIN ( SELECT
        CASE
        WHEN propostas_questionario.ds_resposta::text = '1'::text THEN 'Sim'::text
        ELSE 'Não'::text
        END AS quest_sub_estadual,
        propostas_questionario.id_proposta
        FROM seguro.propostas_questionario
        WHERE propostas_questionario.id_atributo_rn = 154) q_sub_est ON q_sub_est.id_proposta = pr.id_proposta_mae
        LEFT JOIN sumario.relatorio_vendas_premio_adicional tmp_adicional ON tmp_adicional.id_proposta = pr.id
        LEFT JOIN seguro.propostas_coberturas pco ON pco.fl_principal = true AND pco.id_proposta = pr.id AND pco.fl_del = false
        LEFT JOIN ( SELECT propostas_parcelas.id_proposta,
        propostas_parcelas.vl_segurado AS valor_primeira_parcela,
        to_char(propostas_parcelas.dt_vencimento::timestamp with time zone, 'DD/MM/YYYY'::text) AS vencto_primeira_parcela
        FROM seguro.propostas_parcelas
        WHERE propostas_parcelas.nr_parcela = 1) v_parcela ON v_parcela.id_proposta = pr.id
        LEFT JOIN sistema.prepostos pre ON pre.id_usuario = u.id
        LEFT JOIN seguro.propostas_contratos_resseguro pcr ON pcr.id_proposta = pr.id
        LEFT JOIN produto.contratos_resseguro cr ON cr.id = pcr.id_contrato_resseguro
        WHERE (pd.id_safra IN ( SELECT safras.id
        FROM produto.safras
        JOIN ( SELECT safras_1.id
        FROM produto.safras safras_1
        WHERE safras_1.fl_vigente = true) vigente ON vigente.id >= safras.id
        WHERE safras.id = vigente.id OR safras.id = (vigente.id - 1))) AND (st.ds_chave::text <> ALL (ARRAY['PROPOSTA_INCOMPLETA'::character varying::text, 'NAO_ENVIADA'::character varying::text, 'DEVOLVIDA'::character varying::text, 'PROPOSTA_CANCELADA'::character varying::text, 'APOLICE_CANCELADA'::character varying::text, 'ORCAMENTO_ENDOSSO'::character varying::text, 'ENDOSSO_INCOMPLETO'::character varying::text, 'ENDOSSO_ANULADO'::character varying::text, 'SOLICITACAO_CANCELADA'::character varying::text, 'SOLICITACAO_ENDOSSO'::character varying::text, 'SOLICITACAO_CANCELADA'::character varying::text])) AND pe.fl_proposta_vigente = true AND pc.id_usuario <> 487
        ORDER BY pr.id);
        
        SQL
        );

        $this->execute(<<<SQL
        REFRESH MATERIALIZED VIEW sumario.relatorio_vendas;
        SQL);
    }
    
    public function down(): void
    {
        $this->execute(<<<SQL
        DROP MATERIALIZED VIEW sumario.relatorio_vendas;
        SQL
        );
    }
}
