CREATE OR ALTER procedure SPU_TRATA_PEDIDO_ESTOQUE5 (
    PEDIDO_1 integer,
    ALOCDESALOC char(1))
returns (
    ESTABELECIMENTO_ID integer,
    PEDIDO integer,
    CONTROLE integer,
    QTD_PRD numeric(15,4),
    QTD_DISP numeric(15,4),
    REMESSA integer,
    TALAO integer,
    PRODUTO_ID integer,
    LOCALIZACAO_ID integer,
    TAMANHO integer,
    REM_STATUS char(1),
    QTD_MULT integer)
as
declare variable VQTD_PRD numeric(15,4);
declare variable VQTD_DISP numeric(15,4);
declare variable ALOC_MULT char(1);
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');

FOR 
Select A.Estabelecimento_Codigo, A.Pedido, A.Controle,
       A.Produto_Codigo, A.Localizacao_Id, A.Tamanho,
       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 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
 --For Update
   With Lock
Into :Estabelecimento_Id, :Pedido, :Controle,
     :Produto_Id, :Localizacao_Id, :Tamanho, :Rem_Status, :Qtd_Prd, :Qtd_Mult
Do
begin

IF(:Qtd_Mult = 0) THEN
BEGIN
    :Qtd_Mult = 1;
END

if (:Rem_Status = '0') then
     Begin

      if (:AlocDesaloc = 'D') then
          Begin
            Delete from TBESTOQUE_DETALHE_ALOCACAO
            Where Estabelecimento_id = :Estabelecimento_Id
              and Tabela_id =  :Pedido
              and Tab_item_id = :Controle
              and Tipo = 'P'
              and Produto_Id = :Produto_Id
              and Tamanho = :Tamanho
              and Saldo > 0;
          End
        
      if (:AlocDesaloc = 'A') then
           Begin
           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 (:vQtd_Prd > 0) then
              Begin
              For
              Select First 1
                Cast(IIF(:Tamanho =  0, A.Saldo,
                     IIF(:Tamanho =  1, A.T01_Saldo,IIF(:Tamanho =  2, A.T02_Saldo,
                     IIF(:Tamanho =  3, A.T03_Saldo,IIF(:Tamanho =  4, A.T04_Saldo,
                     IIF(:Tamanho =  5, A.T05_Saldo,IIF(:Tamanho =  6, A.T06_Saldo,
                     IIF(:Tamanho =  7, A.T07_Saldo,IIF(:Tamanho =  8, A.T08_Saldo,
                     IIF(:Tamanho =  9, A.T09_Saldo,IIF(:Tamanho = 10, A.T10_Saldo,
                     IIF(:Tamanho = 11, A.T11_Saldo,IIF(:Tamanho = 12, A.T12_Saldo,
                     IIF(:Tamanho = 13, A.T13_Saldo,IIF(:Tamanho = 14, A.T14_Saldo,
                     IIF(:Tamanho = 15, A.T15_Saldo,IIF(:Tamanho = 16, A.T16_Saldo,
                     IIF(:Tamanho = 17, A.T17_Saldo,IIF(:Tamanho = 18, A.T18_Saldo,
                     IIF(:Tamanho = 19, A.T19_Saldo,IIF(:Tamanho = 20, A.T20_Saldo,
                     0))))))))))))))))))))) As Numeric(15,4))
              -(Coalesce(
               (Select First 1 ESA.QUANTIDADE
                  From TBESTOQUE_SALDO_ALOCACAO ESA
                 Where ESA.ESTABELECIMENTO_ID = A.Estabelecimento_Codigo
                   and ESA.LOCALIZACAO_ID = A.Localizacao_Codigo
                   and ESA.PRODUTO_ID = A.Produto_Codigo
                   and ESA.TAMANHO = :Tamanho),0))
        
                  From TbEstoque_Saldo A
                 Where A.Estabelecimento_Codigo = :Estabelecimento_Id
                   and A.Localizacao_Codigo = :Localizacao_Id
                   and A.Produto_Codigo = :Produto_Id
                  Into :Qtd_Disp
                    Do
                       Begin
                       if (:Qtd_Disp > 0) then
                            Begin
                                vQtd_Disp = :Qtd_Disp;

                                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 <= :vQtd_Disp and :vQtd_Disp > 0) Then
                                   Begin
                                    insert into TBESTOQUE_DETALHE_ALOCACAO (
                                    estabelecimento_id, tabela_id, tab_item_id, tipo, localizacao_id,
                                    produto_id, tamanho, Quantidade, Saldo)
                                    values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                    :localizacao_id, :produto_id, :tamanho, :vQtd_Prd, :vQtd_Prd);
            
                                    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 else
                                IF (:vQtd_Prd > :vQtd_Disp and :vQtd_Disp > 0) Then
                                   Begin
                                    insert into TBESTOQUE_DETALHE_ALOCACAO (
                                    estabelecimento_id, tabela_id, tab_item_id, tipo, localizacao_id,
                                    produto_id, tamanho, Quantidade, Saldo)
                                    values (:estabelecimento_id, :Pedido, :Controle, 'P',
                                    :localizacao_id, :produto_id, :tamanho, :vQtd_Disp, :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
   end
End;