From afb4c1b61ef0ee54c3ab867ce00b2436b9b02daf Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 7 Feb 2024 09:52:43 +0100
Subject: [PATCH] Friction: Add id to friction and default name to stricklers.

---
 src/Model/Friction/Friction.py     | 36 ++++++++++++++++++++----------
 src/Model/Stricklers/Stricklers.py |  2 ++
 2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py
index 45e17cc9..1718ced9 100644
--- a/src/Model/Friction/Friction.py
+++ b/src/Model/Friction/Friction.py
@@ -26,11 +26,21 @@ logger = logging.getLogger()
 
 
 class Friction(SQLSubModel):
-    def __init__(self, name: str = "", status=None):
+    _id_cnt = 0
+
+    def __init__(self, id: int = -1, name: str = "",
+                 status=None):
         super(Friction, self).__init__()
 
         self._status = status
 
+        if id == -1:
+            self.id = Friction._id_cnt
+        else:
+            self.id = id
+
+        Friction._id_cnt = max(self.id, Friction._id_cnt+1)
+
         self._name = name
         self._edge = None
         self._begin_kp = 0.0
@@ -42,7 +52,7 @@ class Friction(SQLSubModel):
     def _db_create(cls, execute):
         execute("""
           CREATE TABLE friction(
-            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+            id INTEGER NOT NULL PRIMARY KEY,
             ind INTEGER NOT NULL,
             begin_kp REAL NOT NULL,
             end_kp REAL NOT NULL,
@@ -70,28 +80,29 @@ class Friction(SQLSubModel):
         stricklers = data["stricklers"].stricklers
 
         table = execute(
-            "SELECT ind, begin_kp, end_kp, begin_strickler, end_strickler " +
+            "SELECT id, ind, begin_kp, end_kp, begin_strickler, end_strickler " +
             f"FROM friction WHERE reach = {reach.id}"
         )
 
         for row in table:
-            ind = row[0]
+            id = row[0]
+            ind = row[1]
             # Get stricklers
-            if int(row[3]) == -1:
+            if int(row[4]) == -1:
                 bs = None
             else:
-                bs = next(filter(lambda s: s.id == row[3], stricklers))
+                bs = next(filter(lambda s: s.id == row[4], stricklers))
 
-            if int(row[4]) == -1:
+            if int(row[5]) == -1:
                 es = None
             else:
-                es = next(filter(lambda s: s.id == row[4], stricklers))
+                es = next(filter(lambda s: s.id == row[5], stricklers))
 
             # Create friction
             sec = cls(status=status)
             sec.edge = reach
-            sec.begin_kp = row[1]
-            sec.end_kp = row[2]
+            sec.begin_kp = row[2]
+            sec.end_kp = row[3]
             sec.begin_strickler = bs
             sec.end_strickler = es
 
@@ -112,10 +123,11 @@ class Friction(SQLSubModel):
 
         execute(
             "INSERT INTO " +
-            "friction(ind, begin_kp, end_kp, " +
+            "friction(id, ind, begin_kp, end_kp, " +
             "reach, begin_strickler, end_strickler) " +
             "VALUES (" +
-            f"{ind}, {self._begin_kp}, {self._end_kp}, " +
+            f"{self.id}, {ind}, " +
+            f"{self._begin_kp}, {self._end_kp}, " +
             f"{self._edge.id}, " +
             f"{b_s_id}, {e_s_id}" +
             ")"
diff --git a/src/Model/Stricklers/Stricklers.py b/src/Model/Stricklers/Stricklers.py
index 10b8aaf3..285373e2 100644
--- a/src/Model/Stricklers/Stricklers.py
+++ b/src/Model/Stricklers/Stricklers.py
@@ -120,6 +120,8 @@ class Stricklers(SQLSubModel):
 
     @property
     def name(self):
+        if self._name == "":
+            return f"K{self.id + 1}"
         return self._name
 
     @name.setter
-- 
GitLab