CREATE OR ALTER trigger tbmodelo_cor_ai0_01 for tbmodelo_cor
active after insert position 0
AS
DECLARE VARIABLE Cod  Integer;
DECLARE VARIABLE Mask VarChar(200);
DECLARE VARIABLE UM   VarChar(3);
DECLARE VARIABLE Fam  Integer;
DECLARE VARIABLE Fam_Alt Integer;
DECLARE VARIABLE Grd  Integer;
DECLARE VARIABLE Loc  Integer;
DECLARE VARIABLE Tip  Integer;
DECLARE VARIABLE Ncm  VarChar(10);
DECLARE VARIABLE Lin  Integer;
DECLARE VARIABLE HCom Char(1);
DECLARE VARIABLE HVen Char(1);
DECLARE VARIABLE dMod VarChar(50);
DECLARE VARIABLE dFam VarChar(20);
DECLARE VARIABLE dCor VarChar(20);
DECLARE VARIABLE Prd  Integer;
Begin
For
Select M.tipoproduto_codigo, M.familia_codigo, m.familia_alternativa, M.linha_codigo, M.grade_codigo, F.localizacao_codigo,
       IIF(char_length(Coalesce(M.UnidadeMedida_Sigla,''))>0,M.UnidadeMedida_Sigla,F.UnidadeMedida_Sigla),
       F.ncm_codigo, F.habilita_compra, F.habilita_venda, F.mascara_produto,
       M.Descricao, F.Descricao,
      (Select First 1 C.Descricao From TbCor C Where C.Codigo = New.Cor_Id),
       Coalesce((Select First 1 P.Codigo From TbProduto P
                  Where P.Modelo_Codigo = New.Modelo_Id
                    and P.Cor_Codigo = New.Cor_Id),0)
From TbModelo M, TbFamilia F
Where M.Codigo = New.Modelo_Id
  and M.Familia_Alternativa = F.Codigo

Into :Tip,:Fam,:Fam_Alt,:Lin,:Grd,:Loc,:UM,:Ncm,:HCom,:HVen,:Mask,:dMod, :dFam, :dCor, :Prd
Do
    begin
     if (:Prd = 0) then
          Begin
          MASK = Replace(:MASK,'#FAMILIA_ID',fn_lPad(:FAM_ALT,4,'0'));
          MASK = Replace(:MASK,'#FAMILIA_DESCRICAO',:DFAM);
          MASK = Replace(:MASK,'#MODELO_ID',fn_lPad(NEW.MODELO_ID,4,'0'));
          MASK = Replace(:MASK,'#MODELO_DESCRICAO',:DMOD);
          MASK = Replace(:MASK,'#COR_ID',fn_lPad(NEW.COR_ID,4,'0'));
          MASK = Replace(:MASK,'#COR_DESCRICAO',dCor);
          COD  = (Select GEN_ID(gtbproduto,1) FROM RDB$DATABASE);
    
    --      IF ( FN_CURRENT_USER_ID() <> 293 ) THEN
    --      BEGIN
              INSERT INTO TBPRODUTO (
              CODIGO,DESCRICAO,CODIGOANTIGO,UNIDADEMEDIDA_SIGLA,FAMILIA_CODIGO,FAMILIA_ALTERNATIVA,GRADE_CODIGO,
              LOCALIZACAO_CODIGO,TIPOPRODUTO_CODIGO,NCM_CODIGO,EAN,MODELO_CODIGO,COR_CODIGO,
              LINHA_CODIGO,STATUS,USUARIO_CODIGO,DATA,HABILITA_COMPRA,HABILITA_VENDA)
              VALUES (:COD,:MASK,0,:UM,:FAM,:FAM_ALT,:GRD,:LOC,:TIP,:NCM,'',
              NEW.MODELO_ID,NEW.COR_ID,:LIN,COALESCE(NEW.STATUS_PRODUTO,'1'),0,Current_Date,:HCOM,:HVEN);
    --      END
    
           INSERT INTO TBHISTORICO (
           TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ('TBPRODUTO', :COD,
          (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),
           'Produto incluido via inclusao de Modelo/Cor (Mod.'||NEW.MODELO_ID||'/Cor '||NEW.COR_ID||')');
    
           INSERT INTO TBHISTORICO (
           TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ('TBMODELO', NEW.MODELO_ID,
          (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),
           'Cor incluida: '||NEW.COR_ID||' - '||:dCor);
          End
      end
End;

CREATE OR ALTER trigger ttmodelo_b1u_01 for tbmodelo
active before update position 1
AS
DECLARE VARIABLE MASCARA1 VARCHAR(500);
DECLARE VARIABLE MASCARA2 VARCHAR(500);
DECLARE VARIABLE Cor_Id Integer;
DECLARE VARIABLE Cor_Descricao VARCHAR(50);
DECLARE VARIABLE Familia_Descricao VARCHAR(50);
Begin

   --Verifica se familia ou descrição do modelo foi alterada
   if (OLD.familia_codigo <> NEW.familia_codigo or
       OLD.familia_alternativa <> NEW.familia_alternativa or
       OLD.descricao <> NEW.descricao) then
       BEGIN

       Mascara1 = Coalesce((Select First 1 F.Mascara_Produto From TbFamilia F Where F.Codigo = New.Familia_Codigo),'');

       --Se o campo <Mascara> está definido no cadastro da família executa esse bloco de instruções
       if (Trim(:Mascara1) <> '') then
           Begin
           FAMILIA_DESCRICAO = Coalesce((Select First 1 F.Descricao From TbFamilia F Where F.Codigo = New.Familia_Alternativa),'');
           --Abre cadastro de cores do modelo e atualiza os produtos por cor de modelo
           For Select MC.COR_ID, C.DESCRICAO
                 From TbModelo_Cor MC, TbCor C
                Where MC.Modelo_Id = New.Codigo
                  and MC.Cor_Id = C.Codigo
           Into :Cor_Id, :Cor_Descricao
           Do
             Begin
               if (:Cor_Id > 0) then
                   Begin
                    Mascara2 = :Mascara1;
                    Mascara2 = Replace(:Mascara2,'#FAMILIA_ID',fn_lPad(New.Familia_Alternativa,4,'0'));
                    Mascara2 = Replace(:Mascara2,'#FAMILIA_DESCRICAO',:Familia_Descricao);
                    Mascara2 = Replace(:Mascara2,'#MODELO_ID',fn_lPad(New.Codigo,4,'0'));
                    Mascara2 = Replace(:Mascara2,'#MODELO_DESCRICAO',New.Descricao);
                    Mascara2 = Replace(:Mascara2,'#COR_ID',fn_lPad(:Cor_Id,4,'0'));
                    Mascara2 = Replace(:Mascara2,'#COR_DESCRICAO',:Cor_Descricao);
                
                    Update TbProduto Set
                    tipoproduto_codigo = NEW.tipoproduto_codigo,
                    familia_codigo = NEW.familia_codigo,
                    familia_alternativa = NEW.familia_alternativa,
                    linha_codigo = NEW.linha_codigo,
                    unidademedida_sigla = NEW.unidademedida_sigla,
                    descricao = :Mascara2,
                    grade_codigo = NEW.grade_codigo
                    Where Modelo_Codigo = New.Codigo
                      and Cor_Codigo = :Cor_Id;
                   End
             End
           End else
           Begin
           --Se o campo <Mascara> não estiver definido no cadastro da família executa esse bloco de instruções
           if (OLD.familia_codigo <> NEW.familia_codigo  or
               OLD.familia_alternativa <> NEW.familia_alternativa) Then
               Begin
                   Update TbProduto Set
                   tipoproduto_codigo = NEW.tipoproduto_codigo,
                   familia_codigo = NEW.familia_codigo,
                   familia_alternativa = NEW.familia_alternativa,
                   linha_codigo = NEW.linha_codigo,
                   unidademedida_sigla = NEW.unidademedida_sigla,
                   grade_codigo = NEW.grade_codigo
                   Where Modelo_Codigo = New.Codigo;
               End
           End
       End else
   --Se alteração no modelo for nos campos Tipo,Linha,Und ou Grade executa esse bloco de instruções
   if (OLD.tipoproduto_codigo <> NEW.tipoproduto_codigo or
       OLD.linha_codigo <> NEW.linha_codigo or
       OLD.unidademedida_sigla <> NEW.unidademedida_sigla or
       OLD.grade_codigo <> NEW.grade_codigo) then
       BEGIN
           Update TbProduto Set
           tipoproduto_codigo = NEW.tipoproduto_codigo,
           linha_codigo = NEW.linha_codigo,
           unidademedida_sigla = NEW.unidademedida_sigla,
           grade_codigo = NEW.grade_codigo 
           Where Modelo_Codigo = New.Codigo;
       END

End;

CREATE OR ALTER trigger ttmodelo_b9u for tbmodelo
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.tipoproduto_codigo <> NEW.tipoproduto_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Tipo '||OLD.tipoproduto_codigo||'->'||NEW.tipoproduto_codigo;
       END
   if (OLD.familia_codigo <> NEW.familia_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Fam.Prd.'||OLD.familia_codigo||'->'||NEW.familia_codigo;
       END
   if (OLD.familia_alternativa <> NEW.familia_alternativa) then
       BEGIN
       HISTORICO = HISTORICO||' Fam.Com.'||OLD.familia_alternativa||'->'||NEW.familia_alternativa;
       END
   if (OLD.linha_codigo <> NEW.linha_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Lin.'||OLD.linha_codigo||'->'||NEW.linha_codigo;
       END
   if (OLD.unidademedida_sigla <> NEW.unidademedida_sigla) then
       BEGIN
       HISTORICO = HISTORICO||' UM.'||OLD.unidademedida_sigla||'->'||NEW.unidademedida_sigla;
       END
   if (OLD.descricao <> NEW.descricao) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.'||OLD.descricao||'->'||NEW.descricao;
       END
   if (OLD.descricao_nf <> NEW.descricao_nf) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.Cpl.'||OLD.descricao_nf||'->'||NEW.descricao_nf;
       END
       
   if (OLD.descricao_comercial <> NEW.descricao_comercial) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.Com.'||OLD.descricao_comercial||'->'||NEW.descricao_comercial;
       END
   if (OLD.matriz_codigo <> NEW.matriz_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Mtz.'||OLD.matriz_codigo||'->'||NEW.matriz_codigo;
       END
   if (OLD.grade_codigo <> NEW.grade_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Grd.'||OLD.grade_codigo||'->'||NEW.grade_codigo;
       END
   if (OLD.classificacao <> NEW.classificacao) then
       BEGIN
       HISTORICO = HISTORICO||' Class.'||OLD.classificacao||'->'||NEW.classificacao;
       END
   if (OLD.compra_produz <> NEW.compra_produz) then
       BEGIN
       HISTORICO = HISTORICO||' Form.Entr.Est.'||OLD.compra_produz||'->'||NEW.compra_produz;
       END
   if (OLD.Densidade <> NEW.Densidade) then
       BEGIN
       HISTORICO = HISTORICO||' Dens.'||OLD.Densidade||'->'||NEW.Densidade;
       END
   if (OLD.Espessura<> NEW.Espessura) then
       BEGIN
       HISTORICO = HISTORICO||' Esp.'||OLD.Espessura||'->'||NEW.Espessura;
       END
   if (OLD.Tipo_Tag <> NEW.Tipo_Tag) then
       BEGIN
       HISTORICO = HISTORICO||' Tp.Tag '||OLD.Tipo_Tag||'->'||NEW.Tipo_Tag;
       END
   if (OLD.Acrescimo <> NEW.Acrescimo) then
       BEGIN
       HISTORICO = HISTORICO||' Acresc.'||OLD.Acrescimo||'->'||NEW.Acrescimo;
       END
   if (OLD.Prioridade <> NEW.Prioridade) then
       BEGIN
       HISTORICO = HISTORICO||' Prior.Prod.'||OLD.Prioridade||'->'||NEW.Prioridade;
       END
   if (OLD.Horas_Bloqueio <> NEW.Horas_Bloqueio) then
       BEGIN
       HISTORICO = HISTORICO||' Hr.Blq.'||OLD.Horas_Bloqueio||'->'||NEW.Horas_Bloqueio;
       END
   if (OLD.Gerar_Remessa <> NEW.Gerar_Remessa) then
       BEGIN
       HISTORICO = HISTORICO||' Hab.Ger.Rem.'||OLD.Gerar_Remessa||'->'||NEW.Gerar_Remessa;
       END 
   if (OLD.habilita_ecommerce <> NEW.habilita_ecommerce) then
       BEGIN
       HISTORICO = HISTORICO||' Hab.Ecom.'||OLD.habilita_ecommerce||'->'||NEW.habilita_ecommerce;
       END
   if (OLD.CATEGORIA_ID <> NEW.CATEGORIA_ID) then
       BEGIN
       HISTORICO = HISTORICO||' Cat:'||OLD.CATEGORIA_ID||'->'||NEW.CATEGORIA_ID;
       END
   if (OLD.Modelo_Pai <> NEW.Modelo_Pai) then
       BEGIN
       HISTORICO = HISTORICO||' Modelo Pai:'||OLD.Modelo_Pai||'->'||NEW.Modelo_Pai;
       END

   if (OLD.t01 <> NEW.t01) then BEGIN HISTORICO = HISTORICO||' T01 '||OLD.t01||'->'||NEW.t01; END
   if (OLD.t02 <> NEW.t02) then BEGIN HISTORICO = HISTORICO||' T02 '||OLD.t02||'->'||NEW.t02; END
   if (OLD.t03 <> NEW.t03) then BEGIN HISTORICO = HISTORICO||' T03 '||OLD.t03||'->'||NEW.t03; END
   if (OLD.t04 <> NEW.t04) then BEGIN HISTORICO = HISTORICO||' T04 '||OLD.t04||'->'||NEW.t04; END
   if (OLD.t05 <> NEW.t05) then BEGIN HISTORICO = HISTORICO||' T05 '||OLD.t05||'->'||NEW.t05; END
   if (OLD.t06 <> NEW.t06) then BEGIN HISTORICO = HISTORICO||' T06 '||OLD.t06||'->'||NEW.t06; END
   if (OLD.t07 <> NEW.t07) then BEGIN HISTORICO = HISTORICO||' T07 '||OLD.t07||'->'||NEW.t07; END
   if (OLD.t08 <> NEW.t08) then BEGIN HISTORICO = HISTORICO||' T08 '||OLD.t08||'->'||NEW.t08; END
   if (OLD.t09 <> NEW.t09) then BEGIN HISTORICO = HISTORICO||' T09 '||OLD.t09||'->'||NEW.t09; END
   if (OLD.t10 <> NEW.t10) then BEGIN HISTORICO = HISTORICO||' T10 '||OLD.t10||'->'||NEW.t10; END
   if (OLD.t11 <> NEW.t11) then BEGIN HISTORICO = HISTORICO||' T11 '||OLD.t11||'->'||NEW.t11; END
   if (OLD.t12 <> NEW.t12) then BEGIN HISTORICO = HISTORICO||' T12 '||OLD.t12||'->'||NEW.t12; END
   if (OLD.t13 <> NEW.t13) then BEGIN HISTORICO = HISTORICO||' T13 '||OLD.t13||'->'||NEW.t13; END
   if (OLD.t14 <> NEW.t14) then BEGIN HISTORICO = HISTORICO||' T14 '||OLD.t14||'->'||NEW.t14; END
   if (OLD.t15 <> NEW.t15) then BEGIN HISTORICO = HISTORICO||' T15 '||OLD.t15||'->'||NEW.t15; END
   if (OLD.t16 <> NEW.t16) then BEGIN HISTORICO = HISTORICO||' T16 '||OLD.t16||'->'||NEW.t16; END
   if (OLD.t17 <> NEW.t17) then BEGIN HISTORICO = HISTORICO||' T17 '||OLD.t17||'->'||NEW.t17; END
   if (OLD.t18 <> NEW.t18) then BEGIN HISTORICO = HISTORICO||' T18 '||OLD.t18||'->'||NEW.t18; END
   if (OLD.t19 <> NEW.t19) then BEGIN HISTORICO = HISTORICO||' T19 '||OLD.t19||'->'||NEW.t19; END
   if (OLD.t11 <> NEW.t20) then BEGIN HISTORICO = HISTORICO||' T20 '||OLD.t20||'->'||NEW.t20; END

   if (OLD.STATUS <> NEW.STATUS) then
       BEGIN
       if (NEW.STATUS = '0') then
           begin
           HISTORICO = HISTORICO||' Status Inativado';
           new.data_inativacao = CURRENT_DATE;
           end
       if (NEW.STATUS = '1') then
           begin
           HISTORICO = HISTORICO||' Status Ativado';
           new.data_ativacao = CURRENT_DATE;
           end
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBMODELO', 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;



