[firebase-br] WHILE EM SP

Pedro Braga bragaped em gmail.com
Seg Set 8 20:26:19 -03 2008


abaixo a estrutura que uso para esse tipo de situação.

SET TERM ^ ;

CREATE PROCEDURE FATURAR (
    pedcod integer,
    usecod integer,
    troco double precision)
as
declare variable codped integer;
declare variable procod integer;
declare variable qtdeitem float;
declare variable procodcomp integer;
declare variable qtdeitemcomp float;
declare variable numcaixa integer;
declare variable atucaixa integer;
declare variable codmesa integer;
declare variable valdin float;
declare variable valche float;
declare variable valcart float;
declare variable obs varchar(20);
begin

 begin
  --Selecionar os itens do pedido
  for select item_pedido.Ped_Cod, item_pedido.pro_cod,
item_pedido.itped_qtdtotal
        from item_pedido
       where item_pedido.ped_cod = :pedcod
        into :codped, :procod, :qtdeitem
  do
   begin
   --atualizar estoque qundo produto for diferente de composto
    update produto set produto.pro_qtd = (produto.pro_qtd - :qtdeitem)
      where produto.pro_cod = :procod and produto.pro_tip <> 'C';

   --atualizar estoque quando produto for composto
    begin
      for select composicao.comp_pro_cod, composicao.comp_qtd
        from composicao
       where composicao.pro_cod = :procod
         into :procodcomp, :qtdeitemcomp
      do
       update produto set produto.pro_qtd =
                          (produto.pro_qtd - (:qtdeitemcomp * :qtdeitem))
         where produto.pro_cod = :procodcomp;

    end
   end
 end

 begin
 --Atualizar Valores em Caixa com os valores do pedido
  select pedido.pgt_din, pedido.pgt_che, pedido.pgt_cart, pedido.cai_num,
pedido.mesa_cod
    from pedido
   where pedido.ped_cod = :pedcod
    into :valdin, :valche, :valcart, :numcaixa, :codmesa;

  update pedido set pedido.ped_valtotal = ((:valdin + :valche + :valcart) -
:troco)
     where pedido.ped_cod = :pedcod;

  --Verificação do caixa
   select caixa.cai_num
    from caixa
     where caixa.cai_datafch is null
    into :atucaixa;
   if (atucaixa <> numcaixa) then
    begin
     numcaixa = :atucaixa;
    end
 --inserir valores no caixa
  if (:valdin > 0) then
   begin
    OBS = 'PEDIDO: '||:pedcod;
    insert into movimentacao_caixa(CAI_NUM, USE_COD, MOV_TIP, MOV_TIP_VAL,
MOV_VAL, MOV_MOT)
                           values(:numcaixa,
:usecod,'E','DIN',:valdin,:OBS);
   end

   if (:valche > 0) then
   begin
    OBS = 'PEDIDO: '||:pedcod;
    insert into movimentacao_caixa(CAI_NUM, USE_COD, MOV_TIP, MOV_TIP_VAL,
MOV_VAL, MOV_MOT)
                           values(:numcaixa,
:usecod,'E','CHE',:valche,:OBS);
   end

  if (:valcart > 0) then
   begin
    OBS = 'PEDIDO: '||:pedcod;
    insert into movimentacao_caixa(CAI_NUM, USE_COD, MOV_TIP, MOV_TIP_VAL,
MOV_VAL, MOV_MOT)
                           values(:numcaixa,
:usecod,'E','CAR',:valcart,:OBS);
   end

  if (:troco > 0) then
   begin
    OBS = 'TROCO PEDIDO: '||:pedcod;
    insert into movimentacao_caixa(CAI_NUM, USE_COD, MOV_TIP, MOV_TIP_VAL,
MOV_VAL, MOV_MOT)
                           values(:numcaixa, :usecod,'T','DIN',:troco,:OBS);
   end

 end

 --MARCAR PEDIDO COMO FATURADO
 begin
  update pedido set pedido.ped_sit = 'F'
   where pedido.ped_cod = :codped and pedido.ped_sit = 'A';
 end

 --LIBERAR MESAS DO PEDIDO
 begin
  /*--Selecionar as Mesas Agrupadas
  for select junta_mesa.mesa_fil
        from junta_mesa
       where junta_mesa.mesa_cod = :codmesa
        into :codjuntamesa
  do
   begin
   --atualizar mesas Agrupadas Mesas Filho
    update mesa set mesa.mesa_sit = 'D'
      where mesa.mesa_cod = :codjuntamesa;
   end */
  delete from junta_mesa where junta_mesa.mesa_cod = :codmesa;
  --mesa Pai
  update mesa set mesa.mesa_sit = 'D'
      where mesa.mesa_cod = :codmesa;
 end
END^

SET TERM ; ^



2008/9/8 Anderson Miranda Barrozo <andersonpaduarj em gmail.com>

> Galera,
>
>     Criei uma SP para atualizar o STATUS do pedido para C de Cancelado. So
> que esta mesma SP precisa ir na tabela de item
> do pedido e estornar todos os lançamento para estoque (TABELA PRODUTO).
>
>     Como montaria a SP para ler todos os ítens de um determinado pedido.
>
> --
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> AS Informática
> Anderson Miranda Barrozo
> (22) 8115-8761
> MSN: andersonpaduarj em hotmail.com
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista