CREATE OR ALTER trigger tbcliente_modelo_preco_b03iu for tbcliente_modelo_preco
active before insert or update position 4
AS

DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE COUNT_REGISTROS INTEGER;
DECLARE VARIABLE DESCRICAO_MODELO VARCHAR(60);
DECLARE VARIABLE DESCRICAO_TABELA VARCHAR(100);
DECLARE VARIABLE DESCRICAO_FAMILIA VARCHAR(20);

BEGIN

    /* BUSCA FAMILIA DO MODELO */

    SELECT T.FAMILIA_CODIGO, FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBMODELO T WHERE T.CODIGO = NEW.MODELO_CODIGO INTO :FAMILIA_ID, :DESCRICAO_MODELO;

    IF(:FAMILIA_ID > 0 and coalesce(NEW.TABELA_ID,0) > 0) THEN
    BEGIN
        /* VERIFICA SE A FAMILIA DO MODELO PERTENCE A TABELA DE PRECO SELECIONADA */
        SELECT COUNT(T.FAMILIA_ID) FROM TBTABELA_PRECO_FAMILIA T
        WHERE   T.TABELA_PRECO_ID   = NEW.TABELA_ID
            AND T.FAMILIA_ID        = :FAMILIA_ID
        INTO :COUNT_REGISTROS;

        IF(:COUNT_REGISTROS = 0) THEN
        BEGIN

            /* BUSCA A DESCRICAO DA TABELA */
            SELECT FIRST 1 FN_LPAD(T.ID, 4, '0')||' - '||T.DESCRICAO FROM TBTABELA_PRECO T WHERE T.ID = NEW.TABELA_ID INTO :DESCRICAO_TABELA;

            /* BUSCA A DESCRICAO DA FAMILIA */
            SELECT FIRST 1 FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBFAMILIA T WHERE T.CODIGO = :FAMILIA_ID INTO :DESCRICAO_FAMILIA;

            EXCEPTION "..." 'FAMILIA ' ||coalesce(:DESCRICAO_FAMILIA,'')||' DO MODELO '||coalesce(:DESCRICAO_MODELO,'')||' NAO PERMITIDA PARA A TABELA DE PREÇO '||coalesce(NEW.TABELA_ID,'0')||' - '||coalesce(:DESCRICAO_TABELA,'');

        END
   END

END;