Fix timeclock format parsing
Fix presumably copy-paste errors timeclock format has only timeclock lines or empty/comment lines Update test format to v3, add new tests Throw error on unexpected clock codes in timeclock format Fix missing case in pattern matching
This commit is contained in:
parent
65efdea4c0
commit
c7a88b50fb
@ -57,6 +57,7 @@ instance Read TimeclockCode where
|
||||
timeclockEntriesToTransactions :: LocalTime -> [TimeclockEntry] -> [Transaction]
|
||||
timeclockEntriesToTransactions _ [] = []
|
||||
timeclockEntriesToTransactions now [i]
|
||||
| tlcode i /= In = errorExpectedCodeButGot In i
|
||||
| odate > idate = entryFromTimeclockInOut i o' : timeclockEntriesToTransactions now [i',o]
|
||||
| otherwise = [entryFromTimeclockInOut i o]
|
||||
where
|
||||
@ -67,6 +68,8 @@ timeclockEntriesToTransactions now [i]
|
||||
o' = o{tldatetime=itime{localDay=idate, localTimeOfDay=TimeOfDay 23 59 59}}
|
||||
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
||||
timeclockEntriesToTransactions now (i:o:rest)
|
||||
| tlcode i /= In = errorExpectedCodeButGot In i
|
||||
| tlcode o /= Out =errorExpectedCodeButGot Out o
|
||||
| odate > idate = entryFromTimeclockInOut i o' : timeclockEntriesToTransactions now (i':o:rest)
|
||||
| otherwise = entryFromTimeclockInOut i o : timeclockEntriesToTransactions now rest
|
||||
where
|
||||
@ -76,6 +79,14 @@ timeclockEntriesToTransactions now (i:o:rest)
|
||||
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
||||
{- HLINT ignore timeclockEntriesToTransactions -}
|
||||
|
||||
errorExpectedCodeButGot expected actual = errorWithSourceLine line $ "expected timeclock code " ++ (show expected) ++ " but got " ++ show (tlcode actual)
|
||||
where
|
||||
line = case tlsourcepos actual of
|
||||
GenericSourcePos _ l _ -> l
|
||||
JournalSourcePos _ (l, _) -> l
|
||||
|
||||
errorWithSourceLine line msg = error $ "line " ++ show line ++ ": " ++ msg
|
||||
|
||||
-- | Convert a timeclock clockin and clockout entry to an equivalent journal
|
||||
-- transaction, representing the time expenditure. Note this entry is not balanced,
|
||||
-- since we omit the \"assets:time\" transaction for simpler output.
|
||||
|
||||
@ -99,7 +99,7 @@ timeclockfilep = do many timeclockitemp
|
||||
timeclockitemp = choice [
|
||||
void (lift emptyorcommentlinep)
|
||||
, timeclockentryp >>= \e -> modify' (\j -> j{jparsetimeclockentries = e : jparsetimeclockentries j})
|
||||
] <?> "timeclock entry, or default year or historical price directive"
|
||||
] <?> "timeclock entry, comment line, or empty line"
|
||||
|
||||
-- | Parse a timeclock entry.
|
||||
timeclockentryp :: JournalParser m TimeclockEntry
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
# 1. a timeclock session is parsed as a similarly-named transaction with one virtual posting
|
||||
hledger -f - print
|
||||
<<<
|
||||
<
|
||||
i 2009/1/1 08:00:00
|
||||
o 2009/1/1 09:00:00 stuff on checkout record is ignored
|
||||
|
||||
@ -8,7 +7,8 @@ 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 - print
|
||||
>
|
||||
2009-01-01 * 08:00-09:00
|
||||
() 1.00h
|
||||
|
||||
@ -18,11 +18,41 @@ o 2009/1/3 09:00:00
|
||||
2009-01-03 * and a description
|
||||
(some:account name) 1.00h
|
||||
|
||||
>>>2
|
||||
>>>= 0
|
||||
>2
|
||||
>= 0
|
||||
|
||||
# For a missing clock-out, now is implied
|
||||
<
|
||||
i 2020/1/1 08:00
|
||||
$ hledger -f - balance
|
||||
> /./
|
||||
>= 0
|
||||
|
||||
# For a log not starting with clock-out, print error
|
||||
<
|
||||
o 2020/1/1 08:00
|
||||
$ hledger -f - 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 - 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 - balance
|
||||
>2 /line 2: expected timeclock code o/
|
||||
>= !0
|
||||
|
||||
## TODO
|
||||
## 2. multi-day sessions get a new transaction for each day
|
||||
## multi-day sessions get a new transaction for each day
|
||||
#hledger -f- print
|
||||
#<<<
|
||||
#i 2017/04/20 09:00:00 A
|
||||
@ -35,7 +65,7 @@ o 2009/1/3 09:00:00
|
||||
#>>>2
|
||||
#>>>=
|
||||
#
|
||||
## 3. unclosed sessions are automatically closed at report time
|
||||
## unclosed sessions are automatically closed at report time
|
||||
## TODO this output looks wrong
|
||||
#hledger -f- print
|
||||
#<<<
|
||||
@ -70,7 +100,6 @@ o 2009/1/3 09:00:00
|
||||
#>>>2
|
||||
#>>>=
|
||||
|
||||
# 4.
|
||||
|
||||
# ledger timeclock example from #ledger
|
||||
# ==== consulting.timeclock
|
||||
|
||||
Loading…
Reference in New Issue
Block a user