<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2010191339 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
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
        , STRING_AGG(DISTINCT(vgvf.nome_perito), ', ' ORDER BY nome_perito DESC) 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
     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
        , 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
        , 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
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
        , STRING_AGG(DISTINCT(vgvp.nome_perito), ', ' ORDER BY nome_perito DESC) 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
     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
        , 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
        , 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
 ORDER BY 16
        ;

SQL
);
    }

    public function down(): void
    {
        $this->execute(<<<SQL
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
        , STRING_AGG(DISTINCT(vgvf.nome_perito), ', ' ORDER BY nome_perito DESC) 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
     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
        , 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
        , 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
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
        , STRING_AGG(DISTINCT(vgvp.nome_perito), ', ' ORDER BY nome_perito DESC) 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
     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
        , 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
        , 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
 ORDER BY 16
        ;

SQL
        );
    }
}
