ALTER TABLE raktar_mozgas_egyedi ADD COLUMN letrejott timestamp without time zone;
ALTER TABLE raktar_mozgas_egyedi ALTER COLUMN letrejott SET DEFAULT now();

ALTER TABLE raktar_mozgas_egyedi ADD COLUMN modosult timestamp without time zone;
ALTER TABLE raktar_mozgas_egyedi ALTER COLUMN modosult SET DEFAULT now();

CREATE OR REPLACE FUNCTION tr_raktar_mozgas_egyedi()
  RETURNS trigger AS
'declare

  v_forras_raktar_kod raktar_mozgas_fej.forras_raktar_kod%type;
  v_cel_raktar_kod    raktar_mozgas_fej.cel_raktar_kod%type;
  v_tetel_kod         raktar_mozgas.tetel_kod%type;
  v_mennyiseg         tetel_raktar_egyedi.mennyiseg%type;
  v_db                integer;

begin
  if (new.csak_fobizonylat_tetel >= 1) then
     return new;  
  end if;

     -- Bizonylat adatainak meghatarozasa
     select rf.forras_raktar_kod,
            rf.cel_raktar_kod,
            rt.tetel_kod
       into v_forras_raktar_kod,
            v_cel_raktar_kod,
            v_tetel_kod
       from raktar_mozgas_fej rf,
            raktar_mozgas rt
      where rf.kod = rt.fej_kod
        and rt.kod = new.rm_kod;

     -- Forras raktar kezelese
     if v_forras_raktar_kod<>0 then

        select count(*)
          into v_db
          from tetel_raktar_egyedi
         where raktar_kod = v_forras_raktar_kod
           and tetel_kod = v_tetel_kod
           and egyedi_azonosito_kod = new.egyedi_azonosito_kod;

        if v_db = 0 then

           insert into tetel_raktar_egyedi
           (raktar_kod,
            tetel_kod,
            egyedi_azonosito_kod,
            mennyiseg,
            foglalt,
            szabad)

            values

           (v_forras_raktar_kod,
           v_tetel_kod,
           new.egyedi_azonosito_kod,
           - new.mennyiseg,
           0,
           - new.mennyiseg);
        
        else
     
           update tetel_raktar_egyedi
             set mennyiseg = mennyiseg - new.mennyiseg,
                 szabad = szabad - new.mennyiseg
             where raktar_kod = v_forras_raktar_kod
               and tetel_kod = v_tetel_kod
               and egyedi_azonosito_kod = new.egyedi_azonosito_kod;
        end if;

        select mennyiseg
          into v_mennyiseg
          from tetel_raktar_egyedi
         where raktar_kod = v_forras_raktar_kod
           and tetel_kod = v_tetel_kod
           and egyedi_azonosito_kod = new.egyedi_azonosito_kod;

        if v_mennyiseg = 0 then

           delete from tetel_raktar_egyedi
            where raktar_kod = v_forras_raktar_kod
              and tetel_kod = v_tetel_kod
              and egyedi_azonosito_kod = new.egyedi_azonosito_kod;
        end if;
     end if;


     -- Cel raktar kezelese
     if v_cel_raktar_kod<>0 then
  
        select count(*)
          into v_db
          from tetel_raktar_egyedi
         where raktar_kod = v_cel_raktar_kod
           and tetel_kod = v_tetel_kod
           and egyedi_azonosito_kod = new.egyedi_azonosito_kod;

        if v_db = 0 then

          insert into tetel_raktar_egyedi
          (raktar_kod,
           tetel_kod,
           egyedi_azonosito_kod,
           mennyiseg,
           foglalt,
           szabad)

          values

          (v_cel_raktar_kod,
           v_tetel_kod,
           new.egyedi_azonosito_kod,
           new.mennyiseg,
           0,
           new.mennyiseg);
        
        else
     
          update tetel_raktar_egyedi
             set mennyiseg = mennyiseg + new.mennyiseg,
                 szabad = szabad + new.mennyiseg
           where raktar_kod = v_cel_raktar_kod
             and tetel_kod = v_tetel_kod
             and egyedi_azonosito_kod = new.egyedi_azonosito_kod;
        end if;

        select mennyiseg
          into v_mennyiseg
          from tetel_raktar_egyedi
         where raktar_kod = v_cel_raktar_kod
           and tetel_kod = v_tetel_kod
           and egyedi_azonosito_kod = new.egyedi_azonosito_kod;

        if v_mennyiseg = 0 then

           delete from tetel_raktar_egyedi
            where raktar_kod = v_cel_raktar_kod
              and tetel_kod = v_tetel_kod
              and egyedi_azonosito_kod = new.egyedi_azonosito_kod;
        end if;
     end if;

     new.modosult := (SELECT now());     

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

