From e842fef434a077d697e1a0fc7c3e3afd43061a12 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Mon, 7 Oct 2024 14:08:28 +0200
Subject: [PATCH] BC, Geometry: Add safety condition to value computation.

---
 src/Model/Geometry/Reach.py                  | 15 +++++++++++++++
 src/View/BoundaryCondition/Edit/Window.py    | 14 ++++++++++++++
 src/View/BoundaryCondition/Edit/translate.py |  9 +++++++++
 src/View/Tools/ASubWindow.py                 |  2 +-
 4 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index c10b56fc..3ef25793 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -368,6 +368,9 @@ class Reach(SQLSubModel):
 
     def inter_profiles_rk(self):
         profiles = sorted(self.profiles, key=lambda p: p.rk)
+        if len(profiles) == 0:
+            return []
+
         first = profiles[0]
         last = profiles[-1]
 
@@ -750,6 +753,9 @@ class Reach(SQLSubModel):
                 cnt += 1
 
     def get_incline(self):
+        if len(self.profiles) == 0:
+            return 0.0
+
         first = self.profile(0)
         last = self.profile(len(self) - 1)
 
@@ -767,6 +773,9 @@ class Reach(SQLSubModel):
 
     def get_incline_mean(self):
         profiles = self.profiles
+        if len(profiles) == 0:
+            return 0.0
+
         previous = profiles[0]
 
         incline_acc = 0
@@ -790,6 +799,9 @@ class Reach(SQLSubModel):
 
     def get_incline_median(self):
         profiles = self.profiles
+        if len(profiles) == 0:
+            return 0.0
+
         previous = profiles[0]
 
         incline_acc = []
@@ -814,6 +826,9 @@ class Reach(SQLSubModel):
 
     def get_incline_median_mean(self):
         profiles = self.profiles
+        if len(profiles) == 0:
+            return 0.0
+
         previous = profiles[0]
 
         incline_acc = []
diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py
index 336a9671..a414dcaa 100644
--- a/src/View/BoundaryCondition/Edit/Window.py
+++ b/src/View/BoundaryCondition/Edit/Window.py
@@ -347,6 +347,13 @@ class EditBoundaryConditionWindow(PamhyrWindow):
             if node is None:
                 return
             reach = self._data.reach(self._study.river)[0]
+            if len(reach.profiles) == 0:
+                self.message_box(
+                    text=self._trad["title_need_geometry"],
+                    informative_text=self._trad["msg_need_geometry"]
+                )
+                return
+
             profile = reach.profiles[-1]
             dlg = GenerateDialog(self.slope_value,
                                  reach,
@@ -379,6 +386,13 @@ class EditBoundaryConditionWindow(PamhyrWindow):
             if node is None:
                 return
             reach = self._data.reach(self._study.river)[0]
+            if len(reach.profiles) == 0:
+                self.message_box(
+                    text=self._trad["title_need_geometry"],
+                    informative_text=self._trad["msg_need_geometry"]
+                )
+                return
+
             profile = reach.profiles[-1]
             z_min = profile.z_min()
             z_max = profile.z_max()
diff --git a/src/View/BoundaryCondition/Edit/translate.py b/src/View/BoundaryCondition/Edit/translate.py
index 006c49df..3912b81c 100644
--- a/src/View/BoundaryCondition/Edit/translate.py
+++ b/src/View/BoundaryCondition/Edit/translate.py
@@ -44,3 +44,12 @@ class BCETranslate(BCTranslate):
             "z": self._dict["unit_elevation"],
             "solid": _translate("BoundaryCondition", "Solid (kg/s)"),
         }
+
+        self._dict["title_need_geometry"] = _translate(
+            "Geometry", "No geometry"
+        )
+        self._dict["msg_need_geometry"] = _translate(
+            "Geometry",
+            "There is not geometry found for this reach, "
+            "a geometry is needed to this features"
+        )
diff --git a/src/View/Tools/ASubWindow.py b/src/View/Tools/ASubWindow.py
index 01db62f4..25928e4d 100644
--- a/src/View/Tools/ASubWindow.py
+++ b/src/View/Tools/ASubWindow.py
@@ -142,7 +142,7 @@ class WindowToolKit(object):
         Returns:
             Nothing
         """
-        msg = QMessageBox()
+        msg = QMessageBox(parent=self)
 
         msg.setIcon(QMessageBox.Warning)
         msg.setText(text)
-- 
GitLab