SET TERM ^ ;

CREATE OR ALTER procedure SPU_TRATA_PEDIDO_REMESSA6 (
    PEDIDO_1 integer,
    ALOCDESALOC char(1),
    MODELO_ID INTEGER = 0)
returns (
    ESTABELECIMENTO_ID integer,
    PEDIDO integer,
    CONTROLE integer,
    PRODUTO_ID integer,
    LOCALIZACAO_ID integer,
    TAMANHO integer,
    PERFIL_SKU varchar(10),
    PERFIL_COR varchar(10),
    REM_STATUS char(1),
    QTD_PRD numeric(15,4),
    REMESSA integer,
    TALAO integer,
    AGRUPAMENTO_ID integer,
    AGRUP_PED_ID integer,
    ID integer,
    QTD_DISP numeric(15,4),
    QTD_MULT integer)
as
declare variable VQTD_PRD integer;
declare variable VQTD_DISP integer;
declare variable ALOC_MULT char(1);
declare variable TIPO_REMESSA varchar(20);
declare variable OUTRO_PRODUTO_ID integer;
declare variable CONF_AGRUPAMENTO_ID integer;
declare variable MODELO_CODIGO integer;
declare variable COR_ID integer;
declare variable QTD_SALDO numeric(15,4);
declare variable PRODUTO_ORIGEM integer;
declare variable TAMANHO_ORIGEM integer;
declare variable PROD_ETAPA integer;
declare variable PADRAO_PRIORIDADE integer;
BEGIN

  aloc_mult = Coalesce((Select First 1 Coalesce(PF.Alocar_Multiplo,'0')
                 From TbPedido P, TbPerfil PF
                Where P.Pedido = :Pedido_1
                  and P.Classificacao = PF.Id
                  and PF.Tabela = 'PED'),'0');

  PADRAO_PRIORIDADE = COALESCE(FN_PARAMETRO_V2('SISTEMA.PADRAO_PRIORIDADE_ALOCACAO_REMESSA'),0);

   FOR
       Select
           A.Estabelecimento_Codigo, A.Pedido, A.Controle, A.Produto_Codigo,
           A.Localizacao_Id, A.Tamanho, A.Perfil, A.Perfil_Cor,
    
           Coalesce((Select First 1 T.Status From TbRemessa_Item_Tratamento T
                      Where T.Tabela_Id = A.Pedido
                        and T.Tab_Item_Id = A.Controle
                        and T.ESTABELECIMENTO_ID = A.ESTABELECIMENTO_CODIGO
                        AND T.TAMANHO = A.TAMANHO
                        and T.Status = '1'),'0') Rem_Status,
    
           Coalesce((Select First 1 C.Quantidade From TbPedido_Item_Saldo C
                      Where C.Pedido = A.Pedido
                        and C.PEDIDO_ITEM_CONTROLE = A.Controle),0.0000)
           -A.Qtd_Est-A.Qtd_Agp-A.Qtd_Rem,

           Coalesce((Select First 1 C.Quantidade From TbPedido_Item_Saldo C
                      Where C.Pedido = A.Pedido
                        and C.PEDIDO_ITEM_CONTROLE = A.Controle),0.0000)
           -A.Qtd_Est AS QTD_SALDO,
    
           Coalesce((Select First 1 IIF(A.TAMANHO = 1,MPC.MU01,IIF(A.TAMANHO = 2,MPC.MU02,
                                    IIF(A.TAMANHO = 3,MPC.MU03,IIF(A.TAMANHO = 4,MPC.MU04,
                                    IIF(A.TAMANHO = 5,MPC.MU05,IIF(A.TAMANHO = 6,MPC.MU06,
                                    IIF(A.TAMANHO = 7,MPC.MU07,IIF(A.TAMANHO = 8,MPC.MU08,
                                    IIF(A.TAMANHO = 9,MPC.MU09,IIF(A.TAMANHO =10,MPC.MU10,
                                    IIF(A.TAMANHO =11,MPC.MU11,IIF(A.TAMANHO =12,MPC.MU12,
                                    IIF(A.TAMANHO =13,MPC.MU13,IIF(A.TAMANHO =14,MPC.MU14,
                                    IIF(A.TAMANHO =15,MPC.MU15,IIF(A.TAMANHO =16,MPC.MU16,
                                    IIF(A.TAMANHO =17,MPC.MU17,IIF(A.TAMANHO =18,MPC.MU18,
                                    IIF(A.TAMANHO =19,MPC.MU19,IIF(A.TAMANHO =20,MPC.MU20,
                                    1))))))))))))))))))))
                       From TBMODELO_PEDIDO_COTA MPC Where Modelo_Id = A.Modelo_Codigo),1) Qtd_Mult
    
    
      From TbPedido_Item A
     Where Pedido = :Pedido_1
       and Situacao = 1
       and Tamanho > 0
       AND IIF(:MODELO_ID = 0, TRUE, A.MODELO_CODIGO = :MODELO_ID)
     --For Update
       With Lock
    
    Into :Estabelecimento_Id, :Pedido, :Controle, :Produto_Id, :Localizacao_Id,
         :Tamanho, :Perfil_Sku, :Perfil_Cor, /*:Tratamento_Pedido,*/ :Rem_Status, :Qtd_Prd, :QTD_SALDO, :Qtd_Mult
    Do begin

    if (:Rem_Status = '0') then
         Begin

          if (:AlocDesaloc = 'D') then
              Begin

                Update tbremessa_item_alocacao Set
                Tabela_Id = 0,
                Tab_Item_Id = 0
                Where Estabelecimento_id = :Estabelecimento_Id
                  and Tabela_id =  :Pedido
                  and Tab_item_id = :Controle
                --and Tipo = 'P'
                  and iif(tipo_remessa = '22595', TAMANHO_ORIGEM = :Tamanho, Tamanho = :Tamanho)
                  and Saldo > 0;
    
                Delete from TbAgrupamento_Pedido 
                Where Estabelecimento_id = :Estabelecimento_Id
                  and Tabela_Id = :Pedido
                  and Tab_Item_Id = :Controle
                  and Saldo = 0
                  and Tipo = 'M';
    
                Execute Procedure SPU_DESALOCA_AGRUP_PEDIDO2(:Estabelecimento_Id,:Pedido,:Controle,:Tamanho);
              End
            
          if (:AlocDesaloc = 'A') then
          Begin

           if (coalesce(:Qtd_Mult, 0) <= 0) then
               begin
               :Qtd_Mult = 1;
               end
    
           vQtd_Prd = :Qtd_Prd;
           if (Mod(:vQtd_Prd,:Qtd_Mult) > 0 and :aloc_mult = '1') Then
               Begin
               :vQtd_Prd = :vQtd_Prd - (Mod(:vQtd_Prd,:Qtd_Mult));
               End
    
           if (:aloc_mult <> '1') Then
               Begin
               Qtd_Mult = 1;
               End
    
            if (:vQtd_Prd > 0) then
              Begin
    
                /* verifica se tem multiplos agrupamentos*/
                select first 1
                    m.conf_agrupamento_id,
                    m.codigo,
                    p.cor_codigo
                from tbproduto p, tbmodelo m
                where p.codigo = :produto_id
                and m.codigo = p.modelo_codigo
                into conf_agrupamento_id, MODELO_CODIGO, :COR_ID;
    
                conf_agrupamento_id =  coalesce(conf_agrupamento_id,0);
    
                if(conf_agrupamento_id = 0)then
                begin
                  Agrup_Ped_Id = 0;   
                 --Se o padrao do sistema for pela data
    
                  IF(:PADRAO_PRIORIDADE = 0) THEN
                  BEGIN
                    For
                      select
                         Remessa, Talao, Agrupamento_Id, Id, SALDO AS Qtd_Disp, TIPO_REMESSA, OUTRO_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM, PROD_ETAPA
                            from(
                            select
                                *
                            from(
                                Select B.Remessa, B.Talao, B.Agrupamento_Id, B.Id, B.Saldo, B.TAMANHO, b.TIPO_REMESSA, b.produto_id as OUTRO_PRODUTO_ID, b.produto_origem, b.tamanho_origem,
                                    coalesce((select max(s.ordem) - max(iif(s.situacao = 1, s.ordem,0)) from tbremessa_setor s where s.remessa = a.remessa and s.talao_id = a.controle),0) as PROD_ETAPA
                                From TbRemessa_Item_Alocacao B, TbPedido_item_Processado A, TbRemessa R
                                Where B.Estabelecimento_Id = :Estabelecimento_Id
                                and B.Remessa = R.Numero
                                and B.Localizacao_Id = :Localizacao_Id
                                and B.Tabela_Id = 0
                                and B.TAMANHO = :Tamanho
                                and B.Status = '1'
                                and iif(B.ORIGEM_PRODUTO_ID > 0, B.ORIGEM_PRODUTO_ID = :Produto_Id,  B.PRODUTO_ID = :Produto_Id)
                                and A.Remessa = B.Remessa
                                and A.Controle = B.Talao
                                and A.Estabelecimento_Codigo = B.Estabelecimento_Id
                                and a.estoque_id = 0
                                and R.ORIGEM <> 22599
                                AND ((A.SITUACAO < 3) OR (R.ORIGEM = 22600 AND A.SITUACAO < 6))
                                and A.Data_Expedicao is Null
                                and B.Saldo >= :Qtd_Mult
                                Order By R.Data
                            )
                      )
    
                    Into :Remessa, :Talao, :Agrupamento_Id, :Id, :Qtd_Disp, :TIPO_REMESSA, :OUTRO_PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM, PROD_ETAPA
                    Do Begin
                       :PRODUTO_ORIGEM = null;--coalesce(PRODUTO_ORIGEM, Produto_Id);
                       :TAMANHO_ORIGEM = null;--coalesce(TAMANHO_ORIGEM, Tamanho);

                          if (:ID > 0) then
                               Begin
    
                                    vQtd_Disp = :Qtd_Disp;
                                    --VERIFICA SE QUANTIDADE DISPONIVEL AO MULTIPLI DA QUANTIDADE PADRAO
                                    if (Mod(:vQtd_Disp,:Qtd_Mult) > 0 and :aloc_mult = '1') Then
                                        Begin
                                         :vQtd_Disp = :vQtd_Disp - (Mod(:vQtd_Disp,:Qtd_Mult));
                                        End
                
                                    if (:vQtd_Prd > 0 and :vQtd_Disp > 0) then
                                        Begin
                        
                                        IF (:vQtd_Prd < :vQtd_Disp) Then
                                           Begin
                                            if (:AGRUPAMENTO_ID > 0) Then-- and :Tratamento_Pedido = '2') then
                                                Begin
                                                Update TBREMESSA_ITEM_ALOCACAO set Saldo = Saldo - :vQtd_Prd, QUANTIDADE = QUANTIDADE - :vQtd_Prd
                                                Where Estabelecimento_Id = :Estabelecimento_Id
                                                and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                and Id = :Id;
                
                
                                                if (:Agrup_Ped_Id = 0) then
                                                    Begin
                                                        Agrup_Ped_Id = gen_id(gtbagrupamento_pedido,1);
                
                                                        INSERT INTO TbAgrupamento_Pedido (
                                                        Estabelecimento_Id, AGRUPAMENTO_ID, ID, TABELA_ID,
                                                        TAB_ITEM_ID, PRODUTO_ID, TAMANHO, QUANTIDADE,
                                                        SALDO, TIPO, REMESSA,
                                                        PERFIL_SKU, NECESS_SKU, PERFIL_COR, NECESS_COR, PRODUTO_ORIGINAL, TAMANHO_ORIGINAL) VALUES (
                                                        :Estabelecimento_Id, :AGRUPAMENTO_ID, :Agrup_Ped_Id,
                                                        :Pedido, :Controle, :PRODUTO_ID, :TAMANHO, :vQtd_Prd,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    End else
                                                    Begin
                                                        UPDATE TbAgrupamento_Pedido SET
                                                        Quantidade = Quantidade + :vQtd_Prd
                                                        Where Estabelecimento_Id = :Estabelecimento_Id
                                                        and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        and ID = :Agrup_Ped_Id
                                                        and TABELA_ID = :Pedido
                                                        and TAB_ITEM_ID = :Controle
                                                        and Tipo = 'M';
                                                    End
                
                                                Insert into TBREMESSA_ITEM_ALOCACAO (
                                                estabelecimento_id, tabela_id, tab_item_id, tipo,
                                                localizacao_id, produto_id, tamanho, Quantidade, Saldo,
                                                Remessa, Talao, Agrupamento_Id, Agrup_Ped_Id, TIPO_REMESSA, ORIGEM_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM)
                                                values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                                :localizacao_id, :OUTRO_PRODUTO_ID, :tamanho, :vQtd_Prd,
                                                :vQtd_Prd, :Remessa, :Talao, :Agrupamento_Id, :Agrup_Ped_Id, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                End
                
                                            vQtd_Prd = 0;
                
                                            Delete From TbPedido_Consumo
                                            Where Estabelecimento_Id = :Estabelecimento_Id
                                              and Pedido_Id = :Pedido
                                              and Pedido_Item_Id = :Controle
                                              and Tamanho_Item = :Tamanho
                                              and Tipo = 'C';
                
                                            --Exit;
                                           End else
                                        IF (:vQtd_Prd >= :vQtd_Disp) Then
                                           Begin
                                            if (:AGRUPAMENTO_ID > 0) Then-- and :Tratamento_Pedido = '2') then
                                                Begin
                                                DELETE FROM TBREMESSA_ITEM_ALOCACAO
                                                Where Estabelecimento_Id = :Estabelecimento_Id
                                                and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                and Id = :Id;
                
                                                if (:Agrup_Ped_Id = 0) then
                                                    Begin
                                                        Agrup_Ped_Id = gen_id(gtbagrupamento_pedido,1);
                
                                                        INSERT INTO TbAgrupamento_Pedido (
                                                        Estabelecimento_Id, AGRUPAMENTO_ID, ID, TABELA_ID,
                                                        TAB_ITEM_ID, PRODUTO_ID, TAMANHO, QUANTIDADE,
                                                        SALDO, TIPO, REMESSA,
                                                        PERFIL_SKU, NECESS_SKU, PERFIL_COR, NECESS_COR, PRODUTO_ORIGINAL, TAMANHO_ORIGINAL) VALUES (
                                                        :Estabelecimento_Id, :AGRUPAMENTO_ID, :Agrup_Ped_Id,
                                                        :Pedido, :Controle, :PRODUTO_ID, :TAMANHO, :vQtd_Disp,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    End else
                                                    Begin
                                                        UPDATE TbAgrupamento_Pedido SET
                                                        Quantidade = Quantidade + :vQtd_Disp
                                                        Where Estabelecimento_Id = :Estabelecimento_Id
                                                        and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        and ID = :Agrup_Ped_Id
                                                        and TABELA_ID = :Pedido
                                                        and TAB_ITEM_ID = :Controle
                                                        and Tipo = 'M';
                                                    End
                
                                                Insert into TBREMESSA_ITEM_ALOCACAO (
                                                estabelecimento_id, tabela_id, tab_item_id, tipo,
                                                localizacao_id, produto_id, tamanho, Quantidade, Saldo,
                                                Remessa, Talao, Agrupamento_Id, Agrup_Ped_Id, TIPO_REMESSA, ORIGEM_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM)
                                                values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                                :localizacao_id, :OUTRO_PRODUTO_ID, :tamanho, :vQtd_Disp,
                                                :vQtd_Disp, :Remessa, :Talao, :Agrupamento_Id, :Agrup_Ped_Id, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                End
                
                                            vQtd_Prd = :vQtd_Prd - :vQtd_Disp;
                
                                            Delete From TbPedido_Consumo
                                            Where Estabelecimento_Id = :Estabelecimento_Id
                                              and Pedido_Id = :Pedido
                                              and Pedido_Item_Id = :Controle
                                              and Tamanho_Item = :Tamanho
                                              and Tipo = 'C';
                                           End
                        
                                       End
                                  End
                        End
                  END

                 --Se o padrao do sistema for pela proximidade de conclusao
                 IF(:PADRAO_PRIORIDADE = 1) THEN
                 BEGIN
                    For  
                      select
                         Remessa, Talao, Agrupamento_Id, Id, SALDO AS Qtd_Disp, TIPO_REMESSA, OUTRO_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM, PROD_ETAPA
                            from(
                          select
                              *
                              from(
                                select
                                    *
                                from(
                                    Select B.Remessa, B.Talao, B.Agrupamento_Id, B.Id, B.Saldo, B.TAMANHO, b.TIPO_REMESSA, b.produto_id as OUTRO_PRODUTO_ID, b.produto_origem, b.tamanho_origem,
                                        coalesce((select max(s.ordem) - max(iif(s.situacao = 1, s.ordem,0)) from tbremessa_setor s where s.remessa = a.remessa and s.talao_id = a.controle),0) as PROD_ETAPA
                                    From TbRemessa_Item_Alocacao B, TbPedido_item_Processado A, TbRemessa R
                                    Where B.Estabelecimento_Id = :Estabelecimento_Id
                                    and B.Remessa = R.Numero
                                    and B.Localizacao_Id = :Localizacao_Id
                                    and B.Tabela_Id = 0
                                    and B.TAMANHO = :Tamanho
                                    and B.Status = '1'
                                    and B.ORIGEM_PRODUTO_ID = :Produto_Id
                                    and A.Remessa = B.Remessa
                                    and A.Controle = B.Talao
                                    and A.Estabelecimento_Codigo = B.Estabelecimento_Id
                                    and a.estoque_id = 0
                                    and R.ORIGEM <> 22599
                                    AND ((A.SITUACAO < 3) OR (R.ORIGEM = 22600 AND A.SITUACAO < 6))
                                    and A.Data_Expedicao is Null
                                    and B.Saldo >= :Qtd_Mult
                                    Order By R.Data
                                ) ORDER BY PROD_ETAPA ascending
                            )
                        )
    
                    Into :Remessa, :Talao, :Agrupamento_Id, :Id, :Qtd_Disp, :TIPO_REMESSA, :OUTRO_PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM, PROD_ETAPA
                    Do Begin
                       :PRODUTO_ORIGEM = null;--coalesce(PRODUTO_ORIGEM, Produto_Id);
                       :TAMANHO_ORIGEM = null;--coalesce(TAMANHO_ORIGEM, Tamanho);

                          if (:ID > 0) then
                               Begin
    
                                    vQtd_Disp = :Qtd_Disp;
                                    --VERIFICA SE QUANTIDADE DISPONIVEL AO MULTIPLI DA QUANTIDADE PADRAO
                                    if (Mod(:vQtd_Disp,:Qtd_Mult) > 0 and :aloc_mult = '1') Then
                                        Begin
                                         :vQtd_Disp = :vQtd_Disp - (Mod(:vQtd_Disp,:Qtd_Mult));
                                        End
                
                                    if (:vQtd_Prd > 0 and :vQtd_Disp > 0) then
                                        Begin
                        
                                        IF (:vQtd_Prd < :vQtd_Disp) Then
                                           Begin
                                            if (:AGRUPAMENTO_ID > 0) Then-- and :Tratamento_Pedido = '2') then
                                                Begin
                                                Update TBREMESSA_ITEM_ALOCACAO set Saldo = Saldo - :vQtd_Prd, QUANTIDADE = QUANTIDADE - :vQtd_Prd
                                                Where Estabelecimento_Id = :Estabelecimento_Id
                                                and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                and Id = :Id;
                
                
                                                if (:Agrup_Ped_Id = 0) then
                                                    Begin
                                                        Agrup_Ped_Id = gen_id(gtbagrupamento_pedido,1);
                
                                                        INSERT INTO TbAgrupamento_Pedido (
                                                        Estabelecimento_Id, AGRUPAMENTO_ID, ID, TABELA_ID,
                                                        TAB_ITEM_ID, PRODUTO_ID, TAMANHO, QUANTIDADE,
                                                        SALDO, TIPO, REMESSA,
                                                        PERFIL_SKU, NECESS_SKU, PERFIL_COR, NECESS_COR, PRODUTO_ORIGINAL, TAMANHO_ORIGINAL) VALUES (
                                                        :Estabelecimento_Id, :AGRUPAMENTO_ID, :Agrup_Ped_Id,
                                                        :Pedido, :Controle, :PRODUTO_ID, :TAMANHO, :vQtd_Prd,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    End else
                                                    Begin
                                                        UPDATE TbAgrupamento_Pedido SET
                                                        Quantidade = Quantidade + :vQtd_Prd
                                                        Where Estabelecimento_Id = :Estabelecimento_Id
                                                        and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        and ID = :Agrup_Ped_Id
                                                        and TABELA_ID = :Pedido
                                                        and TAB_ITEM_ID = :Controle
                                                        and Tipo = 'M';
                                                    End
                
                                                Insert into TBREMESSA_ITEM_ALOCACAO (
                                                estabelecimento_id, tabela_id, tab_item_id, tipo,
                                                localizacao_id, produto_id, tamanho, Quantidade, Saldo,
                                                Remessa, Talao, Agrupamento_Id, Agrup_Ped_Id, TIPO_REMESSA, ORIGEM_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM)
                                                values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                                :localizacao_id, :OUTRO_PRODUTO_ID, :tamanho, :vQtd_Prd,
                                                :vQtd_Prd, :Remessa, :Talao, :Agrupamento_Id, :Agrup_Ped_Id, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                End
                
                                            vQtd_Prd = 0;
                
                                            Delete From TbPedido_Consumo
                                            Where Estabelecimento_Id = :Estabelecimento_Id
                                              and Pedido_Id = :Pedido
                                              and Pedido_Item_Id = :Controle
                                              and Tamanho_Item = :Tamanho
                                              and Tipo = 'C';
                
                                            --Exit;
                                           End else
                                        IF (:vQtd_Prd >= :vQtd_Disp) Then
                                           Begin
                                            if (:AGRUPAMENTO_ID > 0) Then-- and :Tratamento_Pedido = '2') then
                                                Begin
                                                DELETE FROM TBREMESSA_ITEM_ALOCACAO
                                                Where Estabelecimento_Id = :Estabelecimento_Id
                                                and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                and Id = :Id;
                
                                                if (:Agrup_Ped_Id = 0) then
                                                    Begin
                                                        Agrup_Ped_Id = gen_id(gtbagrupamento_pedido,1);
                
                                                        INSERT INTO TbAgrupamento_Pedido (
                                                        Estabelecimento_Id, AGRUPAMENTO_ID, ID, TABELA_ID,
                                                        TAB_ITEM_ID, PRODUTO_ID, TAMANHO, QUANTIDADE,
                                                        SALDO, TIPO, REMESSA,
                                                        PERFIL_SKU, NECESS_SKU, PERFIL_COR, NECESS_COR, PRODUTO_ORIGINAL, TAMANHO_ORIGINAL) VALUES (
                                                        :Estabelecimento_Id, :AGRUPAMENTO_ID, :Agrup_Ped_Id,
                                                        :Pedido, :Controle, :PRODUTO_ID, :TAMANHO, :vQtd_Disp,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    End else
                                                    Begin
                                                        UPDATE TbAgrupamento_Pedido SET
                                                        Quantidade = Quantidade + :vQtd_Disp
                                                        Where Estabelecimento_Id = :Estabelecimento_Id
                                                        and AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        and ID = :Agrup_Ped_Id
                                                        and TABELA_ID = :Pedido
                                                        and TAB_ITEM_ID = :Controle
                                                        and Tipo = 'M';
                                                    End
                
                                                Insert into TBREMESSA_ITEM_ALOCACAO (
                                                estabelecimento_id, tabela_id, tab_item_id, tipo,
                                                localizacao_id, produto_id, tamanho, Quantidade, Saldo,
                                                Remessa, Talao, Agrupamento_Id, Agrup_Ped_Id, TIPO_REMESSA, ORIGEM_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM)
                                                values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                                :localizacao_id, :OUTRO_PRODUTO_ID, :tamanho, :vQtd_Disp,
                                                :vQtd_Disp, :Remessa, :Talao, :Agrupamento_Id, :Agrup_Ped_Id, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                End
                
                                            vQtd_Prd = :vQtd_Prd - :vQtd_Disp;
                
                                            Delete From TbPedido_Consumo
                                            Where Estabelecimento_Id = :Estabelecimento_Id
                                              and Pedido_Id = :Pedido
                                              and Pedido_Item_Id = :Controle
                                              and Tamanho_Item = :Tamanho
                                              and Tipo = 'C';
                                           End
                        
                                       End
                                  End
                              End
                         END


                        End else
                        begin
                            
                            vQtd_Prd = :QTD_SALDO;

                            if (Mod(:vQtd_Prd,:Qtd_Mult) > 0 and :aloc_mult = '1') Then
                            Begin
                                :vQtd_Prd = :vQtd_Prd - (Mod(:vQtd_Prd,:Qtd_Mult));
                            End
                            
                            if (:aloc_mult <> '1') Then
                            Begin
                                Qtd_Mult = 1;
                            End
                    
                            if (:vQtd_Prd > 0) then
                            Begin

                                EXECUTE PROCEDURE SPI_TRATA_PEDIDO_MULT_TAL(
                                     :conf_agrupamento_id,
                                     :PEDIDO,
                                     :Controle,
                                     NULL,
                                     :MODELO_CODIGO,
                                     :produto_id,
                                     :COR_ID,
                                     :Perfil_Sku,
                                     :TAMANHO,
                                     :vQtd_Prd,
                                     :qtd_mult,
                                     :ESTABELECIMENTO_ID,
                                     current_date,
                                     :PERFIL_COR,
                                     :vQtd_Prd,
                                     :produto_id,
                                     :TAMANHO
                                );
    
                                --exception "..." 'TRATAMENTO DE PEDIDOS COM MULTIPLOS AGRUPAMENTOS N??O CONFIGURADO';
                           END
                        end
                    end
               End
         End
     end
End
^

SET TERM ; ^

