CREATE OR ALTER PROCEDURE SP_CFE_LANCAMENTO_PARCELA (
    ORIGEM VARCHAR(3),
    PARCELAMENTO_ID INTEGER,
    PDV_CFE_FORMA_PAGAMENTO_ID INTEGER,
    ESTABELECIMENTO_CODIGO INTEGER,
    EMPRESA_CODIGO INTEGER,
    CONTA_RECEBER_OPERACAO INTEGER,
    CONTA_RECEBER_BANCO INTEGER,
    NUMERO_CFE INTEGER,
    PARCELA INTEGER,
    DATA DATE,
    VALOR_SALDO NUMERIC(10,5),
    VALOR_TOTAL NUMERIC(15,2),
    NATUREZA CHAR(1),
    SERIE_CFE VARCHAR(3),
    AVULSO CHAR(1),
    ACAO INTEGER)
AS
DECLARE VARIABLE VREGISTROS INTEGER;
BEGIN

  IF (ORIGEM = 'CFE') THEN
      BEGIN
          IF(ACAO = 1) THEN -- INCLUSAO DE LANÇAMENTOS DE PARCELAS
          BEGIN
            INSERT INTO TBCAIXABANCO_LANCAMENTO_REG (
                        CONTROLE,
                        ESTABELECIMENTO_CODIGO,
                        CAIXABANCO_CONTROLE,
                        DATA,
                        EMPRESA_CODIGO,
                        NFE_PARCELAMENTO_CONTROLE,
                        NFS_PARCELAMENTO_CONTROLE,
                        CAIXABANCO_CODIGO,
                        OPERACAO_CODIGO,
                        DOCUMENTO_NUMERO,
                        PARCELA, 
                        VALOR, 
                        VALOR_DESCONTO, 
                        VALOR_JUROS, 
                        VALOR_MULTA,
                        VALOR_DESPESA_DIVERSA, 
                        VALOR_DESPESA_COBRANCA,
                        VALOR_DESPESA_CARTORIO, 
                        REGISTRO_MESTRE,
                        OCORRENCIA_CONTROLE, 
                        VALOR_SALDO,
                        DATA_REGISTRO, 
                        TIPO, 
                        SERIE, 
                        CODORIGEM,
                        CONTA_DEBITO,
                        CONTA_CREDITO, 
                        NFE_CONTROLE, 
                        NFS_CONTROLE, 
                        VALOR_TOTAL, 
                        ARQUIVO, 
                        CCUSTO, 
                        LANCAMENTO_CLASS_ID)
                    VALUES (
                        GEN_ID(GTBCAIXABANCO_REGISTRO, 1), 
                        :ESTABELECIMENTO_CODIGO,
                        0, 
                        :DATA,
                        :EMPRESA_CODIGO,
                        0, 
                        :PARCELAMENTO_ID, 
                        :CONTA_RECEBER_BANCO,
                        :CONTA_RECEBER_OPERACAO,
                        :NUMERO_CFE, 
                        :PARCELA,
                        :VALOR_SALDO,
                        0, 
                        0, 
                        0, 
                        0, 
                        0, 
                        0,
                        '1', 
                        NULL, 
                        :VALOR_SALDO,
                        CURRENT_TIMESTAMP, 
                        :NATUREZA, 
                        :SERIE_CFE,
                        'CF1', 
                        '', 
                        '', 
                        0, 
                        0, 
                        :VALOR_TOTAL,
                        NULL, 
                        '',
                        0);

          END
          IF(ACAO = 2) THEN -- DELETAR LANÇAMENTOS DE PARCELAS
          BEGIN
            FOR
              SELECT T.CONTROLE
                FROM TBNFS_PARCELAMENTO T
                WHERE T.TIPO = 2
                AND T.PDV_CFE_FORMA_PAGAMENTO_ID = :PDV_CFE_FORMA_PAGAMENTO_ID
              INTO
                 :PARCELAMENTO_ID
              DO BEGIN
                DELETE FROM TBCAIXABANCO_LANCAMENTO_REG S WHERE S.NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID;
                DELETE FROM TBNFS_PARCELAMENTO T WHERE T.CONTROLE = :PARCELAMENTO_ID;
              END

--            IF (VREGISTROS > 1) THEN
--             EXCEPTION "..." 'PARCELAMENTO COM LANÇAMENTOS VINCULADOS, EXCLUSAO CANCELADA!';

            IF (VREGISTROS > 0 AND VALOR_SALDO <> VALOR_TOTAL) THEN
             EXCEPTION "..." 'PARCELAMENTO COM LANÇAMENTOS VINCULADOS, EXCLUSAO CANCELADA!';


            DELETE FROM TBCAIXABANCO_LANCAMENTO_REG WHERE NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID AND CODORIGEM = 'CFE' AND REGISTRO_MESTRE = 1;

          END

          IF(ACAO = 3) THEN -- ATUALIZAR LANÇAMENTO DE PARCELA

          BEGIN
             UPDATE TBCAIXABANCO_LANCAMENTO_REG SET
                   ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
                   EMPRESA_CODIGO = :EMPRESA_CODIGO,
                   DOCUMENTO_NUMERO = :NUMERO_CFE,
                   DATA = :DATA,
                   SERIE = :SERIE_CFE
               WHERE NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID
                 AND CODORIGEM = 'CFE' AND REGISTRO_MESTRE = 1;

          END

      END -- FIM PARA NFS
END;