<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

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

CREATE OR REPLACE VIEW sinistro.v_get_vistoriadores_preliminar AS
    SELECT x.id_laudo_preliminar,
           STRING_AGG(x.nome_perito, ', ') AS nome_perito,
           STRING_AGG(x.ds_municipio_completo, ', ') AS municipio_perito,
           ARRAY_AGG(x.id_perito) AS id_perito
    FROM (
             SELECT laudos_preliminares.id AS id_laudo_preliminar
                  , CAST(funcionarios.ds_nome_funcionario AS VARCHAR) AS nome_perito
                  , COALESCE(fm.ds_nome_municipio, 'NAO INFORMADO') || '/' || COALESCE(fe.ds_sigla, '-') as ds_municipio_completo
                  , CAST(funcionarios.id AS VARCHAR) AS id_perito
             FROM sistema.funcionarios
                      JOIN sistema.vistorias_funcionarios ON vistorias_funcionarios.id_funcionario = funcionarios.id
                      JOIN sistema.vistorias_laudos_preliminares ON vistorias_laudos_preliminares.id_vistoria = vistorias_funcionarios.id_vistoria
                      JOIN sinistro.laudos_preliminares ON laudos_preliminares.id = vistorias_laudos_preliminares.id_laudo_preliminar
                      JOIN sistema.usuarios ON funcionarios.id_usuario = usuarios.id AND usuarios.tp_usuario <> 'H'
                      LEFT JOIN sistema.municipios fm ON fm.id = funcionarios.id_municipio
                      LEFT JOIN sistema.estados fe ON fe.id = fm.id_estado
             GROUP BY laudos_preliminares.id
                    , funcionarios.ds_nome_funcionario
                    , funcionarios.id
                    , fm.ds_nome_municipio
                    , fe.ds_sigla
             ORDER BY funcionarios.ds_nome_funcionario
         ) as x
    GROUP BY x.id_laudo_preliminar;

    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
        );
    }
}