Allow to skip entries in workload-overview-reports

This is especially useful when skipping weekends, but also allows for
future extensions where based on the date more complex skipping criteria
can be implemented, e.g. for holidays or vacations.
This commit is contained in:
Daniel Borchmann 2024-08-02 18:42:59 +02:00
parent 1ef71f02b8
commit 33b7d5d8d3
No known key found for this signature in database
GPG Key ID: 784AA8DF0CCDF625

View File

@ -708,7 +708,17 @@ PARAMS is a property list of the following parameters:
`:org-ql-match'
`org-ql' expression (in sexp syntax) to filter the list of
tasks to consider. Defaults to (todo)."
tasks to consider. Defaults to (todo).
`:skip-matches'
Regular expression to skip certain interval end dates that are
not of interest. The regular expression will be matched
against the formatted timestamp. For example, to skip
weekends, use \"Sat\\|Sun\" as regular expression.
This can also be a function taking a formatted timestamp as
argument and returning non-nil when the date should be skipped."
(let* ((start-date (org-read-date t t
(or (plist-get params :start-date)
"00:00")))
@ -720,6 +730,12 @@ PARAMS is a property list of the following parameters:
(org-ql-match (or (plist-get params :org-ql-match)
'(todo)))
(timestamp-format "%Y-%m-%d %a %H:%M")
(skipper (pcase (plist-get params :skip-matches)
((pred null) #'(lambda (_) nil))
((and (pred stringp) arg)
#'(lambda (x) (string-match arg x)))
((and (pred functionp) fun) fun)
(_ (user-error "Invalid argument to :skip-matches: %s" arg))))
date-range)
;; Check input
@ -758,9 +774,9 @@ PARAMS is a property list of the following parameters:
nil
(format-time-string timestamp-format interval-end-date)
org-ql-match))))
(insert (format "| [%s] | %s |\n"
(format-time-string timestamp-format interval-end-date)
total-time))))
(let ((interval-end-date (format-time-string timestamp-format interval-end-date)))
(unless (funcall skipper interval-end-date)
(insert (format "| [%s] | %s |\n" interval-end-date total-time))))))
(insert "|--|")
(org-table-align)))