CREATE OR REPLACE FUNCTION public.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;

  v_partner_kod       raktar_mozgas_fej.partner_kod%type;
  v_bizonylat_fajta   raktar_mozgas_fej.bizonylat_fajta%type;
  v_sztornozott_bizonylat_kod  raktar_mozgas_fej.sztornozott_bizonylat_kod%type;
  v_sztornozo_bizonylat_kod   raktar_mozgas_fej.sztornozo_bizonylat_kod%type;

  v_db                integer;
  v_foglalt           real;
  v_foglalt_valtozas  real;
  v_rendelt           real;
  v_rendelt_valtozas  real;
  v_foglalva          real;
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;

  ---------------------------------------------------------------
  -- partner es bizonylat adatok gyujtese -----------------------
  ---------------------------------------------------------------
  SELECT partner_kod, bizonylat_fajta, sztornozott_bizonylat_kod, sztornozo_bizonylat_kod 
    INTO v_partner_kod, v_bizonylat_fajta, v_sztornozott_bizonylat_kod, v_sztornozo_bizonylat_kod
    FROM raktar_mozgas_fej
   WHERE kod = new.fej_kod;

  ---------------------------------------------------------------
  -- FOGLALAS ---------------------------------------------------
  ---------------------------------------------------------------
  IF new.csak_fobizonylat_tetel = ''2'' THEN
     IF new.tetel_tipus = ''1'' THEN
        IF new.forras_raktar_kod<>0 THEN
           UPDATE tetel_raktar
             SET foglalt = foglalt + new.mennyiseg,
                 szabad = keszlet - new.mennyiseg - foglalt
             WHERE raktar_kod = new.forras_raktar_kod
               AND tetel_kod = new.tetel_kod;

           SELECT count(*)
             INTO v_db
             FROM tetel_foglalas
            WHERE partner_kod = v_partner_kod
              AND raktar_kod = new.forras_raktar_kod
              AND tetel_kod = new.tetel_kod;   

           IF v_db = 0 THEN
              INSERT INTO tetel_foglalas (partner_kod,raktar_kod,tetel_kod,foglalt) VALUES
                                         (v_partner_kod,new.forras_raktar_kod,new.tetel_kod,new.mennyiseg);
           ELSE
              UPDATE tetel_foglalas
                 SET foglalt = foglalt + new.mennyiseg
               WHERE partner_kod = v_partner_kod
                 AND raktar_kod = new.forras_raktar_kod
                 AND tetel_kod = new.tetel_kod;             
           END IF;             
        END IF;
     END IF;
     RETURN new;
  END IF;

  ---------------------------------------------------------------
  -- RENDELES ---------------------------------------------------
  --------------------------------------------------------------- 
  IF new.csak_fobizonylat_tetel = ''3'' THEN
     IF (new.tetel_tipus <> ''0'') AND (new.tetel_tipus <> ''8'') THEN
        IF new.forras_raktar_kod<>0 THEN

           ----------------------------------------------------
           ------------------ tetel_raktar --------------------
           ----------------------------------------------------
           SELECT rendelt
             INTO v_rendelt -- rendeles allomany jelenlegi erteke
             FROM tetel_raktar
            WHERE raktar_kod = new.forras_raktar_kod
              AND tetel_kod = new.tetel_kod;

           IF (new.mennyiseg < 0) THEN -- rendeles sztornozas esete
              IF ((v_rendelt + new.mennyiseg) < 0) THEN 
                  v_rendelt_valtozas := v_rendelt*-1;
              ELSE
                  v_rendelt_valtozas := new.mennyiseg;
              END IF;   
           ELSE
              v_rendelt_valtozas = new.mennyiseg;
           END IF;                         
             
           UPDATE tetel_raktar
             SET rendelt = rendelt + v_rendelt_valtozas
             WHERE raktar_kod = new.forras_raktar_kod
               AND tetel_kod = new.tetel_kod;
           ------------------ tetel_raktar ---------------EOF-               

           ---------------------------------------------------
           ------------------ tetel_rendeles -----------------
           ---------------------------------------------------
           SELECT count(*)
             INTO v_db
             FROM tetel_rendeles
            WHERE partner_kod = v_partner_kod
              AND raktar_kod = new.forras_raktar_kod
              AND tetel_kod = new.tetel_kod;

           IF v_db = 0 THEN
              INSERT INTO tetel_rendeles (partner_kod,raktar_kod,tetel_kod,rendelt) VALUES
                                         (v_partner_kod,new.forras_raktar_kod,new.tetel_kod,new.mennyiseg);
           ELSE

              SELECT rendelt
                INTO v_rendelt -- rendeles allomany jelenlegi erteke
                FROM tetel_rendeles
               WHERE partner_kod = v_partner_kod
                 AND raktar_kod = new.forras_raktar_kod
                 AND tetel_kod = new.tetel_kod;  

              IF (v_sztornozott_bizonylat_kod > 0) AND (new.mennyiseg < 0) THEN -- rendeles sztornozas esete
                 IF ((v_rendelt + new.mennyiseg) < 0) THEN 
                     v_rendelt_valtozas := v_rendelt*-1;
                 ELSE
                     v_rendelt_valtozas := new.mennyiseg;
                 END IF;   
              ELSE
                 v_rendelt_valtozas = new.mennyiseg;
              END IF;           

              UPDATE tetel_rendeles
                 SET rendelt = rendelt + v_rendelt_valtozas
               WHERE partner_kod = v_partner_kod
                 AND raktar_kod = new.forras_raktar_kod
                 AND tetel_kod = new.tetel_kod;             
           END IF; 
           ------------------ tetel_rendeles -------------EOF-
        END IF;
     END IF;

     IF (v_sztornozott_bizonylat_kod > 0) AND (v_bizonylat_fajta = 11) THEN
        SELECT rendeles_frissit(new.tetel_kod);
     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;

     if new.cel_raktar_kod=0 then -- visszaigazolt tetel kiszallitasa
        SELECT foglalt
          INTO v_foglalt
          FROM tetel_foglalas
         WHERE partner_kod = v_partner_kod
           AND raktar_kod = new.forras_raktar_kod
           AND tetel_kod = new.tetel_kod;   

         IF (v_foglalt <> 0) THEN
            IF (new.mennyiseg > v_foglalt) THEN 
               v_foglalt_valtozas := v_foglalt;
            ELSE
               v_foglalt_valtozas := new.mennyiseg;
            END IF;

            UPDATE tetel_foglalas
               SET foglalt = foglalt - v_foglalt_valtozas
             WHERE partner_kod = v_partner_kod
               AND raktar_kod = new.forras_raktar_kod
               AND tetel_kod = new.tetel_kod;

	    UPDATE tetel_raktar
	       SET foglalt = foglalt - v_foglalt_valtozas, szabad = szabad + v_foglalt_valtozas
	     WHERE raktar_kod = new.forras_raktar_kod AND tetel_kod = new.tetel_kod;               

             new.mennyiseg_foglalasbol:=v_foglalt_valtozas;	     
         END IF;

     end if;
  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;

     select szabad
       into v_foglalva
      from tetel_raktar
     where raktar_kod = new.cel_raktar_kod
       and tetel_kod = new.tetel_kod;

     IF (v_foglalva < 0) THEN
         v_foglalva:=v_foglalva*-1;
     ELSE
         v_foglalva:=0;
     END IF;

     IF (new.mennyiseg < v_foglalva) THEN 
        v_foglalva := new.mennyiseg;
     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.mennyiseg_foglalasra_erkezett:=v_foglalva;
     new.cel_raktar_ujkeszlet:=v_atl_mennyiseg + new.mennyiseg;
     new.cel_raktar_atlagar:=v_uj_atlagar;

     if new.forras_raktar_kod=0 then -- rendelesre erkezo tetel bevetelezese
        SELECT rendelt
          INTO v_rendelt
          FROM tetel_rendeles
         WHERE partner_kod = v_partner_kod
           AND raktar_kod = new.cel_raktar_kod
           AND tetel_kod = new.tetel_kod;   

         IF (v_rendelt <> 0) THEN
            IF (new.mennyiseg > v_rendelt) THEN 
               v_rendelt_valtozas := v_rendelt;
            ELSE
               v_rendelt_valtozas := new.mennyiseg;
            END IF;

            UPDATE tetel_rendeles
               SET rendelt = rendelt - v_rendelt_valtozas
             WHERE partner_kod = v_partner_kod
               AND raktar_kod = new.cel_raktar_kod
               AND tetel_kod = new.tetel_kod;             

            UPDATE tetel_raktar
	       SET rendelt = rendelt - v_rendelt_valtozas
	     WHERE raktar_kod = new.cel_raktar_kod 
	       AND tetel_kod = new.tetel_kod;

	    new.mennyiseg_rendelesre_erkezett:=v_rendelt_valtozas;	
         END IF;

     end if;
     
  end if;

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