[Lada-commits] [PATCH 08 of 10] Search the next StatusStufe and create a new copy of a Status in on PUT

Wald Commits scm-commit at wald.intevation.org
Thu Nov 12 12:20:16 CET 2015


# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1447327049 -3600
# Node ID 2719c9602f2c63f8ff562a1463ac7820b9e6e1d1
# Parent  c151b09af33b7899ae4cf3718d60fffd0322603b
Search the next StatusStufe and create a new copy of a Status in on PUT.

diff -r c151b09af33b -r 2719c9602f2c src/main/java/de/intevation/lada/rest/StatusService.java
--- a/src/main/java/de/intevation/lada/rest/StatusService.java	Thu Nov 12 12:15:18 2015 +0100
+++ b/src/main/java/de/intevation/lada/rest/StatusService.java	Thu Nov 12 12:17:29 2015 +0100
@@ -32,6 +32,7 @@
 import de.intevation.lada.util.annotation.RepositoryConfig;
 import de.intevation.lada.util.auth.Authorization;
 import de.intevation.lada.util.auth.AuthorizationType;
+import de.intevation.lada.util.auth.UserInfo;
 import de.intevation.lada.util.data.QueryBuilder;
 import de.intevation.lada.util.data.Repository;
 import de.intevation.lada.util.data.RepositoryType;
@@ -192,11 +193,37 @@
         ) {
             return new Response(false, 699, null);
         }
+        UserInfo userInfo = authorization.getInfo(request);
+        LMessung messung = defaultRepo.getByIdPlain(
+            LMessung.class, status.getMessungsId(), "land");
+        LStatusProtokoll currentStatus = defaultRepo.getByIdPlain(
+            LStatusProtokoll.class, messung.getStatus(), "land");
+        boolean next = false;
+        boolean change = false;
+        for (int i = 0; i < userInfo.getFunktionen().size(); i++) {
+            if (userInfo.getFunktionen().get(i) > currentStatus.getStatusStufe()) {
+                next = true;
+                change = false;
+                break;
+            }
+            else if (userInfo.getFunktionen().get(i) == currentStatus.getStatusStufe()) {
+                change = true;
+            }
+        }
+        if ((change || next) && status.getStatusWert() == 4) {
+            status.setStatusStufe(1);
+        }
+        else if (change) {
+            status.setStatusStufe(currentStatus.getStatusStufe());
+        }
+        else if (next) {
+            status.setStatusStufe(currentStatus.getStatusStufe() + 1);
+        }
+        else {
+            return new Response(false, 699, null);
+        }
         Response response = defaultRepo.create(status, "land");
         LStatusProtokoll created = (LStatusProtokoll)response.getData();
-        Response messungResponse = defaultRepo.getById(
-            LMessung.class, status.getMessungsId(), "land");
-        LMessung messung = (LMessung)messungResponse.getData();
         messung.setStatus(created.getId());
         defaultRepo.update(messung, "land");
         /* Persist the new object*/
@@ -247,13 +274,24 @@
         if (lock.isLocked(status)) {
             return new Response(false, 697, null);
         }
-        Response response = defaultRepo.update(status, "land");
-        Response updated = defaultRepo.getById(
-            LStatusProtokoll.class,
-            ((LStatusProtokoll)response.getData()).getId(), "land");
+        if (status.getStatusWert() == 0) {
+            return new Response(false, 699, null);
+        }
+
+        UserInfo userInfo = authorization.getInfo(request);
+        if (!userInfo.getMessstellen().contains(status.getErzeuger())) {
+            return new Response(false, 699, null);
+        }
+        LMessung messung = defaultRepo.getByIdPlain(
+            LMessung.class, status.getMessungsId(), "land");
+        Response response = defaultRepo.create(status, "land");
+        LStatusProtokoll created = (LStatusProtokoll)response.getData();
+        messung.setStatus(created.getId());
+        defaultRepo.update(messung, "land");
+
         return authorization.filter(
             request,
-            updated,
+            response,
             LStatusProtokoll.class);
     }
 


More information about the Lada-commits mailing list