CREATE TABLE raktar_polc
(
  kod serial,
  polc_cim character varying(20) NOT NULL,
  sorrend integer,
  megjegyzes character varying(200),
  CONSTRAINT raktar_polc_pkey PRIMARY KEY (kod),
  CONSTRAINT raktar_polc_u1 UNIQUE (polc_cim)
)
WITHOUT OIDS;

CREATE TABLE raktar_mozgas_polc
(
  kod serial,
  rm_kod integer NOT NULL,
  polc_cim character varying(20),
  mennyiseg numeric(16,4) DEFAULT 0,
  letrejott timestamp without time zone DEFAULT now(),
  modosult timestamp without time zone DEFAULT now(),
  CONSTRAINT raktar_mozgas_polc_pkey PRIMARY KEY (kod),
  CONSTRAINT raktar_mozgas_polc_fk1 FOREIGN KEY (rm_kod)
      REFERENCES raktar_mozgas (kod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT raktar_mozgas_polc_fk2 FOREIGN KEY (polc_cim)
      REFERENCES raktar_polc (polc_cim) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;

CREATE OR REPLACE FUNCTION public.tr_raktar_mozgas_polc_afterinsert()
  RETURNS trigger AS
$BODY$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         tetel_raktar.tetel_kod%type;
begin

  SELECT rmf.forras_raktar_kod, rmf.cel_raktar_kod, rm.tetel_kod INTO v_forras_raktar_kod, v_cel_raktar_kod, v_tetel_kod
     FROM raktar_mozgas rm
     LEFT JOIN raktar_mozgas_fej rmf ON rmf.kod = rm.fej_kod
     WHERE rm.kod = new.rm_kod;

  IF (v_forras_raktar_kod <> 0) THEN
     IF (SELECT count(*) FROM tetel_raktar_polc WHERE raktar_kod = v_forras_raktar_kod AND tetel_kod = v_tetel_kod AND polc_cim = new.polc_cim) = 0 THEN
        INSERT INTO tetel_raktar_polc (raktar_kod,tetel_kod,polc_cim,mennyiseg) VALUES (v_forras_raktar_kod,v_tetel_kod,new.polc_cim,0);
     END IF;

     UPDATE tetel_raktar_polc 
        SET mennyiseg = mennyiseg - new.mennyiseg 
      WHERE raktar_kod = v_forras_raktar_kod AND tetel_kod = v_tetel_kod AND polc_cim = new.polc_cim;
  END IF;

  IF (v_cel_raktar_kod <> 0) THEN
     IF (SELECT count(*) FROM tetel_raktar_polc WHERE raktar_kod = v_cel_raktar_kod AND tetel_kod = v_tetel_kod AND polc_cim = new.polc_cim) = 0 THEN
        INSERT INTO tetel_raktar_polc (raktar_kod,tetel_kod,polc_cim,mennyiseg) VALUES (v_cel_raktar_kod,v_tetel_kod,new.polc_cim,0);
     END IF;

     UPDATE tetel_raktar_polc 
        SET mennyiseg = mennyiseg + new.mennyiseg 
      WHERE raktar_kod = v_cel_raktar_kod AND tetel_kod = v_tetel_kod AND polc_cim = new.polc_cim;
  END IF;

  return new;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
  
CREATE TRIGGER trigger_raktar_mozgas_polc_after_insert
  AFTER INSERT
  ON public.raktar_mozgas_polc
  FOR EACH ROW
  EXECUTE PROCEDURE public.tr_raktar_mozgas_polc_afterinsert();