home · contact · privacy
Re-introduce POSTing of Todo doneness on Day view.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 15 May 2024 02:37:08 +0000 (04:37 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 15 May 2024 02:37:08 +0000 (04:37 +0200)
plomtask/http.py
templates/day.html
tests/todos.py

index d411124c475f9378e3622083eb9bb5fc706ea14e..cf3288a295794bb94ce816f567158d90adb3befa 100644 (file)
@@ -211,9 +211,10 @@ class TaskHandler(BaseHTTPRequestHandler):
                     adopted = True
                 todo.make_missing_children(self.conn)
                 todo.save(self.conn)
-        for todo_id in self.form_data.get_all_int('done'):
+        done_ids = self.form_data.get_all_int('done')
+        for todo_id in 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
             todo.save(self.conn)
             for condition in todo.enables:
                 condition.save(self.conn)
index 167b70394963e552ec270a05384ccf47e32259af..cd683da0d1f02fc70dd4a07044ac9b82073dbd69 100644 (file)
@@ -32,13 +32,14 @@ td.todo_line {
 {% macro show_node_undone(node, indent) %}
 {% if not node.todo.is_done %}
 <tr>
+<input type="hidden" name="todo_id" value="{{node.todo.id_}}" />
 
 {% for condition in conditions_present %}
 <td class="cond_line_{{loop.index0 % 3}} {% if not condition.is_active %}min_width{% endif %}">{% if condition in node.todo.conditions %}{% if not condition.is_active %}O{% endif %}{% endif %}</td>
 {% endfor %}
 
 <td class="todo_line">-&gt;</td>
-<td class="todo_line"><input name="done" type="checkbox" {% if node.todo.is_done %}checked disabled{% endif %} {% if not node.todo.is_doable %}disabled{% endif %}/></td>
+<td class="todo_line"><input name="done" type="checkbox" value="{{node.todo.id_}}" {% if node.todo.is_done %}checked disabled{% endif %} {% if not node.todo.is_doable %}disabled{% endif %}/></td>
 <td class="todo_line">
 {% for i in range(indent) %}&nbsp; {% endfor %} +
 {% if node.seen %}({% endif %}<a href="todo?id={{node.todo.id_}}">{{node.todo.process.title.newest|e}}</a>{% if node.seen %}){% endif %}
index 5e9f4b88c28974143d060b9a552214e2454fd39d..0633547d3613c7a8b01f79964885c9f476f64c2f 100644 (file)
@@ -357,6 +357,19 @@ class TestsWithServer(TestCaseWithServer):
         self.assertEqual(todo2.children, [todo1])
         self.assertEqual(todo2.parents, [])
 
+    def test_do_POST_day_todo_doneness(self) -> None:
+        """Test multiple Todos can be posted to Day view."""
+        form_data = self.post_process()
+        form_data = {'comment': '', 'new_todo': [1]}
+        self.check_post(form_data, '/day?date=2024-01-01', 302)
+        todo = Todo.by_date(self.db_conn, '2024-01-01')[0]
+        form_data = {'comment': '', 'todo_id': [1]}
+        self.check_post(form_data, '/day?date=2024-01-01', 302)
+        self.assertEqual(todo.is_done, False)
+        form_data = {'comment': '', 'todo_id': [1], 'done': [1]}
+        self.check_post(form_data, '/day?date=2024-01-01', 302)
+        self.assertEqual(todo.is_done, True)
+
     def test_do_GET_todo(self) -> None:
         """Test GET /todo response codes."""
         self.post_process()