X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/ledger2?a=blobdiff_plain;f=plomtask%2Fprocesses.py;h=23da7c10f365539661fbf7cb5815f61158a6c923;hb=23bf47fbbc14ccaf36fc5183720b413eea892ddf;hp=62220462936ad9452f45d1f87813bf38fcbb5bab;hpb=4c546e0133670dd10aec890c3cea6329c3a29663;p=plomtask diff --git a/plomtask/processes.py b/plomtask/processes.py index 6222046..23da7c1 100644 --- a/plomtask/processes.py +++ b/plomtask/processes.py @@ -163,6 +163,27 @@ class Process(BaseModel[int], ConditionsRelations): walk_steps(step) self.explicit_steps += [step] + def set_owners(self, db_conn: DatabaseConnection, + owner_ids: list[int]) -> None: + """Re-set owners to those identified in owner_ids.""" + owners_old = self.used_as_step_by(db_conn) + losers = [o for o in owners_old if o.id_ not in owner_ids] + owners_old_ids = [o.id_ for o in owners_old] + winners = [Process.by_id(db_conn, id_) for id_ in owner_ids + if id_ not in owners_old_ids] + steps_to_remove = [] + for loser in losers: + steps_to_remove += [s for s in loser.explicit_steps + if s.step_process_id == self.id_] + for step in steps_to_remove: + step.remove(db_conn) + for winner in winners: + assert isinstance(winner.id_, int) + assert isinstance(self.id_, int) + new_step = ProcessStep(None, winner.id_, self.id_, None) + new_explicit_steps = winner.explicit_steps + [new_step] + winner.set_steps(db_conn, new_explicit_steps) + def save(self, db_conn: DatabaseConnection) -> None: """Add (or re-write) self and connected items to DB.""" super().save(db_conn)