CREATE OR REPLACE FUNCTION public.rendeles_rendezes(integer)
  RETURNS boolean AS
'declare

-- c_forgalom
c_forgalom cursor (c_tetel_kod integer) for

select tetel_rendeles.partner_kod,
       tetel_rendeles.raktar_kod,
       tetel_rendeles.tetel_kod,
       tetel_rendeles.rendelt
  from tetel_rendeles
 where tetel_rendeles.rendelt <> 0
   AND ((tetel_rendeles.tetel_kod = c_tetel_kod) or (c_tetel_kod = 0))
 order by 3,1,2;

c_rendelesek cursor (c_tetel_kod integer, c_partner_kod integer) for

SELECT rm.kod as sor_kod, rm.mennyiseg
   FROM raktar_mozgas_fej rmf
   INNER JOIN raktar_mozgas rm ON rm.fej_kod = rmf.kod
   WHERE rmf.bizonylat_fajta = 11
       AND rmf.sztornozott_bizonylat_kod = 0 AND rmf.sztornozo_bizonylat_kod = 0
       AND rmf.partner_kod = c_partner_kod
       AND rm.tetel_kod = c_tetel_kod
   ORDER BY rmf.kelte DESC;
 

tg_tetel_kod        tetel_rendeles.tetel_kod%type;

v_sor_kod           raktar_mozgas.kod%type;
v_mennyiseg         raktar_mozgas.mennyiseg%type;
v_sor_mennyiseg     raktar_mozgas.mennyiseg%type;

v_partner_kod       tetel_rendeles.partner_kod%type;
v_raktar_kod        tetel_rendeles.raktar_kod%type;
v_tetel_kod        tetel_rendeles.tetel_kod%type;
v_rendeles_allatti_mennyiseg    tetel_rendeles.rendelt%type;


begin
  tg_tetel_kod:=$1;

   UPDATE raktar_mozgas 
      SET mennyiseg_szamlazva = mennyiseg 
    WHERE kod in (SELECT raktar_mozgas.kod FROM raktar_mozgas_fej, raktar_mozgas WHERE raktar_mozgas_fej.kod = raktar_mozgas.fej_kod AND bizonylat_fajta = 11)
      AND ((tetel_kod = tg_tetel_kod) or (tg_tetel_kod = 0));

   open c_forgalom(tg_tetel_kod);

   fetch c_forgalom
    into v_partner_kod, 
         v_raktar_kod,
         v_tetel_kod,
         v_rendeles_allatti_mennyiseg;

   while found loop

      open c_rendelesek(v_tetel_kod, v_partner_kod);

      fetch c_rendelesek
       into v_sor_kod,
            v_mennyiseg;

      while found loop

         if v_rendeles_allatti_mennyiseg > v_mennyiseg then
            v_sor_mennyiseg = 0;
            v_rendeles_allatti_mennyiseg = v_rendeles_allatti_mennyiseg - v_mennyiseg;
         else
            v_sor_mennyiseg = v_mennyiseg - v_rendeles_allatti_mennyiseg;
            v_rendeles_allatti_mennyiseg = 0;
         end if;

         UPDATE raktar_mozgas SET mennyiseg_szamlazva = v_sor_mennyiseg WHERE kod = v_sor_kod;


         fetch c_rendelesek
          into v_sor_kod,
               v_mennyiseg;
               
      end loop;

      close c_rendelesek;    

      fetch c_forgalom
       into v_partner_kod, 
            v_raktar_kod,
            v_tetel_kod,            
            v_rendeles_allatti_mennyiseg;
      
    end loop;

    close c_forgalom;


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