home · contact · privacy
Improve accounting scripts.
[misc] / todo.py
diff --git a/todo.py b/todo.py
index 478a41e106e23c525eb7af7d172d4e518165cf63..7b8b83e5ddfe34aa42cb9e6b6e3021b3ceadde71 100644 (file)
--- a/todo.py
+++ b/todo.py
@@ -309,7 +309,7 @@ class TodoDB(PlomDB):
             task_rows.sort(key=lambda r: False if not r['todo'] else True, reverse=True)
         elif task_sort == 'comment':
             task_rows.sort(key=lambda r: '' if not r['todo'] else r['todo'].comment, reverse=True)
-        return j2env.get_template('day.html').render(db=self, action=self.prefix+'/day', prev_date=prev_date_str, next_date=next_date_str, task_rows=task_rows)
+        return j2env.get_template('day.html').render(db=self, action=self.prefix+'/day', prev_date=prev_date_str, next_date=next_date_str, task_rows=task_rows, sort=task_sort)
 
     def show_calendar(self, start_date_str, end_date_str):
         self.t_filter_and = ['calendar']
@@ -333,14 +333,18 @@ class TodoDB(PlomDB):
             days_to_show[current_date].weekday = datetime.strptime(current_date, DATE_FORMAT).strftime('%A')[:2]
         return j2env.get_template('calendar.html').render(db=self, days=days_to_show, action=self.prefix+'/calendar', today=str(datetime.now())[:10], start_date=start_date_str, end_date=end_date_str)
 
-    def show_todo(self, task_uuid, selected_date):
+    def show_todo(self, task_uuid, selected_date, referer):
+        if selected_date not in self.days.keys():
+           self.days[selected_date] = self.add_day() 
         if task_uuid in self.days[selected_date].todos:
             todo = self.days[selected_date].todos[task_uuid]
         else:
             todo = self.days[selected_date].add_todo(task_uuid)
-        return j2env.get_template('todo.html').render(db=self, todo=todo, action=self.prefix+'/todo')
+        return j2env.get_template('todo.html').render(db=self, todo=todo, action=self.prefix+'/todo', referer=referer)
 
     def update_todo_mini(self, task_uuid, date, day_effort, done, importance):
+        if date not in self.days.keys():
+           self.days[date] = self.add_day() 
         if task_uuid in self.days[date].todos.keys():
             todo = self.days[date].todos[task_uuid]
         else:
@@ -363,9 +367,9 @@ class TodoDB(PlomDB):
         todo.comment = comment
         todo.day_tags = self.collect_tags(day_tags_joined, day_tags_checked) 
 
-    def show_task(self, id_):
+    def show_task(self, id_, referer=''):
         task = self.tasks[id_] if id_ else self.add_task()
-        return j2env.get_template('task.html').render(db=self, task=task, action=self.prefix+'/task')
+        return j2env.get_template('task.html').render(db=self, task=task, action=self.prefix+'/task', referer=referer)
 
     def update_task(self, id_, title, default_effort, tags_joined, tags_checked, links):
         task = self.tasks[id_] if id_ in self.tasks.keys() else self.add_task(id_)
@@ -455,16 +459,20 @@ class TodoHandler(PlomHandler):
                              del db.selected_day.todos[uuid]
                      if 'choose' in postvars.keys():
                          for i, uuid in enumerate(postvars['t_uuid']):
-                             uuids = postvars['choose'] + postvars['done'] if 'done' in postvars.keys() else []
-                             if uuid in uuids or postvars['day_effort'][i] != '' or postvars['importance'][i] != '1.0':
+                             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)]
 
-        encoded_params = urlencode(params_to_encode)
-        homepage = f'{parsed_url.path}?{encoded_params}'
+        if 'referer' in postvars.keys() and len(postvars['referer'][0]) > 0:
+            homepage = postvars['referer'][0]
+        else:
+            encoded_params = urlencode(params_to_encode)
+            homepage = f'{parsed_url.path}?{encoded_params}'
         db.write()
         self.redirect(homepage)
 
@@ -501,6 +509,7 @@ class TodoHandler(PlomHandler):
 
         selected_date = t_filter_and = t_filter_not = None
         hide_unchosen = hide_done = False
+        referer = params.get('referer', [''])[0]
         if parsed_url.path in {app_config['prefix'] + '/day', app_config['prefix'] + '/tasks'}:
             selected_date = get_param('selected_date')
         if parsed_url.path in {app_config['prefix'] + '/day', app_config['prefix'] + '/tasks', app_config['prefix'] + '/task'}:
@@ -516,10 +525,10 @@ class TodoHandler(PlomHandler):
         elif parsed_url.path == app_config['prefix'] + '/todo':
             todo_date = params.get('date', [None])[0]
             task_uuid = params.get('task', [None])[0]
-            page = db.show_todo(task_uuid, todo_date)
+            page = db.show_todo(task_uuid, todo_date, referer)
         elif parsed_url.path == app_config['prefix'] + '/task':
             id_ = params.get('id', [None])[0]
-            page = db.show_task(id_)
+            page = db.show_task(id_, referer)
         elif parsed_url.path == app_config['prefix'] + '/tasks':
             page = db.show_tasks()
         elif parsed_url.path == app_config['prefix'] + '/add_task':