# HG changeset patch # User Raimund Renkert # Date 1447326886 -3600 # Node ID 46e0523bbd80c55e1729cac0b77665a6618db703 # Parent 244c54d1695781a9b1cc06b234155aa69bfa07cc Authorize messungen with status and not the "fertig"-flag. diff -r 244c54d16957 -r 46e0523bbd80 src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java --- a/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Thu Nov 12 12:13:39 2015 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Thu Nov 12 12:14:46 2015 +0100 @@ -21,7 +21,9 @@ import de.intevation.lada.model.land.LMessung; import de.intevation.lada.model.land.LProbe; +import de.intevation.lada.model.land.LStatusProtokoll; import de.intevation.lada.model.stamm.Auth; +import de.intevation.lada.model.stamm.AuthLstUmw; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.annotation.RepositoryConfig; import de.intevation.lada.util.data.QueryBuilder; @@ -236,17 +238,25 @@ List auth = (List)response.getData(); List netzbetreiber = new ArrayList(); List messstellen = new ArrayList(); + List funktionen = new ArrayList(); for (Auth a : auth) { - if (a.getNetzBetreiber() != null) { - netzbetreiber.add(a.getNetzBetreiber()); + if (a.getNetzbetreiberId() != null) { + netzbetreiber.add(a.getNetzbetreiberId()); } - if (a.getMessStelle() != null) { - messstellen.add(a.getMessStelle()); + if (a.getMstId() != null) { + messstellen.add(a.getMstId()); + } + if (a.getLaborMstId() != null) { + messstellen.add(a.getLaborMstId()); + } + if (a.getFunktionId() != null) { + funktionen.add(a.getFunktionId()); } } UserInfo userInfo = new UserInfo(); userInfo.setNetzbetreiber(netzbetreiber); userInfo.setMessstellen(messstellen); + userInfo.setFunktionen(funktionen); return userInfo; } @@ -509,7 +519,42 @@ else { messung.setOwner(false); } - messung.setReadonly(messung.getFertig()); + if (messung.getStatus() == null) { + messung.setReadonly(false); + } + else { + LStatusProtokoll status = repository.getByIdPlain( + LStatusProtokoll.class, + messung.getStatus(), + "land"); + messung.setReadonly( + status.getStatusWert() != 0 && status.getStatusWert() != 4); + } + + boolean statusEdit = false; + if (userInfo.getFunktionen().contains(3)) { + QueryBuilder lstFilter = new QueryBuilder( + repository.entityManager("stamm"), + AuthLstUmw.class); + lstFilter.or("lstId", userInfo.getMessstellen()); + List lsts = + repository.filterPlain(lstFilter.getQuery(), "stamm"); + for (int i = 0; i < lsts.size(); i++) { + if (lsts.get(i).getUmwId().equals(probe.getUmwId())) { + statusEdit = true; + } + } + } + else if (userInfo.getFunktionen().contains(2) && + userInfo.getNetzbetreiber().contains(probe.getNetzbetreiberId())) { + statusEdit = true; + } + else if (userInfo.getFunktionen().contains(1) && + userInfo.getMessstellen().contains(probe.getMstId())) { + statusEdit = true; + } + messung.setStatusEdit(statusEdit); + return messung; } @@ -527,14 +572,20 @@ manager, LMessung.class); builder.and("probeId", probeId); - builder.and("fertig", true); Response response = repository.filter(builder.getQuery(), "land"); @SuppressWarnings("unchecked") List messungen = (List) response.getData(); - if (messungen.isEmpty()) { - return false; + for (int i = 0; i < messungen.size(); i++) { + if (messungen.get(i).getStatus() == null) { + return false; + } + LStatusProtokoll status = repository.getByIdPlain( + LStatusProtokoll.class, messungen.get(i).getStatus(), "land"); + if (status.getStatusWert() != 0 && status.getStatusWert() != 4) { + return true; + } } - return true; + return false; } /**