home · contact · privacy
Add VersionedAttribute history display pages for Processes.
[plomtask] / plomtask / http.py
index a1f85fdd6519dabefa9acc795d43d8720c5024af..2c7e628bdd14fd572a29c5686a5d3a5a37ceb409 100644 (file)
@@ -94,8 +94,9 @@ class TaskHandler(BaseHTTPRequestHandler):
         """Handle any GET request."""
         try:
             self._init_handling()
-            if self.site in {'calendar', 'day', 'process', 'processes', 'todo',
-                             'condition', 'conditions'}:
+            if self.site in {'calendar', 'day', 'process', 'process_titles',
+                             'process_descriptions', 'process_efforts',
+                             'processes', 'todo', 'condition', 'conditions'}:
                 template = f'{self.site}.html'
                 ctx = getattr(self, f'do_GET_{self.site}')()
                 html = self.server.jinja.get_template(template).render(**ctx)
@@ -156,7 +157,7 @@ class TaskHandler(BaseHTTPRequestHandler):
         return {'condition': Condition.by_id(self.conn, id_, create=True)}
 
     def do_GET_process(self) -> dict[str, object]:
-        """Show process of ?id=."""
+        """Show Process of ?id=."""
         id_ = self.params.get_int_or_none('id')
         process = Process.by_id(self.conn, id_, create=True)
         return {'process': process,
@@ -165,6 +166,24 @@ class TaskHandler(BaseHTTPRequestHandler):
                 'step_candidates': Process.all(self.conn),
                 'condition_candidates': Condition.all(self.conn)}
 
+    def do_GET_process_titles(self) -> dict[str, object]:
+        """Show title history of Process of ?id=."""
+        id_ = self.params.get_int_or_none('id')
+        process = Process.by_id(self.conn, id_)
+        return {'process': process}
+
+    def do_GET_process_descriptions(self) -> dict[str, object]:
+        """Show description historys of Process of ?id=."""
+        id_ = self.params.get_int_or_none('id')
+        process = Process.by_id(self.conn, id_)
+        return {'process': process}
+
+    def do_GET_process_efforts(self) -> dict[str, object]:
+        """Show default effort history of Process of ?id=."""
+        id_ = self.params.get_int_or_none('id')
+        process = Process.by_id(self.conn, id_)
+        return {'process': process}
+
     def do_GET_processes(self) -> dict[str, object]:
         """Show all Processes."""
         return {'processes': Process.all(self.conn)}
@@ -194,19 +213,30 @@ class TaskHandler(BaseHTTPRequestHandler):
         """Update or insert Day of date and Todos mapped to it."""
         date = self.params.get_str('date')
         day = Day.by_id(self.conn, date, create=True)
-        day.comment = self.form_data.get_str('comment')
+        day.comment = self.form_data.get_str('day_comment')
         day.save(self.conn)
-        existing_todos = Todo.by_date(self.conn, date)
+        new_todos = []
         for process_id in self.form_data.get_all_int('new_todo'):
             process = Process.by_id(self.conn, process_id)
             todo = Todo(None, process, False, day.date)
             todo.save(self.conn)
-            todo.adopt_from(existing_todos)
-            todo.make_missing_children(self.conn)
-            todo.save(self.conn)
-        for todo_id in self.form_data.get_all_int('done'):
+            new_todos += [todo]
+        adopted = True
+        while adopted:
+            adopted = False
+            existing_todos = Todo.by_date(self.conn, date)
+            for todo in new_todos:
+                if todo.adopt_from(existing_todos):
+                    adopted = True
+                todo.make_missing_children(self.conn)
+                todo.save(self.conn)
+        done_ids = self.form_data.get_all_int('done')
+        comments = self.form_data.get_all_str('comment')
+        for i, todo_id in enumerate(self.form_data.get_all_int('todo_id')):
             todo = Todo.by_id(self.conn, todo_id)
-            todo.is_done = True
+            todo.is_done = todo_id in done_ids
+            if len(comments) > 0:
+                todo.comment = comments[i]
             todo.save(self.conn)
             for condition in todo.enables:
                 condition.save(self.conn)
@@ -237,6 +267,7 @@ class TaskHandler(BaseHTTPRequestHandler):
         todo.set_enables(self.conn, self.form_data.get_all_int('enables'))
         todo.set_disables(self.conn, self.form_data.get_all_int('disables'))
         todo.is_done = len(self.form_data.get_all_str('done')) > 0
+        todo.comment = self.form_data.get_str('comment', ignore_strict=True)
         todo.save(self.conn)
         for condition in todo.enables:
             condition.save(self.conn)