CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM_B9U FOR TBPEDIDO_ITEM
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE GRD1 INTEGER;
DECLARE VARIABLE GRD2 INTEGER;
DECLARE VARIABLE TAM1 VARCHAR(10);
DECLARE VARIABLE TAM2 VARCHAR(10);
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.Produto_Codigo <> NEW.Produto_Codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Prod.'||OLD.Produto_Codigo||'->'||NEW.Produto_Codigo;
       GRD1 = Coalesce((Select first 1 P.GRADE_CODIGO From TbProduto P Where P.Codigo = Old.Produto_Codigo),0);
       GRD2 = Coalesce((Select first 1 P.GRADE_CODIGO From TbProduto P Where P.Codigo = New.Produto_Codigo),0);
       END else
       Begin
       GRD1 = Coalesce((Select first 1 P.GRADE_CODIGO From TbProduto P Where P.Codigo = Old.Produto_Codigo),0);
       GRD2 = :GRD1;
       End
   if (OLD.Quantidade <> NEW.Quantidade or New.Tamanho <> Old.Tamanho) then
       BEGIN
       if (Old.Tamanho > 0 or New.Tamanho > 0) then
           BEGIN
           if (Old.Tamanho <> New.Tamanho or OLD.Produto_Codigo <> NEW.Produto_Codigo) then
               Begin
               TAM1 = Coalesce((Select first 1 Tam_Descricao From SP_TAMANHO_GRADE (:GRD1,Old.Tamanho)),'');
               TAM2 = Coalesce((Select first 1 Tam_Descricao From SP_TAMANHO_GRADE (:GRD2,New.Tamanho)),'');
               End else
               Begin
               TAM1 = Coalesce((Select first 1 Tam_Descricao From SP_TAMANHO_GRADE (:GRD1,Old.Tamanho)),'');
               TAM2 = :TAM1;
               End
           HISTORICO = HISTORICO||' Tam/Qtd.'||:TAM1||'/'||OLD.Quantidade||'->'||:TAM2||'/'||NEW.Quantidade;
           END ELSE
           BEGIN
           HISTORICO = HISTORICO||' Qtd.'||OLD.Quantidade||'->'||NEW.Quantidade;
           END 
       END
   if (OLD.Situacao = 1 and NEW.Situacao = 3) then
       HISTORICO = HISTORICO||' Item Encerrado';
   if (OLD.Situacao = 3 and NEW.Situacao = 1) then
       HISTORICO = HISTORICO||' Encerramento desfeito';

   if (OLD.Data_Sistema <> NEW.Data_Sistema) then
       BEGIN
       HISTORICO = HISTORICO||' Dt.Sist.'||OLD.Data_Sistema||'->'||NEW.Data_Sistema;
       END
   if (OLD.Valor_Desconto<> NEW.Valor_Desconto) then
       BEGIN
       HISTORICO = HISTORICO||' Vr.Desc.'||Cast(OLD.Valor_Desconto as Numeric(15,2))||'->'||Cast(NEW.Valor_Desconto as Numeric(15,2));
       END
   if (OLD.Valor <> NEW.Valor) then
       BEGIN
       HISTORICO = HISTORICO||' Vr.Unit.'||OLD.Valor||'->'||NEW.Valor;
       END
   if (OLD.Valor_Ipi <> NEW.Valor_Ipi or Old.Percentual_Ipi <> New.Percentual_Ipi) then
       BEGIN
       HISTORICO = HISTORICO||' Vr/%Ipi:'||Cast(OLD.Valor_Ipi as Numeric(15,2))||'/'||Cast(OLD.Percentual_Ipi as Numeric(15,2))||'%'
                                   ||'->'||Cast(New.Valor_Ipi as Numeric(15,2))||'/'||Cast(New.Percentual_Ipi as Numeric(15,2))||'%';
       END

   if (OLD.Data_Cliente <> NEW.Data_Cliente) then
       BEGIN
       HISTORICO = HISTORICO||' Dt.Cli.'||OLD.Data_Cliente||'->'||NEW.Data_Cliente;
       END
   if (OLD.Data_Producao <> NEW.Data_Producao) then
       BEGIN
       HISTORICO = HISTORICO||' Dt.Prd.'||OLD.Data_Producao||'->'||NEW.Data_Producao;
       END

   if (OLD.Agp_Dt_Cli <> NEW.Agp_Dt_Cli) then
       BEGIN
       HISTORICO = HISTORICO||' Agp.Dt.Cli.'||OLD.Agp_Dt_Cli||'->'||NEW.Agp_Dt_Cli;
       END
   if (OLD.Agp_Dt_Prd  <> NEW.Agp_Dt_Prd ) then
       BEGIN
       HISTORICO = HISTORICO||' Agp.Dt.Prd .'||OLD.Agp_Dt_Prd ||'->'||NEW.Agp_Dt_Prd ;
       END

   if (OLD.Localizacao_Id<> NEW.Localizacao_Id) then
       BEGIN
       HISTORICO = HISTORICO||' Loc.'||OLD.Localizacao_Id||'->'||NEW.Localizacao_Id;
       END

   if (OLD.Est_Min <> NEW.Est_Min) then
       BEGIN
       HISTORICO = HISTORICO||' Est.Min.'||OLD.Est_Min||'->'||NEW.Est_Min;
       END

   if (OLD.CONTROLE <> NEW.CONTROLE) then
       BEGIN
       HISTORICO = HISTORICO||' Controle'||OLD.CONTROLE||'->'||NEW.CONTROLE;
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPEDIDO', OLD.PEDIDO,
      (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),
       'Item alterado [Seq.'||Old.Sequencia||'] '||:Historico);
       End
end;