SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBPDV_CAIXA_B0I FOR TBPDV_CAIXA
ACTIVE BEFORE INSERT POSITION 2
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
  BEGIN
    NEW.ID = GEN_ID(GTBPDV_CAIXA,1);
  END
END^

CREATE OR ALTER TRIGGER TBPDV_CAIXA_B04IU FOR TBPDV_CAIXA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE CAIXA_EM_USO INTEGER;
BEGIN
    IF(INSERTING AND NEW.CAIXABANCO_ID > 0)THEN
    BEGIN
    
        :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 AND C.CAIXABANCO_ID > 0 AND C.PDV_ID > 0), 0);
    
        IF (:CAIXA_EM_USO > 0) THEN
        BEGIN
            EXCEPTION "..." '<H4>ATENÇÃO</H4>Caixa já foi cadastrado em outro PDV <br>('|| COALESCE((SELECT FIRST 1 FN_LPAD(T.id, 4,0)||' - '||T.DESCRICAO FROM TBPDV T WHERE T.ID = :CAIXA_EM_USO), '')||'). <BR> Operação cancelada!';
        END

    END

    IF(UPDATING AND (NEW.CAIXABANCO_ID > 0 AND NEW.CAIXABANCO_ID <> OLD.CAIXABANCO_ID))THEN
    BEGIN
    
        :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 AND C.CAIXABANCO_ID > 0 AND C.PDV_ID > 0), 0);
    
        IF (:CAIXA_EM_USO > 0) THEN
        BEGIN
            EXCEPTION "..." '<H4>ATENÇÃO</H4>Caixa já foi cadastrado em outro PDV <br>('|| COALESCE((SELECT FIRST 1 FN_LPAD(T.id, 4,0)||' - '||T.DESCRICAO FROM TBPDV T WHERE T.ID = :CAIXA_EM_USO), '')||'). <BR> Operação cancelada!';
        END

    END

END^

SET TERM ; ^

