SET TERM ^ ;

CREATE OR ALTER procedure SPU_NFE_PARCELAMENTO (
    ESTABELECIMENTO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NFE_CONTROLE integer,
    PARCELA integer,
    DATA_ENTRADA date,
    SITUACAO integer,
    CONTROLE integer,
    DATA_VENCIMENTO date,
    VALOR numeric(15,2),
    CONTA_PAGAR_OPERACAO integer,
    CLASSIFICACAO_CONTABIL varchar(6),
    CLASSIFICACAO varchar(10),
    OBSERVACAO varchar(20),
    PAGAMENTO_FORMA integer,
    REMESSA integer,
    GC_WEB integer,
    NF_SITUACAO integer,
    NF_NATUREZA integer,
    RECOLHIMENTO_ID integer = 0)
as
BEGIN
    
    UPDATE TBNFE_PARCELAMENTO A SET
        A.ESTABELECIMENTO_CODIGO           = :ESTABELECIMENTO_CODIGO,
        A.NUMERO_NOTAFISCAL                = :NUMERO_NOTAFISCAL,
        A.SERIE                            = :SERIE,
        A.VALOR                            = :VALOR,
        A.VALOR_SALDO                      = :VALOR,
        A.DATA_VENCIMENTO                  = :DATA_VENCIMENTO,
        A.CONTA_PAGAR_OPERACAO             = :CONTA_PAGAR_OPERACAO,
        A.CLASSIFICACAO_CONTABIL           = :CLASSIFICACAO_CONTABIL,
        A.CLASSIFICACAO                    = :CLASSIFICACAO,
        A.OBSERVACAO                       = :OBSERVACAO,
        A.EMPRESA_CODIGO                   = :EMPRESA_CODIGO,
        A.DATA_ENTRADA                     = :DATA_ENTRADA,
        A.NF_SITUACAO                      = :NF_SITUACAO,
        A.NF_NATUREZA                      = :NF_NATUREZA,
        A.RECOLHIMENTO_ID                  = :RECOLHIMENTO_ID,
        A.PARCELA                          = :PARCELA
    WHERE (A.CONTROLE                      = :CONTROLE
    AND A.NFE_CONTROLE                     = :NFE_CONTROLE); 

    /* ATUALIZAR SALDO DA PARCELA */
    
    UPDATE TBCAIXABANCO_LANCAMENTO_REG B SET
        B.VALOR_TOTAL                      = :VALOR,
        B.VALOR_SALDO                      = :VALOR,
        B.PARCELA                          = :PARCELA
    WHERE (B.NFE_PARCELAMENTO_CONTROLE     = :CONTROLE
    AND B.NFE_CONTROLE                     = :NFE_CONTROLE
    AND B.REGISTRO_MESTRE                  = 1
    AND B.TIPO                             = 'C');

    EXECUTE PROCEDURE SPU_CONTA_PAGAR_SALDO3(:NFE_CONTROLE,:CONTROLE);

    UPDATE TBNFE_PARCELAMENTO A
        SET A.VALOR_SALDO    = COALESCE((SELECT SUM(CASE WHEN B.TIPO = 'D' THEN B.VALOR_TOTAL*-1  ELSE B.VALOR_TOTAL END) SALDO
                                    FROM TBCAIXABANCO_LANCAMENTO_REG B WHERE B.NFE_CONTROLE = A.NFE_CONTROLE
                                    AND B.TIPO IN ('D','C') AND B.NFE_PARCELAMENTO_CONTROLE = A.CONTROLE),0.00)
        WHERE A.NFE_CONTROLE = :NFE_CONTROLE
          AND A.CONTROLE     = :CONTROLE;

END
^

SET TERM ; ^

