|
@@ -2681,6 +2681,15 @@ LEVEL is an integer. Indent by two spaces per level above 1."
|
|
|
(if (= level 1) ""
|
|
|
(concat "\\_" (make-string (* 2 (1- level)) ?\s))))
|
|
|
|
|
|
+(defun org-clocktable-increment-day (ts &optional n)
|
|
|
+ "Increment day in TS by N (defaulting to 1).
|
|
|
+The TS argument has the same type as the return values of
|
|
|
+`float-time' or `current-time'."
|
|
|
+ (let ((tsd (decode-time ts)))
|
|
|
+ (cl-incf (nth 3 tsd) (or n 1))
|
|
|
+ (setf (nth 8 tsd) nil) ; no time zone: increasing day skips one whole day
|
|
|
+ (apply 'encode-time tsd)))
|
|
|
+
|
|
|
(defun org-clocktable-steps (params)
|
|
|
"Step through the range to make a number of clock tables."
|
|
|
(let* ((ts (plist-get params :tstart))
|
|
@@ -2688,7 +2697,6 @@ LEVEL is an integer. Indent by two spaces per level above 1."
|
|
|
(ws (plist-get params :wstart))
|
|
|
(ms (plist-get params :mstart))
|
|
|
(step0 (plist-get params :step))
|
|
|
- (step (cdr (assq step0 '((day . 86400) (week . 604800)))))
|
|
|
(stepskip0 (plist-get params :stepskip0))
|
|
|
(block (plist-get params :block))
|
|
|
cc tsb)
|
|
@@ -2715,16 +2723,19 @@ LEVEL is an integer. Indent by two spaces per level above 1."
|
|
|
(if (eq step0 'week)
|
|
|
(let ((dow (nth 6 (decode-time (seconds-to-time ts)))))
|
|
|
(if (<= dow ws) ts
|
|
|
- (- ts (* 86400 (- dow ws)))))
|
|
|
+ (org-clocktable-increment-day ts ; decrement
|
|
|
+ (- ws dow))))
|
|
|
ts))
|
|
|
(while (< tsb te)
|
|
|
(unless (bolp) (insert "\n"))
|
|
|
- (let ((start-time (seconds-to-time (max tsb ts))))
|
|
|
- (cl-incf tsb (let ((dow (nth 6 (decode-time (seconds-to-time tsb)))))
|
|
|
- (if (or (eq step0 'day)
|
|
|
- (= dow ws))
|
|
|
- step
|
|
|
- (* 86400 (- ws dow)))))
|
|
|
+ (let* ((start-time (seconds-to-time (max tsb ts)))
|
|
|
+ (dow (nth 6 (decode-time (seconds-to-time tsb))))
|
|
|
+ (days-to-skip (cond ((eq step0 'day) 1)
|
|
|
+ ;; else 'week:
|
|
|
+ ((= dow ws) 7)
|
|
|
+ (t (- ws dow)))))
|
|
|
+ (setq tsb (time-to-seconds (org-clocktable-increment-day tsb
|
|
|
+ days-to-skip)))
|
|
|
(insert "\n"
|
|
|
(if (eq step0 'day) "Daily report: "
|
|
|
"Weekly report starting on: ")
|