home · contact · privacy
Disallow deletion of Processes in use.
[plomtask] / plomtask / processes.py
index e67b13414e26d40a87e77545ce57d238bc050028..375a0bee622081fd8690cc0e6c1a8ae5241685e1 100644 (file)
@@ -6,7 +6,8 @@ from sqlite3 import Row
 from plomtask.db import DatabaseConnection, BaseModel
 from plomtask.misc import VersionedAttribute
 from plomtask.conditions import Condition, ConditionsRelations
 from plomtask.db import DatabaseConnection, BaseModel
 from plomtask.misc import VersionedAttribute
 from plomtask.conditions import Condition, ConditionsRelations
-from plomtask.exceptions import NotFoundException, BadFormatException
+from plomtask.exceptions import (NotFoundException, BadFormatException,
+                                 HandledException)
 
 
 @dataclass
 
 
 @dataclass
@@ -172,11 +173,18 @@ class Process(BaseModel[int], ConditionsRelations):
     def remove(self, db_conn: DatabaseConnection) -> None:
         """Remove from DB, with dependencies."""
         assert isinstance(self.id_, int)
     def remove(self, db_conn: DatabaseConnection) -> None:
         """Remove from DB, with dependencies."""
         assert isinstance(self.id_, int)
+        for _ in db_conn.row_where('process_steps', 'step_process', self.id_):
+            raise HandledException('cannot remove Process in use')
+        for _ in db_conn.row_where('todos', 'process', self.id_):
+            raise HandledException('cannot remove Process in use')
         db_conn.delete_where('process_conditions', 'process', self.id_)
         db_conn.delete_where('process_enables', 'process', self.id_)
         db_conn.delete_where('process_disables', 'process', self.id_)
         for step in self.explicit_steps:
             step.remove(db_conn)
         db_conn.delete_where('process_conditions', 'process', self.id_)
         db_conn.delete_where('process_enables', 'process', self.id_)
         db_conn.delete_where('process_disables', 'process', self.id_)
         for step in self.explicit_steps:
             step.remove(db_conn)
+        db_conn.delete_where('process_titles', 'parent', self.id_)
+        db_conn.delete_where('process_descriptions', 'parent', self.id_)
+        db_conn.delete_where('process_efforts', 'parent', self.id_)
         super().remove(db_conn)
 
 
         super().remove(db_conn)