home · contact · privacy
Use same date ranging code for Day and Todo filtering.
[plomtask] / plomtask / todos.py
index ffef677d29e652ad82d18e2d2c9f7b848e73a698..46a353d91456a13b7968ba6718e02f1ea70e81a8 100644 (file)
@@ -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: