diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py index debd9df7..1c6fe39e 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py @@ -64,6 +64,7 @@ class BoundaryConditionAdisTS(SQLSubModel): execute(f""" CREATE TABLE boundary_condition_adists{ext}( {cls.create_db_add_pamhyr_id()}, + deleted BOOLEAN NOT NULL DEFAULT FALSE, pollutant INTEGER NOT NULL, type TEXT NOT NULL, node INTEGER, @@ -205,7 +206,7 @@ class BoundaryConditionAdisTS(SQLSubModel): return new table = execute( - "SELECT pamhyr_id, pollutant, type, node, scenario " + + "SELECT pamhyr_id, deleted, pollutant, type, node, scenario " + "FROM boundary_condition_adists " + f"WHERE scenario = {scenario.id} " + f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " @@ -216,6 +217,7 @@ class BoundaryConditionAdisTS(SQLSubModel): it = iter(row) pid = next(it) + deleted = (next(it) == 1) pollutant = next(it) bc_type = next(it) node = next(it) @@ -227,6 +229,8 @@ class BoundaryConditionAdisTS(SQLSubModel): status=status, owner_scenario=owner_scenario ) + if deleted: + bc.set_as_deleted() bc.type = bc_type @@ -287,10 +291,12 @@ class BoundaryConditionAdisTS(SQLSubModel): execute( "INSERT INTO " + - "boundary_condition_adists(id, pollutant, type, " + + "boundary_condition_adists(" + + "pamhyr_id, deleted, pollutant, type, " + "node, scenario) " + "VALUES (" + - f"{self.id}, {self._pollutant}, " + + f"{self.id}, {self._db_format(self.is_deleted())}, " + + f"{self._pollutant}, " + f"'{self._db_format(self._type)}', {node}, " + f"{self._status.scenario_id}" + ")" @@ -302,7 +308,8 @@ class BoundaryConditionAdisTS(SQLSubModel): execute( "INSERT INTO " + - "boundary_condition_data_adists(data0, data1, bc, scenario) " + + "boundary_condition_data_adists(" + + "data0, data1, bc, scenario) " + f"VALUES ('{data0}', {data1}, {self.id}, " + f"{self._status.scenario_id})" ) diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py index 29e3ed5e..0d1d729f 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py @@ -19,7 +19,7 @@ from copy import copy from tools import trace, timer -from Model.Tools.PamhyrList import PamhyrModelList +from Model.Tools.PamhyrListExt import PamhyrModelList from Model.Except import NotImplementedMethodeError from Model.BoundaryConditionsAdisTS.BoundaryConditionAdisTS \ diff --git a/src/Model/D90AdisTS/D90AdisTS.py b/src/Model/D90AdisTS/D90AdisTS.py index 5a12e153..0f24f2db 100644 --- a/src/Model/D90AdisTS/D90AdisTS.py +++ b/src/Model/D90AdisTS/D90AdisTS.py @@ -54,6 +54,7 @@ class D90AdisTS(SQLSubModel): execute(f""" CREATE TABLE d90_adists{ext}( {cls.create_db_add_pamhyr_id()}, + deleted BOOLEAN NOT NULL DEFAULT FALSE, name TEXT NOT NULL, d90 REAL NOT NULL, enabled BOOLEAN NOT NULL, @@ -110,7 +111,7 @@ class D90AdisTS(SQLSubModel): return new table = execute( - "SELECT pamhyr_id, name, d90, enabled, scenario " + + "SELECT pamhyr_id, deleted, name, d90, enabled, scenario " + "FROM d90_adists " + f"WHERE scenario = {scenario.id} " + f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " @@ -121,6 +122,7 @@ class D90AdisTS(SQLSubModel): it = iter(row) pid = next(it) + deleted = (next(it) == 1) name = next(it) value_d90 = next(it) enabled = (next(it) == 1) @@ -132,6 +134,8 @@ class D90AdisTS(SQLSubModel): status=status, owner_scenario=owner_scenario ) + if deleted: + d90.set_as_deleted() d90.d90 = value_d90 d90.enabled = enabled @@ -165,10 +169,12 @@ class D90AdisTS(SQLSubModel): execute( "INSERT INTO " + "d90_adists(" + - "pamhyr_id, name, d90, enabled, scenario" + + "pamhyr_id, deleted, " + + "name, d90, enabled, scenario" + ") " + "VALUES (" + - f"{self.id}, '{self._db_format(self._name)}', " + + f"{self.id}, {self._db_format(self.is_deleted())}, " + + f"'{self._db_format(self._name)}', " + f"{d90}, {self._enabled}, {self._status.scenario_id}" + ")" ) @@ -222,19 +228,36 @@ class D90AdisTS(SQLSubModel): return n def delete(self, data): - self._data = list( - filter( - lambda x: x not in data, - self._data + list( + map( + lambda x: x.set_as_deleted(), + data ) ) self.modified() def delete_i(self, indexes): - for ind in indexes: - del self._data[ind] + list( + map( + lambda e: e[1].set_as_deleted(), + filter( + lambda e: e[0] in indexes, + enumerate(self._data) + ) + ) + ) self.modified() def insert(self, index, data): - self._data.insert(index, data) + if data in self._data: + self.undelete([data]) + else: + self._data.insert(index, data) + + self.modified() + + def undelete(self, lst): + for x in lst: + x.set_as_not_deleted() + self.modified() diff --git a/src/Model/D90AdisTS/D90AdisTSList.py b/src/Model/D90AdisTS/D90AdisTSList.py index 2bab907c..51fa8d7b 100644 --- a/src/Model/D90AdisTS/D90AdisTSList.py +++ b/src/Model/D90AdisTS/D90AdisTSList.py @@ -19,7 +19,7 @@ from copy import copy from tools import trace, timer -from Model.Tools.PamhyrList import PamhyrModelList +from Model.Tools.PamhyrListExt import PamhyrModelList from Model.D90AdisTS.D90AdisTS import D90AdisTS diff --git a/src/Model/D90AdisTS/D90AdisTSSpec.py b/src/Model/D90AdisTS/D90AdisTSSpec.py index 54011f02..a4d6f59b 100644 --- a/src/Model/D90AdisTS/D90AdisTSSpec.py +++ b/src/Model/D90AdisTS/D90AdisTSSpec.py @@ -51,6 +51,7 @@ class D90AdisTSSpec(SQLSubModel): execute(f""" CREATE TABLE d90_adists_spec{ext}( {cls.create_db_add_pamhyr_id()}, + deleted BOOLEAN NOT NULL DEFAULT FALSE, d90_default INTEGER NOT NULL, name TEXT NOT NULL, reach INTEGER NOT NULL, @@ -137,7 +138,8 @@ class D90AdisTSSpec(SQLSubModel): return new table = execute( - "SELECT pamhyr_id, name, reach, start_rk, end_rk, " + + "SELECT pamhyr_id, deleted, " + + f"name, reach, start_rk, end_rk, " + "d90, enabled, scenario " + "FROM d90_adists_spec " + f"WHERE d90_default = {data['d90_default_id']} " + @@ -150,6 +152,7 @@ class D90AdisTSSpec(SQLSubModel): it = iter(row) pid = next(it) + deleted = (next(it) == 1) name = next(it) reach = next(it) start_rk = next(it) @@ -164,6 +167,8 @@ class D90AdisTSSpec(SQLSubModel): status=status, owner_scenario=owner_scenario ) + if deleted: + new_spec.is_deleted() new_spec.reach = reach new_spec.start_rk = start_rk @@ -188,10 +193,12 @@ class D90AdisTSSpec(SQLSubModel): execute( "INSERT INTO " + - "d90_spec(pamhyr_id, d90_default, name, reach, " + + "d90_spec(pamhyr_id, deleted, " + + "d90_default, name, reach, " + "start_rk, end_rk, d90, enabled, scenario) " + "VALUES (" + - f"{self.id}, {d90_default}, " + + f"{self.id}, {self._db_format(self.is_deleted())}" + + f"{d90_default}, " + f"'{self._db_format(self._name_section)}', " + f"{self._reach}, " + f"{self._start_rk}, {self._end_rk}, " + diff --git a/src/Model/DIFAdisTS/DIFAdisTS.py b/src/Model/DIFAdisTS/DIFAdisTS.py index 03e1769e..6f6605eb 100644 --- a/src/Model/DIFAdisTS/DIFAdisTS.py +++ b/src/Model/DIFAdisTS/DIFAdisTS.py @@ -282,19 +282,36 @@ class DIFAdisTS(SQLSubModel): return n def delete(self, data): - self._data = list( - filter( - lambda x: x not in data, - self._data + list( + map( + lambda x: x.set_as_deleted(), + data ) ) self.modified() def delete_i(self, indexes): - for ind in indexes: - del self._data[ind] + list( + map( + lambda e: e[1].set_as_deleted(), + filter( + lambda e: e[0] in indexes, + enumerate(self._data) + ) + ) + ) self.modified() def insert(self, index, data): - self._data.insert(index, data) + if data in self._data: + self.undelete([data]) + else: + self._data.insert(index, data) + + self.modified() + + def undelete(self, lst): + for x in lst: + x.set_as_not_deleted() + self.modified() diff --git a/src/Model/DIFAdisTS/DIFAdisTSList.py b/src/Model/DIFAdisTS/DIFAdisTSList.py index 5ae1d6a5..0238e97d 100644 --- a/src/Model/DIFAdisTS/DIFAdisTSList.py +++ b/src/Model/DIFAdisTS/DIFAdisTSList.py @@ -19,7 +19,7 @@ from copy import copy from tools import trace, timer -from Model.Tools.PamhyrList import PamhyrModelList +from Model.Tools.PamhyrListExt import PamhyrModelList from Model.DIFAdisTS.DIFAdisTS import DIFAdisTS diff --git a/src/Model/DIFAdisTS/DIFAdisTSSpec.py b/src/Model/DIFAdisTS/DIFAdisTSSpec.py index 2662f2f6..fbae06cd 100644 --- a/src/Model/DIFAdisTS/DIFAdisTSSpec.py +++ b/src/Model/DIFAdisTS/DIFAdisTSSpec.py @@ -59,6 +59,7 @@ class DIFAdisTSSpec(SQLSubModel): execute(f""" CREATE TABLE dif_adists_spec{ext}( {cls.create_db_add_pamhyr_id()}, + deleted BOOLEAN NOT NULL DEFAULT FALSE, dif_default INTEGER NOT NULL, method TEXT NOT NULL, reach INTEGER NOT NULL, @@ -149,7 +150,7 @@ class DIFAdisTSSpec(SQLSubModel): return new table = execute( - "SELECT pamhyr_id, method, reach, start_rk, end_rk, " + + "SELECT pamhyr_id, deleted, method, reach, start_rk, end_rk, " + "dif, b, c, enabled, scenario " + "FROM dif_adists_spec " + f"WHERE dif_default = {data['dif_default_id']} " + @@ -162,6 +163,7 @@ class DIFAdisTSSpec(SQLSubModel): it = iter(row) id = next(it) + deleted = (next(it) == 1) method = next(it) reach = next(it) start_rk = next(it) @@ -178,6 +180,8 @@ class DIFAdisTSSpec(SQLSubModel): status=status, owner_scenario=owner_scenario ) + if deleted: + new_spec.set_as_deleted() new_spec.reach = reach new_spec.start_rk = start_rk @@ -204,10 +208,12 @@ class DIFAdisTSSpec(SQLSubModel): execute( "INSERT INTO " + - "dif_adists_spec(pamhyr_id, dif_default, method, reach, " + + "dif_adists_spec(pamhyr_id, deleted, " + + "dif_default, method, reach, " + "start_rk, end_rk, dif, b, c, enabled, scenario) " + "VALUES (" + - f"{self.id}, {dif_default}, " + + f"{self.id}, {self._db_format(self.is_deleted())}" + + f"{dif_default}, " + f"'{self._db_format(self._method)}', " + f"{self._reach}, " + f"{self._start_rk}, {self._end_rk}, " +