Compare commits
1 Commits
e9627e69fd
...
2ee8bde397
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ee8bde397 |
@ -749,7 +749,12 @@ PARAMS is a property list of the following parameters:
|
|||||||
weekends, use \"Sat\\|Sun\" as regular expression.
|
weekends, use \"Sat\\|Sun\" as regular expression.
|
||||||
|
|
||||||
This can also be a function taking a formatted timestamp as
|
This can also be a function taking a formatted timestamp as
|
||||||
argument and returning non-nil when the date should be skipped."
|
argument and returning non-nil when the date should be skipped.
|
||||||
|
|
||||||
|
`:work-hours'
|
||||||
|
|
||||||
|
The time available per day for work, given as duration string.
|
||||||
|
Defauls to \"8:00\"."
|
||||||
(let* ((start-date (org-read-date t t
|
(let* ((start-date (org-read-date t t
|
||||||
(or (plist-get params :start-date)
|
(or (plist-get params :start-date)
|
||||||
"00:00")))
|
"00:00")))
|
||||||
@ -767,13 +772,19 @@ PARAMS is a property list of the following parameters:
|
|||||||
#'(lambda (x) (string-match arg x)))
|
#'(lambda (x) (string-match arg x)))
|
||||||
((and (pred functionp) fun) fun)
|
((and (pred functionp) fun) fun)
|
||||||
(_ (user-error "Invalid argument to :skip-matches: %s" arg))))
|
(_ (user-error "Invalid argument to :skip-matches: %s" arg))))
|
||||||
|
(work-hours (or (plist-get params :work-hours)
|
||||||
|
"8:00"))
|
||||||
date-range)
|
date-range)
|
||||||
|
|
||||||
;; Check input
|
;; Check input
|
||||||
|
|
||||||
(unless (string-match-p (rx bos "+" (+ digit) (in "dwmy") eos)
|
(unless (string-match-p (rx bos "+" (+ digit) (in "dwmy") eos)
|
||||||
increment)
|
increment)
|
||||||
(user-error "Increment must be of the form +1d, +2m, +3y, …, but it's %s" increment))
|
(user-error "Increment must be of the form +1d, +2m, +3y, …, but it's %s" increment))
|
||||||
|
|
||||||
|
(unless (org-duration-p work-hours)
|
||||||
|
(user-error "Work hours must be a duration string, but it's %s" work-hours))
|
||||||
|
|
||||||
;; Compute range of dates to check; simple but potentially costly approach
|
;; Compute range of dates to check; simple but potentially costly approach
|
||||||
;; taken from https://sachachua.com/blog/2015/08/org-mode-date-arithmetic/;
|
;; taken from https://sachachua.com/blog/2015/08/org-mode-date-arithmetic/;
|
||||||
;; maybe consider `org-read-date-get-relative' as well?
|
;; maybe consider `org-read-date-get-relative' as well?
|
||||||
@ -794,9 +805,10 @@ PARAMS is a property list of the following parameters:
|
|||||||
(insert (format "#+CAPTION: Workload Overview Report at [%s] with start date [%s]\n"
|
(insert (format "#+CAPTION: Workload Overview Report at [%s] with start date [%s]\n"
|
||||||
(format-time-string timestamp-format (current-time))
|
(format-time-string timestamp-format (current-time))
|
||||||
(format-time-string timestamp-format start-date)))
|
(format-time-string timestamp-format start-date)))
|
||||||
(insert "| End Time | Planned Total |\n| <r> | <r> |\n|---|\n")
|
(insert "| End Time | Planned Total | Utilization |\n| <r> | <r> | <r> |\n|---|\n")
|
||||||
;; Compute workload report for each date and record the total time;
|
;; Compute workload report for each date and record the total time;
|
||||||
;; XXX: this might be slow, try to reduce the calls to `db/org-planned-tasks-in-range'.
|
;; XXX: this might be slow, try to reduce the calls to `db/org-planned-tasks-in-range'.
|
||||||
|
(let ((days 0))
|
||||||
(dolist (interval-end-date date-range)
|
(dolist (interval-end-date date-range)
|
||||||
(let ((total-time (car (db/org-planned-tasks-in-range
|
(let ((total-time (car (db/org-planned-tasks-in-range
|
||||||
;; Set start date to nil to also include tasks scheduled or deadlined
|
;; Set start date to nil to also include tasks scheduled or deadlined
|
||||||
@ -805,7 +817,11 @@ PARAMS is a property list of the following parameters:
|
|||||||
nil
|
nil
|
||||||
interval-end-date
|
interval-end-date
|
||||||
org-ql-match))))
|
org-ql-match))))
|
||||||
(insert (format "| [%s] | %s |\n" interval-end-date total-time))))
|
(let ((utilization (* (/ (org-duration-to-minutes total-time)
|
||||||
|
(* (cl-incf days)
|
||||||
|
(org-duration-to-minutes work-hours)))
|
||||||
|
100)))
|
||||||
|
(insert (format "| [%s] | %s | %.2f%% |\n" interval-end-date total-time utilization))))))
|
||||||
(insert "|--|")
|
(insert "|--|")
|
||||||
(org-table-align)))
|
(org-table-align)))
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user