<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2306281430 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE OR REPLACE VIEW sinistro.v_processo_sinistro_vistoriador AS
 SELECT DISTINCT pr.id,
    pr.id_processo_seguradora,
    pr.id_status,
    st.ds_chave AS ds_chave_status,
    st.ds_status,
    pr.id_status_arquivos,
    sta.ds_chave AS ds_chave_status_arquivos,
    sta.ds_status AS ds_status_arquivos,
    pr.dt_criacao AS dt_criacao_processo,
    pr.fl_ativo,
    pr.fl_del,
    pr.fl_pasta_aberta,
    emp.id AS id_empresa,
    emp.ds_nome_fantasia AS ds_empresa_vistoriadora,
    p.id AS id_proposta,
    p.nr_apolice,
    pp.ds_nome_proponente,
    pc.id_usuario AS id_corretor,
    m.id AS id_municipio,
    m.ds_nome_municipio,
    e.id AS id_estado,
    e.ds_nome_estado,
    prod.id AS id_produto,
    prod.ds_nome_produto,
    prod.id_safra,
    c.id AS id_cultura,
    c.ds_chave_cultura,
    u.ds_nome_usuario AS ds_nome_usuario_responsavel_liquidacao,
    pr.dt_alteracao AS dt_alteracao_processo,
    pe.id_endosso,
    seguro.nr_endosso(p.id, p.id_endosso) AS nr_endosso,
    seguro.id_proposta_mae(p.id) AS id_proposta_mae,
    p.id_proposta_endossada,
    seguro.id_proposta_mae_completo(p.id) AS id_proposta_mae_completo,
    pr.fl_ressegurador,
    pemp2.fl_ativo AS fl_processo_empresa_ativa
   FROM seguro.propostas_endosso pe
     JOIN seguro.propostas p ON p.id = pe.id_proposta AND pe.fl_proposta_vigente
     JOIN sinistro.processos pr ON pr.id_proposta = p.id
     JOIN sistema.status st ON st.id = pr.id_status
     JOIN sistema.status sta ON sta.id = pr.id_status_arquivos
     JOIN seguro.propostas_proponentes pp ON pp.id_proposta = p.id
     JOIN seguro.propostas_propriedades ppr ON ppr.id_proposta = p.id
     JOIN produto.produtos prod ON prod.id = p.id_produto
     JOIN produto.produtos_geral pg ON pg.id = prod.id_produto_geral
     JOIN produto.culturas c ON c.id = pg.id_cultura
     JOIN seguro.propostas_corretores pc ON pc.id_proposta = p.id
     JOIN sistema.municipios m ON m.id = ppr.id_municipio
     JOIN sistema.estados e ON e.id = m.id_estado
     LEFT JOIN sistema.usuarios u ON pr.id_usuario_responsavel_liquidacao = u.id
     LEFT JOIN (
        SELECT max(dt_criacao) dt_criacao, id_empresa, id_processo 
          FROM sinistro.processos_empresas pemp
        GROUP BY id_empresa, id_processo
     ) pemp ON pemp.id_processo = pr.id
     LEFT JOIN sinistro.processos_empresas pemp2 ON pemp2.dt_criacao = pemp.dt_criacao AND pemp2.id_empresa = pemp.id_empresa AND pemp2.id_processo = pemp.id_processo
     LEFT JOIN sistema.empresas emp ON emp.id = pemp.id_empresa;
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
CREATE OR REPLACE VIEW sinistro.v_processo_sinistro_vistoriador AS
SELECT DISTINCT pr.id
         , pr.id_processo_seguradora
         , pr.id_status
         , st.ds_chave AS ds_chave_status
         , st.ds_status
         , pr.id_status_arquivos
         , sta.ds_chave AS ds_chave_status_arquivos
         , sta.ds_status AS ds_status_arquivos
         , pr.dt_criacao AS dt_criacao_processo
         , pr.fl_ativo
         , pr.fl_del
         , pr.fl_pasta_aberta
         , emp.id AS id_empresa
         , emp.ds_nome_fantasia AS ds_empresa_vistoriadora
         , p.id AS id_proposta
         , p.nr_apolice
         , pp.ds_nome_proponente
         , pc.id_usuario AS id_corretor
         , m.id AS id_municipio
         , m.ds_nome_municipio
         , e.id AS id_estado
         , e.ds_nome_estado
         , prod.id AS id_produto
         , prod.ds_nome_produto
         , prod.id_safra
         , c.id AS id_cultura
         , c.ds_chave_cultura
         , u.ds_nome_usuario AS ds_nome_usuario_responsavel_liquidacao
         , pr.dt_alteracao AS dt_alteracao_processo
         , pe.id_endosso
         , seguro.nr_endosso(p.id, p.id_endosso) AS nr_endosso
         , seguro.id_proposta_mae(p.id) AS id_proposta_mae
         , p.id_proposta_endossada
         , seguro.id_proposta_mae_completo(p.id) AS id_proposta_mae_completo
         , pr.fl_ressegurador
         , pemp.fl_ativo AS fl_processo_empresa_ativa
      FROM seguro.propostas_endosso pe
INNER JOIN seguro.propostas p ON p.id = pe.id_proposta AND pe.fl_proposta_vigente
INNER JOIN sinistro.processos pr ON pr.id_proposta = p.id
INNER JOIN sistema.status st ON st.id = pr.id_status
INNER JOIN sistema.status sta ON sta.id = pr.id_status_arquivos
INNER JOIN seguro.propostas_proponentes pp ON pp.id_proposta = p.id
INNER JOIN seguro.propostas_propriedades ppr ON ppr.id_proposta = p.id
INNER JOIN produto.produtos prod ON prod.id = p.id_produto
INNER JOIN produto.produtos_geral pg ON pg.id = prod.id_produto_geral
INNER JOIN produto.culturas c ON c.id = pg.id_cultura
INNER JOIN seguro.propostas_corretores pc ON pc.id_proposta = p.id
INNER JOIN sistema.municipios m ON m.id = ppr.id_municipio
INNER JOIN sistema.estados e ON e.id = m.id_estado
 LEFT JOIN sistema.usuarios u ON pr.id_usuario_responsavel_liquidacao = u.id
 LEFT JOIN sinistro.processos_empresas pemp ON pemp.id_processo = pr.id
 LEFT JOIN sistema.empresas emp ON emp.id = pemp.id_empresa;
SQL
        );
    }
}
