職場ではフレックスタイム(フレックス アワー、フレックス アワーなど)を使用していますが、これは便利ですが、追跡するのが難しい場合があります。現在、私は 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)))
ベストアンサー1
あなたの問題を正しく理解していると仮定して、簡単な解決策をまとめました。まず、チェックインとチェックアウトを複数回行う場合は、1 日に 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時計テーブルの上にいるときにヒットすると、時計が再生されます。
別の計算式を使用して残業時間を合計することで、合計残業時間を求めることができます。しかし、私はそれを計算していません。