SET TERM ^ ;

CREATE OR ALTER trigger ttbcaixabanco_lanc_reg_b01iu for tbcaixabanco_lancamento_reg
active before insert or update position 0
AS
DECLARE VARIABLE CAIXABANCO_ID INTEGER;
DECLARE VARIABLE DT_LANCAMENTO DATE;

DECLARE VARIABLE DOC INTEGER;
BEGIN
    
    :CAIXABANCO_ID = COALESCE((SELECT FIRST 1 T.CAIXABANCO_CODIGO FROM TBCAIXABANCO_LANCAMENTO T WHERE T.CONTROLE = NEW.CAIXABANCO_CONTROLE), 0);
    :DT_LANCAMENTO = COALESCE((SELECT FIRST 1 T.DATA_LANCAMENTO   FROM TBCAIXABANCO_LANCAMENTO T WHERE T.CONTROLE = NEW.CAIXABANCO_CONTROLE), NULL);


    IF (INSERTING) THEN
    BEGIN

        IF (:CAIXABANCO_ID > 0 AND :DT_LANCAMENTO IS NOT NULL AND COALESCE(NEW.COMPROVANTE, '') <> '') THEN
        BEGIN

            :DOC = COALESCE((SELECT FIRST 1
                                T.NUMERO_CHEQUE
    
                            FROM TBCAIXABANCO_LANCAMENTO_REG A, TBCAIXABANCO_LANCAMENTO T
                            WHERE A.COMPROVANTE = NEW.COMPROVANTE
                            AND A.CAIXABANCO_CONTROLE = T.CONTROLE
                            AND T.CAIXABANCO_CODIGO = :CAIXABANCO_ID
                            AND T.DATA_LANCAMENTO = :DT_LANCAMENTO
                        ), 0);


            IF (:DOC > 0) THEN
            BEGIN
                
                EXCEPTION "..." 'O DOCUMENTO '|| :DOC ||' JA CONTEM O COMPROVANTE '|| NEW.COMPROVANTE ||' VINCULADO EM SEUS LANCAMENTOS. <br><br>DATA: '|| FORMATDATE(:DT_LANCAMENTO) ||' <br>CAIXA/BANCO: '|| FN_LPAD(:CAIXABANCO_ID, 4, '0');

            END
        END

    END ELSE
    IF (UPDATING) THEN
    BEGIN

        IF (:CAIXABANCO_ID > 0 AND :DT_LANCAMENTO IS NOT NULL AND COALESCE(NEW.COMPROVANTE, '') <> '') THEN
        BEGIN

            :DOC = COALESCE((SELECT FIRST 1
                                T.NUMERO_CHEQUE
    
                            FROM TBCAIXABANCO_LANCAMENTO_REG A, TBCAIXABANCO_LANCAMENTO T
                            WHERE A.COMPROVANTE = NEW.COMPROVANTE
                            AND A.CAIXABANCO_CONTROLE = T.CONTROLE
                            AND T.CAIXABANCO_CODIGO = :CAIXABANCO_ID
                            AND T.DATA_LANCAMENTO = :DT_LANCAMENTO
                            AND T.CONTROLE <> NEW.CAIXABANCO_CONTROLE
                        ), 0);


            IF (:DOC > 0) THEN
            BEGIN
                
                EXCEPTION "..." 'O DOCUMENTO '|| :DOC ||' JA CONTEM O COMPROVANTE '|| NEW.COMPROVANTE ||' VINCULADO EM SEUS LANCAMENTOS. <br><br>DATA: '|| FORMATDATE(:DT_LANCAMENTO) ||' <br>CAIXA/BANCO: '|| FN_LPAD(:CAIXABANCO_ID, 4, '0');

            END
        END    

    END

END
^

SET TERM ; ^

