
SET SQL DIALECT 3;

CREATE GENERATOR GTBAGRUPAMENTO_PREVISAO;

CREATE TABLE TBAGRUPAMENTO_PREVISAO (
    ESTABELECIMENTO_ID   INTEGER NOT NULL,
    AGRUPAMENTO_ID       INTEGER NOT NULL,
    ID                   INTEGER NOT NULL,
    TABELA_ID            INTEGER NOT NULL,
    TAB_ITEM_ID          INTEGER NOT NULL,
    PRODUTO_ID           INTEGER,
    TAMANHO              INTEGER,
    QUANTIDADE           NUMERIC(15,4),
    TIPO                 CHAR(1),
    REMESSA              INTEGER,
    STATUS               CHAR(1) DEFAULT '0',
    REMESSA_CONTROLE     INTEGER DEFAULT 0,
    SALDO                NUMERIC(15,4) DEFAULT 0,
    NECESS_SKU           NUMERIC(15,4),
    NECESS_COR           NUMERIC(15,4),
    QUANTIDADE_PREVISAO  NUMERIC(15,4) DEFAULT 0,
    DATAHORA             TIMESTAMP DEFAULT 'NOW',
    PERFIL_SKU           VARCHAR(10) DEFAULT '',
    PERFIL_COR           VARCHAR(10) DEFAULT '',
    VINCULO_AGRUPAMENTO  INTEGER DEFAULT 0,
    PRODUTO_ORIGEM       INTEGER,
    CONJUNTO_MODELO_PAI  INTEGER,
    CONJUNTO_PECA_ID     INTEGER,
    TAMANHO_ORIGINAL     INTEGER DEFAULT 0,
    PRODUTO_ORIGINAL     INTEGER DEFAULT 0
);

ALTER TABLE TBAGRUPAMENTO_PREVISAO ADD PRIMARY KEY (ESTABELECIMENTO_ID, AGRUPAMENTO_ID, ID, TABELA_ID, TAB_ITEM_ID);


CREATE INDEX ITBAGRUPAMENTO_PREVISAO_01 ON TBAGRUPAMENTO_PREVISAO (TABELA_ID, TAB_ITEM_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_02 ON TBAGRUPAMENTO_PREVISAO (TIPO);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_03 ON TBAGRUPAMENTO_PREVISAO (ESTABELECIMENTO_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_04 ON TBAGRUPAMENTO_PREVISAO (AGRUPAMENTO_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_05 ON TBAGRUPAMENTO_PREVISAO (ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_06 ON TBAGRUPAMENTO_PREVISAO (TABELA_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_07 ON TBAGRUPAMENTO_PREVISAO (TAB_ITEM_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_08 ON TBAGRUPAMENTO_PREVISAO (PRODUTO_ID);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_09 ON TBAGRUPAMENTO_PREVISAO (TAMANHO);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_10 ON TBAGRUPAMENTO_PREVISAO (TIPO);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_11 ON TBAGRUPAMENTO_PREVISAO (SALDO);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_12 ON TBAGRUPAMENTO_PREVISAO (VINCULO_AGRUPAMENTO);
CREATE INDEX ITBAGRUPAMENTO_PREVISAO_13 ON TBAGRUPAMENTO_PREVISAO (PRODUTO_ORIGEM);

SET TERM ^ ;


/* Trigger: TTBAGRUPAMENTO_PREVISAO00IU */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO00IU FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
  if(new.PERFIL_SKU <> ' ')then
  begin
     new.PERFIL_SKU = trim(new.PERFIL_SKU);
  end

  if(new.PERFIL_COR <> ' ')then
  begin
     new.PERFIL_COR = trim(new.PERFIL_COR);
  end
end
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_A1D_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_A1D_01 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE AFTER DELETE POSITION 0
AS
begin
  if(coalesce(old.conjunto_peca_id,0) > 0)then
  begin
    delete from TBAGRUPAMENTO_PREVISAO p where p.tabela_id = old.tabela_id and p.tab_item_id = old.tab_item_id and p.conjunto_modelo_pai = old.conjunto_modelo_pai and p.id <> old.id;
  end
end
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B0D_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B0D_01 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
  /*
  DELETE FROM TBAGRUPAMENTO_CONSUMO WHERE
  ESTABELECIMENTO_ID   = OLD.ESTABELECIMENTO_ID
  AND AGRUPAMENTO_ID   = OLD.AGRUPAMENTO_ID
  AND AGRUP_PREVISAO_ID  = OLD.ID 
  AND AGRUP_CONSUMO_ID = 0;
  */
END
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B0I */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B0I FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gTBAGRUPAMENTO_PREVISAO,1);
end
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B0I_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B0I_01 FOR TBAGRUPAMENTO_PREVISAO
INACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE PRODUTO_ID integer;
DECLARE VARIABLE TAM integer;
DECLARE VARIABLE NIVEL integer;
DECLARE VARIABLE TIPO Char(1);
DECLARE VARIABLE NECESSIDADE NUMERIC(15,4);
BEGIN

FOR Select Z.Produto_Id, Z.Tam, Z.Nivel, Z.Tipo,
      Cast(Z.Necessidade as Numeric(15,4)) Necessidade
From (

Select X.Produto_Id, X.Tam, X.Nivel, X.Tipo, X.Necessidade
From (

SELECT B.PRODUTO_ID, B.Tam, B.Nivel,
    Max(Coalesce((Select First 1 M.Compra_Produz From TbModelo M Where M.Codigo = (Select First 1 Modelo_Codigo From TBProduto Where Codigo = B.PRODUTO_ID)),'2')) Tipo,
Coalesce(Sum(
(Case When (New.Tamanho = 1) and (B.T01 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T01/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 2) and (B.T02 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T02/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 3) and (B.T03 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T03/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 4) and (B.T04 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T04/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 5) and (B.T05 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T05/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 6) and (B.T06 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T06/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 7) and (B.T07 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T07/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 8) and (B.T08 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T08/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho = 9) and (B.T09 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T09/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =10) and (B.T10 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T10/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =11) and (B.T11 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T11/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =12) and (B.T12 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T12/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =13) and (B.T13 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T13/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =14) and (B.T14 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T14/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =15) and (B.T15 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T15/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =16) and (B.T16 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T16/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =17) and (B.T17 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T17/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =18) and (B.T18 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T18/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =19) and (B.T19 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T19/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
(Case When (New.Tamanho =20) and (B.T20 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.T20/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end)),0) Necessidade 

FROM TBMODELO_CONSUMO_COR B
WHERE B.Modelo_Id  = (Select First 1 Modelo_Codigo From TBProduto Where Codigo = New.Produto_Id)
  AND B.COR_ID     = (Select First 1 Cor_Codigo From TBProduto Where Codigo = New.Produto_Id)
--  and B.Alocacao = '1'
  and B.Nivel = 0

Group by 1,2,3) X
Where X.Necessidade > 0

Union

Select X.Produto_Id, X.Tam, X.Nivel, X.Tipo, X.Necessidade

    From (
    SELECT B.CONSUMO_PRODUTO_CODIGO PRODUTO_ID, B.Tam, B.Nivel,
    Max(Coalesce((Select First 1 M.Compra_Produz From TbModelo M Where M.Codigo = (Select First 1 Modelo_Codigo From TBProduto Where Codigo = B.CONSUMO_PRODUTO_CODIGO)),'2')) Tipo,
    Coalesce(Sum(
    (Case When (New.Tamanho = 1) and (B.CONSUMO_QUANTIDADE_T01 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T01/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 2) and (B.CONSUMO_QUANTIDADE_T02 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T02/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 3) and (B.CONSUMO_QUANTIDADE_T03 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T03/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 4) and (B.CONSUMO_QUANTIDADE_T04 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T04/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 5) and (B.CONSUMO_QUANTIDADE_T05 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T05/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 6) and (B.CONSUMO_QUANTIDADE_T06 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T06/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 7) and (B.CONSUMO_QUANTIDADE_T07 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T07/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 8) and (B.CONSUMO_QUANTIDADE_T08 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T08/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho = 9) and (B.CONSUMO_QUANTIDADE_T09 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T09/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =10) and (B.CONSUMO_QUANTIDADE_T10 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T10/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =11) and (B.CONSUMO_QUANTIDADE_T11 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T11/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =12) and (B.CONSUMO_QUANTIDADE_T12 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T12/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =13) and (B.CONSUMO_QUANTIDADE_T13 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T13/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =14) and (B.CONSUMO_QUANTIDADE_T14 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T14/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =15) and (B.CONSUMO_QUANTIDADE_T15 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T15/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =16) and (B.CONSUMO_QUANTIDADE_T16 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T16/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =17) and (B.CONSUMO_QUANTIDADE_T17 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T17/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =18) and (B.CONSUMO_QUANTIDADE_T18 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T18/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =19) and (B.CONSUMO_QUANTIDADE_T19 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T19/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end) +
    (Case When (New.Tamanho =20) and (B.CONSUMO_QUANTIDADE_T20 > 0) Then Cast( (Cast(New.QUANTIDADE as Numeric(15,4)) * CAST((B.CONSUMO_QUANTIDADE_T20/B.FATOR_CONVERSAO)as Numeric(15,8))) as Numeric(15,4)) else 0 end)),0)  Necessidade

    FROM TBMODELO_CONSUMO B 
    WHERE B.MODELO_CODIGO = (Select First 1 Modelo_Codigo From TBProduto Where Codigo = New.Produto_Id)
--      and B.Alocacao = '1'
      and B.Nivel = 0
    Group By 1,2,3) X
    Where X.Necessidade > 0
) Z
 
INTO :PRODUTO_ID, :TAM, :NIVEL, :TIPO, :NECESSIDADE

DO
Begin

   if (:PRODUTO_ID > 0) then
       Begin
       /*
        Update or Insert Into TBAGRUPAMENTO_CONSUMO (
        ESTABELECIMENTO_ID, AGRUPAMENTO_ID, AGRUP_PREVISAO_ID, 

        NIVEL, PRODUTO_ID, TAMANHO, PROJECAO, NECESSIDADE, TIPO)
        Values (
        NEW.ESTABELECIMENTO_ID, NEW.AGRUPAMENTO_ID, NEW.ID, 
        :NIVEL, :PRODUTO_ID, :TAM, :NECESSIDADE, :NECESSIDADE, :TIPO)
        Matching (ESTABELECIMENTO_ID,AGRUPAMENTO_ID,
        AGRUP_PREVISAO_ID,PRODUTO_ID,TAMANHO,NIVEL,TIPO);
        */
       End

END

End
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B0U_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B0U_01 FOR TBAGRUPAMENTO_PREVISAO
INACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN

  if (Old.AGRUPAMENTO_ID <> New.AGRUPAMENTO_ID) then
      Begin
           
      End

END
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B1D_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B1D_01 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE STATUS CHAR(1);
BEGIN

FOR Select First 1 T.Status 
From TbRemessa_Item_Tratamento T 
Where T.Estabelecimento_Id = Old.Estabelecimento_Id
  and T.Tabela_Id = Old.Agrupamento_Id
  and T.Tab_Item_Id = 0
  and T.Status = '1'

INTO :STATUS

DO
Begin

   if (:STATUS = 1) then
       Begin
       Exception "..." 'Agrupamento temporariamente bloqueado por estar sendo usado na geração de remessa! '||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
       End

END

End
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B1D_02 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B1D_02 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE DELETE POSITION 1
AS
declare variable HISTORICO VARCHAR(500);
begin

    HISTORICO = '';

if (Old.Id > 0) Then
    Begin

    if (Old.Tipo = 'P' and Old.Saldo > 0) then
        Begin
            if(coalesce(Old.conjunto_peca_id,0) > 0)then
            begin
                if(Old.conjunto_peca_id = 1)then
                begin
                    UPDATE TBPREVISAO_VENDA_ITEM set
                    Qtd_Agp = Qtd_Agp - Old.Saldo
                      Where previsao_venda_id = OLD.Tabela_Id
                        and id = Old.Tab_Item_Id
                        and Produto_id = OLD.produto_original
                        and Tamanho = OLD.tamanho_original;
                end
            end else
            begin
                UPDATE TBPREVISAO_VENDA_ITEM set
                Qtd_Agp = Qtd_Agp - Old.Saldo
                  Where previsao_venda_id = OLD.Tabela_Id
                    and id = Old.Tab_Item_Id
                    and Produto_id = OLD.Produto_Id
                    and Tamanho = OLD.Tamanho;
           end

          HISTORICO = 'DESALOC.AGRUP. PREV/ITEM:'||OLD.Tabela_Id||'/'||OLD.Tab_item_Id||' QTD/TAM.'||TRUNC(Old.SALDO)||'/'||Old.TAMANHO;
        End

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

      DELETE FROM TBAGRUPAMENTO_CARGA_SKU_UP
      WHERE AGRUPAMENTO_ID = OLD.AGRUPAMENTO_ID
        AND AGRUP_PED_ID = OLD.ID
        and TIPO = 3;

      DELETE FROM TBAGRUPAMENTO_CARGA_SKU_GP
      WHERE AGRUPAMENTO_ID = OLD.AGRUPAMENTO_ID
        AND AGRUP_PED_ID = OLD.ID;
    
      DELETE FROM TBAGRUPAMENTO_CARGA_SKU_FER
      WHERE AGRUPAMENTO_ID = OLD.AGRUPAMENTO_ID
        AND AGRUP_PED_ID = OLD.ID;
    
    End

End
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B1I_01 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B1I_01 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE STATUS CHAR(1);
BEGIN

FOR Select First 1 T.Status 
From TbRemessa_Item_Tratamento T 
Where T.Estabelecimento_Id = New.Estabelecimento_Id
  and T.Tabela_Id = NEW.Agrupamento_Id
  and T.Tab_Item_Id = 0
  and T.Status = '1'

INTO :STATUS

DO
Begin

   if (:STATUS = 1) then
       Begin
       Exception "..." 'Agrupamento temporariamente bloqueado por estar sendo usado na geração de remessa! '||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
       End

END

End
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B1I_02 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B1I_02 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE INSERT POSITION 1
AS
declare variable HISTORICO VARCHAR(500);
declare variable Produto_original integer;
begin

    HISTORICO = '';

    if (New.Tipo = 'P' and New.Saldo > 0) then
        Begin

            if(coalesce(new.conjunto_peca_id,0) > 0)then
            begin
                if(new.conjunto_peca_id = 1)then
                begin
                    UPDATE TBPREVISAO_VENDA_ITEM set
                    Qtd_Agp = Qtd_Agp + New.Saldo
                      Where previsao_venda_id = NEW.Tabela_Id
                        and id = NEW.Tab_Item_Id
                        and Produto_id = NEW.Produto_original
                        and Tamanho = NEW.tamanho_original;
                end
            end else
            begin
                UPDATE TBPREVISAO_VENDA_ITEM set
                Qtd_Agp = Qtd_Agp + New.Saldo
                  Where previsao_venda_id = NEW.Tabela_Id
                    and id = NEW.Tab_Item_Id
                    and Produto_id = NEW.Produto_Id
                    and Tamanho = NEW.Tamanho;
            end

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

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


/* Trigger: TTBAGRUPAMENTO_PREVISAO_B1U_02 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_B1U_02 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE UPDATE POSITION 1
AS
begin
  if (Old.Saldo <> New.Saldo) then
      Begin

      if (Old.Saldo > 0 and New.Saldo = 0) then
          Begin
             /*
              DELETE FROM TBAGRUPAMENTO_CONSUMO WHERE
              ESTABELECIMENTO_ID   = OLD.ESTABELECIMENTO_ID
              AND AGRUPAMENTO_ID   = OLD.AGRUPAMENTO_ID
              AND AGRUP_PREVISAO_ID  = OLD.ID 
              AND AGRUP_CONSUMO_ID = 0;
              */
          End

        if (New.Tipo = 'P') then
            Begin
                if(coalesce(new.conjunto_peca_id,0) > 0)then
                begin
                    if(new.conjunto_peca_id = 1)then
                    begin
                        UPDATE TBPREVISAO_VENDA_ITEM set
                        Qtd_Agp = Qtd_Agp - (Old.Saldo-New.Saldo)
                          Where previsao_venda_id = Old.Tabela_Id
                            and id = Old.Tab_Item_Id
                            and Produto_id = Old.produto_original
                            and Tamanho = Old.tamanho_original;
                    end
                end else
                begin
                    UPDATE TBPREVISAO_VENDA_ITEM set
                    Qtd_Agp = Qtd_Agp - (Old.Saldo-New.Saldo)
                      Where previsao_venda_id = Old.Tabela_Id
                        and id = Old.Tab_Item_Id
                        and Produto_id = Old.Produto_Id
                        and Tamanho = Old.Tamanho;
                end
            End
      End
End
^


/* Trigger: TTBAGRUPAMENTO_PREVISAO_BI_03 */
CREATE OR ALTER TRIGGER TTBAGRUPAMENTO_PREVISAO_BI_03 FOR TBAGRUPAMENTO_PREVISAO
ACTIVE BEFORE INSERT POSITION 0
AS

DECLARE VARIABLE STATUS INTEGER;
DECLARE VARIABLE CLASSIFICACAO VARCHAR(10);

BEGIN

    :STATUS = 1;

    :STATUS         = COALESCE((SELECT FIRST 1 P.STATUS_LIBERACAO   FROM TBPREVISAO_VENDA P WHERE P.ID = NEW.TABELA_ID) , 1 );
    --:CLASSIFICACAO  = COALESCE((SELECT FIRST 1 P.CLASSIFICACAO      FROM TBPREVISAO_VENDA P WHERE P.ID = NEW.TABELA_ID) , '');

    /*
    IF(:CLASSIFICACAO IN (
        SELECT
            P.ID
        FROM TBPERFIL P WHERE P.CONTROLE IN (
            (
                SELECT
                    LIST(PD.TABELA_ID)
                FROM (
                    SELECT
                        *
                    FROM TBPARAMETRO P
                    WHERE P.CODIGO  = 'PAD_PED_VENDA_STATUS'
                ) P, TBPARAMETRO_DETALHE PD
                WHERE   PD.PARAMETRO_ID =  P.ID
                AND     PD.VALOR = 1
            )
        )
    )) THEN
    BEGIN
    */
        IF(:STATUS = 0) THEN
        BEGIN
            EXCEPTION "..." 'PREVISAO BLOQUEADO PARA AGRUPAMENTO';
        END
    --END
END
^

SET TERM ; ^

COMMENT ON TRIGGER TTBAGRUPAMENTO_PREVISAO00IU IS 
'TRIM PERFIL';

/* Privileges of roles */
GRANT ALL ON TBAGRUPAMENTO_PREVISAO TO RDB$ADMIN;