<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr47359 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            DROP VIEW sinistro.v_laudos_cobranca_preliminar_final;

            CREATE OR REPLACE VIEW sinistro.v_laudos_cobranca_preliminar_final AS
            SELECT lf.id_cobertura
                    , pr.id                             AS id_processo
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id                             AS id_empresa
                    , vlf.id_vistoria
                    , cu.ds_nome_cultura
                    , lf.ds_itens_segurados             AS itens
                    , lf.ds_variedades                  AS variedade
                    , lf.vl_area_vistoriada
                    , 'Final'::TEXT                     AS tp_vistoria
                    , pg.id_tipo_produto
                    , cu.id                             AS id_cultura
                    , p.id                              AS id_proposta
                    , e.id                              AS id_estado
                    , pr.id_processo_seguradora
                    , lf.dt_vistoria
                    , vgvf.municipio_perito as municipio_perito
                    , vgvf.nome_perito as perito
                    , STRING_AGG(vgaf.nome_auxiliar, ', ') AS auxiliar
                    , lf.fl_evento_nao_constatado       AS evento_nao_constatado
                    , pd.id                             AS id_produto
                    , pd.id_seguradora
                    , pd.id_produto_geral               AS id_produto_geral
                    , ep.cpf_cnpj                       AS cpf_cnpj_empresa
                    , p.nr_apolice
                    , em.ds_nome_municipio              AS ds_nome_municipio_empresa
                    , ee.ds_sigla                       AS ds_sigla_uf_empresa
                    , m.id                              AS id_municipio
                    , vgvf.id_perito
                    , to_char(p.dt_criacao, 'YYYY-MM-DD') as data_criacao_proposta
                FROM seguro.propostas_endosso ped
                JOIN seguro.propostas p
                ON ped.id_proposta = p.id
                AND ped.fl_proposta_vigente
                    , seguro.propostas_proponentes po
                    , seguro.propostas_propriedades pp
                    , sistema.municipios m
                    , sistema.estados e
                    , produto.produtos pd
                    , produto.produtos_geral pg
                    , produto.culturas cu
                    , sinistro.processos pr
                    , sinistro.processos_empresas pe
                    , sistema.empresas ep
                    LEFT JOIN sistema.municipios em ON em.id = ep.id_municipio
                    LEFT JOIN sistema.estados ee ON ee.id = em.id_estado
                    , sistema.vistorias_laudos_finais vlf
                    LEFT JOIN sinistro.cobranca_relatorio_vistorias crv ON crv.id_vistoria = vlf.id_vistoria
                    LEFT JOIN sinistro.v_get_auxiliares_final vgaf ON vgaf.id_laudo_final = vlf.id_laudo_final
                    , sinistro.laudos_finais lf
                    , sistema.usuarios u
                    , sistema.vistorias_empresas ve
                    , seguro.v_id_proposta_mae
                    , sinistro.v_get_vistoriadores_final vgvf
                WHERE (
                        (
                            lf.id_status = 110
                            OR lf.id_status = 205
                        )
                        OR crv.id IS NOT NULL
                    )
                AND pr.id_status                 <> 5
                AND pr.id_proposta                = p.id
                AND po.id_proposta                = p.id
                AND pp.id_proposta                = p.id
                AND pp.id_municipio               = m.id
                AND pd.id                         = p.id_produto
                AND pg.id                         = pd.id_produto_geral
                AND cu.id                         = pg.id_cultura
                AND e.id                          = m.id_estado
                AND pe.id_processo                = pr.id
                AND ep.id                         = pe.id_empresa
                AND vlf.id_laudo_final            = lf.id
                AND lf.id_processo                = pr.id
                AND u.id                          = lf.id_usuario_criacao
                AND pd.id_safra                  >= 17
                AND ve.id_empresa                 = ep.id
                AND ve.id_vistoria                = vlf.id_vistoria
                AND v_id_proposta_mae.id_proposta = p.id_proposta_mae
                AND vgvf.id_laudo_final           = vlf.id_laudo_final

            GROUP BY lf.id_cobertura
                    , pr.id
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id
                    , ep.cpf_cnpj
                    , vlf.id_vistoria
                    , cu.ds_nome_cultura
                    , lf.ds_itens_segurados
                    , lf.ds_variedades
                    , lf.vl_area_vistoriada
                    , 'Final'::TEXT
                    , pg.id_tipo_produto
                    , cu.id
                    , p.id
                    , e.id
                    , pr.id_processo_seguradora
                    , lf.dt_vistoria
                    , lf.fl_evento_nao_constatado
                    , pd.id
                    , pd.id_seguradora
                    , em.ds_nome_municipio
                    , ee.ds_sigla
                    , vgvf.nome_perito
                    , vgvf.municipio_perito
                    , m.id
                    , vgvf.id_perito
            UNION
            SELECT lp.id_cobertura
                    , pr.id                             AS id_processo
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id                             AS id_empresa
                    , vlp.id_vistoria
                    , cu.ds_nome_cultura
                    , lp.ds_itens_segurados             AS itens
                    , lp.ds_variedades                  AS variedade
                    , lp.vl_area_vistoriada
                    , 'Preliminar'::TEXT                AS tp_vistoria
                    , pg.id_tipo_produto
                    , cu.id                             AS id_cultura
                    , p.id                              AS id_proposta
                    , e.id                              AS id_estado
                    , pr.id_processo_seguradora
                    , lp.dt_vistoria
                    , vgvp.municipio_perito as municipio_perito
                    , vgvp.nome_perito as perito
                    , STRING_AGG(vgap.nome_auxiliar, ', ') AS auxiliar
                    , lp.fl_evento_nao_constatado       AS evento_nao_constatado
                    , pd.id                             AS id_produto
                    , pd.id_seguradora
                    , pd.id_produto_geral               AS id_produto_geral
                    , ep.cpf_cnpj                       AS cpf_cnpj_empresa
                    , p.nr_apolice
                    , em.ds_nome_municipio              AS ds_nome_municipio_empresa
                    , ee.ds_sigla                       AS ds_sigla_uf_empresa
                    , m.id                              AS id_municipio
                    , vgvp.id_perito
                    , to_char(p.dt_criacao, 'YYYY-MM-DD') as data_criacao_proposta
                FROM seguro.propostas_endosso ped
                JOIN seguro.propostas p
                ON ped.id_proposta = p.id
                AND ped.fl_proposta_vigente
                    , seguro.propostas_proponentes po
                    , seguro.propostas_propriedades pp
                    , sistema.municipios m
                    , sistema.estados e
                    , produto.produtos pd
                    , produto.produtos_geral pg
                    , produto.culturas cu
                    , sinistro.processos pr
                    , sinistro.processos_empresas pe
                    , sistema.empresas ep
                    LEFT JOIN sistema.municipios em ON em.id = ep.id_municipio
                    LEFT JOIN sistema.estados ee ON ee.id = em.id_estado
                    , sistema.vistorias_laudos_preliminares vlp
                    LEFT JOIN sinistro.cobranca_relatorio_vistorias crv ON crv.id_vistoria = vlp.id_vistoria
                    LEFT JOIN sinistro.v_get_auxiliares_preliminar vgap
                    ON vgap.id_laudo_preliminar = vlp.id_laudo_preliminar
                    , sinistro.laudos_preliminares lp
                    , sistema.usuarios u
                    , sistema.vistorias v
                    , sistema.vistorias_empresas ve
                    , seguro.v_id_proposta_mae
                    , sinistro.v_get_vistoriadores_preliminar vgvp
                WHERE (
                        (
                            lp.id_status = 76
                            OR lp.id_status = 204
                        )
                        OR crv.id IS NOT NULL
                    )
                AND pe.fl_ativo                   = TRUE
                AND pr.id_status                 <> 5
                AND pe.fl_ativo                   = TRUE
                AND pr.id_proposta                = p.id
                AND po.id_proposta                = p.id
                AND pp.id_proposta                = p.id
                AND pp.id_municipio               = m.id
                AND pd.id                         = p.id_produto
                AND pg.id                         = pd.id_produto_geral
                AND cu.id                         = pg.id_cultura
                AND e.id                          = m.id_estado
                AND pe.id_processo                = pr.id
                AND ep.id                         = pe.id_empresa
                AND vlp.id_laudo_preliminar       = lp.id
                AND lp.id_processo                = pr.id
                AND u.id                          = lp.id_usuario_criacao
                AND pd.id_safra                  >= 17
                AND v.id                          = vlp.id_vistoria
                AND ve.id_empresa                 = ep.id
                AND ve.id_vistoria                = vlp.id_vistoria
                AND v_id_proposta_mae.id_proposta = p.id_proposta_mae
                AND vgvp.id_laudo_preliminar      = vlp.id_laudo_preliminar
            GROUP BY lp.id_cobertura
                    , pr.id
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id
                    , ep.cpf_cnpj
                    , vlp.id_vistoria
                    , cu.ds_nome_cultura
                    , lp.ds_itens_segurados
                    , lp.ds_variedades
                    , lp.vl_area_vistoriada
                    , 'Preliminar'::TEXT
                    , pg.id_tipo_produto
                    , cu.id
                    , p.id
                    , e.id
                    , pr.id_processo_seguradora
                    , lp.dt_vistoria
                    , lp.fl_evento_nao_constatado
                    , pd.id
                    , pd.id_seguradora
                    , em.ds_nome_municipio
                    , ee.ds_sigla
                    , vgvp.nome_perito
                    , vgvp.municipio_perito
                    , m.id
                    , vgvp.id_perito
            ORDER BY 16;
SQL        
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DROP VIEW sinistro.v_laudos_cobranca_preliminar_final;

            CREATE OR REPLACE VIEW sinistro.v_laudos_cobranca_preliminar_final AS
            SELECT lf.id_cobertura
                    , pr.id                             AS id_processo
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id                             AS id_empresa
                    , vlf.id_vistoria
                    , cu.ds_nome_cultura
                    , lf.ds_itens_segurados             AS itens
                    , lf.ds_variedades                  AS variedade
                    , lf.vl_area_vistoriada
                    , 'Final'::TEXT                     AS tp_vistoria
                    , pg.id_tipo_produto
                    , cu.id                             AS id_cultura
                    , p.id                              AS id_proposta
                    , e.id                              AS id_estado
                    , pr.id_processo_seguradora
                    , lf.dt_vistoria
                    , vgvf.municipio_perito as municipio_perito
                    , vgvf.nome_perito as perito
                    , STRING_AGG(vgaf.nome_auxiliar, ', ') AS auxiliar
                    , lf.fl_evento_nao_constatado       AS evento_nao_constatado
                    , pd.id                             AS id_produto
                    , pd.id_seguradora
                    , pd.id_produto_geral               AS id_produto_geral
                    , ep.cpf_cnpj                       AS cpf_cnpj_empresa
                    , p.nr_apolice
                    , em.ds_nome_municipio              AS ds_nome_municipio_empresa
                    , ee.ds_sigla                       AS ds_sigla_uf_empresa
                    , m.id                              AS id_municipio
                    , vgvf.id_perito
                    , to_char(p.dt_criacao, 'YYYY-MM-DD') as data_criacao_proposta
                FROM seguro.propostas_endosso ped
                JOIN seguro.propostas p
                ON ped.id_proposta = p.id
                AND ped.fl_proposta_vigente
                    , seguro.propostas_proponentes po
                    , seguro.propostas_propriedades pp
                    , sistema.municipios m
                    , sistema.estados e
                    , produto.produtos pd
                    , produto.produtos_geral pg
                    , produto.culturas cu
                    , sinistro.processos pr
                    , sinistro.processos_empresas pe
                    , sistema.empresas ep
                    LEFT JOIN sistema.municipios em ON em.id = ep.id_municipio
                    LEFT JOIN sistema.estados ee ON ee.id = em.id_estado
                    , sistema.vistorias_laudos_finais vlf
                    LEFT JOIN sinistro.v_get_auxiliares_final vgaf ON vgaf.id_laudo_final = vlf.id_laudo_final
                    , sinistro.laudos_finais lf
                    , sistema.usuarios u
                    , sistema.vistorias_empresas ve
                    , seguro.v_id_proposta_mae
                    , sinistro.v_get_vistoriadores_final vgvf
                WHERE (
                        lf.id_status = 110
                        OR lf.id_status = 205
                    )
                AND pr.id_status                 <> 5
                AND pr.id_proposta                = p.id
                AND po.id_proposta                = p.id
                AND pp.id_proposta                = p.id
                AND pp.id_municipio               = m.id
                AND pd.id                         = p.id_produto
                AND pg.id                         = pd.id_produto_geral
                AND cu.id                         = pg.id_cultura
                AND e.id                          = m.id_estado
                AND pe.id_processo                = pr.id
                AND ep.id                         = pe.id_empresa
                AND vlf.id_laudo_final            = lf.id
                AND lf.id_processo                = pr.id
                AND u.id                          = lf.id_usuario_criacao
                AND pd.id_safra                  >= 17
                AND ve.id_empresa                 = ep.id
                AND ve.id_vistoria                = vlf.id_vistoria
                AND v_id_proposta_mae.id_proposta = p.id_proposta_mae
                AND vgvf.id_laudo_final           = vlf.id_laudo_final

            GROUP BY lf.id_cobertura
                    , pr.id
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id
                    , ep.cpf_cnpj
                    , vlf.id_vistoria
                    , cu.ds_nome_cultura
                    , lf.ds_itens_segurados
                    , lf.ds_variedades
                    , lf.vl_area_vistoriada
                    , 'Final'::TEXT
                    , pg.id_tipo_produto
                    , cu.id
                    , p.id
                    , e.id
                    , pr.id_processo_seguradora
                    , lf.dt_vistoria
                    , lf.fl_evento_nao_constatado
                    , pd.id
                    , pd.id_seguradora
                    , em.ds_nome_municipio
                    , ee.ds_sigla
                    , vgvf.nome_perito
                    , vgvf.municipio_perito
                    , m.id
                    , vgvf.id_perito
            UNION
            SELECT lp.id_cobertura
                    , pr.id                             AS id_processo
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id                             AS id_empresa
                    , vlp.id_vistoria
                    , cu.ds_nome_cultura
                    , lp.ds_itens_segurados             AS itens
                    , lp.ds_variedades                  AS variedade
                    , lp.vl_area_vistoriada
                    , 'Preliminar'::TEXT                AS tp_vistoria
                    , pg.id_tipo_produto
                    , cu.id                             AS id_cultura
                    , p.id                              AS id_proposta
                    , e.id                              AS id_estado
                    , pr.id_processo_seguradora
                    , lp.dt_vistoria
                    , vgvp.municipio_perito as municipio_perito
                    , vgvp.nome_perito as perito
                    , STRING_AGG(vgap.nome_auxiliar, ', ') AS auxiliar
                    , lp.fl_evento_nao_constatado       AS evento_nao_constatado
                    , pd.id                             AS id_produto
                    , pd.id_seguradora
                    , pd.id_produto_geral               AS id_produto_geral
                    , ep.cpf_cnpj                       AS cpf_cnpj_empresa
                    , p.nr_apolice
                    , em.ds_nome_municipio              AS ds_nome_municipio_empresa
                    , ee.ds_sigla                       AS ds_sigla_uf_empresa
                    , m.id                              AS id_municipio
                    , vgvp.id_perito
                    , to_char(p.dt_criacao, 'YYYY-MM-DD') as data_criacao_proposta
                FROM seguro.propostas_endosso ped
                JOIN seguro.propostas p
                ON ped.id_proposta = p.id
                AND ped.fl_proposta_vigente
                    , seguro.propostas_proponentes po
                    , seguro.propostas_propriedades pp
                    , sistema.municipios m
                    , sistema.estados e
                    , produto.produtos pd
                    , produto.produtos_geral pg
                    , produto.culturas cu
                    , sinistro.processos pr
                    , sinistro.processos_empresas pe
                    , sistema.empresas ep
                    LEFT JOIN sistema.municipios em ON em.id = ep.id_municipio
                    LEFT JOIN sistema.estados ee ON ee.id = em.id_estado
                    , sistema.vistorias_laudos_preliminares vlp
                    LEFT JOIN sinistro.v_get_auxiliares_preliminar vgap
                    ON vgap.id_laudo_preliminar = vlp.id_laudo_preliminar
                    , sinistro.laudos_preliminares lp
                    , sistema.usuarios u
                    , sistema.vistorias v
                    , sistema.vistorias_empresas ve
                    , seguro.v_id_proposta_mae
                    , sinistro.v_get_vistoriadores_preliminar vgvp
                WHERE (
                        lp.id_status = 76
                        OR lp.id_status = 204
                    )
                AND pe.fl_ativo                   = TRUE
                AND pr.id_status                 <> 5
                AND pe.fl_ativo                   = TRUE
                AND pr.id_proposta                = p.id
                AND po.id_proposta                = p.id
                AND pp.id_proposta                = p.id
                AND pp.id_municipio               = m.id
                AND pd.id                         = p.id_produto
                AND pg.id                         = pd.id_produto_geral
                AND cu.id                         = pg.id_cultura
                AND e.id                          = m.id_estado
                AND pe.id_processo                = pr.id
                AND ep.id                         = pe.id_empresa
                AND vlp.id_laudo_preliminar       = lp.id
                AND lp.id_processo                = pr.id
                AND u.id                          = lp.id_usuario_criacao
                AND pd.id_safra                  >= 17
                AND v.id                          = vlp.id_vistoria
                AND ve.id_empresa                 = ep.id
                AND ve.id_vistoria                = vlp.id_vistoria
                AND v_id_proposta_mae.id_proposta = p.id_proposta_mae
                AND vgvp.id_laudo_preliminar      = vlp.id_laudo_preliminar
            GROUP BY lp.id_cobertura
                    , pr.id
                    , v_id_proposta_mae.id_proposta_mae
                    , po.ds_nome_proponente
                    , m.ds_nome_municipio
                    , e.ds_sigla
                    , ep.ds_nome_fantasia
                    , ep.id
                    , ep.cpf_cnpj
                    , vlp.id_vistoria
                    , cu.ds_nome_cultura
                    , lp.ds_itens_segurados
                    , lp.ds_variedades
                    , lp.vl_area_vistoriada
                    , 'Preliminar'::TEXT
                    , pg.id_tipo_produto
                    , cu.id
                    , p.id
                    , e.id
                    , pr.id_processo_seguradora
                    , lp.dt_vistoria
                    , lp.fl_evento_nao_constatado
                    , pd.id
                    , pd.id_seguradora
                    , em.ds_nome_municipio
                    , ee.ds_sigla
                    , vgvp.nome_perito
                    , vgvp.municipio_perito
                    , m.id
                    , vgvp.id_perito
            ORDER BY 16;
SQL        
        );
    }
}
