From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id yDiNEkvHvGKhswAAbAwnHQ (envelope-from ) for ; Wed, 29 Jun 2022 23:42:35 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id kFR8EkvHvGKu0QAA9RJhRA (envelope-from ) for ; Wed, 29 Jun 2022 23:42:35 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id BD17B34030 for ; Wed, 29 Jun 2022 23:42:34 +0200 (CEST) Received: from localhost ([::1]:37730 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o6fSD-0006H5-Jw for larch@yhetil.org; Wed, 29 Jun 2022 17:42:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o6fRR-0006Eu-Kc for emacs-orgmode@gnu.org; Wed, 29 Jun 2022 17:41:45 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:43762) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o6fRP-0006uG-M2 for emacs-orgmode@gnu.org; Wed, 29 Jun 2022 17:41:45 -0400 Received: by mail-pj1-x102d.google.com with SMTP id dw10-20020a17090b094a00b001ed00a16eb4so783932pjb.2 for ; Wed, 29 Jun 2022 14:41:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=references:user-agent:from:to:subject:date:in-reply-to:message-id :mime-version; bh=7C3nZ8cOePc8FCVrIm3XXtrA0K76sxIt139VogHH7Dw=; b=I1ZwtBsGtn/gvLLDhn1iXeEdLgvgZXY3SzllZDYSEsnbKnCzPbrzAdd60mN0Qjm2+P SsAj/oQychyT5LqKlV5opMu1Ftuz1unJVu4zc2jr1OT0YSGXIlshJFztpKMW0PrARMu4 t6HduToMJEupp2ye6fQV2hoUUd0QrY4oymZWvdAcXJbuvLO6wvupJZKxrfY7cEEpDXbP Q6KUjtsF0PyKfpKk05B/H1s/wSijvsir2s8K/5RRk25SJQ7wSGL2hrQ7A3mzbfqYrEWd CNVFyz7rFuOWKBOTX0/xLzOXBz8dlbKJpi+vEUyDx6Wx4b62tF/MGgpd5A+5ove9AM8o KH8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:references:user-agent:from:to:subject:date :in-reply-to:message-id:mime-version; bh=7C3nZ8cOePc8FCVrIm3XXtrA0K76sxIt139VogHH7Dw=; b=GhguQ+plU99v5fNao9nv+n3ewBMa7FryY7t2qk9omLa4NljQygoVtmcRAgwKfV7DxB aoNL4SmZfyFBv4c91S8+NfMZerH1sS+3Un6+WSdgcc+Y9CD83Dmgtk2yPQ9m0tnORvwC aSgct3Xz3S+ULydslnjjtdJ7sWchPnXOFhobgqJctUi0UzVZbCKzIbFEIyoK0f37L38Q XcYpQFo1b2ut984SAeBXN/Ju4+SS08ou3NR9hl1DEXgcWpAFWZIFOgaLL7SV4S8IdEL1 swAbNfgEDBkLmjcM0jCru9OHQ7dQf1zraM0O0NlBUQr25nGRWqYcTf/VSwpPzd5aMY+3 fN0Q== X-Gm-Message-State: AJIora+9qLyA36PAV9PQ2IJ2dZE/iUUCBtP+7HzlgDtDm9LVR4PWoeH6 P4PgPxUNEKZG3kdrzIZi/uMcmmgPFXQSqQ== X-Google-Smtp-Source: AGRyM1tB+FqS46TTZ//+CkA8blwMlMQCOQhu+mQn1XHxJusuRP85eWrG2i4qcwxyNgCI19wG/QtQGA== X-Received: by 2002:a17:90b:3d0f:b0:1ed:3b8c:7cb1 with SMTP id pt15-20020a17090b3d0f00b001ed3b8c7cb1mr6227137pjb.44.1656538901236; Wed, 29 Jun 2022 14:41:41 -0700 (PDT) Received: from dingbat (2001-44b8-31f2-bb00-4910-5a5b-5e9e-4753.static.ipv6.internode.on.net. [2001:44b8:31f2:bb00:4910:5a5b:5e9e:4753]) by smtp.gmail.com with ESMTPSA id a15-20020a170902b58f00b001677d4a9654sm11886856pls.265.2022.06.29.14.41.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Jun 2022 14:41:40 -0700 (PDT) References: User-agent: mu4e 1.8.2; emacs 29.0.50 From: Tim Cross To: emacs-orgmode@gnu.org Subject: Re: Alternatives to clocking in/out for reporting time Date: Thu, 30 Jun 2022 07:26:20 +1000 In-reply-to: Message-ID: <87v8sji1v3.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=theophilusx@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1656538954; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=7C3nZ8cOePc8FCVrIm3XXtrA0K76sxIt139VogHH7Dw=; b=NRMWpV0FXOh3N999fyzgN20F4mMh1MzT05pa/CnnONT8Kh0Hdd/SKNApfMkfG5PtcCW/fl wS49khqZMLVMv4elf2ZM7RDjzBSNxVa58JHVZBNTsDGU/tPVRlZnJ+jwta/nYofGsCf6ei HCwFwPnCRiSUtUUip2ElTI0QfCJCUm1CDHFOE6T+c0/D555Wyuy5LdzD/Jzl8r3zeMQt8C ojxyy2N8LfllMhWj3v9jVJy07ZNw7fSLWhOJr1Azhkabn4aDNXtgA9A2siURAV81vH1NTM ckIVROMbn0aw9JtXHL7JVbvOLGh6tpDEFXP9qAdBRJl1yYewsWsslpVjbOu/kw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1656538954; a=rsa-sha256; cv=none; b=mn8W5pZW991INq6L2KxdQEDwtmWXoPuPXlcruXConUQEQSJvQ9eo/uMlOvns+D1CkQqCbB yre1/an64ToBIDX1fKsdqaD/Y2DMPKjs5i431bRkQXF/z4ITgUXzqr5TgnkxCCYNGNRPl+ PvXbv2ix/RX1H8PBb6WncOlT95wg8+jHd6Pv7fT5v6CEUtqulTZ8BkKoZ34PEBsx19yK3a PDgi1KZZcuqbGzHfRb9GgUVqLRE3RneEi7bNfWPSq6EFUOjYssX1mroFO2RDqAJ0t41fIM o4ZWrGXmb3IhIYmDWi1v3OgMIaaW4YO+Rm22rpM1iLa7MUrtA9ZdXgDM4Uu00g== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=I1ZwtBsG; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -5.46 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=I1ZwtBsG; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: BD17B34030 X-Spam-Score: -5.46 X-Migadu-Scanner: scn0.migadu.com X-TUID: emo9OwKSodeb Russell Adams writes: > I make extensive use of timestamps for billing (timesheet) > purposes. I'm looking to automate this more, and I find the existing > clocking system inadequate. I'm hoping someone can point me in the > right direction. > > Today I have log mode enabled so that each time I close a TODO item, > it records the date and time it was closed. At regular intervals while > working I add inactive timestamps to my notes. I've mapped that to a > single key, so it's quite fast. If I switch tasks, have an update, > made progress I want to note to myself, or leave and return I add an > inactive timestamp. I have well over 1000 inactive timestamps in my > current file. > > Later I can open my agenda view on the working file, choose my > timespan (week or month), enable log mode to show when items were > closed, and then enable inactive timestamps to view all of the > timestamps. This itemizes all the events organized by time into a > timeline. > > It's fairly straightforward from that timeline to count my hours based > on the record of where I spent my time. It is unfortunately a very > manual process. > > I find Org's clocking to be too detailed, and that it doesn't play > well with dynamically organized hierarchies of notes. I frequently > create and close subtasks, or switch parts of the tree. Clocking each > one is too much overhead, and too granular. I don't need to provide > down to the minute reports of each item. It also doesn't appear to > allow rounding of values, so I still have to adjust the results. > > What I envision is a way to count items in the agenda view to produce > a time report. Counting any inactive timestamp as 15 minutes, where if > a half hour or more is logged I round up to bill the hour. Closed TODO > items should count toward billing that whole hour. Clearly this should > be customized. > > The point is that I'm not worried about accounting time by task, > instead I'm aggregating tasks into accounting by whole hours. > > I'm looking at org-element, and it appears I'd have to do my own > agenda style scan of the whole tree to find items to classify by > hour. While I'm somewhat proficient at elisp, that sounds like a steep > wall to climb. > > Is there an iterative way to review items in an agenda view so I can > do the math to produce a report? > Russell, I don't have an answer for your specific problem. However, I was wondering if you looked at the options to configure the built-in time clocking and report table? The reason I asked is because I had basically the same/similar issue when I was using Org to do my invoicing. I would have lots of sub tasks which I would clock in/out and end up with far too many line items and overly detailed reports. However, I was able to change this just using tghe built in facilities of the clock table. I've been meaning to finish cleaning up my org invoicing solution for ages, but it is one of those projects which doesn't get high enough in the todo list. I'm also not a great elisp coder (only barely adequate). However, yu might find some of what I've done useful or might point you in the right direction. See https://github.com/theophilusx/org-invoicing Unfortunately, I cannot guarantee that code currently works. It is code based on what I use to use for my invoicing, which was pretty hacky, but worked well for me. I started to pull it together to make it more a usable module for anyone who needed invoicing support. To be honest, I cannot remember how far I got before getting distracted by a different shiny thing. What I can say is that the basic ideas do work and I successfully used it for invoicing for some time (I'm now retired, which is partly why I've not finished it off - I don't need to invoice clients anymore). I do think that if you need to go down the inactive timestamp route, your in for a lot of work. The main point about inactive timestamps is that they are not involved in any reporting or processing. So, you will need to write much of the code yourself if yo want to use that to generate your invoices and calculate billing. You really need to rule out the custom time table option first as that would be a lot less work overall and probably easier to maintain.