deletarBaseDeRegistroEventoDecimo.plsql 10 KB
/*
    **********************************************************************************
    *                                                                                *
    * @package URBEM CNM - Soluções em Gestão Pública                                *
    * @copyright (c) 2013 Confederação Nacional de Municípos                         *
    * @author Confederação Nacional de Municípios                                    *
    *                                                                                *
    * O URBEM CNM é um software livre; você pode redistribuí-lo e/ou modificá-lo sob *
    * os  termos  da Licença Pública Geral GNU conforme  publicada  pela Fundação do *
    * Software Livre (FSF - Free Software Foundation); na versão 2 da Licença.       *
    *                                                                                *
    * Este  programa  é  distribuído  na  expectativa  de  que  seja  útil,   porém, *
    * SEM NENHUMA GARANTIA; nem mesmo a garantia implícita  de  COMERCIABILIDADE  OU *
    * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU *
    * para mais detalhes.                                                            *
    *                                                                                *
    * Você deve ter recebido uma cópia da Licença Pública Geral do GNU "LICENCA.txt" *
    * com  este  programa; se não, escreva para  a  Free  Software Foundation  Inc., *
    * no endereço 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.       *
    *                                                                                *
    **********************************************************************************
*/
--/**
--    * Função PLSQL
--    * Data de Criação: 12/09/2006
--
--
--    * @author Analista: Vandré Miguel Ramos
--    * @author Desenvolvedor: Diego Lemos de Souza
--
--    * @package URBEM
--    * @subpackage
--
--    $Revision: 26869 $
--    $Name$
--    $Author: souzadl $
--    $Date: 2007-11-21 17:23:15 -0200 (Qua, 21 Nov 2007) $
--
--    * Casos de uso: uc-04.05.11
--*/

CREATE OR REPLACE FUNCTION deletarBaseDeRegistroEventoDecimo(INTEGER,INTEGER) RETURNS BOOLEAN as $$

DECLARE
    inCodContrato               ALIAS FOR $1;
    inCodPeriodoMovimentacao    ALIAS FOR $2;
    stSql                       VARCHAR := '';
    stSql2                      VARCHAR := '';
    Registro                    RECORD;
    Registro2                   RECORD;
    inCodEventoBase             INTEGER;
    inContador                  INTEGER;
    inCodConfiguracao           INTEGER;
    boRetorno                   BOOLEAN;
    stEntidade VARCHAR := recuperarBufferTexto('stEntidade');
BEGIN
    stSql := 'SELECT ultimo_registro_evento_decimo.*
                 FROM folhapagamento'|| stEntidade ||'.ultimo_registro_evento_decimo
                    , folhapagamento'|| stEntidade ||'.registro_evento_decimo
                    , folhapagamento'|| stEntidade ||'.evento
                WHERE ultimo_registro_evento_decimo.cod_registro = registro_evento_decimo.cod_registro
                  AND ultimo_registro_evento_decimo.cod_evento   = registro_evento_decimo.cod_evento
                  AND ultimo_registro_evento_decimo.timestamp    = registro_evento_decimo.timestamp
                  AND ultimo_registro_evento_decimo.desdobramento = registro_evento_decimo.desdobramento
                  AND ultimo_registro_evento_decimo.cod_evento = evento.cod_evento
                  AND evento.evento_sistema = false
                  AND evento.natureza = ''B''
                  AND registro_evento_decimo.cod_contrato = '|| inCodContrato ||'
                  AND registro_evento_decimo.cod_periodo_movimentacao = '|| inCodPeriodoMovimentacao ||' ';
    FOR Registro IN EXECUTE stSql
    LOOP
        stSql := 'DELETE FROM folhapagamento'|| stEntidade ||'.evento_decimo_calculado WHERE cod_registro = '|| Registro.cod_registro ||'
                                                             AND cod_evento   = '|| Registro.cod_evento ||'
                                                             AND timestamp_registro    = '|| quote_literal(Registro.timestamp) ||'
                                                             AND desdobramento = '|| quote_literal(Registro.desdobramento) ||' ';
        EXECUTE stSql;                                                             
        stSql := 'DELETE FROM folhapagamento'|| stEntidade ||'.log_erro_calculo_decimo WHERE cod_registro = '|| Registro.cod_registro ||'
                                                             AND cod_evento   = '|| Registro.cod_evento ||'
                                                             AND timestamp    = '|| quote_literal(Registro.timestamp) ||'
                                                             AND desdobramento = '|| quote_literal(Registro.desdobramento) ||' ';
        EXECUTE stSql;                                                             
        stSql := 'DELETE FROM folhapagamento'|| stEntidade ||'.registro_evento_decimo_parcela WHERE cod_registro = '|| Registro.cod_registro ||'
                                                                    AND cod_evento   = '|| Registro.cod_evento ||'
                                                                    AND timestamp    = '|| quote_literal(Registro.timestamp) ||'
                                                                    AND desdobramento = '|| quote_literal(Registro.desdobramento) ||' ';
        EXECUTE stSql;                                                            
        stSql := 'DELETE FROM folhapagamento'|| stEntidade ||'.ultimo_registro_evento_decimo WHERE cod_registro = '|| Registro.cod_registro ||'
                                                                   AND cod_evento   = '|| Registro.cod_evento ||'
                                                                   AND timestamp    = '|| quote_literal(Registro.timestamp) ||'
                                                                   AND desdobramento = '|| quote_literal(Registro.desdobramento) ||' ';
        EXECUTE stSql;                                                                   
    END LOOP;
    stSql := 'SELECT ultimo_registro_evento_decimo.*
                 FROM folhapagamento'|| stEntidade ||'.ultimo_registro_evento_decimo
                    , folhapagamento'|| stEntidade ||'.registro_evento_decimo
                    , folhapagamento'|| stEntidade ||'.evento
                WHERE ultimo_registro_evento_decimo.cod_registro = registro_evento_decimo.cod_registro
                  AND ultimo_registro_evento_decimo.cod_evento   = registro_evento_decimo.cod_evento
                  AND ultimo_registro_evento_decimo.timestamp    = registro_evento_decimo.timestamp
                  AND ultimo_registro_evento_decimo.desdobramento= registro_evento_decimo.desdobramento
                  AND ultimo_registro_evento_decimo.cod_evento = evento.cod_evento
                  AND evento.natureza != ''B''
                  AND registro_evento_decimo.cod_contrato = '|| inCodContrato ||'
                  AND registro_evento_decimo.cod_periodo_movimentacao = '|| inCodPeriodoMovimentacao ||' ';

    FOR Registro IN EXECUTE stSql
    LOOP
        stSql2 := 'SELECT evento_base.cod_evento_base
                      FROM folhapagamento'|| stEntidade ||'.configuracao_evento_caso
                         , (SELECT max(timestamp) as timestamp
                                 , cod_evento
                              FROM folhapagamento'|| stEntidade ||'.configuracao_evento_caso
                            GROUP BY cod_evento) as max_configuracao_evento_caso
                         , folhapagamento'|| stEntidade ||'.evento_base
                     WHERE configuracao_evento_caso.cod_evento = '|| Registro.cod_evento ||'
                       AND configuracao_evento_caso.cod_configuracao = 3
                       AND configuracao_evento_caso.cod_configuracao = evento_base.cod_configuracao
                       AND configuracao_evento_caso.cod_evento =max_configuracao_evento_caso.cod_evento
                       AND configuracao_evento_caso.timestamp = max_configuracao_evento_caso.timestamp
                       AND configuracao_evento_caso.cod_evento = evento_base.cod_evento
                       AND configuracao_evento_caso.timestamp = evento_base.timestamp';
        FOR Registro2 IN EXECUTE stSql2
        LOOP                   
            IF Registro2.cod_evento_base IS NOT NULL THEN
                inContador := selectIntoInteger('SELECT count(ultimo_registro_evento_decimo.*) as contador
                                          FROM folhapagamento'|| stEntidade ||'.ultimo_registro_evento_decimo
                                             , folhapagamento'|| stEntidade ||'.registro_evento_decimo
                                         WHERE ultimo_registro_evento_decimo.cod_registro  = registro_evento_decimo.cod_registro
                                           AND ultimo_registro_evento_decimo.cod_evento    = registro_evento_decimo.cod_evento
                                           AND ultimo_registro_evento_decimo.timestamp     = registro_evento_decimo.timestamp
                                           AND ultimo_registro_evento_decimo.desdobramento = registro_evento_decimo.desdobramento
                                           AND ultimo_registro_evento_decimo.desdobramento = '|| quote_literal(Registro.desdobramento) ||'
                                           AND registro_evento_decimo.cod_contrato = '|| inCodContrato ||'
                                           AND registro_evento_decimo.cod_periodo_movimentacao = '|| inCodPeriodoMovimentacao ||'
                                           AND ultimo_registro_evento_decimo.cod_evento = '|| Registro2.cod_evento_base);
                IF inContador = 0 THEN
                    boRetorno := insertRegistroEventoAutomaticoDecimo(inCodContrato,inCodPeriodoMovimentacao,Registro2.cod_evento_base,Registro.desdobramento);        
                END IF;
            END IF;
        END LOOP;
    END LOOP;
    RETURN true;
END;
$$LANGUAGE 'plpgsql';