- db.selected_date = postvars['selected_date'][0]
- if 't_uuid' in postvars.keys():
- for i, uuid in enumerate(postvars['t_uuid']):
- t = db.tasks[uuid]
- if uuid in db.selected_day.todos.keys() and ((not 'choose' in postvars) or uuid not in postvars['choose']) and not db.selected_day.todos[uuid].is_empty():
- del db.selected_day.todos[uuid]
- if 'choose' in postvars.keys():
- for i, uuid in enumerate(postvars['t_uuid']):
- uuids = postvars['choose']
- uuids += postvars['done'] if 'done' in postvars.keys() else []
- if uuid in uuids or postvars['day_effort'][i] != '' or (postvars['importance'][i] not in {'1.0', ''}):
- done = 'done' in postvars and uuid in postvars['done']
- db.update_todo_mini(uuid, db.selected_date, postvars['day_effort'][i], done, postvars['importance'][i])
- if 'day_comment' in postvars.keys():
- db.selected_day.comment = postvars['day_comment'][0]
- params_to_encode += [('selected_date', db.selected_date)]
+ db.selected_date = postvars['selected_date'][0]
+ if 'day_comment' in postvars.keys():
+ db.selected_day.comment = postvars['day_comment'][0]
+ params_to_encode += [('selected_date', db.selected_date)]
+
+ # handle todo list updates via task UUIDs
+ if 't_uuid' in postvars.keys():
+ for i, uuid in enumerate(postvars['t_uuid']):
+ task = db.tasks[uuid]
+ old_todo = None if not uuid in db.selected_day.todos.keys() else db.selected_day.todos[uuid]
+ selects_as_todo = 'choose' in postvars and uuid in postvars['choose']
+ too_much_keepworthy_data = ('done' in postvars and uuid in postvars['done']) or postvars['day_effort'][i] != '' or (old_todo and not old_todo.internals_empty())
+ if old_todo and too_much_keepworthy_data and not selects_as_todo:
+ raise PlomException('cannot deselect task as todo of preserve-worthy values')
+ elif old_todo and not selects_as_todo:
+ del db.selected_day.todos[uuid]
+ else:
+ done = ('done' in postvars) and (uuid in postvars['done'])
+ day_effort_input = postvars['day_effort'][i]
+ day_effort = float(day_effort_input) if len(day_effort_input) > 0 else None
+ importance = float(postvars['importance'][i])
+ if old_todo and old_todo.done == done and old_todo.day_effort == day_effort and old_todo.importance == importance:
+ continue
+ db.update_todo_mini(uuid, db.selected_date, day_effort, done, importance)