home · contact · privacy
Make explicit ProcessSteps overwrite implicit ones.
[plomtask] / plomtask / processes.py
index 027e97517a98c269cdedb39601143442931ba868..089a7105fddcd9228dbaebcfd3c6313e3ff57f6b 100644 (file)
@@ -26,10 +26,10 @@ class Process(BaseModel[int], ConditionsRelations):
     table_name = 'processes'
     to_save = ['calendarize']
     to_save_versioned = ['title', 'description', 'effort']
-    to_save_relations = [('process_conditions', 'process', 'conditions'),
-                         ('process_blockers', 'process', 'blockers'),
-                         ('process_enables', 'process', 'enables'),
-                         ('process_disables', 'process', 'disables')]
+    to_save_relations = [('process_conditions', 'process', 'conditions', 0),
+                         ('process_blockers', 'process', 'blockers', 0),
+                         ('process_enables', 'process', 'enables', 0),
+                         ('process_disables', 'process', 'disables', 0)]
     to_search = ['title.newest', 'description.newest']
 
     def __init__(self, id_: int | None, calendarize: bool = False) -> None:
@@ -93,6 +93,13 @@ class Process(BaseModel[int], ConditionsRelations):
             for child in explicit_children:
                 assert isinstance(child.id_, int)
                 node.steps[child.id_] = make_node(child)
+                # ensure that one (!) explicit step of process replaces
+                # one (!) implicit step of same process
+                for i in [i for i, s in node.steps.items()
+                          if not s.is_explicit
+                          and s.process.id_ == child.step_process_id]:
+                    del node.steps[i]
+                    break
             node.seen = node_id in seen_step_ids
             seen_step_ids.add(node_id)
             for id_, step in node.steps.items():