X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=plomtask%2Ftodos.py;h=46a353d91456a13b7968ba6718e02f1ea70e81a8;hb=f1795f22a6ea2409fc1c7c0ea921dc530e7625c2;hp=712609aa8d81fdbe4f194a244ab6927224ee67ca;hpb=ad957773a676d94f523199e7fc46fa416224a09f;p=plomtask diff --git a/plomtask/todos.py b/plomtask/todos.py index 712609a..46a353d 100644 --- a/plomtask/todos.py +++ b/plomtask/todos.py @@ -9,6 +9,7 @@ from plomtask.versioned_attributes import VersionedAttribute from plomtask.conditions import Condition, ConditionsRelations from plomtask.exceptions import (NotFoundException, BadFormatException, HandledException) +from plomtask.dating import valid_date @dataclass @@ -46,7 +47,7 @@ class Todo(BaseModel[int], ConditionsRelations): raise NotFoundException('Process of Todo without ID (not saved?)') self.process = process self._is_done = is_done - self.date = date + self.date = valid_date(date) self.comment = comment self.effort = effort self.children: list[Todo] = [] @@ -59,6 +60,13 @@ class Todo(BaseModel[int], ConditionsRelations): self.enables = self.process.enables[:] self.disables = self.process.disables[:] + @classmethod + def by_date_range(cls, db_conn: DatabaseConnection, + date_range: tuple[str, str] = ('', '')) -> list[Todo]: + """Collect Todos of Days within date_range.""" + todos, _, _ = cls.by_date_range_with_limits(db_conn, date_range) + return todos + @classmethod def create_with_children(cls, db_conn: DatabaseConnection, date: str, process_ids: list[int]) -> list[Todo]: @@ -117,10 +125,7 @@ class Todo(BaseModel[int], ConditionsRelations): @classmethod def by_date(cls, db_conn: DatabaseConnection, date: str) -> list[Todo]: """Collect all Todos for Day of date.""" - todos = [] - for id_ in db_conn.column_where('todos', 'id', 'day', date): - todos += [cls.by_id(db_conn, id_)] - return todos + return cls.by_date_range(db_conn, (date, date)) @property def is_doable(self) -> bool: @@ -182,6 +187,20 @@ class Todo(BaseModel[int], ConditionsRelations): """Shortcut to .process.title.""" return self.process.title + @property + def title_then(self) -> str: + """Shortcut to .process.title.at(self.date)""" + title_then = self.process.title.at(self.date) + assert isinstance(title_then, str) + return title_then + + @property + def effort_then(self) -> float: + """Shortcut to .process.effort.at(self.date)""" + effort_then = self.process.effort.at(self.date) + assert isinstance(effort_then, float) + return effort_then + def adopt_from(self, todos: list[Todo]) -> bool: """As far as possible, fill unsatisfied dependencies from todos.""" adopted = False