+ days_to_show[date_str] = self.days[date_str]
+ days_to_show[date_str].month_title = date_obj.strftime('%B') if date_obj.day == 1 else None
+ days_to_show[date_str].weekday = datetime.strptime(date_str, DATE_FORMAT).strftime('%A')[:2]
+
+ return j2env.get_template('calendar.html').render(
+ selected_date=self.selected_date,
+ days=days_to_show,
+ start_date=start_date_str,
+ end_date=end_date_str)
+
+ def show_do_todos(self, sort_order=None):
+ prev_date_str, next_date_str = self.neighbor_dates()
+ todos = [t for t in self.selected_day.linked_todos_as_list
+ if t.visible
+ and not t.children]
+ if sort_order == 'title':
+ todos.sort(key=lambda t: t.task.title.then)
+ elif sort_order == 'done':
+ todos.sort(key=lambda t: t.day_effort if t.day_effort else t.default_effort if t.done else 0, reverse=True)
+ elif sort_order == 'default_effort':
+ todos.sort(key=lambda t: t.default_effort, reverse=True)
+ elif sort_order == 'importance':
+ todos.sort(key=lambda t: t.importance, reverse=True)
+ return j2env.get_template('do_todos.html').render(
+ day=self.selected_day,
+ tags=self.t_tags,
+ filter_and=self.t_filter_and,
+ filter_not=self.t_filter_not,
+ prev_date=prev_date_str,
+ next_date=next_date_str,
+ todos=todos,
+ sort=sort_order,
+ hide_done=self.hide_done)
+
+ def show_todo(self, id_, return_to, search, start_date, end_date):
+ todo = self.todos[id_]
+ start_day, end_day = self.get_limit_days_from_date_strings(start_date, end_date)
+ if start_day < datetime.now() - timedelta(days=2):
+ end_day = start_day + timedelta(days=3)
+ end_date = end_day.strftime(DATE_FORMAT)
+ legal_dates = []
+ for n in range(int((end_day - start_day).days) + 1):
+ day = start_day + timedelta(n)
+ legal_dates += [day.strftime(DATE_FORMAT)]
+ filtered_todos = [t for t in self.todos.values()
+ if t.visible
+ and t != todo
+ and (len(search) == 0 or t.matches(search))]
+ date_filtered_todos = []
+ for date in legal_dates:
+ for filtered_todo in filtered_todos:
+ if filtered_todo in date_filtered_todos:
+ continue
+ if date in filtered_todo.efforts.keys():
+ date_filtered_todos += [filtered_todo]
+ return j2env.get_template('todo.html').render(
+ filter_and=self.t_filter_and,
+ filter_not=self.t_filter_not,
+ tags=self.t_tags,
+ todo=todo,
+ filtered_todos=date_filtered_todos,
+ child_todos=todo.children,
+ return_to=return_to,
+ start_date=start_date,
+ end_date=end_date)
+
+ def show_task(self, id_, return_to='', search=''):
+ task = self.tasks[id_] if id_ else self.add_task()
+ selected = task.id_ in self.selected_day.todos.keys()
+ filtered_tasks = [t for t in self.tasks.values()
+ if t.visible
+ and t != task
+ and (t not in task.subtasks)
+ and (len(search) == 0 or t.matches(search))]
+ return j2env.get_template('task.html').render(
+ search=search,
+ tags=self.t_tags,
+ filter_and=self.t_filter_and,
+ filter_not=self.t_filter_not,
+ filtered_tasks=filtered_tasks,
+ task=task,
+ return_to=return_to)
+
+ def show_tasks(self, expand_uuid):
+ expanded_tasks = {}
+ if expand_uuid:
+ for uuid in self.tasks[expand_uuid].subtask_ids.now:
+ expanded_tasks[uuid] = self.tasks[uuid]
+ return j2env.get_template('tasks.html').render(
+ db=self,
+ filter_and=self.t_filter_and,
+ filter_not=self.t_filter_not,
+ expand_uuid=expand_uuid,
+ expanded_tasks=expanded_tasks)
+
+ def show_pick_tasks(self, search, hide_chosen_tasks, sort_order=None):
+ prev_date_str, next_date_str = self.neighbor_dates()
+
+ chosen_todos = self.selected_day.linked_todos_as_list
+
+ relevant_todos = []
+ for todo in self.todos.values():
+ if todo.done\
+ or (not todo.visible)\
+ or (not todo.matches(search))\
+ or todo.earliest_date >= self.selected_date:
+ continue
+ relevant_todos += [todo]
+
+ tasks = []
+ chosen_tasks = [todo.task for todo in self.selected_day.linked_todos_as_list]
+ for uuid, task in self.tasks.items():
+ if (not task.visible)\
+ or (not task.matches(search))\
+ or (hide_chosen_tasks and task in chosen_tasks):
+ continue
+ tasks += [task]
+
+ if sort_order == 'title':
+ chosen_todos.sort(key=lambda t: t.title)
+ relevant_todos.sort(key=lambda t: t.title)
+ tasks.sort(key=lambda t: t.title.then)
+ elif sort_order == 'effort':
+ chosen_todos.sort(key=lambda t:
+ t.day_effort if t.day_effort else (t.default_effort if t.done else 0),
+ reverse=True)
+ relevant_todos.sort(key=lambda t: t.all_days_effort, reverse=True)
+ tasks.sort(key=lambda t: t.default_effort.then, reverse=True)
+
+ return j2env.get_template('pick_tasks.html').render(
+ sort=sort_order,
+ tags=self.t_tags,
+ chosen_todos=chosen_todos,
+ filter_and=self.t_filter_and,
+ filter_not=self.t_filter_not,
+ day=self.selected_day,
+ prev_date=prev_date_str,
+ next_date=next_date_str,
+ tasks=tasks,
+ hide_chosen_tasks=hide_chosen_tasks,
+ relevant_todos=relevant_todos,
+ search=search)
+
+ # helpers