Refactor and simplify work hour computation in overview report

This is to prepare a generalization of how to specify work hours, namly
using a function from date to available work hours on that day.
This commit is contained in:
Daniel Borchmann 2024-10-03 17:40:46 +02:00
parent 9d03f2d953
commit bdfcc61dd2
No known key found for this signature in database
GPG Key ID: 784AA8DF0CCDF625

View File

@ -807,28 +807,28 @@ PARAMS is a property list of the following parameters:
(format-time-string timestamp-format start-date))) (format-time-string timestamp-format start-date)))
(insert "| End Time | Planned Work | Work Hours | Utilization |\n| <r> | <r> | <r> | <r> |\n|---|\n") (insert "| End Time | Planned Work | Work Hours | Utilization |\n| <r> | <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'. (let ((total-work-hours 0))
(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-duration (car ;; XXX: this might be slow, try to reduce the calls to
;; Set start date to nil to also include tasks scheduled or deadlined ;; `db/org-planned-tasks-in-range'.
;; before `start-date', as those are also still open and need to be (db/org-planned-tasks-in-range
;; done somewhen. ;; Set start date to nil to also include tasks scheduled or
;; deadlined before `start-date', as those are also still open
;; and need to be done somewhen.
nil nil
interval-end-date interval-end-date
org-ql-match)))) org-ql-match)))
(let ((utilization (* (/ (org-duration-to-minutes total-time) (utilization (* (/ (org-duration-to-minutes total-time-duration)
(* (cl-incf days) (cl-incf total-work-hours (org-duration-to-minutes work-hours)))
(org-duration-to-minutes work-hours)))
100))) 100)))
(insert (format "| [%s] | %s | %s | %s |\n" (insert (format "| [%s] | %s | %s | %s |\n"
interval-end-date interval-end-date
total-time total-time-duration
(org-duration-from-minutes (* days (org-duration-to-minutes work-hours))) (org-duration-from-minutes total-work-hours)
(if (<= 80 utilization) (if (<= 80 utilization)
;; When utilization is above 80%, mark entry in bold ;; When utilization is above 80%, mark entry in bold
(format "*%.2f%%*" utilization) (format "*%.2f%%*" utilization)
(format "%.2f%%" utilization)))))))) (format "%.2f%%" utilization)))))))
(insert "|--|") (insert "|--|")
(org-table-align))) (org-table-align)))