fix duplication of same objects in db with when saving a child scenario

disable_edition_parent_scenario
Dylan Jeannin 2026-05-19 16:13:21 +02:00
parent 348417977d
commit ccf3da114b
5 changed files with 17 additions and 4 deletions

View File

@ -274,6 +274,9 @@ class HydraulicStructure(SQLSubModel):
return hs return hs
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
execute( execute(
"DELETE FROM hydraulic_structures " + "DELETE FROM hydraulic_structures " +
f"WHERE pamhyr_id = {self.pamhyr_id} " + f"WHERE pamhyr_id = {self.pamhyr_id} " +

View File

@ -225,6 +225,8 @@ class Data(SQLSubModel):
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
ind = data["ind"] ind = data["ind"]
execute( execute(

View File

@ -400,7 +400,7 @@ class Pollutants(SQLSubModel):
return new return new
table = execute( table = execute(
"SELECT pamhyr_id, deleted, name FROM pollutants " + "SELECT pamhyr_id, deleted, name, scenario FROM pollutants " +
f"WHERE scenario = {scenario.id} " + f"WHERE scenario = {scenario.id} " +
f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))})" f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))})"
) )
@ -412,10 +412,12 @@ class Pollutants(SQLSubModel):
pid = next(it) pid = next(it)
deleted = (next(it) == 1) deleted = (next(it) == 1)
name = next(it) name = next(it)
owner_scenario = next(it)
new_pollutant = cls( new_pollutant = cls(
id=pid, name=name, id=pid, name=name,
status=status status=status,
owner_scenario=owner_scenario
) )
if deleted: if deleted:
new_pollutant.set_as_deleted() new_pollutant.set_as_deleted()

View File

@ -180,6 +180,9 @@ class RiverNode(Node):
return nodes return nodes
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
execute( execute(
"INSERT OR REPLACE INTO river_node(" + "INSERT OR REPLACE INTO river_node(" +
"pamhyr_id, deleted, name, x, y, scenario" + "pamhyr_id, deleted, name, x, y, scenario" +
@ -377,6 +380,9 @@ class RiverReach(Edge):
return reachs return reachs
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
execute( execute(
"INSERT OR REPLACE INTO " + "INSERT OR REPLACE INTO " +
"river_reach(" + "river_reach(" +
@ -386,7 +392,7 @@ class RiverReach(Edge):
"VALUES (" + "VALUES (" +
f"{self.pamhyr_id}, {self._db_format(self.is_deleted())}, " + f"{self.pamhyr_id}, {self._db_format(self.is_deleted())}, " +
f"'{self._db_format(self._name)}', " + f"'{self._db_format(self._name)}', " +
f"{self._db_format(self.is_enable())}," f"{self._db_format(self.is_enable())}," +
f"{self.node1.pamhyr_id}, {self.node2.pamhyr_id}, " + f"{self.node1.pamhyr_id}, {self.node2.pamhyr_id}, " +
f"{self._status.scenario_id}" + f"{self._status.scenario_id}" +
")" ")"

View File

@ -203,7 +203,7 @@ class SQLSubModel(PamhyrID):
if self._status is None: if self._status is None:
return return
self._owner_scenario = self._status.scenario_id # self._owner_scenario = self._status.scenario_id
self._status.modified() self._status.modified()
def set_owner_scenario(self): def set_owner_scenario(self):