<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc46769V2 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE OR REPLACE FUNCTION seguro.sumario_parcelas_consulta_cadin(id_endosso integer)
            RETURNS void
            LANGUAGE plpgsql
            AS \$function\$
            DECLARE
            v_where varchar;
            vid_endosso ALIAS FOR $1;
            BEGIN
            DROP TABLE IF EXISTS sumario_parcelas;
            
            v_where := '';
            IF vid_endosso > 0 THEN
                CREATE TEMP TABLE sumario_parcelas as (
                SELECT
                    pp.id_endosso,
                    sum(pp.vl_total) AS valor_total,
                    sum(pp.vl_segurado) AS valor_segurado,
                    sum(pp.vl_subvencao_federal) AS valor_subvencao_federal,
                    sum(pp.vl_subvencao_estadual) AS valor_subvencao_estadual
                FROM
                    seguro.propostas_parcelas pp,
                    seguro.propostas pr,
                    sistema.status st
                WHERE
                    pp.id_proposta = pr.id AND
                    st.id = pr.id_status AND
                    (st.ds_chave::text <> ALL (ARRAY['PROPOSTA_INCOMPLETA'::character varying, 'NAO_ENVIADA'::character varying, 'DEVOLVIDA'::character varying, 'PROPOSTA_CANCELADA'::character varying, 'ORCAMENTO_ENDOSSO'::character varying, 'ENDOSSO_ANULADO'::character varying, 'ENDOSSO_INCOMPLETO'::character varying, 'SOLICITACAO_ENDOSSO'::character varying, 'SOLICITACAO_CANCELADA'::character varying]::text[])) AND
                    pp.id_endosso = vid_endosso
                GROUP BY
                    pp.id_endosso
                );
            ELSE
                CREATE TEMP TABLE sumario_parcelas as (
                SELECT
                    pp.id_endosso,
                    sum(pp.vl_total) AS valor_total,
                    sum(pp.vl_segurado) AS valor_segurado,
                    sum(pp.vl_subvencao_federal) AS valor_subvencao_federal,
                    sum(pp.vl_subvencao_estadual) AS valor_subvencao_estadual
                FROM
                    seguro.propostas_parcelas pp,
                    seguro.propostas pr,
                    sistema.status st
                WHERE
                    pp.id_proposta = pr.id AND
                    st.id = pr.id_status AND
                    (st.ds_chave::text <> ALL (ARRAY['PROPOSTA_INCOMPLETA'::character varying, 'NAO_ENVIADA'::character varying, 'DEVOLVIDA'::character varying, 'PROPOSTA_CANCELADA'::character varying, 'ORCAMENTO_ENDOSSO'::character varying, 'ENDOSSO_ANULADO'::character varying, 'ENDOSSO_INCOMPLETO'::character varying, 'SOLICITACAO_ENDOSSO'::character varying, 'SOLICITACAO_CANCELADA'::character varying]::text[])) 
                GROUP BY
                    pp.id_endosso
                );
            END IF;

            END;
            \$function\$

SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            CREATE OR REPLACE FUNCTION seguro.sumario_parcelas_consulta_cadin(id_endosso integer)
            RETURNS void
            LANGUAGE plpgsql
            AS \$function\$
            DECLARE
            v_where varchar;
            vid_endosso ALIAS FOR $1;
            BEGIN
            DROP TABLE IF EXISTS sumario_parcelas;
            
            v_where := '';
            IF vid_endosso > 0 THEN
                CREATE TEMP TABLE sumario_parcelas as (
                SELECT 
                    pp.id_endosso,
                    sum(pp.vl_total) AS valor_total, 
                    sum(pp.vl_segurado) AS valor_segurado, 
                    sum(pp.vl_subvencao_federal) AS valor_subvencao_federal, 
                    sum(pp.vl_subvencao_estadual) AS valor_subvencao_estadual 
                FROM 
                    seguro.propostas_parcelas pp, 
                    seguro.propostas pr, 
                    sistema.status st
                WHERE 
                    pp.id_proposta = pr.id AND 
                    st.id = pr.id_status AND 
                    (st.ds_chave::text <> ALL (ARRAY['PROPOSTA_INCOMPLETA'::character varying, 'NAO_ENVIADA'::character varying, 'DEVOLVIDA'::character varying, 'PROPOSTA_CANCELADA'::character varying, 'ORCAMENTO_ENDOSSO'::character varying, 'ENDOSSO_ANULADO'::character varying, 'ENDOSSO_INCOMPLETO'::character varying]::text[])) AND
                    pp.id_endosso = vid_endosso
                GROUP BY 
                    pp.id_endosso
                );
            ELSE
                CREATE TEMP TABLE sumario_parcelas as (
                SELECT 
                    pp.id_endosso,
                    sum(pp.vl_total) AS valor_total, 
                    sum(pp.vl_segurado) AS valor_segurado, 
                    sum(pp.vl_subvencao_federal) AS valor_subvencao_federal, 
                    sum(pp.vl_subvencao_estadual) AS valor_subvencao_estadual 
                FROM 
                    seguro.propostas_parcelas pp, 
                    seguro.propostas pr, 
                    sistema.status st
                WHERE 
                    pp.id_proposta = pr.id AND 
                    st.id = pr.id_status AND 
                    (st.ds_chave::text <> ALL (ARRAY['PROPOSTA_INCOMPLETA'::character varying, 'NAO_ENVIADA'::character varying, 'DEVOLVIDA'::character varying, 'PROPOSTA_CANCELADA'::character varying, 'ORCAMENTO_ENDOSSO'::character varying, 'ENDOSSO_ANULADO'::character varying, 'ENDOSSO_INCOMPLETO'::character varying]::text[])) 
                GROUP BY 
                    pp.id_endosso
                );  
            END IF;

            

            END;
            \$function\$

SQL
        );
    }
}
