CREATE OR ALTER TRIGGER TTBFAMILIA_B04I FOR TBFAMILIA
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Reg.Incluído';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.CODIGO, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_B05I FOR TBFAMILIA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  if (NEW.CODIGO is null) THEN
    NEW.CODIGO = gen_id(GTBFAMILIA,1);
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_B9U FOR TBFAMILIA
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
       END
   if (OLD.DESCRICAO_AMIGAVEL <> NEW.DESCRICAO_AMIGAVEL) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.AMIG.'||OLD.DESCRICAO_AMIGAVEL||'->'||NEW.DESCRICAO_AMIGAVEL;
       END
   if (OLD.DESCRICAO_RESUMIDA <> NEW.DESCRICAO_RESUMIDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' AGRUP.CUSTOS:'||OLD.DESCRICAO_RESUMIDA||'->'||NEW.DESCRICAO_RESUMIDA;
       END
   if (OLD.OPERACAO_REQUISICAO <> NEW.OPERACAO_REQUISICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' OPER.REQ.'||OLD.OPERACAO_REQUISICAO||'->'||NEW.OPERACAO_REQUISICAO;
       END
   IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
       BEGIN
       HISTORICO = HISTORICO||' UM.'||OLD.UNIDADEMEDIDA_SIGLA||'->'||NEW.UNIDADEMEDIDA_SIGLA;
       END
   IF (OLD.UNIDADEMEDIDA_ALTERNATIVO <> NEW.UNIDADEMEDIDA_ALTERNATIVO) THEN
       BEGIN
       HISTORICO = HISTORICO||' UM. ALT.'||OLD.UNIDADEMEDIDA_ALTERNATIVO||'->'||NEW.UNIDADEMEDIDA_ALTERNATIVO;
       END
   IF (OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LOC.PADR.'||OLD.LOCALIZACAO_CODIGO||'->'||NEW.LOCALIZACAO_CODIGO;
       END
   IF (OLD.TIPOPRODUTO_CODIGO <> NEW.TIPOPRODUTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO:'||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
       END
   IF (OLD.NCM_CODIGO <> NEW.NCM_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' NCM:'||OLD.NCM_CODIGO||'->'||NEW.NCM_CODIGO;
       END
   IF (OLD.CEST <> NEW.CEST) THEN
       BEGIN
       HISTORICO = HISTORICO||' CEST:'||OLD.CEST||'->'||NEW.CEST;
       END
   IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.COMP.'||OLD.HABILITA_COMPRA||'->'||NEW.HABILITA_COMPRA;
       END
   IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.VEN.'||OLD.HABILITA_VENDA||'->'||NEW.HABILITA_VENDA;
       END
   IF (OLD.QTD_MIN_FRT_CIF <> NEW.QTD_MIN_FRT_CIF) THEN
       BEGIN
       HISTORICO = HISTORICO||' QTD.MIN.CIF '||OLD.QTD_MIN_FRT_CIF||'->'||NEW.QTD_MIN_FRT_CIF;
       END
   if (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) then
       BEGIN
       HISTORICO = HISTORICO||' CLASS.'||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO;
       END
   IF (OLD.CONTROLE_PATRIMONIO <> NEW.CONTROLE_PATRIMONIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.PATRIM.'||OLD.CONTROLE_PATRIMONIO||'->'||NEW.CONTROLE_PATRIMONIO;
       END
   IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.INVENT.'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
       END
   IF (OLD.CONTROLE_REVISAO <> NEW.CONTROLE_REVISAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.REV.'||OLD.CONTROLE_REVISAO||'->'||NEW.CONTROLE_REVISAO;
       END
   IF (OLD.UNIDADEMEDIDA_FCI <> NEW.UNIDADEMEDIDA_FCI) THEN
       BEGIN
       HISTORICO = HISTORICO||' UM.FCI:'||OLD.UNIDADEMEDIDA_FCI||'->'||NEW.UNIDADEMEDIDA_FCI;
       END
   IF (OLD.INSUMO_MP_FCI <> NEW.INSUMO_MP_FCI) THEN
       BEGIN
       HISTORICO = HISTORICO||' COMPOE FCI:'||OLD.INSUMO_MP_FCI||'->'||NEW.INSUMO_MP_FCI;
       END
   IF (OLD.MASCARA_PRODUTO <> NEW.MASCARA_PRODUTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' MASCARA PROD:'||OLD.MASCARA_PRODUTO||'->'||NEW.MASCARA_PRODUTO;
       END
   IF (OLD.BLOQUEIA_DUPLICIDADE <> NEW.BLOQUEIA_DUPLICIDADE) THEN
       BEGIN
       HISTORICO = HISTORICO||' BLQ.DUPL.PROD.'||OLD.BLOQUEIA_DUPLICIDADE||'->'||NEW.BLOQUEIA_DUPLICIDADE;
       END
   IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
       BEGIN
       HISTORICO = HISTORICO||' TOLER.P/COMPRA:'||OLD.TOLERANCIA||'->'||NEW.TOLERANCIA;
       END
   IF (OLD.TOLERANCIA_VENDA <> NEW.TOLERANCIA_VENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' TOLER.P/VENDA'||OLD.TOLERANCIA_VENDA||'->'||NEW.TOLERANCIA_VENDA;
       END
   IF (OLD.NIVEL <> NEW.NIVEL) THEN
       BEGIN
       HISTORICO = HISTORICO||' ORD.PROC.PROD:'||OLD.NIVEL||'->'||NEW.NIVEL;
       END
   IF (OLD.NIVEL_OC <> NEW.NIVEL_OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' NIV.AUT.OC:'||OLD.NIVEL_OC||'->'||NEW.NIVEL_OC;
       END
   IF (OLD.DENSIDADE_ESPESSURA <> NEW.DENSIDADE_ESPESSURA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.DENS/ESP.'||OLD.DENSIDADE_ESPESSURA||'->'||NEW.DENSIDADE_ESPESSURA;
       END
   IF (OLD.CONTROLE_ORCAMENTARIO <> NEW.CONTROLE_ORCAMENTARIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.ORCAM.'||OLD.CONTROLE_ORCAMENTARIO||'->'||NEW.CONTROLE_ORCAMENTARIO;
       END
   IF (OLD.CORES_BASICAS <> NEW.CORES_BASICAS) THEN
       BEGIN
       HISTORICO = HISTORICO||' COR BAS.'||OLD.CORES_BASICAS||'->'||NEW.CORES_BASICAS;
       END
   IF (OLD.CORES_SOBENCOMENDA <> NEW.CORES_SOBENCOMENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' COR S.ENC.'||OLD.CORES_SOBENCOMENDA||'->'||NEW.CORES_SOBENCOMENDA;
       END
   IF (OLD.SOBRA_TIPO <> NEW.SOBRA_TIPO) THEN
       BEGIN
       HISTORICO = HISTORICO||' SOB.TIPO '||OLD.SOBRA_TIPO||'->'||NEW.SOBRA_TIPO;
       END
   IF (OLD.TOLERANCIA_TIPO <> NEW.TOLERANCIA_TIPO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TP.TOL.CONS.'||OLD.TOLERANCIA_TIPO||'->'||NEW.TOLERANCIA_TIPO;
       END
   IF (OLD.TOLERANCIA_QTD <> NEW.TOLERANCIA_QTD) THEN
       BEGIN
       HISTORICO = HISTORICO||' QTD.TOL.CONS.'||OLD.TOLERANCIA_QTD||'->'||NEW.TOLERANCIA_QTD;
       END
   IF (OLD.TOLERANCIA_PERC <> NEW.TOLERANCIA_PERC) THEN
       BEGIN
       HISTORICO = HISTORICO||' %TOL.CONS.'||OLD.TOLERANCIA_PERC||'->'||NEW.TOLERANCIA_PERC;
       END

   IF (OLD.CONTROLE_TALAO <> NEW.CONTROLE_TALAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CTR.TAL.'||OLD.CONTROLE_TALAO||'->'||NEW.CONTROLE_TALAO;
       END
   IF (OLD.CONTROLE_ALOCACAO <> NEW.CONTROLE_ALOCACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CTR.ALOC.'||OLD.CONTROLE_ALOCACAO||'->'||NEW.CONTROLE_ALOCACAO;
       END
   IF (OLD.GGF <> NEW.GGF) THEN
       BEGIN
       HISTORICO = HISTORICO||' GGF:'||OLD.GGF||'->'||NEW.GGF;
       END
   IF (OLD.FEEF <> NEW.FEEF) THEN
       BEGIN
       HISTORICO = HISTORICO||' FEEF: '||OLD.FEEF||'->'||NEW.FEEF;
       END
   IF (OLD.CONTROLE_PECA <> NEW.CONTROLE_PECA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CONTR.EST.P/PECA:'||OLD.CONTROLE_PECA||'->'||NEW.CONTROLE_PECA;
       END
   IF (OLD.COMPOE_CUSTO <> NEW.COMPOE_CUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COMP.CUSTO:'||OLD.COMPOE_CUSTO||'->'||NEW.COMPOE_CUSTO;
       END
   IF (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' %COMISS:'||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO;
       END
   IF (OLD.SEQ_COMPOSICAO_CUSTO <> NEW.SEQ_COMPOSICAO_CUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' SEQ.PROD.FINS CUSTO:'||OLD.SEQ_COMPOSICAO_CUSTO||'->'||NEW.SEQ_COMPOSICAO_CUSTO;
       END

   if (OLD.STATUS <> NEW.STATUS) then
       BEGIN
       if (NEW.STATUS = '0') then
           HISTORICO = HISTORICO||' Status Inativado';
       if (NEW.STATUS = '1') then
           HISTORICO = HISTORICO||' Status Ativado';
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBFAMILIA', OLD.CODIGO,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
       :Historico);
       End
End;

CREATE TRIGGER TTBFAMILIA_B03D FOR TBFAMILIA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Reg.excluído';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', OLD.CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_B01I FOR TBFAMILIA_FICHA
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.FAMILIA_CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Reg. contábil/fiscal incluído: Estab. '||fn_lpad(NEW.ESTABELECIMENTO_CODIGO,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_B02U FOR TBFAMILIA_FICHA
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';
    
    IF (OLD.NG_TIPOPRDSRV <> NEW.NG_TIPOPRDSRV) THEN
    BEGIN
        HISTORICO = HISTORICO||' Tp.Prd/Srv.: '||OLD.NG_TIPOPRDSRV||' -> '||NEW.NG_TIPOPRDSRV;
    END
    IF (OLD.NG_SITUACAO <> NEW.NG_SITUACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Tp.Sped: '||OLD.NG_SITUACAO||' -> '||NEW.NG_SITUACAO;
    END
    IF (OLD.UNID_DIEF <> NEW.UNID_DIEF) THEN
    BEGIN
        HISTORICO = HISTORICO||' UM Dief: '||OLD.UNID_DIEF||' -> '||NEW.UNID_DIEF;
    END
    IF (OLD.CONTA_CONTABIL <> new.CONTA_CONTABIL) THEN
    BEGIN
        HISTORICO = HISTORICO||' Cta.Cont.: '||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
    END
    IF (OLD.CST_ORIGEM <> NEW.CST_ORIGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' CST Orig: '||OLD.CST_ORIGEM||' -> '||NEW.CST_ORIGEM;
    END 
    IF (OLD.ALIQUOTA_ST <> NEW.ALIQUOTA_ST) THEN
    BEGIN
        HISTORICO = HISTORICO||' %Sub.Trib.: '||OLD.ALIQUOTA_ST||' -> '||NEW.ALIQUOTA_ST;
    END
    IF (OLD.FCI_REVENDEDOR <> NEW.FCI_REVENDEDOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' FCI Rev.: '||OLD.FCI_REVENDEDOR||' -> '||NEW.FCI_REVENDEDOR;
    END
    IF (OLD.FCI_INDUSTRIALIZADOR <> NEW.FCI_INDUSTRIALIZADOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' FCI Ind.: '||OLD.FCI_INDUSTRIALIZADOR||' -> '||NEW.FCI_INDUSTRIALIZADOR;
    END  
    IF (OLD.FCI_OBRIGA <> NEW.FCI_OBRIGA) THEN
    BEGIN
        HISTORICO = HISTORICO||' FCI Obr.: '||OLD.FCI_OBRIGA||' -> '||NEW.FCI_OBRIGA;
    END
    IF (OLD.CST <> NEW.CST) THEN
    BEGIN
        HISTORICO = HISTORICO||' CST: '||OLD.CST||' -> '||NEW.CST;
    END
    IF (OLD.CSOSN <> NEW.CSOSN) THEN
    BEGIN
        HISTORICO = HISTORICO||' CSOSN: '||OLD.CSOSN||' -> '||NEW.CSOSN;
    END
    IF (OLD.ECF_ICMS_ST <> NEW.ECF_ICMS_ST) THEN
    BEGIN
        HISTORICO = HISTORICO||' St.Icms: '||OLD.ECF_ICMS_ST||' -> '||NEW.ECF_ICMS_ST;
    END 
    IF (OLD.IAT <> NEW.IAT) THEN
    BEGIN
        HISTORICO = HISTORICO||' IAT: '||OLD.IAT||' -> '||NEW.IAT;
    END
    IF (OLD.IPPT <> NEW.IPPT) THEN
    BEGIN
        HISTORICO = HISTORICO||' IPPT: '||OLD.IPPT||' -> '||NEW.IPPT;
    END
    IF (OLD.ECF_P_ST <> NEW.ECF_P_ST) THEN
    BEGIN
        HISTORICO = HISTORICO||' P.St.: '||OLD.ECF_P_ST||' -> '||NEW.ECF_P_ST;
    END
    IF (OLD.ECF_TOT_PARCIAL <> NEW.ECF_TOT_PARCIAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' Tot.Parcial: '||OLD.ECF_TOT_PARCIAL||' -> '||NEW.ECF_TOT_PARCIAL;
    END
    IF (OLD.TAXA_COFINS <> NEW.TAXA_COFINS) THEN
    BEGIN
        HISTORICO = HISTORICO||' %Cof.: '||OLD.TAXA_COFINS||' -> '||NEW.TAXA_COFINS;
    END
    IF (OLD.TAXA_PIS <> NEW.TAXA_PIS) THEN
    BEGIN
        HISTORICO = HISTORICO||' %Pis.: '||OLD.TAXA_PIS||' -> '||NEW.TAXA_PIS;
    END    
    IF (OLD.TAXA_ICMS <> NEW.TAXA_ICMS) THEN
    BEGIN
        HISTORICO = HISTORICO||' %Icms: '||OLD.TAXA_ICMS||' -> '||NEW.TAXA_ICMS;
    END
    IF (OLD.TAXA_ISSQN <> NEW.TAXA_ISSQN) THEN
    BEGIN
        HISTORICO = HISTORICO||' %IssQn: '||OLD.TAXA_ISSQN||' -> '||NEW.TAXA_ISSQN;
    END 
    IF (OLD.TAXA_IPI <> NEW.TAXA_IPI) THEN
    BEGIN
        HISTORICO = HISTORICO||' %Ipi: '||OLD.TAXA_IPI||' -> '||NEW.TAXA_IPI;
    END
    IF (OLD.LOCALIZACAO_REVISAO <> NEW.LOCALIZACAO_REVISAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Loc.Rev.: '||OLD.LOCALIZACAO_REVISAO||' -> '||NEW.LOCALIZACAO_REVISAO;
    END  
    IF (OLD.LOCALIZACAO_ESTRAGADO <> NEW.LOCALIZACAO_ESTRAGADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Loc.Est.: '||OLD.LOCALIZACAO_ESTRAGADO||' -> '||NEW.LOCALIZACAO_ESTRAGADO;
    END
    IF (OLD.LOCALIZACAO_SOBRA <> NEW.LOCALIZACAO_SOBRA) THEN
    BEGIN
        HISTORICO = HISTORICO||' Loc.Sob.: '||OLD.LOCALIZACAO_SOBRA||' -> '||NEW.LOCALIZACAO_SOBRA;
    END
    IF (OLD.LOCALIZACAO_PROCESSO <> NEW.LOCALIZACAO_PROCESSO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Loc.Proc.: '||OLD.LOCALIZACAO_PROCESSO||' -> '||NEW.LOCALIZACAO_PROCESSO;
    END   
    IF (OLD.LOCALIZACAO_AMOSTRA <> NEW.LOCALIZACAO_AMOSTRA) THEN
    BEGIN
        HISTORICO = HISTORICO||' Loc.Amost.: '||OLD.LOCALIZACAO_AMOSTRA||' -> '||NEW.LOCALIZACAO_AMOSTRA;
    END
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Reg. alterado: Estab. '||FN_LPAD(NEW.ESTABELECIMENTO_CODIGO,4,'0')||' '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_B01D FOR TBFAMILIA_FICHA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.FAMILIA_CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Registro contábil/fiscal excluído. Estab. '||FN_LPAD(OLD.ESTABELECIMENTO_CODIGO,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', OLD.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_MODELO_B02I FOR TBFAMILIA_FICHA_MODELO
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.FAMILIA_CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Parâm.Ficha Técnica incluído: '||fn_lpad(NEW.TIPO_CODIGO,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_MODELO_B02U FOR TBFAMILIA_FICHA_MODELO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';
    
    IF (OLD.TIPO_DESCRICAO <> NEW.TIPO_DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Desc.: '||OLD.TIPO_DESCRICAO||' -> '||NEW.TIPO_DESCRICAO;
    END
    IF (OLD.QUANTIDADE <> NEW.QUANTIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' Fórm.: '||OLD.QUANTIDADE||' -> '||NEW.QUANTIDADE;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Parâm.Ficha Técnica alterado: Parâm. '||FN_LPAD(NEW.TIPO_CODIGO,4,'0')||' '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FICHA_MODELO_B02D FOR TBFAMILIA_FICHA_MODELO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.FAMILIA_CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Parâm.Ficha Técnica excluído. '||FN_LPAD(OLD.TIPO_CODIGO,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', OLD.FAMILIA_CODIGO, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_MODELO_ALOC_B01I FOR TBFAMILIA_MODELO_ALOCACAO
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.FAMILIA_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Família vinculada na alocação de MP: '||fn_lpad(NEW.FAMILIA_MODELO_ID,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_MODELO_ALOC_B01U FOR TBFAMILIA_MODELO_ALOCACAO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE CONSUMO_OLD VARCHAR(500);
DECLARE VARIABLE CONSUMO_NEW VARCHAR(500);
DECLARE VARIABLE ALOCACAO_OLD VARCHAR(500);
DECLARE VARIABLE ALOCACAO_NEW VARCHAR(500);
DECLARE VARIABLE ACUMUL_OLD VARCHAR(500);
DECLARE VARIABLE ACUMUL_NEW VARCHAR(500);
BEGIN

    HISTORICO = '';
    
    IF (OLD.GP_ORIGEM <> NEW.GP_ORIGEM) THEN
    BEGIN
        IF(NEW.GP_ORIGEM = 0) THEN
        BEGIN
            HISTORICO = HISTORICO||'GP Origem excluido!';
        END
        ELSE
        BEGIN
            HISTORICO = HISTORICO||' GP Origem: '||FN_LPAD(OLD.GP_ORIGEM,4,'0')||' -> '||FN_LPAD(NEW.GP_ORIGEM,4,'0');
        END
    END

    IF (OLD.CONSUMO <> NEW.CONSUMO) THEN
    BEGIN
        CONSUMO_OLD = CASE
        WHEN OLD.CONSUMO = '1'
        THEN 'Normal'
        WHEN OLD.CONSUMO = '2'
        THEN 'Especial'
        ELSE ''
        END;
        CONSUMO_NEW = CASE
        WHEN NEW.CONSUMO = '1'
        THEN 'Normal'
        WHEN NEW.CONSUMO = '2'
        THEN 'Especial'
        ELSE ''
        END;
        HISTORICO = HISTORICO||', Tp. Cons.: '||CONSUMO_OLD||' -> '||CONSUMO_NEW;
    END 

    IF (OLD.ALOCACAO <> NEW.ALOCACAO) THEN
    BEGIN
        ALOCACAO_OLD = CASE
        WHEN OLD.ALOCACAO = '1'
        THEN 'Sim'
        WHEN OLD.ALOCACAO = '0'
        THEN 'Não'
        ELSE ''
        END;
        ALOCACAO_NEW = CASE
        WHEN NEW.ALOCACAO = '1'
        THEN 'Sim'
        WHEN NEW.ALOCACAO = '0'
        THEN 'Não'
        ELSE ''
        END;
        HISTORICO = HISTORICO||',  Aloc.MP.Ped: '||ALOCACAO_OLD||' -> '||ALOCACAO_NEW;
    END

    IF (OLD.ACUMULA_PROJECAO <> NEW.ACUMULA_PROJECAO) THEN
    BEGIN
        ACUMUL_OLD = CASE
        WHEN OLD.ACUMULA_PROJECAO = '1'
        THEN 'Sim'
        WHEN OLD.ACUMULA_PROJECAO = '0'
        THEN 'Não'
        ELSE ''
        END;
        ACUMUL_NEW = CASE
        WHEN NEW.ACUMULA_PROJECAO = '1'
        THEN 'Sim'
        WHEN NEW.ACUMULA_PROJECAO = '0'
        THEN 'Não'
        ELSE ''
        END;
        HISTORICO = HISTORICO||', Acumula Proj: '||ACUMUL_OLD||' -> '||ACUMUL_NEW;
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'PARÂMETRO DE FAMÍLIA VINCULADA ALTERADO: FAM.'||FN_LPAD(NEW.FAMILIA_MODELO_ID,4,'0')||' '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', NEW.FAMILIA_ID, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_MODELO_ALOC_B01D FOR TBFAMILIA_MODELO_ALOCACAO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.FAMILIA_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Família vinculada excluída: '||FN_LPAD(OLD.FAMILIA_MODELO_ID,4,'0');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA', OLD.FAMILIA_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_FCP_B01D FOR TBFAMILIA_FCP
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FCP UF:'||OLD.UF||', NCM:'||OLD.NCM_CODIGO||', ALIQ:'||OLD.ALIQUOTA_FCP||' Excluido';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA',OLD.FAMILIA_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_FCP_B01U FOR TBFAMILIA_FCP
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ALIQUOTA_FCP <> NEW.ALIQUOTA_FCP) THEN
    BEGIN
        HISTORICO = HISTORICO||', ALIQ: '||OLD.ALIQUOTA_FCP||' -> '||NEW.ALIQUOTA_FCP;
    END 

    IF(OLD.FAMILIA_ID <> NEW.FAMILIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||', FAM: '||OLD.FAMILIA_ID||' -> '||NEW.FAMILIA_ID;
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'FCP UF:'||OLD.UF||', NCM:'||OLD.NCM_CODIGO||', ALIQ:'||OLD.ALIQUOTA_FCP||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA',NEW.FAMILIA_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBFAMILIA_FCP_B02I FOR TBFAMILIA_FCP
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FCP UF:'||NEW.UF||', NCM:'||NEW.NCM_CODIGO||', ALIQ:'||NEW.ALIQUOTA_FCP||' Incluido';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA',NEW.FAMILIA_ID, HISTORICO);
    END
END;

CREATE TRIGGER TTBFAMILIA_FCP_B03I FOR TBFAMILIA_FCP
ACTIVE BEFORE INSERT POSITION 2
AS
DECLARE VARIABLE ID INTEGER;
begin
 ID = COALESCE((SELECT FIRST 1 A.ID FROM TBFAMILIA_FCP A WHERE A.UF = NEW.UF AND A.NCM_CODIGO = NEW.NCM_CODIGO AND A.FAMILIA_ID = NEW.FAMILIA_ID),0);
 IF(ID > 0) THEN
 BEGIN
    EXCEPTION "..." ' JA EXISTE FCP REGISTRADO NA FAMILIA: '||NEW.FAMILIA_ID||'P/ UF:'||NEW.UF||'E NCM: '||NEW.NCM_CODIGO||' INCLUSÃO CANCELADA!';
 END
end;










