Compare commits

...

2 Commits

Author SHA1 Message Date
4706de981b
Include overview of booked categories in timeline tools report
This is to easy booking entries that should be distributed among other
topics done in the same time range.
2024-10-25 18:57:02 +02:00
cffe713fa9
Include day of week in daily timeline tool report
This way, it's easier to see at glance what day the current report is
for.
2024-10-25 18:55:38 +02:00

View File

@ -59,7 +59,7 @@ Filter are applied in the order they are given in this list."
:group 'timeline-tools :group 'timeline-tools
:type 'integer) :type 'integer)
(defcustom timeline-tools-headline-time-format "%Y-%m-%d %H:%M" (defcustom timeline-tools-headline-time-format "%Y-%m-%d %a %H:%M"
"Format of time used in the headline of a timeline." "Format of time used in the headline of a timeline."
:group 'timeline-tools :group 'timeline-tools
:type 'string) :type 'string)
@ -433,8 +433,7 @@ interactively, this date will be queried with `org-read-date.
When not given, FILES defaults to `org-agenda-files without When not given, FILES defaults to `org-agenda-files without
archives." archives."
(interactive (list (org-read-date nil nil))) (interactive (list (org-read-date nil nil)))
(let ((timeline-tools-time-format "%H:%M") (let ((timeline-tools-time-format "%H:%M"))
(timeline-tools-headline-time-format "%Y-%m-%d"))
(timeline-tools-format-timeline (concat date " 00:00") (timeline-tools-format-timeline (concat date " 00:00")
(org-read-date nil nil "++1d" nil (org-read-date nil nil "++1d" nil
(org-time-string-to-time date)) (org-time-string-to-time date))
@ -458,9 +457,8 @@ current values of the relevant buffer local variables."
timeline-tools--current-files) timeline-tools--current-files)
(timeline-tools--get-timeline-from-buffer))))) (timeline-tools--get-timeline-from-buffer)))))
;; Update categories in all affected buffers to retrieve up-to-date ;; Update categories in all affected buffers to retrieve up-to-date information; find all
;; information; find all relevant buffers by checking the markers of all ;; relevant buffers by checking the markers of all entries.
;; entries.
(dolist (buffer (->> timeline (dolist (buffer (->> timeline
(mapcar #'timeline-tools-entry-marker) (mapcar #'timeline-tools-entry-marker)
(mapcar #'marker-buffer) (mapcar #'marker-buffer)
@ -469,11 +467,35 @@ current values of the relevant buffer local variables."
(org-refresh-category-properties))) (org-refresh-category-properties)))
(erase-buffer) (erase-buffer)
(insert (format "* Timeline from [%s] to [%s]\n\n"
;; Header
(insert (format "Timeline from [%s] to [%s]\n\n"
(format-time-string timeline-tools-headline-time-format (format-time-string timeline-tools-headline-time-format
timeline-tools--current-time-start) timeline-tools--current-time-start)
(format-time-string timeline-tools-headline-time-format (format-time-string timeline-tools-headline-time-format
timeline-tools--current-time-end))) timeline-tools--current-time-end)))
;; Clocktime summary: booked categories, their total times, and their relative amount
(let* ((data (->> timeline
(-group-by timeline-tools-category-function)
(-map #'(lambda (category-lines)
(list (car category-lines)
(->> category-lines
cdr
(-map #'timeline-tools-entry-duration)
-sum))))))
(total-time (float (-sum (-map #'-second-item data)))))
(insert "| Category | Total | Amount |\n|--|\n")
(dolist (category-lines data)
(insert (format "| %s | %s | %.2f%% |\n"
(-first-item category-lines)
(org-duration-from-minutes (-second-item category-lines))
(* 100 (/ (-second-item category-lines) total-time)))))
(insert (format "|--|\n| | %s | |\n" (org-duration-from-minutes total-time)))
(org-table-align)
(insert "\n"))
;; Actual timeline
(insert "|--|\n") (insert "|--|\n")
(insert "| Category | Start | End | Duration | Task |\n") (insert "| Category | Start | End | Duration | Task |\n")
(let ((last-category nil) (let ((last-category nil)