delete from gyartas
   where beepulo in (select kod from tetel where substring(sor3 from 1 for 1) = 'S');

delete from tetel 
   where substring(sor3 from 1 for 1) = 'S';

CREATE OR REPLACE FUNCTION plpgsql_call_handler()
  RETURNS language_handler AS
'$libdir/plpgsql', 'plpgsql_call_handler'
  LANGUAGE 'c' VOLATILE;
ALTER FUNCTION plpgsql_call_handler() OWNER TO postgres;

CREATE OR REPLACE FUNCTION atlagar_kezdo()
  RETURNS boolean AS
'declare

-- c_cikkek
c_cikkek cursor for

select kod
  from tetel
 order by kod;

v_tetel_kod int4;

begin
  open c_cikkek;

  fetch c_cikkek
   into v_tetel_kod;

  while found loop
    
    perform atlagar_tetel(v_tetel_kod);

    fetch c_cikkek
     into v_tetel_kod;
  end loop;

  close c_cikkek;

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


CREATE OR REPLACE FUNCTION atlagar_tetel(integer)
  RETURNS boolean AS
'declare

v_tetel_kod int4;

 
-- c_forgalom
c_forgalom cursor for

select rt.kod,
       rt.forras_raktar_kod,
       rt.cel_raktar_kod,
       rt.mennyiseg,
       rt.netto_osszeg_huf
  from raktar_mozgas_fej rf,
       raktar_mozgas rt
 where rf.kod = rt.fej_kod
   and rt.tetel_kod = v_tetel_kod
   and rt.csak_fobizonylat_tetel<>1
 order by rf.datum,
       rf.ido,
       rt.kod;

v_kod               raktar_mozgas.kod%type;
v_forras_raktar_kod raktar_mozgas.forras_raktar_kod%type;
v_cel_raktar_kod    raktar_mozgas.cel_raktar_kod%type;
v_mennyiseg         raktar_mozgas.mennyiseg%type;
v_netto_osszeg_huf  raktar_mozgas.netto_osszeg_huf%type;

v_atl_mennyiseg     tetel_raktar.atl_mennyiseg%type;
v_atl_atlagar       tetel_raktar.atl_atlagar%type;
v_uj_atlagar        tetel_raktar.atl_atlagar%type;


begin
  v_tetel_kod:=$1;

  update tetel_raktar
     set atl_mennyiseg = 0,
         atl_atlagar = 0
   where tetel_kod = v_tetel_kod;

  open c_forgalom;

    fetch c_forgalom
     into v_kod,
          v_forras_raktar_kod,
          v_cel_raktar_kod,
          v_mennyiseg,
          v_netto_osszeg_huf;

    while found loop
      
      if v_forras_raktar_kod<>0 then

        update tetel_raktar
           set atl_mennyiseg = atl_mennyiseg - v_mennyiseg
         where raktar_kod = v_forras_raktar_kod
           and tetel_kod = v_tetel_kod;

        select atl_mennyiseg,
               atl_atlagar
          into v_atl_mennyiseg,
               v_atl_atlagar
          from tetel_raktar
         where raktar_kod = v_forras_raktar_kod
           and tetel_kod = v_tetel_kod;

        update raktar_mozgas
           set forras_raktar_ujkeszlet = v_atl_mennyiseg,
               forras_raktar_atlagar = v_atl_atlagar
         where kod = v_kod
           and (forras_raktar_ujkeszlet<>v_atl_mennyiseg or forras_raktar_atlagar<>v_atl_atlagar or
                forras_raktar_ujkeszlet is null or forras_raktar_atlagar is null);
      end if;

      if v_cel_raktar_kod<>0 then

        if v_netto_osszeg_huf = 0 then
           
           select atl_atlagar * v_mennyiseg
             into v_netto_osszeg_huf
             from tetel_raktar
            where raktar_kod = v_forras_raktar_kod
              and tetel_kod = v_tetel_kod;
        end if;

        select atl_mennyiseg,
               atl_atlagar
          into v_atl_mennyiseg,
               v_atl_atlagar
          from tetel_raktar
         where raktar_kod = v_cel_raktar_kod
           and tetel_kod = v_tetel_kod;

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

        update tetel_raktar
           set atl_mennyiseg = atl_mennyiseg + v_mennyiseg,
               atl_atlagar = v_uj_atlagar
         where raktar_kod = v_cel_raktar_kod
           and tetel_kod = v_tetel_kod;

        update raktar_mozgas
           set cel_raktar_ujkeszlet = v_atl_mennyiseg + v_mennyiseg,
               cel_raktar_atlagar = v_uj_atlagar
         where kod = v_kod
           and (cel_raktar_ujkeszlet<>v_atl_mennyiseg + v_mennyiseg or cel_raktar_atlagar<>v_uj_atlagar or
                cel_raktar_ujkeszlet is null or cel_raktar_atlagar is null);
      end if;

      fetch c_forgalom
       into v_kod,
            v_forras_raktar_kod,
            v_cel_raktar_kod,
            v_mennyiseg,
            v_netto_osszeg_huf;
    end loop;

    close c_forgalom;

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

CREATE OR REPLACE FUNCTION concat_penzeszkoz_biz(irany integer, bizonylat character varying)
  RETURNS character varying AS
'declare

-- pi_forgalom
pi_forgalom cursor for

select kod,
       bizonylatszam       
  from penzeszkoz_iktato
 where penztar_bizonylat_irany = irany
   and penztar_bizonylat = bizonylat
order by kod;

eredmeny character varying;
elvalaszto character varying;
v_kod bigint;
v_bizonylatszam character varying;

begin
  eredmeny := '';
  elvalaszto := '';
  
  open pi_forgalom;

    fetch pi_forgalom
     into v_kod,
          v_bizonylatszam;

    while found loop
      eredmeny := eredmeny || elvalaszto || v_bizonylatszam;
      elvalaszto := '', '';

      fetch pi_forgalom
        into v_kod,
             v_bizonylatszam;
    end loop;

    close pi_forgalom;

  return eredmeny;
end;'
  LANGUAGE 'plpgsql' VOLATILE;  
  

CREATE OR REPLACE FUNCTION concat_penzeszkoz_megj(irany integer, bizonylat character varying)
  RETURNS text AS
'declare

-- pi_forgalom
pi_forgalom cursor for

select kod,
       megjegyzes       
  from penzeszkoz_iktato
 where penztar_bizonylat_irany = irany
   and penztar_bizonylat = bizonylat
order by kod;

eredmeny text;
elvalaszto character varying;
v_kod bigint;
v_megjegyzes character varying;

begin
  eredmeny := '';
  elvalaszto := '';
  
  open pi_forgalom;

    fetch pi_forgalom
     into v_kod,
          v_megjegyzes;

    while found loop
      eredmeny := eredmeny || elvalaszto || v_megjegyzes;
      elvalaszto := '', '';

      fetch pi_forgalom
        into v_kod,
             v_megjegyzes;
    end loop;

    close pi_forgalom;

  return eredmeny;
end;'
  LANGUAGE 'plpgsql' VOLATILE;