<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2010261844 extends AbstractMigration
{
    public function up(): void
    {
        $this->upNovaTabela();
        $this->upAlterarTabela();
        $this->upAlterarFuncao();
        $this->upAtualizarViewAvisos();
        $this->upMigrarEmpresasProponentes();
        $this->upRemoverColuna();
    }

    private function upAlterarFuncao()
    {
        $this->execute("CREATE OR REPLACE FUNCTION sinistro.busca_empresa_cnpj( vid_safra integer, vcpf_cnpj text, vepoca_cultivo text) RETURNS varchar
AS \$BODY\$
DECLARE
  cpf_cnpj_empresa text;
BEGIN
  SELECT e.ds_nome_fantasia
    FROM seguro.proponentes_recomendacao pr
         INNER JOIN seguro.proponentes p ON p.id = pr.id_proponente
         INNER JOIN sistema.empresas e ON e.id = pr.id_empresa
    INTO cpf_cnpj_empresa
   WHERE pr.id_safra = vid_safra
     AND p.cpf_cnpj = vcpf_cnpj
     AND pr.tp_epoca_cultivo = vepoca_cultivo LIMIT 1;

  IF cpf_cnpj_empresa IS NOT NULL THEN
    RETURN cpf_cnpj_empresa;
  ELSE
    RETURN '';
  END IF;
END;

\$BODY\$ LANGUAGE plpgsql VOLATILE COST 100;

ALTER FUNCTION sinistro.busca_empresa_cnpj(INTEGER, TEXT, TEXT) OWNER TO postgres;");
    }

    private function upAlterarTabela()
    {
        $this->execute(<<<SQL
ALTER TABLE produto.produtos_geral RENAME COLUMN id_epoca_cultivo TO tp_epoca_cultivo;
UPDATE produto.produtos_geral SET tp_epoca_cultivo = 'N' WHERE tp_epoca_cultivo is null OR tp_epoca_cultivo = '';
ALTER TABLE produto.produtos_geral ADD CONSTRAINT ckc_epoca_cultivo CHECK(tp_epoca_cultivo IN('N', 'I', 'V'));
SQL
        );
    }

    private function upAtualizarViewAvisos()
    {
        $this->execute(<<<SQL
DROP VIEW sinistro.v_avisos;

CREATE OR REPLACE VIEW sinistro.v_avisos AS
    SELECT DISTINCT ul.ds_nome_usuario AS ds_nome_usuario_responsavel
         , cl.ds_nome_cliente
         , a.fl_ativo
         , a.fl_del
         , a.id
         , a.dt_criacao
         , a.dt_sinistro
         , pp.id AS id_proposta
         , (to_char(seguro.dt_vigencia_inicio_original(pp.id)::timestamp with time zone, 'DD/MM/YYYY'::text) || ' - '::text) || to_char(pp.dt_vigencia_fim::timestamp with time zone, 'DD/MM/YYYY'::text) AS dt_vigencia
         , pp.nr_apolice
         , pc.id AS id_processo
         , pc.id_processo_seguradora
         , pppr.ds_nome_proponente
         , pppr.cpf_cnpj
         , pp.id_produto
         , pd.ds_nome_produto
         , u.ds_nome_usuario
         , c.id AS id_corretor
         , c.id_usuario AS id_usuario_corretor
         , c.ds_nome_fantasia AS ds_nome_corretor
         , s.id AS id_safra
         , a.id_status
         , mun.ds_nome_municipio
         , est.ds_sigla
         , est.id AS id_estado
         , mun.id AS id_municipio
         , ppr.ds_endereco
         , st.ds_status
         , pend.id_endosso
         , pc.fl_pasta_aberta
         , spc.id_usuario AS id_usuario_proposta_corretor
         , sis.vl_lmga
         , pe.ds_nome_evento AS ds_eventos
         , empvist.ds_nome_fantasia AS ds_empresa_previa
         , CASE
                            WHEN a.id_status = 27 THEN
                                CASE
                                    WHEN empproc.ds_nome_fantasia IS NOT NULL
                                        THEN empproc.ds_nome_fantasia::character varying
                                    ELSE
                                        sinistro.busca_empresa_cnpj(pd.id_safra, pppr.cpf_cnpj::text, pdg.tp_epoca_cultivo::text)
                                END
                            ELSE NULL::character varying
                       END AS ds_empresa_cpf_segurado
         , a.fl_novo
         , empcpf.id AS id_empresa_vistoriadora
         , emp.ds_nome_fantasia AS ds_nome_seguradora
         , CASE
                WHEN v_nr_endosso.nr_endosso > 0 THEN
                    v_nr_endosso.nr_endosso
                ELSE
                    0::bigint
           END AS nr_endosso
         , pp.id_proposta_mae
         , pp.id_proposta_endossada
         , seguro.id_proposta_mae_completo(pp.id_proposta_mae) AS id_proposta_mae_completo
         , ppe.id_empresa AS id_empresa_processo_sinistro
         , pp.id_usuario_criacao
         , CASE
                WHEN btrim(v_tem_parcela_vencida.id_endosso::character varying::text) <> ''::text OR v_tem_parcela_vencida.id_endosso IS NOT NULL THEN
                    TRUE
                ELSE
                    FALSE
           END AS vencida
         , empvist.ds_status AS ds_status_vistoria_previa
      FROM sinistro.avisos a
      JOIN seguro.propostas pp ON pp.id = a.id_proposta
      JOIN seguro.propostas_endosso spe ON spe.id_proposta = pp.id AND spe.fl_proposta_vigente = true
      JOIN sumario.itens_segurados sis ON sis.id_proposta = pp.id
      JOIN seguro.propostas_endosso pend ON pend.id_proposta = pp.id
      JOIN seguro.propostas_propriedades ppr ON ppr.id_proposta = pp.id
      JOIN seguro.propostas_corretores spc ON spc.id_proposta = pp.id
      JOIN sistema.corretores c ON c.id_usuario = spc.id_usuario
      JOIN sistema.municipios mun ON mun.id = ppr.id_municipio
      JOIN sistema.estados est ON est.id = mun.id_estado
      JOIN seguro.propostas_proponentes pppr ON pppr.id_proposta = pp.id
      JOIN seguro.proponentes ppo ON ppo.cpf_cnpj::text = pppr.cpf_cnpj::text
      JOIN produto.produtos pd ON pd.id = pp.id_produto
      JOIN produto.produtos_geral pdg ON pdg.id = pd.id_produto_geral
      JOIN sistema.empresas emp ON emp.id = pd.id_seguradora
      JOIN sistema.usuarios u ON u.id = a.id_usuario_criacao
      JOIN produto.safras s ON s.id = pd.id_safra
      JOIN sistema.status st ON st.id = a.id_status
      JOIN sinistro.avisos_eventos sae ON sae.id_aviso = a.id
      JOIN produto.eventos pe ON pe.id = sae.id_evento
 LEFT JOIN sinistro.processos pc ON pc.id_proposta = pp.id
 LEFT JOIN sinistro.processos_empresas ppe ON ppe.id_processo = pc.id AND ppe.fl_ativo = true
 LEFT JOIN sistema.usuarios ul ON ul.id = pc.id_usuario_responsavel_liquidacao
 LEFT JOIN seguro.clientes_propostas clp ON clp.id_proposta = pp.id
 LEFT JOIN seguro.clientes cl ON clp.id_cliente = cl.id
 LEFT JOIN seguro.proponentes_recomendacao prec ON prec.id_proponente = ppo.id
                                               AND prec.id_safra = s.id
                                               AND prec.tp_epoca_cultivo = pdg.tp_epoca_cultivo
 LEFT JOIN sistema.empresas empcpf ON empcpf.id = prec.id_empresa
 LEFT JOIN (   SELECT empr.ds_nome_fantasia
                    , pvp.id_proposta
                    , pe_1.id_endosso
                    , ss.ds_status
                 FROM seguro.propostas_endosso pe_1
                 JOIN seguro.propostas_vistorias_previas pvp ON pe_1.id_proposta = pvp.id_proposta
                 JOIN (   SELECT v.id_proposta
                               , max(v.id) AS id
                            FROM seguro.propostas_vistorias_previas v
                        GROUP BY v.id_proposta
                      ) pvpp ON pvp.id = pvpp.id
                 JOIN sistema.vistorias_empresas ve ON pvp.id_vistoria = ve.id_vistoria
                 JOIN sistema.empresas empr ON ve.id_empresa = empr.id
                 JOIN sistema.status ss ON ss.id = pvp.id_status_analise
             GROUP BY empr.ds_nome_fantasia, pvp.id_proposta, pe_1.id_endosso, ss.ds_status
           ) empvist ON empvist.id_endosso = spe.id_endosso
 LEFT JOIN sistema.empresas empproc ON empproc.id = ppe.id_empresa
 LEFT JOIN seguro.v_nr_endosso ON v_nr_endosso.id_endosso = pp.id_endosso
 LEFT JOIN (
             SELECT propostas.id_endosso
               FROM seguro.propostas
               JOIN (   SELECT propostas_parcelas.id_proposta
                             , propostas_parcelas.dt_vencimento
                             , propostas_parcelas.vl_segurado
                             , proposta_boletos.fl_pago
                          FROM seguro.propostas propostas_1
                          JOIN seguro.propostas_endosso propostas_endosso_1
                            ON propostas_endosso_1.id_endosso = propostas_1.id_endosso
                           AND propostas_endosso_1.fl_proposta_vigente = TRUE
                          JOIN seguro.propostas_parcelas
                            ON propostas_parcelas.id_proposta = propostas_1.id
                     LEFT JOIN seguro.proposta_boletos
                            ON proposta_boletos.id_proposta = propostas_endosso_1.id_proposta
                           AND proposta_boletos.id_proposta = propostas_parcelas.id_proposta
                           AND proposta_boletos.nr_parcela  = propostas_parcelas.nr_parcela
                         WHERE proposta_boletos.fl_pago = FALSE
                    ) propostas_boletos ON propostas_boletos.id_proposta = propostas.id
               JOIN seguro.propostas_endosso ON propostas_endosso.id_endosso = propostas.id_endosso AND propostas_endosso.fl_proposta_vigente = TRUE
              WHERE propostas_boletos.vl_segurado > 0::numeric
                AND propostas_boletos.dt_vencimento < to_char(now(), 'YYYY-mm-dd'::text)::date
           ) AS v_tem_parcela_vencida
        ON v_tem_parcela_vencida.id_endosso = pend.id_endosso
     WHERE 1 = 1
  ORDER BY a.id
         ;

ALTER TABLE sinistro.v_avisos
  OWNER TO agrobrasilpg;
SQL
);
    }

    private function upMigrarEmpresasProponentes()
    {
        $this->execute(<<<SQL
INSERT INTO seguro.proponentes_recomendacao (id_proponente, id_empresa, id_safra, tp_epoca_cultivo)
    SELECT id_proponente, id_empresa, 24 as id_safra, tp_epoca_cultivo
      FROM (
            SELECT MAX(id_proposta), id_proponente, tp_epoca_cultivo, id_empresa
              FROM (
                    SELECT p.id as id_proponente, prop.id as id_proposta, pg.tp_epoca_cultivo, case when pe.id_empresa is null then null else pe.id_empresa end as id_empresa
                      FROM seguro.proponentes p
                           INNER JOIN seguro.propostas_proponentes pp ON pp.cpf_cnpj = p.cpf_cnpj
                           INNER JOIN seguro.propostas prop ON prop.id = pp.id_proposta
                           INNER JOIN produto.produtos prod ON prod.id = prop.id_produto
                           INNER JOIN produto.produtos_geral pg ON pg.id = prod.id_produto_geral
                           INNER JOIN sinistro.avisos a ON a.id_proposta = prop.id
                           INNER JOIN sinistro.processos proc ON proc.id_proposta = prop.id
                           LEFT JOIN sinistro.processos_empresas pe ON pe.id_processo = proc.id
                                                                   AND pe.fl_ativo is true
                     WHERE id_safra = 24
                     ORDER BY p.id) as x
             GROUP BY id_proponente, tp_epoca_cultivo, id_empresa) as y;
SQL
);
    }

    private function upNovaTabela()
    {
        $this->execute(<<<SQL
CREATE TABLE seguro.proponentes_recomendacao (
  id SERIAL,
  id_proponente INTEGER NOT NULL,
  id_empresa INTEGER,
  id_safra INTEGER NOT NULL,
  tp_epoca_cultivo CHAR(1),
  CONSTRAINT pk_proponentes_recomendacao PRIMARY KEY(id),
  CONSTRAINT fk_proponentes_recomendacao_proponentes FOREIGN KEY (id_proponente) REFERENCES seguro.proponentes(id),
  CONSTRAINT fk_proponentes_recomendacao_empresas FOREIGN KEY (id_empresa) REFERENCES sistema.empresas(id),
  CONSTRAINT fk_proponentes_recomendacao_safras FOREIGN KEY (id_safra) REFERENCES produto.safras(id),
  CONSTRAINT ckc_epoca_cultivo CHECK(tp_epoca_cultivo IN('N', 'I', 'V'))
) INHERITS (public.campos_default);
SQL
        );
    }

    private function upRemoverColuna()
    {
        $this->execute(<<<SQL
ALTER TABLE seguro.proponentes DROP COLUMN id_empresa_vistoria;
SQL
        );
    }

    public function down(): void
    {
        $this->downNovaTabela();
        $this->downAlterarTabela();
        $this->downAlterarFuncao();
        $this->downAtualizarViewAvisos();
        $this->downRemoverColuna();
    }

    private function downAlterarFuncao()
    {
        $this->execute("CREATE OR REPLACE FUNCTION sinistro.busca_empresa_cnpj(
                            vid_safra integer,
                            vcpf_cnpj text,
                            vepoca_cultivo text)
                          RETURNS varchar AS
                        \$BODY\$
                        DECLARE
                             cpf_cnpj_empresa text;
                        BEGIN  
                            select
                                emp.ds_nome_fantasia
                            from    
                                seguro.propostas pr 
                                inner join seguro.propostas_proponentes pp on pp.id_proposta = pr.id
                                inner join produto.produtos pd on pd.id = pr.id_produto
                                inner join produto.produtos_geral pg on pg.id = pd.id_produto_geral
                                inner join sinistro.processos sp on sp.id_proposta = pr.id
                                inner join sinistro.processos_empresas ppe ON ppe.id_processo = sp.id AND ppe.fl_ativo = true
                                inner join sistema.empresas emp ON emp.id = ppe.id_empresa
                            into
                                cpf_cnpj_empresa    
                            where
                                pg.id_epoca_cultivo = vepoca_cultivo
                                and pd.id_safra = vid_safra 
                                and pp.cpf_cnpj = vcpf_cnpj
                            limit 1;
                                
                            if cpf_cnpj_empresa is not null then
                                return cpf_cnpj_empresa;
                            else
                                return '';
                            end if;
                        
                        END;
                        \$BODY\$
                          LANGUAGE plpgsql VOLATILE
                          COST 100;
                        ALTER FUNCTION sinistro.busca_empresa_cnpj(INTEGER, TEXT, TEXT)
                          OWNER TO postgres;");
    }

    private function downAlterarTabela()
    {
        $this->execute(<<<SQL
ALTER TABLE produto.produtos_geral DROP CONSTRAINT ckc_epoca_cultivo;
ALTER TABLE produto.produtos_geral RENAME COLUMN tp_epoca_cultivo TO id_epoca_cultivo;

UPDATE produto.produtos_geral SET id_epoca_cultivo = '' WHERE id_epoca_cultivo = 'N';
SQL
        );
    }

    private function downAtualizarViewAvisos()
    {
        $this->execute(<<<SQL
-- View: sinistro.v_avisos

DROP VIEW sinistro.v_avisos;

CREATE OR REPLACE VIEW sinistro.v_avisos AS
    SELECT DISTINCT ul.ds_nome_usuario AS ds_nome_usuario_responsavel
         , cl.ds_nome_cliente
         , a.fl_ativo
         , a.fl_del
         , a.id
         , a.dt_criacao
         , a.dt_sinistro
         , pp.id AS id_proposta
         , (to_char(seguro.dt_vigencia_inicio_original(pp.id)::timestamp with time zone, 'DD/MM/YYYY'::text) || ' - '::text) || to_char(pp.dt_vigencia_fim::timestamp with time zone, 'DD/MM/YYYY'::text) AS dt_vigencia
         , pp.nr_apolice
         , pc.id AS id_processo
         , pc.id_processo_seguradora
         , pppr.ds_nome_proponente
         , pppr.cpf_cnpj
         , pp.id_produto
         , pd.ds_nome_produto
         , u.ds_nome_usuario
         , c.id AS id_corretor
         , c.id_usuario AS id_usuario_corretor
         , c.ds_nome_fantasia AS ds_nome_corretor
         , s.id AS id_safra
         , a.id_status
         , mun.ds_nome_municipio
         , est.ds_sigla
         , est.id AS id_estado
         , mun.id AS id_municipio
         , ppr.ds_endereco
         , st.ds_status
         , pend.id_endosso
         , pc.fl_pasta_aberta
         , spc.id_usuario AS id_usuario_proposta_corretor
         , sis.vl_lmga
         , pe.ds_nome_evento AS ds_eventos
         , empvist.ds_nome_fantasia AS ds_empresa_previa
         , CASE
                WHEN a.id_status = 27 THEN
                    CASE
                        WHEN pdg.id_tipo_produto = 1 THEN
                            CASE
                                WHEN empproc.ds_nome_fantasia IS NOT NULL THEN
                                    empproc.ds_nome_fantasia::character varying
                                WHEN  empcpf.ds_nome_fantasia IS NOT NULL THEN
                                    empcpf.ds_nome_fantasia::character varying
                                ELSE
                                    ''::character varying
                            END
                        ELSE
                            CASE
                                WHEN pdg.id_epoca_cultivo IS NULL OR pdg.id_epoca_cultivo = ''::bpchar THEN
                                    CASE
                                        WHEN empproc.ds_nome_fantasia IS NOT NULL THEN
                                            empproc.ds_nome_fantasia::character varying
                                        WHEN empcpf.ds_nome_fantasia IS NOT NULL THEN
                                            empcpf.ds_nome_fantasia::character varying
                                        ELSE
                                            ''::character varying
                                    END
                                ELSE
                                    CASE
                                        WHEN empproc.ds_nome_fantasia IS NOT NULL THEN
                                            empproc.ds_nome_fantasia::character varying
                                        ELSE
                                            sinistro.busca_empresa_cnpj(pd.id_safra, pppr.cpf_cnpj::text, pdg.id_epoca_cultivo::text)
                                    END
                            END
                    END
                ELSE NULL::character varying
           END AS ds_empresa_cpf_segurado
         , a.fl_novo
         , empcpf.id AS id_empresa_vistoriadora
         , emp.ds_nome_fantasia AS ds_nome_seguradora
         , CASE
                WHEN v_nr_endosso.nr_endosso > 0 THEN
                    v_nr_endosso.nr_endosso
                ELSE
                    0::bigint
           END AS nr_endosso
         , pp.id_proposta_mae
         , pp.id_proposta_endossada
         , seguro.id_proposta_mae_completo(pp.id_proposta_mae) AS id_proposta_mae_completo
         , ppe.id_empresa AS id_empresa_processo_sinistro
         , pp.id_usuario_criacao
         , CASE
                WHEN btrim(v_tem_parcela_vencida.id_endosso::character varying::text) <> ''::text OR v_tem_parcela_vencida.id_endosso IS NOT NULL THEN
                    TRUE
                ELSE
                    FALSE
           END AS vencida
         , empvist.ds_status AS ds_status_vistoria_previa
      FROM sinistro.avisos a
      JOIN seguro.propostas pp ON pp.id = a.id_proposta
      JOIN seguro.propostas_endosso spe ON spe.id_proposta = pp.id AND spe.fl_proposta_vigente = true
      JOIN sumario.itens_segurados sis ON sis.id_proposta = pp.id
      JOIN seguro.propostas_endosso pend ON pend.id_proposta = pp.id
      JOIN seguro.propostas_propriedades ppr ON ppr.id_proposta = pp.id
      JOIN seguro.propostas_corretores spc ON spc.id_proposta = pp.id
      JOIN sistema.corretores c ON c.id_usuario = spc.id_usuario
      JOIN sistema.municipios mun ON mun.id = ppr.id_municipio
      JOIN sistema.estados est ON est.id = mun.id_estado
      JOIN seguro.propostas_proponentes pppr ON pppr.id_proposta = pp.id
      JOIN seguro.proponentes ppo ON ppo.cpf_cnpj::text = pppr.cpf_cnpj::text
      JOIN produto.produtos pd ON pd.id = pp.id_produto
      JOIN produto.produtos_geral pdg ON pdg.id = pd.id_produto_geral
      JOIN sistema.empresas emp ON emp.id = pd.id_seguradora
      JOIN sistema.usuarios u ON u.id = a.id_usuario_criacao
      JOIN produto.safras s ON s.id = pd.id_safra
      JOIN sistema.status st ON st.id = a.id_status
      JOIN sinistro.avisos_eventos sae ON sae.id_aviso = a.id
      JOIN produto.eventos pe ON pe.id = sae.id_evento
 LEFT JOIN sinistro.processos pc ON pc.id_proposta = pp.id
 LEFT JOIN sinistro.processos_empresas ppe ON ppe.id_processo = pc.id AND ppe.fl_ativo = true
 LEFT JOIN sistema.usuarios ul ON ul.id = pc.id_usuario_responsavel_liquidacao
 LEFT JOIN seguro.clientes_propostas clp ON clp.id_proposta = pp.id
 LEFT JOIN seguro.clientes cl ON clp.id_cliente = cl.id
 LEFT JOIN sistema.empresas empcpf ON empcpf.id = ppo.id_empresa_vistoria
 LEFT JOIN (   SELECT empr.ds_nome_fantasia
                    , pvp.id_proposta
                    , pe_1.id_endosso
                    , ss.ds_status
                 FROM seguro.propostas_endosso pe_1
                 JOIN seguro.propostas_vistorias_previas pvp ON pe_1.id_proposta = pvp.id_proposta
                 JOIN (   SELECT v.id_proposta
                               , max(v.id) AS id
                            FROM seguro.propostas_vistorias_previas v
                        GROUP BY v.id_proposta
                      ) pvpp ON pvp.id = pvpp.id
                 JOIN sistema.vistorias_empresas ve ON pvp.id_vistoria = ve.id_vistoria
                 JOIN sistema.empresas empr ON ve.id_empresa = empr.id
                 JOIN sistema.status ss ON ss.id = pvp.id_status_analise
             GROUP BY empr.ds_nome_fantasia, pvp.id_proposta, pe_1.id_endosso, ss.ds_status
           ) empvist ON empvist.id_endosso = spe.id_endosso
 LEFT JOIN sistema.empresas empproc ON empproc.id = ppe.id_empresa
 LEFT JOIN seguro.v_nr_endosso ON v_nr_endosso.id_endosso = pp.id_endosso
 LEFT JOIN (
             SELECT propostas.id_endosso
               FROM seguro.propostas
               JOIN (   SELECT propostas_parcelas.id_proposta
                             , propostas_parcelas.dt_vencimento
                             , propostas_parcelas.vl_segurado
                             , proposta_boletos.fl_pago
                          FROM seguro.propostas propostas_1
                          JOIN seguro.propostas_endosso propostas_endosso_1
                            ON propostas_endosso_1.id_endosso = propostas_1.id_endosso
                           AND propostas_endosso_1.fl_proposta_vigente = TRUE
                          JOIN seguro.propostas_parcelas
                            ON propostas_parcelas.id_proposta = propostas_1.id
                     LEFT JOIN seguro.proposta_boletos
                            ON proposta_boletos.id_proposta = propostas_endosso_1.id_proposta
                           AND proposta_boletos.id_proposta = propostas_parcelas.id_proposta
                           AND proposta_boletos.nr_parcela  = propostas_parcelas.nr_parcela
                         WHERE proposta_boletos.fl_pago = FALSE
                    ) propostas_boletos ON propostas_boletos.id_proposta = propostas.id
               JOIN seguro.propostas_endosso ON propostas_endosso.id_endosso = propostas.id_endosso AND propostas_endosso.fl_proposta_vigente = TRUE
              WHERE propostas_boletos.vl_segurado > 0::numeric
                AND propostas_boletos.dt_vencimento < to_char(now(), 'YYYY-mm-dd'::text)::date
           ) AS v_tem_parcela_vencida
        ON v_tem_parcela_vencida.id_endosso = pend.id_endosso
     WHERE 1 = 1
  ORDER BY a.id
         ;

ALTER TABLE sinistro.v_avisos
  OWNER TO agrobrasilpg;
SQL
        );
    }

    private function downNovaTabela()
    {
        $this->execute(<<<SQL
DROP TABLE seguro.proponentes_recomendacao;
SQL
        );
    }

    private function downRemoverColuna()
    {
        $this->execute(<<<SQL
ALTER TABLE seguro.proponentes ADD COLUMN id_empresa_vistoria INTEGER;
SQL
        );
    }
}
