update raktar_mozgas a
   set mee_kod = (select b.mee_kod from raktar_mozgas b where b.kod = a.szallitos_tetel_kod),
       forras_raktar_atlagar = (select c.forras_raktar_atlagar from raktar_mozgas c where c.kod = a.szallitos_tetel_kod)
  where (a.szallitos_tetel_kod <> 0) and (a.mee_kod = 0);

CREATE OR REPLACE FUNCTION tr_raktar_mozgas_atlagar()
  RETURNS "trigger" AS
'declare

  v_atl_mennyiseg     tetel_raktar.atl_mennyiseg%type;
  v_atl_atlagar       tetel_raktar.atl_atlagar%type;
  v_uj_atlagar        tetel_raktar.atl_atlagar%type;
  v_netto_osszeg_huf  raktar_mozgas.netto_osszeg_huf%type;

begin
  -- Ha nem keszletet mozgatunk, akkor semmit sem kell tenni
  if new.csak_fobizonylat_tetel = ''1'' then
     if new.tetel_tipus = ''0'' then
        select utolsobeszerzesiar
          into v_atl_atlagar
          from tetel
         where kod = new.tetel_kod;
        new.forras_raktar_atlagar:=v_atl_atlagar;
     end if;
     return new;
  end if;

  -- Keszletet erinto mozgas

  if new.forras_raktar_kod<>0 then

     update tetel_raktar
        set keszlet = keszlet - new.mennyiseg,
            szabad = keszlet - new.mennyiseg - foglalt,
            atl_mennyiseg = atl_mennyiseg - new.mennyiseg
      where raktar_kod = new.forras_raktar_kod
        and tetel_kod = new.tetel_kod;

     select atl_mennyiseg,
            atl_atlagar
       into v_atl_mennyiseg,
            v_atl_atlagar
       from tetel_raktar
      where raktar_kod = new.forras_raktar_kod
        and tetel_kod = new.tetel_kod;

     new.forras_raktar_ujkeszlet:=v_atl_mennyiseg;
     new.forras_raktar_atlagar:=v_atl_atlagar;
  end if;

  if new.cel_raktar_kod<>0 then
        
     v_netto_osszeg_huf:=new.netto_osszeg_huf;

     if v_netto_osszeg_huf = 0 then
           
        select atl_atlagar * new.mennyiseg
          into v_netto_osszeg_huf
          from tetel_raktar
         where raktar_kod = new.forras_raktar_kod
           and tetel_kod = new.tetel_kod;
     end if;

     select atl_mennyiseg,
            atl_atlagar
       into v_atl_mennyiseg,
            v_atl_atlagar
       from tetel_raktar
      where raktar_kod = new.cel_raktar_kod
        and tetel_kod = new.tetel_kod;

     if v_atl_mennyiseg + new.mennyiseg<>0 then
        v_uj_atlagar:=((v_atl_mennyiseg * v_atl_atlagar) + v_netto_osszeg_huf) / (v_atl_mennyiseg + new.mennyiseg);
     else
        -- v_uj_atlagar:=0;
     end if;

     update tetel_raktar
        set keszlet = keszlet + new.mennyiseg,
            szabad = keszlet + new.mennyiseg - foglalt,
            atl_mennyiseg = atl_mennyiseg + new.mennyiseg,
            atl_atlagar = v_uj_atlagar
      where raktar_kod = new.cel_raktar_kod
        and tetel_kod = new.tetel_kod;

     new.cel_raktar_ujkeszlet:=v_atl_mennyiseg + new.mennyiseg;
     new.cel_raktar_atlagar:=v_uj_atlagar;
  end if;

  return new;
end;'
  LANGUAGE 'plpgsql' VOLATILE;