SET TERM ^ ;

CREATE OR ALTER procedure SPU_TALAO_AGRUPAMENTO (
    REMESSA_ID integer,
    TALAO integer,
    OPERACAO integer)
as
declare variable saldo_alocar_est integer;
declare variable saldo_alocar_bax integer;
declare variable TABELA_ID integer;
declare variable TAB_ITEM_ID integer;
declare variable QUANT numeric(15,4);
declare variable SALDO numeric(15,4);
declare variable TIPO char(1);
declare variable ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable ALOCACAO_ID integer;
declare variable TALAO_ID integer;
declare variable QUANTIDADE_PRODUCAO integer;
declare variable QUANTIDADE_ALOCACAO integer;
declare variable SALDO_PRODUCAO integer;
declare variable QTD_BAIXAR numeric(15,4);
declare variable SALDO2 numeric(15,4);
declare variable SALDO_BAIXA numeric(15,4);
declare variable QTD_ESTOQUE numeric(15,4);
declare variable AGRUP_PED_ID integer;
declare variable AGRUPAMENTO_ID integer;
declare variable AGRUP_UP_ID integer;
declare variable NOVO_ID integer;
begin

    select
        P.QUANTIDADE_PRODUCAO,
        p.controle,
        p.estabelecimento_codigo,
        p.localizacao_codigo,
        p.tamanho,
        P.produto_codigo,
        coalesce((select i.quantidade from tbestoque_transacao_item i where i.controle = p.estoque_id),0) as ESTOQUE
    from tbpedido_item_processado p
    where p.controle = :TALAO
    and p.remessa = :REMESSA_ID
        into :QUANTIDADE_PRODUCAO, :TALAO_ID, :ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :TAMANHO, :PRODUTO_ID, :QTD_ESTOQUE;

    if(QUANTIDADE_PRODUCAO > QTD_ESTOQUE and QTD_ESTOQUE > 0)then
    begin
        QUANTIDADE_PRODUCAO = QTD_ESTOQUE;
    end

    TALAO_ID = coalesce(TALAO_ID,0);

    if(TALAO_ID = 0)then
    begin
       Exception "..." 'TALAO NAO ENCONTRADO, REMESSA_ID:'||:REMESSA_ID||', TALAO:'||:TALAO||'';
    end

    SALDO_PRODUCAO = QUANTIDADE_PRODUCAO;

    --produzir
    if (OPERACAO = 1) then
    Begin
    
        FOR
            select
                agrup_ped_id,
                agrupamento_id,
                TABELA_ID,
                TAB_ITEM_ID,
                SALDO, 
                QUANTIDADE,
                TIPO,
                ID
            from(
                Select
                    
                    agrup_ped_id,
                    agrupamento_id,
                    TABELA_ID,
                    TAB_ITEM_ID,
                    SALDO, 
                    QUANTIDADE,
                    TIPO,
                    ID,
                    IIF(TABELA_ID > 0, 2147483647 - TABELA_ID,0) ORDEM
                From TBREMESSA_ITEM_ALOCACAO a
                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                  AND REMESSA = :REMESSA_ID
                  AND TALAO   = :TALAO
                  AND SALDO   > 0
                  and a.tipo = 'P'

              ) order by ORDEM DESC

        INTO :agrup_ped_id, :agrupamento_id, :TABELA_ID, :TAB_ITEM_ID, :SALDO, :QUANTIDADE_ALOCACAO, :TIPO, :ID
        DO Begin
        
            IF(SALDO_PRODUCAO > SALDO)THEN
            BEGIN
                QTD_BAIXAR = SALDO;
            END ELSE
            BEGIN
                QTD_BAIXAR = SALDO_PRODUCAO;
            END

            SALDO_PRODUCAO = SALDO_PRODUCAO - QTD_BAIXAR;

            IF(QTD_BAIXAR > 0)THEN
            BEGIN

                if (:TABELA_ID > 0) then
                Begin
                    saldo_alocar_bax = QTD_BAIXAR;

                    saldo_alocar_est = coalesce((select
                                                coalesce(a.quantidade,0) - coalesce(a.qtd_est,0)
                                            from tbpedido_item a
                                            where a.pedido = :TABELA_ID
                                            and a.controle = :TAB_ITEM_ID),0);

                    if(saldo_alocar_est < saldo_alocar_bax)then
                    begin
                        saldo_alocar_bax = saldo_alocar_est;
                    end

                    if(saldo_alocar_bax > 0)then
                    begin
                        Insert into TBESTOQUE_DETALHE_ALOCACAO (
                            Estabelecimento_id,Tabela_id,Tab_item_id,Tipo,
                            Localizacao_id, Produto_id, Tamanho, Quantidade,
                            Saldo, Alocacao_Id) values (:ESTABELECIMENTO_ID, :TABELA_ID,
                            :TAB_ITEM_ID, :Tipo, :LOCALIZACAO_ID, :PRODUTO_ID,
                            :TAMANHO, :saldo_alocar_bax, :saldo_alocar_bax, :ID);
                    end
                End

                if((:SALDO - :QTD_BAIXAR) = 0)then
                begin
                    Update TBREMESSA_ITEM_ALOCACAO Set QTD_BAIXA = :QTD_BAIXAR, SALDO_BAIXA = 0 /*SALDO - :QTD_BAIXAR*/, SALDO = 0
                    Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                        and REMESSA = :REMESSA_ID and TALAO = :TALAO
                        and ID = :ID;
                end else
                begin

                    Update TBREMESSA_ITEM_ALOCACAO Set QUANTIDADE = QUANTIDADE - (:SALDO - :QTD_BAIXAR), QTD_BAIXA = :QTD_BAIXAR, SALDO_BAIXA = 0, SALDO = 0
                    Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                        and REMESSA = :REMESSA_ID and TALAO = :TALAO
                        and ID = :ID;

                    NOVO_ID = GEN_ID(Gtbremessa_item_alocacao,1);

                    INSERT INTO TBREMESSA_ITEM_ALOCACAO (
                        ID,
                        ESTABELECIMENTO_ID,
                        LOCALIZACAO_ID,
                        TABELA_ID,
                        TAB_ITEM_ID,
                        REMESSA,
                        TALAO,
                        PRODUTO_ID,
                        TAMANHO,
                        QUANTIDADE,
                        TIPO,
                        SALDO,
                        STATUS,
                        AGRUPAMENTO_ID,
                        AGRUP_PED_ID,
                        DATAHORA,
                        TAB_ITEM_ID_OLD,
                        USUARIO,
                        TEMPO,
                        QTD_BAIXA,
                        SALDO_BAIXA,
                        TIPO_REMESSA,
                        ORIGEM_PRODUTO_ID
                    ) SELECT
                        :NOVO_ID AS ID,
                        ESTABELECIMENTO_ID,
                        LOCALIZACAO_ID,
                        0 TABELA_ID,
                        0 TAB_ITEM_ID,
                        REMESSA,
                        TALAO,
                        PRODUTO_ID,
                        TAMANHO,
                        (:SALDO - :QTD_BAIXAR) AS QUANTIDADE,
                        'R' TIPO,
                        (:SALDO - :QTD_BAIXAR) AS SALDO,
                        STATUS,
                        AGRUPAMENTO_ID,
                        0 AGRUP_PED_ID,
                        DATAHORA,
                        TAB_ITEM_ID_OLD,
                        USUARIO,
                        TEMPO,
                        0 AS QTD_BAIXA,
                        0 SALDO_BAIXA,
                        '22600',
                        ORIGEM_PRODUTO_ID
                    FROM TBREMESSA_ITEM_ALOCACAO WHERE ID = :ID;

                    --ENCERRAR QTD NAO PRODUZIDA
                    UPDATE TBREMESSA_ITEM_ALOCACAO SET ENCERRADO = 1 WHERE ID = :NOVO_ID;

                    if(Agrup_Ped_Id > 0)then
                    begin
                        agrup_up_id = coalesce((select first 1 AGRUP_UP_ID from TBAGRUPAMENTO_CARGA_SKU_UP WHERE TIPO = 2 AND AGRUPAMENTO_ID = :agrupamento_id AND AGRUP_PED_ID = :id),0);
                        Execute PROCEDURE SPU_DESALOCA_AGRUP_PEDIDO_UP (:ESTABELECIMENTO_ID,:Agrupamento_Id,:Agrup_Ped_Id, :agrup_up_id, (:SALDO - :QTD_BAIXAR));
                    end
                end

            END ELSE
            BEGIN
                Update TBREMESSA_ITEM_ALOCACAO Set TABELA_ID = 0, TAB_ITEM_ID = 0, QTD_BAIXA = SALDO, SALDO_BAIXA = 0, SALDO = 0, TIPO = 'R', AGRUP_PED_ID = 0
                Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                    and REMESSA = :REMESSA_ID and TALAO = :TALAO
                    and ID = :ID;

                --ENCERRAR QTD NAO PRODUZIDA
                UPDATE TBREMESSA_ITEM_ALOCACAO SET ENCERRADO = 1 WHERE ID = :ID;
           END
        
        END
    End

    --desproduzir
    if (OPERACAO = 2) then
    Begin

        FOR
            Select
                coalesce(SALDO_BAIXA,0) AS SALDO_BAIXA,
                coalesce(QTD_BAIXA,0) AS QTD_BAIXA,
                TABELA_ID,
                TAB_ITEM_ID,
                SALDO,
                QUANTIDADE,
                TIPO,
                ID
            From TBREMESSA_ITEM_ALOCACAO
            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
              AND REMESSA = :REMESSA_ID
              AND TALAO   = :TALAO
              AND coalesce(ENCERRADO,0) = 0
            INTO :SALDO_BAIXA, :QTD_BAIXAR, :TABELA_ID, :TAB_ITEM_ID, :SALDO, :QUANTIDADE_ALOCACAO, :TIPO, :ID
        DO Begin

            SALDO2      = 0;
            QUANT       = 0;
            ALOCACAO_ID = 0;

            select
                l.id,
                Quantidade,
                Saldo
            from TBESTOQUE_DETALHE_ALOCACAO l
            where Estabelecimento_id = :ESTABELECIMENTO_ID
            and Tabela_id = :TABELA_ID
            and Tab_item_id = :TAB_ITEM_ID
            and Tipo = 'P'
            and Localizacao_id = :LOCALIZACAO_ID
            and PRODUTO_ID = :PRODUTO_ID
            and Tamanho = :TAMANHO
            and Alocacao_Id = :ID
                into :ALOCACAO_ID, :QUANT, :SALDO2;
            
            if (:ALOCACAO_ID > 0 and :SALDO2 > 0 AND :TABELA_ID > 0) then
            Begin

                Delete From TBESTOQUE_DETALHE_ALOCACAO
                 where Estabelecimento_id = :ESTABELECIMENTO_ID
                    and Tabela_id = :TABELA_ID
                    and Tab_item_id = :TAB_ITEM_ID
                    and Tipo = 'P'
                    and Localizacao_id = :LOCALIZACAO_ID
                    and PRODUTO_ID = :PRODUTO_ID
                    and Tamanho = :TAMANHO
                    and Alocacao_Id = :ID;

                Update TBREMESSA_ITEM_ALOCACAO Set SALDO = :SALDO2, QUANTIDADE = :SALDO2, QTD_BAIXA = 0, SALDO_BAIXA = 0
                  Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                    and REMESSA = :REMESSA_ID and TALAO = :TALAO
                    and ID = :ID;

                IF((:QTD_BAIXAR + :SALDO_BAIXA) > :SALDO2)THEN
                BEGIN
                    INSERT INTO TBREMESSA_ITEM_ALOCACAO (
                        ID,
                        ESTABELECIMENTO_ID,
                        LOCALIZACAO_ID,
                        TABELA_ID,
                        TAB_ITEM_ID,
                        REMESSA,
                        TALAO,
                        PRODUTO_ID,
                        TAMANHO,
                        QUANTIDADE,
                        TIPO,
                        SALDO,
                        STATUS,
                        AGRUPAMENTO_ID,
                        AGRUP_PED_ID,
                        DATAHORA,
                        TAB_ITEM_ID_OLD,
                        USUARIO,
                        TEMPO,
                        QTD_BAIXA,
                        SALDO_BAIXA,
                        TIPO_REMESSA,
                        ORIGEM_PRODUTO_ID
                    ) SELECT
                        GEN_ID(Gtbremessa_item_alocacao,1),
                        ESTABELECIMENTO_ID,
                        LOCALIZACAO_ID,
                        0 TABELA_ID,
                        0 TAB_ITEM_ID,
                        REMESSA,
                        TALAO,
                        PRODUTO_ID,
                        TAMANHO,
                        (:QTD_BAIXAR + :SALDO_BAIXA) - :SALDO2 AS QUANTIDADE,
                        'R' TIPO,
                        (:QTD_BAIXAR + :SALDO_BAIXA) - :SALDO2 AS SALDO,
                        STATUS,
                        AGRUPAMENTO_ID,
                        AGRUP_PED_ID,
                        DATAHORA,
                        TAB_ITEM_ID_OLD,
                        USUARIO,
                        TEMPO,
                        0 QTD_BAIXA,
                        0 SALDO_BAIXA,
                        '22600',
                        ORIGEM_PRODUTO_ID
                    FROM TBREMESSA_ITEM_ALOCACAO WHERE ID = :ID;

                END

            End else
            begin
                if (:ID > 0) then
                Begin
                     Update TBREMESSA_ITEM_ALOCACAO Set TIPO = 'R', SALDO = (QTD_BAIXA + SALDO_BAIXA), SALDO_BAIXA = 0, QTD_BAIXA = 0, TABELA_ID = 0, TAB_ITEM_ID = 0
                      Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                        and REMESSA = :REMESSA_ID and TALAO = :TALAO
                        and ID = :ID;
                End
            End
        
        END

        --DESZENCERRAR QTD NAO PRODUZIDA
        FOR
            Select
                coalesce(SALDO_BAIXA,0) AS SALDO_BAIXA,
                coalesce(QTD_BAIXA,0) AS QTD_BAIXA,
                TABELA_ID,
                TAB_ITEM_ID,
                SALDO,
                QUANTIDADE,
                TIPO,
                ID
            From TBREMESSA_ITEM_ALOCACAO
            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
              AND REMESSA = :REMESSA_ID
              AND TALAO   = :TALAO
              AND coalesce(ENCERRADO,0) = 1
            INTO :SALDO_BAIXA, :QTD_BAIXAR, :TABELA_ID, :TAB_ITEM_ID, :SALDO, :QUANTIDADE_ALOCACAO, :TIPO, :ID
        DO Begin
           UPDATE TBREMESSA_ITEM_ALOCACAO SET ENCERRADO = 0 WHERE ID = :ID;
        END

    End


    --encerrar
    if (OPERACAO = 3) then
    Begin

        Exception "..." 'TAL??O N??O PODE SER ENCERRADO';

        FOR
            Select
                TABELA_ID,
                TAB_ITEM_ID,
                SALDO,
                QUANTIDADE,
                TIPO,
                ID
            From TBREMESSA_ITEM_ALOCACAO
            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
              AND REMESSA = :REMESSA_ID
              AND TALAO = :TALAO
              AND SALDO > 0
        INTO :TABELA_ID, :TAB_ITEM_ID, :SALDO, :QUANTIDADE_ALOCACAO, :TIPO, :ID
        DO Begin
           if (:TABELA_ID > 0) then
           Begin
               --Exception "..." 'TAL??O N??O PODE SER ENCERRADO, H?? ITENS DE PEDIDO ALOCADOS A ELE. PEDIDO: '||:TABELA_ID||'';
                if (:ID > 0) then
                Begin
                     DELETE FROM TBREMESSA_ITEM_ALOCACAO
                      Where ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                        and REMESSA = :REMESSA_ID and TALAO = :TALAO
                        and ID = :ID;
                End
           End
        End
    End

end
^

SET TERM ; ^

COMMENT ON PARAMETER SPU_TALAO_AGRUPAMENTO.OPERACAO IS
'1 - produzir, 2 - desproduzir, 3 - encerrar';

SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_b0u_01 for tbpedido_item
active before update position 0
AS
DECLARE VARIABLE PROD INTEGER;
BEGIN
  if (OLD.SITUACAO = 2 and New.Situacao = 3) Then
      BEGIN
        Exception "..." 'PEDIDO:'||new.pedido||', ENCERRAMENTO DO ITEM NÃO PERMITIDO, ITEM JÁ FOI FATURADO. PRODUTO: '||OLD.PRODUTO_CODIGO||
        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END
  if (OLD.VALOR <> New.VALOR and Old.Situacao > 1) Then
      BEGIN
        Exception "..." 'PEDIDO:'||new.pedido||', ALTERAÇÃO DO VALOR NÃO PERMITIDO, ITEM JÁ FOI FATURADO/ENCERRADO. PRODUTO: '||OLD.PRODUTO_CODIGO||
        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

  if (New.QTD_AGP < 0) Then
      BEGIN
        Exception "..." 'PEDIDO:'||new.pedido||', SALDO AGRUPADO NÃO PODE SER NEGATIVO. PRODUTO: '||OLD.PRODUTO_CODIGO||
        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

  if (New.QTD_EST < 0) Then
      BEGIN
        Exception "..." 'PEDIDO:'||new.pedido||', SALDO ALOCADO NO ESTOQUE NÃO PODE SER NEGATIVO. PRODUTO: '||OLD.PRODUTO_CODIGO||
        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

  if (New.QTD_REM < 0) Then
      BEGIN
        Exception "..." 'PEDIDO:'||new.pedido||', SALDO ALOCADO DE TALÕES NÃO PODE SER NEGATIVO. PRODUTO: '||OLD.PRODUTO_CODIGO||
        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbremessa_item_alocacao_b1u_02 for tbremessa_item_alocacao
active before update position 3
AS
declare variable HISTORICO VARCHAR(500);
declare variable agrup_up_id integer;
begin

    HISTORICO = '';

  if (Old.Agrupamento_Id > 0 and Old.Agrup_Ped_Id > 0 and Old.Quantidade > New.Quantidade) then
      Begin

          if(new.tipo_remessa <> '22600')then
          begin
            Execute PROCEDURE SPU_DESALOCA_AGRUP_PEDIDO4 (Old.Estabelecimento_Id,Old.Agrupamento_Id,Old.Agrup_Ped_Id,Old.Quantidade-New.Quantidade);
          end else
          begin
             --agrup_up_id = coalesce((select first 1 AGRUP_UP_ID from TBAGRUPAMENTO_CARGA_SKU_UP WHERE TIPO = 2 AND AGRUPAMENTO_ID = Old.agrupamento_id AND AGRUP_PED_ID = Old.id),0);
             --Execute PROCEDURE SPU_DESALOCA_AGRUP_PEDIDO_UP (Old.Estabelecimento_Id,Old.Agrupamento_Id,Old.Agrup_Ped_Id, :agrup_up_id, Old.Quantidade-New.Quantidade);
          end

      End else
  if (Old.Agrupamento_Id > 0 and Old.Agrup_Ped_Id > 0 and Old.Quantidade < New.Quantidade) then
      Begin
        Exception "..." 'QUANTIDADE DO TALAO NAO PODE SER ALTERADA PARA MAIOR! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      End

  if (Old.Tabela_Id > 0 and Old.Tabela_Id = New.Tabela_Id and Old.Saldo <> New.Saldo) then
      Begin
         if(new.tipo = 'P')then
         begin

            UPDATE tbpedido_item set
            Qtd_Rem = iif(Qtd_Rem - (Old.Saldo-New.Saldo) > 0, Qtd_Rem - (Old.Saldo-New.Saldo), 0)
              Where Estabelecimento_Codigo = Old.Estabelecimento_Id
                and Pedido = Old.Tabela_Id
                and Controle = Old.Tab_Item_Id
                and Produto_Codigo = Old.ORIGEM_PRODUTO_ID
                and Tamanho = Old.Tamanho;
         end
      End else

  if (Old.Tabela_Id > 0 and New.Tabela_Id = 0) then
      Begin

       if(new.tipo = 'P')then
       begin
            UPDATE tbpedido_item set
            Qtd_Rem = Qtd_Rem - Old.Saldo
              Where Estabelecimento_Codigo = Old.Estabelecimento_Id
                and Pedido = Old.Tabela_Id
                and Controle = Old.Tab_Item_Id
                and Produto_Codigo = Old.ORIGEM_PRODUTO_ID
                and Tamanho = Old.Tamanho;
       end

       HISTORICO = 'DESALOC.REM. ('||new.tipo||') PED/ITEM:'||Old.Tabela_Id||'/'||Old.Tab_item_Id||' QTD/TAM/LOC.'||TRUNC(OLD.SALDO)||'/'||OLD.TAMANHO||'/'||OLD.LOCALIZACAO_ID||' REM/TALAO:'||OLD.REMESSA||'/'||OLD.TALAO||' AGRUP.'||OLD.AGRUPAMENTO_ID;

      End else

  if (Old.Tabela_Id > 0 and New.Tabela_Id > 0 and Old.Tabela_Id <> New.Tabela_Id and /*Old.Saldo = New.Saldo and*/ New.Saldo > 0) then
      Begin
         if(new.tipo = 'P')then
         begin
            UPDATE tbpedido_item set
            Qtd_Rem = Qtd_Rem - Old.Saldo
              Where Estabelecimento_Codigo = Old.Estabelecimento_Id
                and Pedido = Old.Tabela_Id
                and Controle = Old.Tab_Item_Id
                and Produto_Codigo = Old.ORIGEM_PRODUTO_ID
                and Tamanho = Old.Tamanho;

            UPDATE tbpedido_item set
            Qtd_Rem = Qtd_Rem + New.Saldo
              Where Estabelecimento_Codigo = NEW.Estabelecimento_Id
                and Pedido = NEW.Tabela_Id
                and Controle = NEW.Tab_Item_Id
                and Produto_Codigo = NEW.ORIGEM_PRODUTO_ID
                and Tamanho = NEW.Tamanho;

            HISTORICO = 'TRANSF.'||' REM/TALAO:'||OLD.REMESSA||'/'||OLD.TALAO||' AGRUP.'||OLD.AGRUPAMENTO_ID
                                 ||' QTD/TAM/LOC.'||TRUNC(OLD.SALDO)||'/'||OLD.TAMANHO||'/'||OLD.LOCALIZACAO_ID
                                 ||' *** PED/ITEM:'||Old.Tabela_Id||'/'||Old.Tab_item_Id
                                 ||' -> '||NEW.Tabela_Id||'/'||New.Tab_item_Id;
        end
  End

  if (Old.Tab_Item_Id = 0 and New.Tab_Item_Id > 0 and New.Tab_Item_Id_Old = 0) then
      Begin
         New.Tab_Item_Id_Old = New.Tab_Item_Id;
         New.Usuario = (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection);
      End

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPRODUTO_ALOCADO', OLD.ORIGEM_PRODUTO_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),
       :Historico);


       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPEDIDO_ALOCADO', OLD.Tabela_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),
       :Historico);

          if (Old.Tabela_Id > 0 and New.Tabela_Id > 0 and Old.Tabela_Id <> New.Tabela_Id and New.Saldo > 0) then
              Begin
               INSERT INTO TBHISTORICO (
               TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
              'TBPEDIDO_ALOCADO', NEW.Tabela_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),
               :Historico);
               End

       End

End
^

SET TERM ; ^

