+ raise PlomException(f'bad date string')
+ latest_date = date
+ efforts[date] = None
+ if not (old_todo and old_todo.deps):
+ efforts[date] = postvars.get_at_index('effort', i, on_empty=None,
+ float_if_possible=True)
+ if postvars.has('delete'):
+ has_day_effort = len([e for e in efforts.values() if e is not None]) > 0
+ if postvars.has('done')\
+ or postvars.get('comment')\
+ or postvars.get_all('tag', [])\
+ or has_day_effort:
+ raise PlomException('will not remove todo of preserve-worthy values')
+ db.delete_todo(todo_id)
+ postvars.set('return_to', 'calendar')
+ elif postvars.has('update'):
+ if postvars.has('delete_effort'):
+ for date in postvars.get_all('delete_effort'):
+ db.delete_effort(old_todo, date)
+ del efforts[date]
+ deps = [db.todos[id_] for id_ in postvars.get_all('adopt_dep', [])
+ if id_ in db.todos.keys()]
+ for dep in deps:
+ if not todo_id in [t.id_ for t in dep.dependers]:
+ dep.dependers += [db.todos[todo_id]]
+ tasks_to_birth = [db.tasks[id_] for id_ in postvars.get_all('birth_dep', [])]
+ for task in tasks_to_birth:
+ deps += [db.add_todo(task=task, efforts={latest_date: None})]
+ db.update_todo(id_=todo_id,
+ efforts=efforts,
+ done=postvars.has('done'),
+ comment=postvars.get('comment', ''),
+ tags=postvars.get_all('tag', []),
+ importance=float(postvars.get('importance')),
+ deps=deps)
+
+ elif 'task' == site:
+ task_id = postvars.get('task_id')
+ if postvars.has('delete') and task_id in db.tasks.keys():
+ if [t for t in db.todos.values() if task_id == t.task.id_]:
+ raise PlomException('will not remove Task describing existing Todos')
+ if postvars.get('title', '')\
+ or postvars.get_all('tag', [])\
+ or postvars.get_all('subtask', [])\
+ or postvars.get('comment', ''):
+ raise PlomException('will not remove Task of preserve-worthy values')
+ db.delete_task(task_id)
+ elif postvars.has('update'):
+ task = db.update_task(
+ id_=task_id,
+ title=postvars.get('title', ''),
+ default_effort=postvars.get('default_effort', float_if_possible=True),
+ tags=postvars.get_all('tag', []),
+ subtask_ids=postvars.get_all('subtask', []),
+ comment=postvars.get('comment', ''))
+ if postvars.has('add_as_todo'):
+ db.add_todo(task=task, efforts={postvars.get('selected_date'): None})
+ redir_params += [('id', task_id)]
+
+ # elif 'pick_tasks' == site:
+ # redir_params += [('hide_chosen_tasks', int(postvars.has('hide_chosen_tasks')))]
+ # if postvars.has('update'):
+ # db.selected_date = postvars.get('date')
+ # todos_to_shrink = []
+ # todos_to_delete = []
+ # for todo in db.selected_day.linked_todos_as_list:
+ # if todo.visible and not todo.id_ in postvars.get_all('chosen_todo', []):
+ # if len(todo.comment) > 0\
+ # or len(todo.day_tags) > 0\
+ # or not todo.is_effort_removable(db.selected_date):
+ # raise PlomException('will not remove effort of preserve-worthy values')
+ # if len(todo.efforts) > 1:
+ # todos_to_shrink += [todo]
+ # else:
+ # todos_to_delete += [todo]
+ # for todo in todos_to_shrink:
+ # db.delete_effort(todo, db.selected_date)
+ # for todo in todos_to_delete:
+ # db.delete_todo(todo.id_)
+ # for id_ in postvars.get_all('choose_task', []):
+ # db.add_todo(task=db.tasks[id_], efforts={db.selected_date: None})
+ # for id_ in postvars.get_all('choose_todo', []):
+ # db.todos[id_].efforts[db.selected_date] = None
+
+ elif 'do_todos' == site:
+ redir_params += [('hide_done', int(postvars.has('hide_done')))]
+ if postvars.has('update'):
+ db.selected_date = postvars.get('date')
+ redir_params += [('date', db.selected_date)]
+ db.selected_day.comment = postvars.get('day_comment', '')
+ task_id = postvars.get('choose_task', None)
+ if task_id:
+ if task_id not in db.tasks.keys():
+ raise PlomException('illegal task ID entered')
+ db.add_todo(task=db.tasks[task_id], efforts={db.selected_date: None},
+ adopt_if_possible=(not postvars.has('dont_adopt')))
+ for id_ in postvars.get_all('choose_todo', []):
+ db.todos[id_].efforts[db.selected_date] = None
+ for i, todo_id in enumerate(postvars.get_all('todo_id', [])):
+ old_todo = db.todos[todo_id]
+ done = todo_id in postvars.get_all('done', [])
+ day_effort_input = postvars.get_at_index('effort', i, '')
+ day_effort = float(day_effort_input) if len(day_effort_input) > 0 else None
+ comment = postvars.get_at_index('effort_comment', i, '')
+ if (day_effort is not None) and (not done) and day_effort < 0 and 0 == len(comment):
+ if len(old_todo.efforts) > 1:
+ db.delete_effort(old_todo, db.selected_date)
+ else:
+ db.delete_todo(todo_id)
+ continue
+ importance = float(postvars.get_at_index('importance', i))
+ if old_todo\
+ and old_todo.done == done\
+ and old_todo.day_effort == day_effort\
+ and comment == old_todo.comment\
+ and old_todo.importance == importance:
+ continue
+ db.update_todo_for_day(
+ todo_id,
+ db.selected_date,
+ day_effort,
+ done,
+ comment,
+ importance)
+
+ homepage = postvars.get('return_to')
+ if not homepage:
+ encoded_params = urlencode(redir_params)
+ homepage = f'{site}?{encoded_params}'