SET TERM ^ ;

CREATE OR ALTER trigger ttbgrupo_produto_b02u for tbgrupo_produto
active before update position 3
AS
DECLARE VARIABLE PRODUTO_ID INTEGER; 
BEGIN

    /* ALTERA OS PRODUTOS VINCULADOS AO GRUPO */
    IF (OLD.FAMILIA_ID <> NEW.FAMILIA_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.FAMILIA_CODIGO = NEW.FAMILIA_ID,
                P.FAMILIA_ALTERNATIVA = NEW.FAMILIA_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.DESCRICAO = NEW.DESCRICAO||' '||COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = P.COR_CODIGO),'') 
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.TIPOPRODUTO_ID <> NEW.TIPOPRODUTO_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.TIPOPRODUTO_CODIGO = NEW.TIPOPRODUTO_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
 
    END

    IF (OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.LOCALIZACAO_CODIGO = NEW.LOCALIZACAO_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.GRADE_ID <> NEW.GRADE_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.GRADE_CODIGO = NEW.GRADE_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.UNIDADEMEDIDA_SIGLA = NEW.UNIDADEMEDIDA_SIGLA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.NCM_CODIGO <> NEW.NCM_CODIGO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.NCM_CODIGO = NEW.NCM_CODIGO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.HABILITA_COMPRA = NEW.HABILITA_COMPRA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.HABILITA_VENDA = NEW.HABILITA_VENDA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.TOLERANCIA = NEW.TOLERANCIA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.SEGURANCA = NEW.SEGURANCA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.LARGURA <> NEW.LARGURA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.LARGURA = NEW.LARGURA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.COMPRIMENTO <> NEW.COMPRIMENTO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.COMPRIMENTO = NEW.COMPRIMENTO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.DESCRICAO_ETIQUETA = NEW.DESCRICAO_ETIQUETA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.INVENTARIO = NEW.INVENTARIO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.PROGRAMAR_SEM_ESTOQUE = NEW.PROGRAMAR_SEM_ESTOQUE
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.GERAR_OC = NEW.GERAR_OC
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.FEEF <>  NEW.FEEF) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.FEEF = NEW.FEEF
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
    END

    IF (OLD.CONTA_CONTABIL IS DISTINCT FROM NEW.CONTA_CONTABIL) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.CONTA_CONTABIL = NEW.CONTA_CONTABIL
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
     END


      /* Verifica os produtos vinculados ao grupo */
    FOR
        SELECT
            P.CODIGO
        FROM TBPRODUTO P
        WHERE P.GRUPO_PRODUTO_ID = OLD.ID
    INTO
        :PRODUTO_ID
    DO
    BEGIN
         

        IF (OLD.CUSTOUNITARIO_MEDIO <> NEW.CUSTOUNITARIO_MEDIO or
            OLD.IMPOSTO_CUSTO <> NEW.IMPOSTO_CUSTO or
            OLD.ICMS <> NEW.ICMS or
            OLD.IPI <> NEW.IPI or
            OLD.FRETE <> NEW.FRETE or
            OLD.FINANCEIRO <> NEW.FINANCEIRO or
            OLD.T01 <> NEW.T01 or OLD.T02 <> NEW.T02 or
            OLD.T03 <> NEW.T03 or OLD.T04 <> NEW.T04 or
            OLD.T05 <> NEW.T05 or OLD.T06 <> NEW.T06 or
            OLD.T07 <> NEW.T07 or OLD.T08 <> NEW.T08 or
            OLD.T09 <> NEW.T09 or OLD.T10 <> NEW.T10 or
            OLD.T11 <> NEW.T11 or OLD.T12 <> NEW.T12 or
            OLD.T13 <> NEW.T13 or OLD.T14 <> NEW.T14 or
            OLD.T15 <> NEW.T15 or OLD.T16 <> NEW.T16 or
            OLD.T17 <> NEW.T17 or OLD.T18 <> NEW.T18 or
            OLD.T19 <> NEW.T19 or OLD.T20 <> NEW.T20) THEN
        BEGIN
            UPDATE TBPRODUTO_CONTABIL C SET
            CUSTOUNITARIO_MEDIO = NEW.CUSTOUNITARIO_MEDIO,
            IMPOSTO_CUSTO = NEW.IMPOSTO_CUSTO ,
            ICMS = NEW.ICMS ,
            IPI = NEW.IPI ,
            FRETE = NEW.FRETE ,
            FINANCEIRO = NEW.FINANCEIRO ,
            T01 = NEW.T01 , T02 = NEW.T02 , T03 = NEW.T03 , T04 = NEW.T04 ,
            T05 = NEW.T05 , T06 = NEW.T06 , T07 = NEW.T07 , T08 = NEW.T08 ,
            T09 = NEW.T09 , T10 = NEW.T10 , T11 = NEW.T11 , T12 = NEW.T12 ,
            T13 = NEW.T13 , T14 = NEW.T14 , T15 = NEW.T15 , T16 = NEW.T16 ,
            T17 = NEW.T17 , T18 = NEW.T18 , T19 = NEW.T19 , T20 = NEW.T20
            WHERE C.PRODUTO_CODIGO = :PRODUTO_ID;
        END

        /*********************************************************************************/

        IF (OLD.CUBAGEM_ALTURA <> NEW.CUBAGEM_ALTURA) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CUBAGEM_ALTURA = NEW.CUBAGEM_ALTURA
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END
    
        IF (OLD.CUBAGEM_LARGURA <> NEW.CUBAGEM_LARGURA) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CUBAGEM_LARGURA = NEW.CUBAGEM_LARGURA
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
    
        END
    
        IF (OLD.CUBAGEM_COMPRIMENTO <> NEW.CUBAGEM_COMPRIMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CUBAGEM_COMPRIMENTO = NEW.CUBAGEM_COMPRIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
    
        END
    
        IF (OLD.CONTROLE_BENEFICIAMENTO <> NEW.CONTROLE_BENEFICIAMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CONTROLE_BENEFICIAMENTO = NEW.CONTROLE_BENEFICIAMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID; 
        END

        IF (OLD.RENDIMENTO <> NEW.RENDIMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.RENDIMENTO = NEW.RENDIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
     
        END
    
        IF (OLD.LARGURA <> NEW.LARGURA) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.LARGURA = NEW.LARGURA
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
     
        END

        IF (OLD.COMPRIMENTO <> NEW.COMPRIMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.COMPRIMENTO = NEW.COMPRIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END
        
        IF (OLD.COMPOSICAO <> NEW.COMPOSICAO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.COMPOSICAO = NEW.COMPOSICAO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END

        IF (OLD.PESOLIQUIDO <> NEW.PESOLIQUIDO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.PESOLIQUIDO = NEW.PESOLIQUIDO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END

 
    END

END
^

SET TERM ; ^

