emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc)
@ 2020-10-09 11:21 Daryl Manning
  2020-10-09 17:36 ` Russell Adams
  2020-10-10  9:21 ` Dr. Arne Babenhauserheide
  0 siblings, 2 replies; 4+ messages in thread
From: Daryl Manning @ 2020-10-09 11:21 UTC (permalink / raw)
  To: Org-mode

[-- Attachment #1: Type: text/plain, Size: 728 bytes --]

I'm just setting up a new time tracking system and have in the past used
Harvest to track and bill clients.

With emacs clocking and calendaring, I was actually hoping to find some way
to have it interface/export with one of the SaaS systems and effectively
allow me to track time in emacs but then get data into one of those systems
(effectively for presentation, and invoicing and such.).

Has anyone run across a good integration for doing that or has a blog post
on their system particularly where they need to track hours/tasks across a
few clients and projects for consultancy purposes (or a roll your own would
be an interesting start though I do like the SaaS systems' invoicing and
payments and such.).

thanks!
Daryl.

[-- Attachment #2: Type: text/html, Size: 890 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc)
  2020-10-09 11:21 org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc) Daryl Manning
@ 2020-10-09 17:36 ` Russell Adams
  2020-10-10  9:21 ` Dr. Arne Babenhauserheide
  1 sibling, 0 replies; 4+ messages in thread
From: Russell Adams @ 2020-10-09 17:36 UTC (permalink / raw)
  To: emacs-orgmode

On Fri, Oct 09, 2020 at 07:21:24PM +0800, Daryl Manning wrote:
> I'm just setting up a new time tracking system and have in the past used
> Harvest to track and bill clients.
>

I bill my clients from work I log with Org.

I keep one file per project per customer. Every time I change tasks,
leave the keyboard and return, or just feel it is appropriate I add an
inactive timestamp to my notes. I've simplified that with a keybind to
make it one keypress instead of C-u C-c ! Enter.

At the end of the month, I look at a per Org file agenda via with
logbook mode and inactive timestamps enabled (C-c a 1 a L [) and count
up the hours. On issue with automating the counting (ie: clocking in
and out) is that each customer may have different rules (ie: minimum
hours for a task, emergency after hours support, etc). I haven't a
good way to encode that information. I do tend to make a simple table
with my count.

I enter this data manually into other timekeeping systems depending on
the customer, or my invoicing system. Unfortunately given the variety
I see no good way to directly export and invoice.

I find the flexibility of Org allows me to quickly do this with all my
needed data in one place. I often put ticket #'s as tags on my
headlines, and if a customer questions the bill I just save my agenda
view as HTML and send it over.

------------------------------------------------------------------
Russell Adams                            RLAdams@AdamsInfoServ.com

PGP Key ID:     0x1160DCB3           http://www.adamsinfoserv.com/

Fingerprint:    1723 D8CA 4280 1EC9 557F  66E8 1154 E018 1160 DCB3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc)
  2020-10-09 11:21 org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc) Daryl Manning
  2020-10-09 17:36 ` Russell Adams
@ 2020-10-10  9:21 ` Dr. Arne Babenhauserheide
  2020-10-12  5:54   ` Daryl Manning
  1 sibling, 1 reply; 4+ messages in thread
From: Dr. Arne Babenhauserheide @ 2020-10-10  9:21 UTC (permalink / raw)
  To: Daryl Manning; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 4816 bytes --]


Daryl Manning <dwm+orgmode@wakatara.com> writes:

> Has anyone run across a good integration for doing that or has a blog post
> on their system particularly where they need to track hours/tasks across a
> few clients and projects for consultancy purposes

I don’t do consultancy, but we I need to book for multiple projects at
work. I track my time and projects with org-mode (and found that
whenever I think “this is so small, I don’t need an org-headline for
this”, time gets out of hand). At the end of the week I then book my
time on the corresponding Jira issues using the clocktable in
agenda-view.

These are my essential customizations for that:

(use-package org-agenda
  :defer 8
  :custom
  (alert-default-style 'libnotify)
  (appt-disp-window-function 'alert-for-appt)
  (appt-delete-window-function (lambda ()))
  (org-agenda-clock-consistency-checks
   (quote
    (:max-duration "12:00" :min-duration 0 :max-gap "0:05" :gap-ok-around
		   ("4:00" "12:00")
		   :default-face
		   ((:background "DarkRed")
		    (:foreground "white"))
		   :overlap-face nil :gap-face nil :no-end-time-face nil :long-face nil :short-face nil)))
  (org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 2 :properties ("Effort"))))
  (org-agenda-start-with-clockreport-mode t)
  :config
  ;; Rebuild the reminders everytime the agenda is displayed
  (add-hook 'org-agenda-finalize-hook (lambda () (org-agenda-to-appt t)))
  ;; Run once when Emacs starts
  (org-agenda-to-appt t)
  ;; Activate appointments so we get notifications
  (appt-activate t))

(defun my/org-agenda-show-kanban ()
  (interactive)
  (save-excursion
    (search-forward ":KANBAN:")
    (org-agenda-goto)
    (org-narrow-to-subtree)
    (show-all)
    (fit-window-to-buffer)
    (widen)
    (recenter-top-bottom 0)))

;; KDE: show custom agenda with kanban via f12:
(with-eval-after-load 'org
  (setq org-agenda-custom-commands
        '(("o" "Agenda and TODOs"
           ((agenda)
            (tags-todo "-notodo" ((org-agenda-block-separator ?-)))
	    (tags "KANBAN" ((org-agenda-block-separator ?-)(org-agenda-compact-blocks nil)(org-agenda-overriding-header "")))))))

;; from https://www.emacswiki.org/emacs/TransposeWindows solution by Robert Bost
(defun rotate-windows (arg)
  "Rotate your windows; use the prefix argument to rotate the other direction"
  (interactive "P")
  (if (not (> (count-windows) 1))
      (message "You can't rotate a single window!")
    (let* ((rotate-times (prefix-numeric-value arg))
           (direction (if (or (< rotate-times 0) (equal arg '(4)))
                          'reverse 'identity)))
      (dotimes (_ (abs rotate-times))
        (dotimes (i (- (count-windows) 1))
          (let* ((w1 (elt (funcall direction (window-list)) i))
                 (w2 (elt (funcall direction (window-list)) (+ i 1)))
                 (b1 (window-buffer w1))
                 (b2 (window-buffer w2))
                 (s1 (window-start w1))
                 (s2 (window-start w2))
                 (p1 (window-point w1))
                 (p2 (window-point w2)))
            (set-window-buffer-start-and-point w1 b2 s2 p2)
            (set-window-buffer-start-and-point w2 b1 s1 p1)))))))


(defun agenda-and-todo ()
  (interactive)
  (org-agenda nil "o")
  (delete-other-windows)
  (my/org-agenda-show-kanban)
  (rotate-windows 1))
;;      systemsettings shortcuts: map f12 to
;;        emacsclient -e '(progn (show-frame)(agenda-and-todo))'
(global-set-key (kbd "<f12>") 'agenda-and-todo)

;; KDE: record new issue with M-f12 (alt f12):
;;      systemsettings shortcuts: map alt f12 to
;;        emacsclient -e '(progn (show-frame)(org-capture))'
(global-set-key (kbd "M-<f12>") 'org-capture)

;; clock into the current task via S-f12 (shift f12). rationale: shift
;; is used to shift from one task to another without clocking out.
(global-set-key (kbd "S-<f12>") 'org-clock-in)

;; KDE: global clock out via M-S-f12 (alt-shift f12):
;;      systemsettings shortcuts: map f12 to
;;        emacsclient -e '(progn (show-frame)(org-clock-out))'
(global-set-key (kbd "M-S-<f12>") 'org-clock-out)

(defun show-frame (&optional frame)
  "Show the current Emacs frame or the FRAME given as argument.

And make sure that it really shows up!"
  (raise-frame)
  ; yes, you have to call this twice. Don’t ask me why…
  ; select-frame-set-input-focus calls x-focus-frame and does a bit of
  ; additional magic.
  (select-frame-set-input-focus (selected-frame))
  (select-frame-set-input-focus (selected-frame)))


I have a dedicated emacs environment for work that I brought over into
homeoffice.

Best wishes,
Arne
-- 
Unpolitisch sein
heißt politisch sein
ohne es zu merken

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 1125 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc)
  2020-10-10  9:21 ` Dr. Arne Babenhauserheide
@ 2020-10-12  5:54   ` Daryl Manning
  0 siblings, 0 replies; 4+ messages in thread
From: Daryl Manning @ 2020-10-12  5:54 UTC (permalink / raw)
  To: Org-mode

[-- Attachment #1: Type: text/plain, Size: 5491 bytes --]

Very impressive. I am probably going to steal some of these functions.
Thank you.

Is the process you use to get this into jira (via clocktable) automatedx in
any way (even copy/paste) or do you have to put things in manually again?

Daryl.


On Sat, Oct 10, 2020 at 5:21 PM Dr. Arne Babenhauserheide <arne_bab@web.de>
wrote:

>
> Daryl Manning <dwm+orgmode@wakatara.com> writes:
>
> > Has anyone run across a good integration for doing that or has a blog
> post
> > on their system particularly where they need to track hours/tasks across
> a
> > few clients and projects for consultancy purposes
>
> I don’t do consultancy, but we I need to book for multiple projects at
> work. I track my time and projects with org-mode (and found that
> whenever I think “this is so small, I don’t need an org-headline for
> this”, time gets out of hand). At the end of the week I then book my
> time on the corresponding Jira issues using the clocktable in
> agenda-view.
>
> These are my essential customizations for that:
>
> (use-package org-agenda
>   :defer 8
>   :custom
>   (alert-default-style 'libnotify)
>   (appt-disp-window-function 'alert-for-appt)
>   (appt-delete-window-function (lambda ()))
>   (org-agenda-clock-consistency-checks
>    (quote
>     (:max-duration "12:00" :min-duration 0 :max-gap "0:05" :gap-ok-around
>                    ("4:00" "12:00")
>                    :default-face
>                    ((:background "DarkRed")
>                     (:foreground "white"))
>                    :overlap-face nil :gap-face nil :no-end-time-face nil
> :long-face nil :short-face nil)))
>   (org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 2
> :properties ("Effort"))))
>   (org-agenda-start-with-clockreport-mode t)
>   :config
>   ;; Rebuild the reminders everytime the agenda is displayed
>   (add-hook 'org-agenda-finalize-hook (lambda () (org-agenda-to-appt t)))
>   ;; Run once when Emacs starts
>   (org-agenda-to-appt t)
>   ;; Activate appointments so we get notifications
>   (appt-activate t))
>
> (defun my/org-agenda-show-kanban ()
>   (interactive)
>   (save-excursion
>     (search-forward ":KANBAN:")
>     (org-agenda-goto)
>     (org-narrow-to-subtree)
>     (show-all)
>     (fit-window-to-buffer)
>     (widen)
>     (recenter-top-bottom 0)))
>
> ;; KDE: show custom agenda with kanban via f12:
> (with-eval-after-load 'org
>   (setq org-agenda-custom-commands
>         '(("o" "Agenda and TODOs"
>            ((agenda)
>             (tags-todo "-notodo" ((org-agenda-block-separator ?-)))
>             (tags "KANBAN" ((org-agenda-block-separator
> ?-)(org-agenda-compact-blocks nil)(org-agenda-overriding-header "")))))))
>
> ;; from https://www.emacswiki.org/emacs/TransposeWindows solution by
> Robert Bost
> (defun rotate-windows (arg)
>   "Rotate your windows; use the prefix argument to rotate the other
> direction"
>   (interactive "P")
>   (if (not (> (count-windows) 1))
>       (message "You can't rotate a single window!")
>     (let* ((rotate-times (prefix-numeric-value arg))
>            (direction (if (or (< rotate-times 0) (equal arg '(4)))
>                           'reverse 'identity)))
>       (dotimes (_ (abs rotate-times))
>         (dotimes (i (- (count-windows) 1))
>           (let* ((w1 (elt (funcall direction (window-list)) i))
>                  (w2 (elt (funcall direction (window-list)) (+ i 1)))
>                  (b1 (window-buffer w1))
>                  (b2 (window-buffer w2))
>                  (s1 (window-start w1))
>                  (s2 (window-start w2))
>                  (p1 (window-point w1))
>                  (p2 (window-point w2)))
>             (set-window-buffer-start-and-point w1 b2 s2 p2)
>             (set-window-buffer-start-and-point w2 b1 s1 p1)))))))
>
>
> (defun agenda-and-todo ()
>   (interactive)
>   (org-agenda nil "o")
>   (delete-other-windows)
>   (my/org-agenda-show-kanban)
>   (rotate-windows 1))
> ;;      systemsettings shortcuts: map f12 to
> ;;        emacsclient -e '(progn (show-frame)(agenda-and-todo))'
> (global-set-key (kbd "<f12>") 'agenda-and-todo)
>
> ;; KDE: record new issue with M-f12 (alt f12):
> ;;      systemsettings shortcuts: map alt f12 to
> ;;        emacsclient -e '(progn (show-frame)(org-capture))'
> (global-set-key (kbd "M-<f12>") 'org-capture)
>
> ;; clock into the current task via S-f12 (shift f12). rationale: shift
> ;; is used to shift from one task to another without clocking out.
> (global-set-key (kbd "S-<f12>") 'org-clock-in)
>
> ;; KDE: global clock out via M-S-f12 (alt-shift f12):
> ;;      systemsettings shortcuts: map f12 to
> ;;        emacsclient -e '(progn (show-frame)(org-clock-out))'
> (global-set-key (kbd "M-S-<f12>") 'org-clock-out)
>
> (defun show-frame (&optional frame)
>   "Show the current Emacs frame or the FRAME given as argument.
>
> And make sure that it really shows up!"
>   (raise-frame)
>   ; yes, you have to call this twice. Don’t ask me why…
>   ; select-frame-set-input-focus calls x-focus-frame and does a bit of
>   ; additional magic.
>   (select-frame-set-input-focus (selected-frame))
>   (select-frame-set-input-focus (selected-frame)))
>
>
> I have a dedicated emacs environment for work that I brought over into
> homeoffice.
>
> Best wishes,
> Arne
> --
> Unpolitisch sein
> heißt politisch sein
> ohne es zu merken
>

[-- Attachment #2: Type: text/html, Size: 6841 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-10-12  5:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-09 11:21 org-mode time tracking setup integrating with SaaS (Harvest, Toggl, Bonsai etc) Daryl Manning
2020-10-09 17:36 ` Russell Adams
2020-10-10  9:21 ` Dr. Arne Babenhauserheide
2020-10-12  5:54   ` Daryl Manning

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).