changeset 772:46e0523bbd80

Authorize messungen with status and not the "fertig"-flag.
author Raimund Renkert <raimund.renkert@intevation.de>
date Thu, 12 Nov 2015 12:14:46 +0100
parents 244c54d16957
children c151b09af33b
files src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java
diffstat 1 files changed, 60 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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> auth = (List<Auth>)response.getData();
         List<String> netzbetreiber = new ArrayList<String>();
         List<String> messstellen = new ArrayList<String>();
+        List<Integer> funktionen = new ArrayList<Integer>();
         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<AuthLstUmw> lstFilter = new QueryBuilder<AuthLstUmw>(
+                repository.entityManager("stamm"),
+                AuthLstUmw.class);
+            lstFilter.or("lstId", userInfo.getMessstellen());
+            List<AuthLstUmw> 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<LMessung> messungen = (List<LMessung>) 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;
     }
 
     /**
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)