Allow custom org-ql filter expression in workload report
Nice!
This commit is contained in:
parent
a8fee5f044
commit
2616693233
|
@ -379,7 +379,7 @@ should not be clocked."
|
||||||
|
|
||||||
;;; Task Management
|
;;; Task Management
|
||||||
|
|
||||||
(defun db/org-planned-tasks-in-range (start-date end-date)
|
(defun db/org-planned-tasks-in-range (start-date end-date &optional org-ql-match)
|
||||||
"Return list of tasks planned between START-DATE and END-DATE.
|
"Return list of tasks planned between START-DATE and END-DATE.
|
||||||
|
|
||||||
This function will search through the files returned by
|
This function will search through the files returned by
|
||||||
|
@ -390,7 +390,11 @@ time range.
|
||||||
The result has the form (TOTAL-TIME . TASKS), where TASKS is a
|
The result has the form (TOTAL-TIME . TASKS), where TASKS is a
|
||||||
list of cons cells (ID . EFFORT). The total time is given as an
|
list of cons cells (ID . EFFORT). The total time is given as an
|
||||||
Org mode time string of the form hh:mm, as are all EFFORT
|
Org mode time string of the form hh:mm, as are all EFFORT
|
||||||
entries."
|
entries.
|
||||||
|
|
||||||
|
When ORG-QL-MATCH, an org-ql sexp, is given, filter the list of
|
||||||
|
tasks in range by this expression. When ORG-QL-MATCH is not
|
||||||
|
given, default to `(todo)'."
|
||||||
(let* (;; Allow Org syntax for dates; the result should be understandable by
|
(let* (;; Allow Org syntax for dates; the result should be understandable by
|
||||||
;; `parse-time-string' and thus `org-ql-query' should be fine with that.
|
;; `parse-time-string' and thus `org-ql-query' should be fine with that.
|
||||||
(start-date (org-read-date nil nil start-date))
|
(start-date (org-read-date nil nil start-date))
|
||||||
|
@ -400,7 +404,7 @@ entries."
|
||||||
:select '(cons
|
:select '(cons
|
||||||
(org-id-get-create)
|
(org-id-get-create)
|
||||||
(org-entry-get (point) "Effort"))
|
(org-entry-get (point) "Effort"))
|
||||||
:where `(and (todo)
|
:where `(and ,(or org-ql-match '(todo))
|
||||||
;; Is this redundant? Could we just stick with `ts-active'?
|
;; Is this redundant? Could we just stick with `ts-active'?
|
||||||
(or (scheduled :from ,start-date :to ,end-date)
|
(or (scheduled :from ,start-date :to ,end-date)
|
||||||
(deadline :from ,start-date :to ,end-date)
|
(deadline :from ,start-date :to ,end-date)
|
||||||
|
@ -428,12 +432,17 @@ PARAMS is a property list of the following parameters:
|
||||||
|
|
||||||
End date of the workload report.
|
End date of the workload report.
|
||||||
|
|
||||||
|
`:org-ql-match'
|
||||||
|
|
||||||
|
`org-ql' expression (in sexp syntax) to filter the list of tasks.
|
||||||
|
|
||||||
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))
|
||||||
(task-summary (db/org-planned-tasks-in-range start-date end-date)))
|
(org-ql-match (plist-get params :org-ql-match))
|
||||||
|
(task-summary (db/org-planned-tasks-in-range start-date end-date org-ql-match)))
|
||||||
|
|
||||||
(insert "| Task | Effort |\n|---|\n")
|
(insert "| Task | Effort |\n|---|\n")
|
||||||
(pcase-dolist (`(,task-id . ,effort-string) (cdr task-summary))
|
(pcase-dolist (`(,task-id . ,effort-string) (cdr task-summary))
|
||||||
|
|
Loading…
Reference in New Issue