SET TERM ^ ;

CREATE OR ALTER trigger ttbcaixabanco_lanc_reg_ad01 for tbcaixabanco_lancamento_reg
active after delete position 0
AS
DECLARE VARIABLE NFS_FORMA_PAGAMENTO_ID     INTEGER;
DECLARE VARIABLE PDV_CFE_FORMA_PAGAMENTO_ID INTEGER;
DECLARE VARIABLE COUNT_BCO_LANCAMENTO       INTEGER; 
DECLARE VARIABLE BCO_LANCAMENTO             INTEGER;
DECLARE VARIABLE VALOR_TOTAL_BCO            NUMERIC(10,5);
declare variable LANCAMENTO_CLASS_COUNT     INTEGER;
declare variable LANCAMENTO_CLASS_ID_EXC    INTEGER;
DECLARE VARIABLE MOVCONTABIL_ID             INTEGER;
BEGIN
     IF(OLD.NFE_PARCELAMENTO_CONTROLE > 0) THEN
     BEGIN
        EXECUTE PROCEDURE SPU_CONTA_PAGAR_SALDO3(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

     IF(OLD.CAIXABANCO_CONTROLE > 0) THEN
     BEGIN
          UPDATE TBCAIXABANCO_LANCAMENTO A
            SET A.VALOR_TOTAL = COALESCE((SELECT SUM(B.VALOR_TOTAL) FROM TBCAIXABANCO_LANCAMENTO_REG B WHERE B.CAIXABANCO_CONTROLE = OLD.CAIXABANCO_CONTROLE),0)
            WHERE A.CONTROLE  = OLD.CAIXABANCO_CONTROLE;

          DELETE FROM TBCAIXABANCO_LANCAMENTO_CLASS WHERE CAIXABANCO_CONTROLE = OLD.CAIXABANCO_CONTROLE AND (CONTA_PAGAR_CONTROLE = OLD.CONTROLE or CONTA_RECEBER_CONTROLE = OLD.CONTROLE);
     END

     IF(OLD.LANCAMENTO_DESCONTO_ID > 0) THEN
     BEGIN
          DELETE FROM TBCAIXABANCO_LANCAMENTO_REG WHERE CONTROLE = OLD.LANCAMENTO_DESCONTO_ID;
     END

     IF(OLD.LANCAMENTO_ANTECIPADO_ID > 0) THEN
     BEGIN
        :MOVCONTABIL_ID       = 0;
        :COUNT_BCO_LANCAMENTO = 0;

        DELETE FROM TBCAIXABANCO_LANCAMENTO_CLASS WHERE CONTROLE = COALESCE((SELECT FIRST 1 LANC_CLASS_ID FROM TBCAIXABANCO_LANC_CLASS_SALDO WHERE ID = OLD.LANCAMENTO_CLASS_ID),0);
        DELETE FROM TBCAIXABANCO_LANC_CLASS_SALDO WHERE ID       = OLD.LANCAMENTO_CLASS_ID;
        FOR
        SELECT A.MOVCONTABIL_ID, COUNT(B.CONTROLE), SUM(B.VALOR) AS VALOR_TOTAL_BCO
            FROM TBCAIXABANCO_LANCAMENTO A,TBCAIXABANCO_LANCAMENTO_CLASS B, TBCAIXABANCO_LANC_CLASS_SALDO C, TBCAIXABANCO_LANCAMENTO_REG D
            WHERE A.CONTROLE          = B.CAIXABANCO_CONTROLE
            AND C.LANC_CLASS_ID       = B.CONTROLE
            AND D.LANCAMENTO_CLASS_ID = C.ID
            AND A.CONTROLE            = D.LANCAMENTO_ANTECIPADO_ID
            AND A.CONTROLE            = OLD.LANCAMENTO_ANTECIPADO_ID
            GROUP BY A.MOVCONTABIL_ID, A.CONTROLE, B.CAIXABANCO_CONTROLE, D.LANCAMENTO_ANTECIPADO_ID
        INTO :MOVCONTABIL_ID, :COUNT_BCO_LANCAMENTO, :VALOR_TOTAL_BCO
        DO BEGIN
           UPDATE TBCAIXABANCO_LANCAMENTO SET VALOR_TOTAL = :VALOR_TOTAL_BCO WHERE CONTROLE = OLD.LANCAMENTO_ANTECIPADO_ID;
           IF(:MOVCONTABIL_ID > 0)THEN
           BEGIN
              UPDATE TBMOVCONTABIL SET VALOR = :VALOR_TOTAL_BCO WHERE ID = :MOVCONTABIL_ID;
           END
        END

        IF(:COUNT_BCO_LANCAMENTO = 0)THEN
        BEGIN
            DELETE FROM TBCAIXABANCO_LANCAMENTO       WHERE CONTROLE = OLD.LANCAMENTO_ANTECIPADO_ID;
            DELETE FROM TBCAIXABANCO_LANCAMENTO_CLASS WHERE CAIXABANCO_CONTROLE = OLD.LANCAMENTO_ANTECIPADO_ID;
        END

     END
     ELSE IF(OLD.LANCAMENTO_CLASS_ID > 0)THEN
     BEGIN
        /*LANCAMENTO_CLASS_ID_EXC = COALESCE((SELECT FIRST 1 B.CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS B, TBCAIXABANCO_LANC_CLASS_SALDO C WHERE C.ID = OLD.LANCAMENTO_CLASS_ID),0);

        DELETE FROM TBCAIXABANCO_LANC_CLASS_SALDO WHERE ID = OLD.LANCAMENTO_CLASS_ID;

        IF(:LANCAMENTO_CLASS_ID_EXC > 0)THEN
        BEGIN
            FOR SELECT A.CONTROLE, COALESCE(a.MOVCONTABIL_ID,0) as MOVCONTABIL_ID,
                 COALESCE((SELECT COUNT(C.ID) FROM TBCAIXABANCO_LANC_CLASS_SALDO C WHERE C.LANC_CLASS_ID = B.CONTROLE),0) COUNTER
                 FROM TBCAIXABANCO_LANCAMENTO A, TBCAIXABANCO_LANCAMENTO_CLASS B
                 WHERE A.CONTROLE = B.CAIXABANCO_CONTROLE
                 AND B.CONTROLE = :LANCAMENTO_CLASS_ID_EXC
                 INTO :BCO_LANCAMENTO, :MOVCONTABIL_ID, :LANCAMENTO_CLASS_COUNT DO
                 BEGIN
                    IF(:LANCAMENTO_CLASS_COUNT = 0)THEN
                    BEGIN
                       DELETE FROM TBCAIXABANCO_LANCAMENTO_CLASS WHERE CONTROLE = :LANCAMENTO_CLASS_ID_EXC;

                       UPDATE TBCAIXABANCO_LANCAMENTO A SET A.VALOR_TOTAL = COALESCE((SELECT SUM(B.VALOR) FROM TBCAIXABANCO_LANCAMENTO_CLASS B WHERE B.CAIXABANCO_CONTROLE = A.CONTROLE),0)
                       WHERE A.CONTROLE = :BCO_LANCAMENTO;

                       if(:MOVCONTABIL_ID > 0)then
                       begin
                           UPDATE TBMOVCONTABIL
                           SET VALOR = COALESCE((SELECT SUM(B.VALOR) FROM  TBCAIXABANCO_LANCAMENTO_CLASS B WHERE B.CAIXABANCO_CONTROLE = :BCO_LANCAMENTO),0)
                           WHERE ID = :MOVCONTABIL_ID;
                       end
                    END
                 END
        END*/
     END

     IF(OLD.MOVCONTABIL_ID > 0)THEN
     BEGIN
         DELETE FROM TBMOVCONTABIL WHERE ID = OLD.MOVCONTABIL_ID;
         IF(OLD.TARIFA_ADQUIRENTE = 1 AND OLD.MOVCONTMESTRE_ID > 0)THEN
         BEGIN
           DELETE FROM TBMOVCONTMESTRE KHL WHERE KHL.ID = OLD.MOVCONTMESTRE_ID;
         END
     END

     IF(OLD.TARIFA_ADQUIRENTE = 1)THEN
     BEGIN
         UPDATE TBNFS_PARCELAMENTO A 
            SET A.VALOR_TAXA       = 0, 
                A.PERCENTUAL_TAXA  = 0
            WHERE A.NFS_CONTROLE   = OLD.NFS_CONTROLE
              AND A.CONTROLE       = OLD.NFS_PARCELAMENTO_CONTROLE;

         FOR SELECT FIRST 1
            A.NFS_FORMA_PAGAMENTO_ID, 
            A.PDV_CFE_FORMA_PAGAMENTO_ID
            FROM TBNFS_PARCELAMENTO A 
            WHERE A.NFS_CONTROLE = OLD.NFS_CONTROLE
              AND A.CONTROLE     = OLD.NFS_PARCELAMENTO_CONTROLE
              INTO :NFS_FORMA_PAGAMENTO_ID, :PDV_CFE_FORMA_PAGAMENTO_ID DO
              BEGIN
                   IF(:NFS_FORMA_PAGAMENTO_ID > 0)THEN
                   BEGIN
                       UPDATE TBNFS_FORMA_PAGAMENTO C SET C.VALOR_TAXA = COALESCE((
                            SELECT SUM(B.VALOR) AS SUM_TAXA
                            FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                            WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                            AND B.NFS_CONTROLE = A.NFS_CONTROLE
                            AND B.TARIFA_ADQUIRENTE = '1'
                            AND B.TARIFA_ADQUIRENTE IS NOT NULL
                            AND A.NFS_FORMA_PAGAMENTO_ID = C.ID),0),
                            C.PERCENTUAL_TAXA = ((COALESCE((
                                SELECT SUM(B.VALOR) AS SUM_TAXA
                                FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                                WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                                AND B.NFS_CONTROLE = A.NFS_CONTROLE
                                AND B.TARIFA_ADQUIRENTE = '1'
                                AND B.TARIFA_ADQUIRENTE IS NOT NULL
                                AND A.NFS_FORMA_PAGAMENTO_ID = C.ID),0)*100)/C.VALOR),
                            C.VALOR_LIQUIDO = C.VALOR - COALESCE((
                            SELECT SUM(B.VALOR) AS SUM_TAXA
                            FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                            WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                            AND B.NFS_CONTROLE = A.NFS_CONTROLE
                            AND B.TARIFA_ADQUIRENTE = '1'
                            AND B.TARIFA_ADQUIRENTE IS NOT NULL
                            AND A.NFS_FORMA_PAGAMENTO_ID = C.ID),0)
                                        
                        WHERE C.ID = :NFS_FORMA_PAGAMENTO_ID;
                   END
        
                   IF(:PDV_CFE_FORMA_PAGAMENTO_ID > 0)THEN
                   BEGIN
                        UPDATE TBNFS_FORMA_PAGAMENTO C SET C.VALOR_TAXA = COALESCE((
                            SELECT SUM(B.VALOR) AS SUM_TAXA
                            FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                            WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                            AND B.NFS_CONTROLE = A.NFS_CONTROLE
                            AND B.TARIFA_ADQUIRENTE = '1'
                            AND B.TARIFA_ADQUIRENTE IS NOT NULL
                            AND A.PDV_CFE_FORMA_PAGAMENTO_ID = C.PDV_CFE_FORMA_PAGAMENTO_ID),0),
                            C.PERCENTUAL_TAXA = ((COALESCE((
                                SELECT SUM(B.VALOR) AS SUM_TAXA
                                FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                                WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                                AND B.NFS_CONTROLE = A.NFS_CONTROLE
                                AND B.TARIFA_ADQUIRENTE = '1'
                                AND B.TARIFA_ADQUIRENTE IS NOT NULL
                                AND A.PDV_CFE_FORMA_PAGAMENTO_ID = C.PDV_CFE_FORMA_PAGAMENTO_ID),0)*100)/C.VALOR),
                            C.VALOR_LIQUIDO = C.VALOR - COALESCE((
                            SELECT SUM(B.VALOR) AS SUM_TAXA
                            FROM TBNFS_PARCELAMENTO A, TBCAIXABANCO_LANCAMENTO_REG B
                            WHERE B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE
                            AND B.NFS_CONTROLE = A.NFS_CONTROLE
                            AND B.TARIFA_ADQUIRENTE = '1'
                            AND B.TARIFA_ADQUIRENTE IS NOT NULL
                            AND A.PDV_CFE_FORMA_PAGAMENTO_ID = C.PDV_CFE_FORMA_PAGAMENTO_ID),0)
                        
                            WHERE C.PDV_CFE_FORMA_PAGAMENTO_ID = :PDV_CFE_FORMA_PAGAMENTO_ID;
                   END
              END 
     END
END
^

SET TERM ; ^

