# 1. a timeclock session is parsed as a similarly-named transaction with one virtual posting. # Note since 1.17 we need to specify stdin's format explicitly. < i 2009/1/1 08:00:00 o 2009/1/1 09:00:00 stuff on checkout record is ignored i 2009/1/2 08:00:00 account name o 2009/1/2 09:00:00 i 2009/1/3 08:00:00 some:account name and a description o 2009/1/3 09:00:00 $ hledger -f timeclock:- print > 2009-01-01 * 08:00-09:00 () 1.00h 2009-01-02 * 08:00-09:00 (account name) 1.00h 2009-01-03 * and a description (some:account name) 1.00h >2 >= 0 # For a missing clock-out, now is implied < i 2020/1/1 08:00 $ hledger -f timeclock:- balance > /./ >= 0 # For a log not starting with clock-out, print error < o 2020/1/1 08:00 $ hledger -f timeclock:- balance >2 /line 1: expected timeclock code i/ >= !0 # For a different log starting not with clock-out, print error < o 2020/1/1 08:00 o 2020/1/1 09:00 $ hledger -f timeclock:- balance >2 /line 1: expected timeclock code i/ >= !0 # For two consecutive clock-in, print error < i 2020/1/1 08:00 i 2020/1/1 09:00 $ hledger -f timeclock:- balance >2 /line 2: expected timeclock code o/ >= !0 ## TODO ## multi-day sessions get a new transaction for each day #hledger -ftimeclock:- print #<<< #i 2017/04/20 09:00:00 A #o 2017/04/20 17:00:00 #i 2017/04/21 09:00:00 B #o 2017/04/21 17:00:00 #i 2017/04/22 09:00:00 C #o 2017/04/22 17:00:00 #>>> #>>>2 #>>>= # ## unclosed sessions are automatically closed at report time ## TODO this output looks wrong #hledger -ftimeclock:- print #<<< #i 2017/04/20 09:00:00 A #o 2017/04/20 17:00:00 #i 2017/04/21 09:00:00 B #o 2017/04/21 17:00:00 #i 2017/04/22 09:00:00 C #o 2017/04/22 17:00:00 #>>> #2017-04-20 * 09:00-17:00 # (A) 8.00h # #2017-04-21 * 09:00-23:59 # (B) 15.00h # #2017-04-22 * 00:00-09:00 # (B) 9.00h # #2017-04-22 * 17:00-23:59 # () 7.00h # #2017-04-23 * 00:00-23:59 # () 24.00h # #2017-04-24 * 00:00-23:59 # () 24.00h # #2017-04-25 * 00:00-11:28 # () 11.47h # #>>>2 #>>>= # ledger timeclock example from #ledger # ==== consulting.timeclock # ; Time log for consulting sideline # ; All times UTC # i 2011/01/26 16:00:00 XXXX:Remote "IPMI Access" # o 2011/01/26 16:15:00 # i 2011/01/26 17:45:00 XXXX:Onsite "Fix opty server" # o 2011/01/26 20:00:00 # i 2011/01/27 18:00:00 XXXX:Remote "SSL certificate for www.YYYY.com" # o 2011/01/27 18:15:00 # ; vim:ts=2 sw=2 sts=2 et ft=ledger fdm=manual: # ==== consulting.dat # ; Ledger for Consulting sideline # !account Consulting # !include consulting.timeclock # !end # 2010/02/27 (INV#2) XXXX Test Invoice # Consulting:XXXX:Remote -0.5h @ $75.00 # Consulting:XXXX:Onsite -2.25h @ $100.00 # Receivable:Consulting:XXXX # ; vim:ts=2 sw=2 sts=2 et ft=ledger fdm=manual: # ==== command: ledger -f consulting.dat -s bal # -2.25h Consulting:XXXX:Onsite # 2.25h Consulting:XXXX:Onsite "Fix opty server" # -30.0m Consulting:XXXX:Remote # 15.0m Consulting:XXXX:Remote "IPMI Access" # 15.0m Consulting:XXXX:Remote "SSL certificate for www.YYYY.com" # $262.5 Receivable:Consulting:XXXX # -------------------- # $262.5 # # timezone-related tests # # 1. as in ledger, historical prices may contain a time and timezone. # # hledger ignores them and uses 00:00 local time instead. # # XXX needs --value not --cost # hledgerdev -f - balance --no-total --cost # <<< # P 2011/01/01 00:00:00 A $1 # P 2011/01/01 15:00:00-0100 A $2 # 2010/12/31 # (20101231) 1 A # 2011/1/1 # (20110101) 1 A # 2011/1/2 # (20110102) 1 A # >>> # 1 A 20101231 # $2 20110101 # $2 20110102 # >>>=0