CREATE OR REPLACE FUNCTION fifo_kezdo()
  RETURNS boolean AS
'-- Verzio: V2.01 2009.02.10.

declare

  c_cikkek cursor for

  select kod
    from tetel
   order by kod;

  v_tetel_kod integer;
  v_count     integer;

begin
  open c_cikkek;

  fetch c_cikkek
   into v_tetel_kod;

  while found loop
    
    select count(*)
      into v_count
      from raktar_mozgas
     where tetel_kod = v_tetel_kod;

    if v_count>0 then
      perform fifo_tetel(v_tetel_kod);
    end if;

    fetch c_cikkek
     into v_tetel_kod;
  end loop;

  close c_cikkek;

  -- csak_fobizonylat_tetel = 1 eset kezelese
  update raktar_mozgas
     set forras_raktar_fifo_ar =
        (select a.forras_raktar_fifo_ar
           from raktar_mozgas a
          where a.kod = raktar_mozgas.szallitos_tetel_kod),
         cel_raktar_fifo_ar =
        (select a.cel_raktar_fifo_ar
           from raktar_mozgas a
          where a.kod = raktar_mozgas.szallitos_tetel_kod)
    where raktar_mozgas.csak_fobizonylat_tetel = ''1''
      and raktar_mozgas.szallitos_tetel_kod is not null;

  return true;
end;
' LANGUAGE 'plpgsql' VOLATILE;

CREATE OR REPLACE FUNCTION tr_raktar_mozgas_fifo()
  RETURNS "trigger" AS
'-- Verzio: V2.01 2009.02.10.

declare

  v_forras_raktar_fifo_ar raktar_mozgas.forras_raktar_fifo_ar%type;
  v_cel_raktar_fifo_ar    raktar_mozgas.cel_raktar_fifo_ar%type;
  v_mennyiseg             raktar_mozgas.mennyiseg%type;

begin
  -- Ha nem keszletet mozgatunk, akkor azt specialisan kell kezelni
  if new.csak_fobizonylat_tetel = ''1'' then

    if new.szallitos_tetel_kod is not null then

      select forras_raktar_fifo_ar,
             cel_raktar_fifo_ar
        into v_forras_raktar_fifo_ar,
             v_cel_raktar_fifo_ar
        from raktar_mozgas
       where kod = new.szallitos_tetel_kod;

       new.forras_raktar_fifo_ar:=v_forras_raktar_fifo_ar;
       new.forras_raktar_fifo_ertek:=v_forras_raktar_fifo_ar * v_mennyiseg;

       new.cel_raktar_fifo_ar:=v_cel_raktar_fifo_ar;
       new.cel_raktar_fifo_ertek:=v_cel_raktar_fifo_ar * v_mennyiseg;       
    end if;
    
  -- Keszletet erinto mozgas
  else  
    perform fifo_tetel(new.tetel_kod);
  end if;
  
  return new;
end;'
  LANGUAGE 'plpgsql' VOLATILE;
