# HG changeset patch # User Raimund Renkert # Date 1478691548 -3600 # Node ID 84ff77bba9b0a215fa3e495bf57420f29c702de6 # Parent 315df94c679b46d9302b9cd496438350e076d64f Let the database generate id_alt and initial status for new messung objects. diff -r 315df94c679b -r 84ff77bba9b0 db_schema/lada_schema.sql --- a/db_schema/lada_schema.sql Wed Nov 09 10:18:51 2016 +0100 +++ b/db_schema/lada_schema.sql Wed Nov 09 12:39:08 2016 +0100 @@ -18,6 +18,36 @@ SET search_path = land, pg_catalog; +CREATE FUNCTION set_messung_id_alt() RETURNS trigger + LANGUAGE plpgsql + AS $$ + BEGIN + IF NEW.id_alt IS NULL THEN + NEW.id_alt = ( + SELECT count(*) + FROM land.messung + WHERE probe_id = NEW.probe_id) + 1; + END IF; + RETURN NEW; + END; +$$; + +CREATE FUNCTION set_messung_status() RETURNS trigger + LANGUAGE plpgsql + AS $$ + DECLARE status_id integer; + BEGIN + INSERT INTO land.status_protokoll + (mst_id, datum, text, messungs_id, status_kombi) + VALUES ((SELECT mst_id + FROM land.probe + WHERE id = NEW.probe_id), + now(), '', NEW.id, 1) + RETURNING id into status_id; + UPDATE land.messung SET status = status_id where id = NEW.id; + RETURN NEW; + END; +$$; CREATE FUNCTION update_letzte_aenderung() RETURNS trigger LANGUAGE plpgsql @@ -279,7 +309,7 @@ CREATE TABLE messung ( id serial PRIMARY KEY, - id_alt integer DEFAULT nextval('land.messung_messung_id_alt_seq'::regclass) NOT NULL, + id_alt integer NOT NULL, probe_id integer NOT NULL REFERENCES probe ON DELETE CASCADE, nebenproben_nr character varying(10), mmt_id character varying(2) NOT NULL REFERENCES stammdaten.mess_methode ON DELETE CASCADE, @@ -293,7 +323,8 @@ ); CREATE TRIGGER letzte_aenderung_messung BEFORE UPDATE ON messung FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung(); CREATE TRIGGER tree_modified_messung BEFORE UPDATE ON messung FOR EACH ROW EXECUTE PROCEDURE update_tree_modified_messung(); - +CREATE TRIGGER id_alt_messung BEFORE INSERT ON land.messung FOR EACH ROW EXECUTE PROCEDURE set_messung_id_alt(); +CREATE TRIGGER status_messung AFTER INSERT ON land.messung FOR EACH ROW EXECUTE PROCEDURE set_messung_status(); -- -- Name: kommentar_m; Type: TABLE; Schema: land; Owner: -; Tablespace: diff -r 315df94c679b -r 84ff77bba9b0 src/main/java/de/intevation/lada/factory/ProbeFactory.java --- a/src/main/java/de/intevation/lada/factory/ProbeFactory.java Wed Nov 09 10:18:51 2016 +0100 +++ b/src/main/java/de/intevation/lada/factory/ProbeFactory.java Wed Nov 09 12:39:08 2016 +0100 @@ -366,15 +366,6 @@ messung.setProbeId(probe.getId()); repository.create(messung, "land"); - StatusProtokoll status = new StatusProtokoll(); - status.setDatum(new Timestamp(new Date().getTime())); - status.setMessungsId(messung.getId()); - status.setMstId(probe.getMstId()); - status.setStatusKombi(1); - repository.create(status, "land"); - messung.setStatus(status.getId()); - repository.update(messung, "land"); - for (int mw : mmt.getMessgroessen()) { Messwert wert = new Messwert(); wert.setMessgroesseId(mw); diff -r 315df94c679b -r 84ff77bba9b0 src/main/java/de/intevation/lada/importer/laf/LafObjectMapper.java --- a/src/main/java/de/intevation/lada/importer/laf/LafObjectMapper.java Wed Nov 09 10:18:51 2016 +0100 +++ b/src/main/java/de/intevation/lada/importer/laf/LafObjectMapper.java Wed Nov 09 12:39:08 2016 +0100 @@ -316,14 +316,6 @@ newMessung = ((Messung)created.getData()); created = repository.getById(Messung.class, newMessung.getId(), "land"); newMessung = ((Messung)created.getData()); - StatusProtokoll status = new StatusProtokoll(); - status.setDatum(new Timestamp(new Date().getTime())); - status.setMessungsId(newMessung.getId()); - status.setMstId(mstId); - status.setStatusKombi(1); - Response st = repository.create(status, "land"); - newMessung.setStatus(((StatusProtokoll)st.getData()).getId()); - repository.update(newMessung, "land"); if (object.getAttributes().containsKey("BEARBEITUNGSSTATUS")) { createStatusProtokoll(object.getAttributes().get("BEARBEITUNGSSTATUS"), newMessung, mstId); } diff -r 315df94c679b -r 84ff77bba9b0 src/main/java/de/intevation/lada/rest/MessungService.java --- a/src/main/java/de/intevation/lada/rest/MessungService.java Wed Nov 09 10:18:51 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/MessungService.java Wed Nov 09 12:39:08 2016 +0100 @@ -293,28 +293,13 @@ /* Persist the new messung object*/ Response response = repository.create(messung, "land"); - Messung ret = (Messung)response.getData(); - Messung refreshed = repository.getByIdPlain(Messung.class, ret.getId(), "land"); if(violation.hasWarnings()) { response.setWarnings(violation.getWarnings()); } - StatusProtokoll status = new StatusProtokoll(); - status.setDatum(new Timestamp(new Date().getTime())); - status.setMessungsId((ret.getId())); - Probe probe = - repository.getByIdPlain(Probe.class, ret.getProbeId(), "land"); - status.setMstId(probe.getMstId()); - status.setStatusKombi(1); - repository.create(status, "land"); - refreshed.setStatus(status.getId()); - repository.update(refreshed, "land"); - Response updated= - repository.getById(Messung.class, refreshed.getId(), "land"); - return authorization.filter( request, - updated, + response, Messung.class); }