CREATE OR ALTER PROCEDURE SPU_CONTA_PAGAR_SALDO2 (
    NFE_CONTROLE_1 INTEGER,
    CONTROLE_1 INTEGER)
AS
DECLARE VARIABLE CONTROLEX INTEGER;
DECLARE VARIABLE SALDOX    NUMERIC(10,2);
DECLARE CONTROLE2 INTEGER;
DECLARE CONTROLE3 INTEGER;
DECLARE DATA DATE;
DECLARE VALOR NUMERIC(15,2);
DECLARE SALDO NUMERIC(15,2);
DECLARE RM   CHAR(1);
DECLARE TIPO CHAR(1);
BEGIN
CONTROLEX = 0;
FOR SELECT
A.NFE_PARCELAMENTO_CONTROLE, A.CONTROLE, A.DATA, A.VALOR_TOTAL, A.VALOR_SALDO, A.REGISTRO_MESTRE, A.TIPO
FROM TBCAIXABANCO_LANCAMENTO_REG A
WHERE A.NFE_CONTROLE = :NFE_CONTROLE_1
  AND A.NFE_PARCELAMENTO_CONTROLE = :CONTROLE_1

ORDER BY 1, 3, 2

INTO
 :CONTROLE2,
 :CONTROLE3,
 :DATA,
 :VALOR,
 :SALDO,
 :RM,
 :TIPO
DO     

 IF (:CONTROLE2 > 0) THEN
    BEGIN
    IF (:CONTROLEX <> :CONTROLE2) THEN
       BEGIN
       SALDOX    = :VALOR;
       CONTROLEX = :CONTROLE2;
       END ELSE
       BEGIN

       IF (:TIPO = 'C') THEN
          BEGIN
          SALDOX = :SALDOX + :VALOR ;
          END
       IF (:TIPO = 'D') THEN
          BEGIN
          SALDOX = :SALDOX - :VALOR ;
          END
       END

       IF (:SALDOX < 0) THEN
          BEGIN
          SALDOX = 0;
          END

       UPDATE TBCAIXABANCO_LANCAMENTO_REG SET
       VALOR_SALDO = :SALDOX
       WHERE CONTROLE = :CONTROLE3
         AND NFE_CONTROLE = :NFE_CONTROLE_1
         AND NFE_PARCELAMENTO_CONTROLE = :CONTROLE2;

   END

END;

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANC_CLASS_SA_B2D FOR TBCAIXABANCO_LANC_CLASS_SALDO
ACTIVE BEFORE DELETE POSITION 2
AS
DECLARE VARIABLE CHEQUE_SITUACAO INTEGER;
BEGIN

  IF (OLD.SALDO < OLD.VALOR) THEN
      BEGIN
      EXCEPTION "..." 'REGISTRO NAO PODE SER EXCLUIDO! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
      END

    IF(OLD.CHEQUE_ID > 0)THEN
    BEGIN

        CHEQUE_SITUACAO = COALESCE((SELECT FIRST 1 A.SITUACAO FROM TBCHEQUE A WHERE A.ID = OLD.CHEQUE_ID), -1);

        IF(CHEQUE_SITUACAO = 5)THEN
        BEGIN
            EXCEPTION "..." 'CHEQUE: '||FN_LPAD(OLD.CHEQUE_ID, 4, '0')||' VINCULADO AO REGISTRO COM SITUACAO DEVOLVIDO. EXCLUSAO NAO AUTORIZADA!';
        END

        UPDATE TBCHEQUE SET SITUACAO = 3 WHERE ID = OLD.CHEQUE_ID;
    END

END;

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANC_REG_AD01 FOR TBCAIXABANCO_LANCAMENTO_REG
ACTIVE AFTER DELETE POSITION 0
AS
BEGIN
     IF(OLD.NFE_PARCELAMENTO_CONTROLE > 0) THEN
     BEGIN
        EXECUTE PROCEDURE SPU_CONTA_PAGAR_SALDO2(OLD.NFE_CONTROLE,OLD.NFE_PARCELAMENTO_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)
            WHERE A.NFE_CONTROLE = OLD.NFE_CONTROLE
              AND A.CONTROLE     = OLD.NFE_PARCELAMENTO_CONTROLE;
     END

     IF(OLD.NFS_PARCELAMENTO_CONTROLE > 0) THEN
     BEGIN
        EXECUTE PROCEDURE SPU_CONTA_RECEBER_SALDO2(OLD.NFS_CONTROLE,OLD.NFS_PARCELAMENTO_CONTROLE);

        UPDATE TBNFS_PARCELAMENTO A SET A.VALOR_SALDO = COALESCE((SELECT SUM(CASE WHEN B.TIPO = 'C'
            THEN B.VALOR_TOTAL*-1  ELSE B.VALOR_TOTAL END) SALDO FROM TBCAIXABANCO_LANCAMENTO_REG B
            WHERE B.NFS_CONTROLE = A.NFS_CONTROLE
            AND B.TIPO IN ('D','C')
            AND B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE),0)
            WHERE A.NFS_CONTROLE = OLD.NFS_CONTROLE
              AND A.CONTROLE     = OLD.NFS_PARCELAMENTO_CONTROLE;
     END
END;