def do_GET_day(self) -> dict[str, object]:
"""Show single Day of ?date=."""
date = self.params.get_str('date', date_in_n_days(0))
+ make_type = self.params.get_str('make_type')
todays_todos = Todo.by_date(self.conn, date)
total_effort = 0.0
for todo in todays_todos:
return {'day': Day.by_id(self.conn, date, create=True),
'total_effort': total_effort,
'top_nodes': top_nodes,
+ 'make_type': make_type,
'enablers_for': enablers_for,
'disablers_for': disablers_for,
'conditions_present': conditions_present,
day = Day.by_id(self.conn, date, create=True)
day.comment = self.form_data.get_str('day_comment')
day.save(self.conn)
+ make_type = self.form_data.get_str('make_type')
for process_id in sorted(self.form_data.get_all_int('new_todo')):
- Todo.create_with_children(self.conn, process_id, date)
+ if 'empty' == make_type:
+ process = Process.by_id(self.conn, process_id)
+ todo = Todo(None, process, False, date)
+ todo.save(self.conn)
+ else:
+ Todo.create_with_children(self.conn, process_id, date)
done_ids = self.form_data.get_all_int('done')
comments = self.form_data.get_all_str('comment')
efforts = self.form_data.get_all_str('effort')
condition.save(self.conn)
for condition in todo.disables:
condition.save(self.conn)
- return f'/day?date={date}'
+ return f'/day?date={date}&make_type={make_type}'
def do_POST_todo(self) -> str:
"""Update Todo and its children."""
+ # pylint: disable=too-many-locals
+ # pylint: disable=too-many-branches
id_ = self.params.get_int('id')
for _ in self.form_data.get_all_str('delete'):
todo = Todo .by_id(self.conn, id_)
return '/'
todo = Todo.by_id(self.conn, id_)
adopted_child_ids = self.form_data.get_all_int('adopt')
- processes_to_make = self.form_data.get_all_int('make')
+ processes_to_make_full = self.form_data.get_all_int('make_full')
+ processes_to_make_empty = self.form_data.get_all_int('make_empty')
fill_fors = self.form_data.get_first_strings_starting('fill_for_')
for v in fill_fors.values():
- if v.startswith('make_'):
- processes_to_make += [int(v[5:])]
+ if v.startswith('make_empty_'):
+ processes_to_make_empty += [int(v[11:])]
+ elif v.startswith('make_full_'):
+ processes_to_make_full += [int(v[10:])]
elif v != 'ignore':
adopted_child_ids += [int(v)]
to_remove = []
continue
child = Todo.by_id(self.conn, child_id)
todo.add_child(child)
- for process_id in processes_to_make:
+ for process_id in processes_to_make_empty:
+ process = Process.by_id(self.conn, process_id)
+ made = Todo(None, process, False, todo.date)
+ made.save(self.conn)
+ todo.add_child(made)
+ for process_id in processes_to_make_full:
made = Todo.create_with_children(self.conn, process_id, todo.date)
todo.add_child(made)
effort = self.form_data.get_str('effort', ignore_strict=True)
self.post_process(2)
proc = Process.by_id(self.db_conn, 1)
proc2 = Process.by_id(self.db_conn, 2)
- form_data = {'day_comment': ''}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
self.assertEqual(Todo.by_date(self.db_conn, '2024-01-01'), [])
form_data['new_todo'] = str(proc.id_)
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
todos = Todo.by_date(self.db_conn, '2024-01-01')
self.assertEqual(1, len(todos))
todo1 = todos[0]
self.assertEqual(todo1.process.id_, proc.id_)
self.assertEqual(todo1.is_done, False)
form_data['new_todo'] = str(proc2.id_)
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
todos = Todo.by_date(self.db_conn, '2024-01-01')
todo1 = todos[1]
self.assertEqual(todo1.id_, 2)
return Todo.by_date(self.db_conn, '2024-01-01')[0]
# test minimum
self.post_process()
- self.check_post({'day_comment': '', 'new_todo': 1},
- '/day?date=2024-01-01', 302)
+ self.check_post({'day_comment': '', 'new_todo': 1,
+ 'make_type': 'full'},
+ '/day?date=2024-01-01&make_type=full', 302)
# test posting to bad URLs
self.check_post({}, '/todo=', 404)
self.check_post({}, '/todo?id=', 400)
self.check_post({'adopt': 1}, '/todo?id=1', 400)
self.check_post({'adopt': 2}, '/todo?id=1', 404)
# test posting second todo of same process
- self.check_post({'day_comment': '', 'new_todo': 1},
- '/day?date=2024-01-01', 302)
+ self.check_post({'day_comment': '', 'new_todo': 1,
+ 'make_type': 'full'},
+ '/day?date=2024-01-01&make_type=full', 302)
# test todo 1 adopting todo 2
todo1 = post_and_reload({'adopt': 2})
todo2 = Todo.by_date(self.db_conn, '2024-01-01')[1]
"""Test Todos posted to Day view may adopt existing Todos."""
form_data = self.post_process()
form_data = self.post_process(2, form_data | {'new_top_step': 1})
- form_data = {'day_comment': '', 'new_todo': 1}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'new_todo': 1, 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
form_data['new_todo'] = 2
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
todo2 = Todo.by_date(self.db_conn, '2024-01-01')[1]
self.assertEqual(todo1.children, [])
"""Test multiple Todos can be posted to Day view."""
form_data = self.post_process()
form_data = self.post_process(2)
- form_data = {'day_comment': '', 'new_todo': [1, 2]}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'new_todo': [1, 2],
+ 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
todo2 = Todo.by_date(self.db_conn, '2024-01-01')[1]
self.assertEqual(todo1.process.id_, 1)
return t.process.id_
def check_adoption(date: str, new_todos: list[int]) -> None:
- form_data = {'day_comment': '', 'new_todo': new_todos}
- self.check_post(form_data, f'/day?date={date}', 302)
+ form_data = {'day_comment': '', 'new_todo': new_todos,
+ 'make_type': 'full'}
+ self.check_post(form_data, f'/day?date={date}&make_type=full', 302)
day_todos = Todo.by_date(self.db_conn, date)
day_todos.sort(key=key_order_func)
todo1 = day_todos[0]
form_data['new_top_step'] = new_top_steps
form_data['step_of'] = []
form_data = self.post_process(process_id, form_data)
- form_data = {'day_comment': '', 'new_todo': [process_id]}
- self.check_post(form_data, f'/day?date={date}', 302)
+ form_data = {'day_comment': '', 'new_todo': [process_id],
+ 'make_type': 'full'}
+ self.check_post(form_data, f'/day?date={date}&make_type=full', 302)
day_todos = Todo.by_date(self.db_conn, date)
day_todos.sort(key=key_order_func, reverse=True)
self.assertEqual(len(day_todos), 3)
def test_do_POST_day_todo_doneness(self) -> None:
"""Test Todo doneness can be posted to Day view."""
form_data = self.post_process()
- form_data = {'day_comment': '', 'new_todo': [1]}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'new_todo': [1], 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
todo = Todo.by_date(self.db_conn, '2024-01-01')[0]
- form_data = {'day_comment': '', 'todo_id': [1]}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'todo_id': [1], 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
self.assertEqual(todo.is_done, False)
- form_data = {'day_comment': '', 'todo_id': [1], 'done': [1]}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'todo_id': [1], 'done': [1],
+ 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
self.assertEqual(todo.is_done, True)
def test_do_GET_todo(self) -> None:
"""Test GET /todo response codes."""
self.post_process()
- form_data = {'day_comment': '', 'new_todo': 1}
- self.check_post(form_data, '/day?date=2024-01-01', 302)
+ form_data = {'day_comment': '', 'new_todo': 1, 'make_type': 'full'}
+ self.check_post(form_data, '/day?date=2024-01-01&make_type=full', 302)
self.check_get('/todo', 400)
self.check_get('/todo?id=', 400)
self.check_get('/todo?id=foo', 400)