SET TERM ^ ;

CREATE OR ALTER trigger tbpdv_caixa_b04iu for tbpdv_caixa
active before insert or update position 0
AS
DECLARE VARIABLE PDV_CAIXA_ID INTEGER;
DECLARE VARIABLE CHECK_CAIXA_BANCO INTEGER;
DECLARE VARIABLE CAIXA_EM_USO INTEGER;
BEGIN
    :CHECK_CAIXA_BANCO = 0;

    IF(INSERTING) THEN
    BEGIN
        :CHECK_CAIXA_BANCO = 1;
    END ELSE
    BEGIN
        IF(NEW.CAIXABANCO_ID IS DISTINCT FROM OLD.CAIXABANCO_ID) THEN
        BEGIN
            :CHECK_CAIXA_BANCO = 1;
        END
    END

    IF(:CHECK_CAIXA_BANCO = 1) THEN
    BEGIN
        FOR
            SELECT
                C.CAIXABANCO_ID
            FROM TBPDV T
            INNER JOIN TBPDV_CAIXA C ON C.PDV_ID = T.ID
            WHERE C.PDV_ID = NEW.PDV_ID
        INTO
            :PDV_CAIXA_ID
        DO
        BEGIN
            IF(:PDV_CAIXA_ID = NEW.CAIXABANCO_ID) THEN
            BEGIN
                EXCEPTION "..." 'CAIXA/BANCO JA CADASTRADO PARA ESSE PDV';
            END 
        END
    END


    /**************************************************************************/

    :CAIXA_EM_USO = COALESCE((SELECT FIRST 1 C.PDV_ID FROM TBPDV_CAIXA C WHERE C.PDV_ID <> NEW.PDV_ID AND C.CAIXABANCO_ID = NEW.CAIXABANCO_ID), 0);

    IF (:CAIXA_EM_USO > 0) THEN
    BEGIN
        EXCEPTION "..." 'CAIXA/BANCO JA CADASTRADO NO PDV '|| COALESCE((SELECT FIRST 1 FN_LPAD(T.ID, 4, '0')||' - '||T.DESCRICAO FROM TBPDV T WHERE T.ID = :CAIXA_EM_USO), '') ||'';
    END

END
^

SET TERM ; ^

