SET TERM ^ ;

CREATE OR ALTER trigger ttbgrupo_produto_opcont_b01iud for tbgrupo_produto_opcontabil
active before insert or update or delete position 0
AS
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE PERMISSAO VARCHAR(500);

DECLARE VARIABLE ID INTEGER;
BEGIN

    USUARIO_ID = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBUSUARIO A WHERE A.CODIGO = FN_CURRENT_USER_ID()), 0);
    PERMISSAO  = COALESCE((SELECT FIRST 1 B.VALOR_EXT FROM TBCONTROLE_USUARIO B WHERE B.USUARIO_ID = :USUARIO_ID AND B.ID = 244), '0');

    IF (PERMISSAO <> '1') THEN
    BEGIN
        EXCEPTION "..." '(p244) USUÁRIO SEM PERMISSÃO PARA INCLUIR/ALTERAR/EXCLUIR REGISTROS DESSE CADASTRO!';
    END

    IF (INSERTING OR UPDATING) THEN
    BEGIN

        ID = COALESCE((SELECT FIRST 1 C.ID FROM TBGRUPO_PRODUTO_OPCONTABIL C WHERE C.GRUPO_PRODUTO_ID = NEW.GRUPO_PRODUTO_ID AND C.OPERACAO_CODIGO = NEW.OPERACAO_CODIGO AND C.CCUSTO_CODIGO = NEW.CCUSTO_CODIGO AND C.CONTA_CONTABIL = NEW.CONTA_CONTABIL AND C.ID <> NEW.ID), 0);
    
        IF (ID > 0) THEN
        BEGIN
            EXCEPTION "..." 'OPERAÇÃO:'||NEW.OPERACAO_CODIGO||', C.CUSTO'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC')||', C.CONTÁBIL:'||FN_MASK_V2(NEW.CONTA_CONTABIL, 'CONTA')||' JÁ REGISTRADAS PARA ESTE GRUPO DE PRODUTO, OPERAÇÃO CANCELADA!';
        END

    END

END
^

SET TERM ; ^

