Подтвердить что ты не робот

Отслеживание гибкого использования с использованием Emacs (& org-mode)

Итак, на работе мы используем flexitime (flex hours, flexi hours...), который хорош, но может быть трудно отслеживать. В настоящее время я использую org-mode для отслеживания своих часов (org-clock-(out|in)), но я хотел бы расширить это, чтобы автоматическое вычисление, если я работал более 8 часов (излишнее время должно быть добавлено к моей гибкой учетной записи ') или меньше (в зависимости от того, как долго был перерыв на обед, и т.д.), баланс на моей гибкой "учетной записи" и т.д.

Использует ли кто-нибудь еще Emacs для этого?

В настоящее время я использую очень базовую настройку для отслеживания своего времени:

(defun check-in ()
  (interactive)
  (let (pbuf (current-buffer))
    (find-file (convert-standard-filename "whatnot"))
    (goto-char (point-max))
    (insert "\n")
    (org-insert-heading)
    (org-insert-time-stamp (current-time))
    (org-clock-in)
    (save-buffer)
    (switch-to-buffer pbuf)))

(defun check-out ()
  (interactive)
  (let (pbuf (current-buffer))
    (find-file (convert-standard-filename "whatnot"))
    (goto-char (point-max))
    (org-clock-out)
    (save-buffer)
    (switch-to-buffer pbuf)))
4b9b3361

Ответ 1

Предполагая, что я правильно понял вашу проблему, я быстро взломал решение. Во-первых, вы должны обеспечить, чтобы вы создавали только одну контурную запись в день, если вы проверяете и выходите несколько раз. Определите следующую функцию, которая будет вычислять сверхурочную работу за данный день.

(defun compute-overtime (duration-string)
  "Computes overtime duration string for the given time DURATION-STRING."
  (let (minutes-in-a-workday
        work-minutes
        overtime-minutes)
    (defconst minutes-in-a-workday 480)
    (setq work-minutes (org-duration-string-to-minutes duration-string)
          overtime-minutes (- work-minutes minutes-in-a-workday))
    (if (< overtime-minutes 0) (setq overtime-minutes 0))
    (org-minutes-to-hh:mm-string overtime-minutes)))

Затем используйте это в формуле таблицы часов в файле whatnot.

#+BEGIN: clocktable :maxlevel 1 :emphasize nil :scope file :formula "$3='(compute-overtime $2)::@2$3=string(\"Overtime\")"    
#+END: clocktable

Нажмите C-c C-c, когда вы находитесь на таблице часов, чтобы восстановить его.

Вы можете получить общую сверхурочную работу, суммируя обсётки с использованием другой формулы. Но я не справился с этим.