SET TERM ^ ;

CREATE OR ALTER trigger ttbautorizacao_a01i for tbautorizacao
active after insert position 0
AS
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE VALOR VARCHAR(500);
DECLARE VARIABLE AUTORIZADORES VARCHAR(5000);
BEGIN

    FOR
        SELECT
            T.TABELA_ID AS USUARIO_ID,
            COALESCE(T.VALOR, '') AS VALOR
        
        FROM TBPARAMETRO_DETALHE T
        INNER JOIN TBPARAMETRO A ON A.ID = T.PARAMETRO_ID
        WHERE A.CODIGO = 'AUTORIZADORES_NIVEL'
        
        ORDER BY T.VALOR

    INTO
        :USUARIO_ID,
        :VALOR

    DO
    BEGIN

        IF (COALESCE(:VALOR, '') <> '' AND FN_ISNUMBER(:VALOR) = TRUE) THEN
        BEGIN

            UPDATE OR INSERT INTO TBAUTORIZACAO_AUTORIZADOR (AUTORIZACAO_ID, USUARIO_ID, NIVEL)
                VALUES (NEW.ID, :USUARIO_ID, :VALOR)
                MATCHING (AUTORIZACAO_ID, USUARIO_ID);

        END

    END


    :AUTORIZADORES = COALESCE((SELECT LIST(X.USUARIO_ID||'|'||X.NIVEL) FROM TBAUTORIZACAO_AUTORIZADOR X WHERE X.AUTORIZACAO_ID = NEW.ID), '');

    IF (COALESCE(:AUTORIZADORES, '') = '') THEN
    BEGIN

        UPDATE TBAUTORIZACAO
            SET STATUS = 1
            WHERE ID = NEW.ID;

    END

END
^

SET TERM ; ^

