Allow entries in workload report to be sorted
This commit is contained in:
parent
735570d7c0
commit
96a7f35a90
@ -454,14 +454,29 @@ PARAMS is a property list of the following parameters:
|
|||||||
|
|
||||||
`org-ql' expression (in sexp syntax) to filter the list of tasks.
|
`org-ql' expression (in sexp syntax) to filter the list of tasks.
|
||||||
|
|
||||||
|
`:sort-column'
|
||||||
|
|
||||||
|
Specify the column to sort by. Can be any of `task', `effort',
|
||||||
|
`timestamp', `scheduled', or `deadline'.
|
||||||
|
|
||||||
All tasks between `:start-date' and `:end-date' will be collected
|
All tasks between `:start-date' and `:end-date' will be collected
|
||||||
and their effort summed up. The date format is everything
|
and their effort summed up. The date format is everything
|
||||||
understood by `org-read-date'."
|
understood by `org-read-date'."
|
||||||
(let* ((start-date (plist-get params :start-date))
|
(let* ((start-date (plist-get params :start-date))
|
||||||
(end-date (plist-get params :end-date))
|
(end-date (plist-get params :end-date))
|
||||||
(org-ql-match (plist-get params :org-ql-match))
|
(org-ql-match (plist-get params :org-ql-match))
|
||||||
|
(sort-column-count (cl-case (plist-get params :sort-column)
|
||||||
|
((nil) 2) ; sort by effort by default
|
||||||
|
((task) 1)
|
||||||
|
((effort) 2)
|
||||||
|
((timestamp) 3)
|
||||||
|
((scheduled) 4)
|
||||||
|
((deadline) 5)
|
||||||
|
(otherwise (user-error ":sort-column value invalid, see docstring of `org-dblock-write:db/org-workload-report' for options"))))
|
||||||
(task-summary (db/org-planned-tasks-in-range start-date end-date org-ql-match)))
|
(task-summary (db/org-planned-tasks-in-range start-date end-date org-ql-match)))
|
||||||
|
|
||||||
|
(message "foo %s %s" (plist-get params :sort-column) sort-column-count)
|
||||||
|
|
||||||
(insert "| Task | Effort | Timestamp | SCHEDULED | DEADLINE |\n|---|\n")
|
(insert "| Task | Effort | Timestamp | SCHEDULED | DEADLINE |\n|---|\n")
|
||||||
(pcase-dolist (`(,task-id . ,effort-string) (cdr task-summary))
|
(pcase-dolist (`(,task-id . ,effort-string) (cdr task-summary))
|
||||||
(insert (format "| %s | %s | %s | %s | %s |\n"
|
(insert (format "| %s | %s | %s | %s | %s |\n"
|
||||||
@ -469,15 +484,20 @@ understood by `org-read-date'."
|
|||||||
(or effort-string "")
|
(or effort-string "")
|
||||||
(or (org-entry-get (org-id-find task-id 'marker)
|
(or (org-entry-get (org-id-find task-id 'marker)
|
||||||
"TIMESTAMP")
|
"TIMESTAMP")
|
||||||
"not set")
|
"")
|
||||||
(or (org-entry-get (org-id-find task-id 'marker)
|
(or (org-entry-get (org-id-find task-id 'marker)
|
||||||
"SCHEDULED")
|
"SCHEDULED")
|
||||||
"not set")
|
"")
|
||||||
(or (org-entry-get (org-id-find task-id 'marker)
|
(or (org-entry-get (org-id-find task-id 'marker)
|
||||||
"DEADLINE")
|
"DEADLINE")
|
||||||
"not set"))))
|
""))))
|
||||||
(insert (format "|---|\n| Total | %s |\n|---|" (car task-summary)))
|
(insert (format "|---|\n| Total | %s |\n|---|" (car task-summary)))
|
||||||
(org-table-align)))
|
(org-table-align)
|
||||||
|
(forward-line -4) ; go back to actual data
|
||||||
|
(beginning-of-line)
|
||||||
|
(dotimes (_ sort-column-count) ; move to column to sort
|
||||||
|
(org-table-next-field))
|
||||||
|
(org-table-sort-lines nil ?t)))
|
||||||
|
|
||||||
(defun db/org-insert-workload-report ()
|
(defun db/org-insert-workload-report ()
|
||||||
"Create dynamic block of planned tasks in given time range."
|
"Create dynamic block of planned tasks in given time range."
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user