CREATE OR ALTER trigger tbmodelo_preco_b04iu for tbmodelo_preco
active before insert or update position 4
AS

DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE COUNT_REGISTROS INTEGER;
DECLARE VARIABLE DESCRICAO_MODELO VARCHAR(50);
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) 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 ' ||:DESCRICAO_FAMILIA||' DO MODELO '||:DESCRICAO_MODELO||' NAO PERMITIDA PARA A TABELA DE PREÇO '||:DESCRICAO_TABELA;

            END
            

        END

END;

COMMENT ON TRIGGER TBMODELO_PRECO_B04IU IS 'VERIFICAR SE A FAMILIA DO MODELO ESTÁ CONTIDA NA TABELA DE PREÇO DO MODELO';


CREATE OR ALTER TRIGGER TBPRODUTO_PRECO_B04IU FOR TBPRODUTO_PRECO
ACTIVE BEFORE INSERT OR UPDATE POSITION 4
AS

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

BEGIN

    /* BUSCA FAMILIA DO PRODUTO */

    SELECT T.FAMILIA_CODIGO, FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBPRODUTO T WHERE T.CODIGO = NEW.PRODUTO_CODIGO INTO :FAMILIA_ID, :DESCRICAO_PRODUTO;

    IF(:FAMILIA_ID > 0) THEN
        BEGIN
            /* VERIFICA SE A FAMILIA DO PRODUTO 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 ' ||:DESCRICAO_FAMILIA||' DO PRODUTO '||:DESCRICAO_PRODUTO||' NAO PERMITIDA PARA A TABELA DE PREÇO '||:DESCRICAO_TABELA;

            END
            

        END

END;

COMMENT ON TRIGGER TBPRODUTO_PRECO_B04IU IS 'VERIFICAR SE A FAMILIA DO PRODUTO ESTÁ CONTIDA NA TABELA DE PREÇO DO MODELO';