ALTER TABLE TBPDV_CONFERENCIA_ITEM
    ADD TAMANHO INTEGER;
	
ALTER TABLE TBPDV_CONFERENCIA
    ADD LOCALIZACAO_ID INTEGER;
	
ALTER TABLE TBPDV_CONFERENCIA_ITEM
    ADD QTD_ESTOQUE NUMERIC(15,2) DEFAULT 0;
	
CREATE OR ALTER trigger ttbestoque_det_alocacao_b1i_01 for tbestoque_detalhe_alocacao
active before insert position 1
AS
declare variable HISTORICO VARCHAR(500);
begin

    HISTORICO = '';

  UPDATE OR insert into tbestoque_saldo_alocacao (
  estabelecimento_id, localizacao_id, produto_id, tamanho)
  values (NEW.estabelecimento_id,
          NEW.localizacao_id,
          NEW.produto_id,
          NEW.tamanho);

  UPDATE tbestoque_saldo_alocacao set
  Quantidade = Quantidade + NEW.Quantidade
  Where Estabelecimento_Id = NEW.Estabelecimento_Id
    and Localizacao_Id = NEW.Localizacao_id
    and Produto_Id = NEW.Produto_Id
    and Tamanho = NEW.Tamanho;

    if (New.Tipo = 'P') then
        Begin
        UPDATE tbpedido_item set
        Qtd_Est = Qtd_Est + New.Saldo
          Where Estabelecimento_Codigo = NEW.Estabelecimento_Id
            and Pedido = NEW.Tabela_Id
            and Controle = NEW.Tab_Item_Id
            and Produto_Codigo = NEW.Produto_Id
            and Tamanho = NEW.Tamanho;

          HISTORICO = 'ALOC.EST. PED/ITEM:'||NEW.Tabela_Id||'/'||NEW.Tab_item_Id||' QTD/TAM/LOC.'||TRUNC(NEW.SALDO)||'/'||NEW.TAMANHO||'/'||NEW.LOCALIZACAO_ID;
        End

   if (New.Tipo = 'O') then
        Begin
        UPDATE tbpdv_conferencia_item set
        QTD_ESTOQUE = QTD_ESTOQUE + New.Saldo
          Where id = NEW.Tab_Item_Id;

          HISTORICO = 'ALOC.EST. PRE PED/ITEM:'||NEW.Tabela_Id||'/'||NEW.Tab_item_Id||' QTD/TAM/LOC.'||TRUNC(NEW.SALDO)||'/'||NEW.TAMANHO||'/'||NEW.LOCALIZACAO_ID;
        End

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

CREATE OR ALTER trigger ttbestoque_det_alocacao_b1u_01 for tbestoque_detalhe_alocacao
active before update position 1
AS
begin

  if (New.Saldo < 0) then
      New.Saldo = 0;

  if (Old.Saldo <> New.Saldo) then
      Begin

        UPDATE tbestoque_saldo_alocacao set
        Quantidade = Quantidade - (Old.Saldo-New.Saldo)
          Where Estabelecimento_Id = OLD.Estabelecimento_Id
            and Localizacao_Id = OLD.Localizacao_id
            and Produto_Id = OLD.Produto_Id
            and Tamanho = OLD.Tamanho;

        if (New.Tipo = 'P') then
            Begin
            UPDATE tbpedido_item set
            Qtd_Est = Qtd_Est - (Old.Saldo-New.Saldo)
              Where Estabelecimento_Codigo = Old.Estabelecimento_Id
                and Pedido = Old.Tabela_Id
                and Controle = Old.Tab_Item_Id
                and Produto_Codigo = Old.Produto_Id
                and Tamanho = Old.Tamanho;
            End

        if (New.Tipo = 'O') then
            Begin
                UPDATE tbpdv_conferencia_item set
                QTD_ESTOQUE = QTD_ESTOQUE - (Old.Saldo-New.Saldo)
                Where id = NEW.Tab_Item_Id;
            End
      End
End;

CREATE OR ALTER trigger ttbestoque_det_alocacao_b1d_01 for tbestoque_detalhe_alocacao
active before delete position 1
AS
declare variable HISTORICO VARCHAR(500);
begin

    HISTORICO = '';

    UPDATE tbestoque_saldo_alocacao set
    Quantidade = Quantidade - OLD.Saldo
      Where Estabelecimento_Id = OLD.Estabelecimento_Id
        and Localizacao_Id = OLD.Localizacao_id
        and Produto_Id = OLD.Produto_Id
        and Tamanho = OLD.Tamanho;

    if (Old.Tipo = 'P' and Old.Saldo > 0) then
        Begin
        UPDATE tbpedido_item set
        Qtd_Est = Qtd_Est - Old.Saldo,
        Agp_Dt_Cli = Null,
        Agp_Dt_Prd = Null
          Where Estabelecimento_Codigo = OLD.Estabelecimento_Id
            and Pedido = OLD.Tabela_Id
            and Controle = Old.Tab_Item_Id
            and Produto_Codigo = OLD.Produto_Id
            and Tamanho = OLD.Tamanho;

            HISTORICO = 'DESALOC.EST. PED/ITEM:'||Old.Tabela_Id||'/'||Old.Tab_item_Id||' QTD/TAM/LOC.'||TRUNC(OLD.SALDO)||'/'||OLD.TAMANHO||'/'||OLD.LOCALIZACAO_ID;
        End

   if (Old.Tipo = 'O' and Old.Saldo > 0) then
        Begin
            UPDATE tbpdv_conferencia_item set
            QTD_ESTOQUE = QTD_ESTOQUE - Old.Saldo
            Where id = OLD.Tab_Item_Id;

            HISTORICO = 'DESALOC.EST. PRE PED/ITEM:'||Old.Tabela_Id||'/'||Old.Tab_item_Id||' QTD/TAM/LOC.'||TRUNC(OLD.SALDO)||'/'||OLD.TAMANHO||'/'||OLD.LOCALIZACAO_ID;
        End

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

End;

