imp: errors: improve, test timeclock errors
This commit is contained in:
parent
27142896b3
commit
32c7f6300b
@ -28,7 +28,6 @@ import Hledger.Data.Types
|
|||||||
import Hledger.Data.Dates
|
import Hledger.Data.Dates
|
||||||
import Hledger.Data.Amount
|
import Hledger.Data.Amount
|
||||||
import Hledger.Data.Posting
|
import Hledger.Data.Posting
|
||||||
import Hledger.Data.Transaction
|
|
||||||
|
|
||||||
instance Show TimeclockEntry where
|
instance Show TimeclockEntry where
|
||||||
show t = printf "%s %s %s %s" (show $ tlcode t) (show $ tldatetime t) (tlaccount t) (tldescription t)
|
show t = printf "%s %s %s %s" (show $ tlcode t) (show $ tldatetime t) (tlaccount t) (tldescription t)
|
||||||
@ -66,7 +65,7 @@ timeclockEntriesToTransactions now [i]
|
|||||||
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
||||||
timeclockEntriesToTransactions now (i:o:rest)
|
timeclockEntriesToTransactions now (i:o:rest)
|
||||||
| tlcode i /= In = errorExpectedCodeButGot In i
|
| tlcode i /= In = errorExpectedCodeButGot In i
|
||||||
| tlcode o /= Out =errorExpectedCodeButGot Out o
|
| tlcode o /= Out = errorExpectedCodeButGot Out o
|
||||||
| odate > idate = entryFromTimeclockInOut i o' : timeclockEntriesToTransactions now (i':o:rest)
|
| odate > idate = entryFromTimeclockInOut i o' : timeclockEntriesToTransactions now (i':o:rest)
|
||||||
| otherwise = entryFromTimeclockInOut i o : timeclockEntriesToTransactions now rest
|
| otherwise = entryFromTimeclockInOut i o : timeclockEntriesToTransactions now rest
|
||||||
where
|
where
|
||||||
@ -76,10 +75,16 @@ timeclockEntriesToTransactions now (i:o:rest)
|
|||||||
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
||||||
{- HLINT ignore timeclockEntriesToTransactions -}
|
{- HLINT ignore timeclockEntriesToTransactions -}
|
||||||
|
|
||||||
errorExpectedCodeButGot expected actual = errorWithSourceLine line $ "expected timeclock code " ++ (show expected) ++ " but got " ++ show (tlcode actual)
|
errorExpectedCodeButGot :: TimeclockCode -> TimeclockEntry -> a
|
||||||
where line = unPos . sourceLine $ tlsourcepos actual
|
errorExpectedCodeButGot expected actual = error' $ printf
|
||||||
|
("%s:\n%s\n\nExpected timeclock %s entry but got %s.\n"
|
||||||
errorWithSourceLine line msg = error $ "line " ++ show line ++ ": " ++ msg
|
++"Only one session may be clocked in at a time, so please alternate i and o.")
|
||||||
|
(sourcePosPretty $ tlsourcepos actual)
|
||||||
|
(show l ++ " | " ++ show actual)
|
||||||
|
(show expected)
|
||||||
|
(show $ tlcode actual)
|
||||||
|
where
|
||||||
|
l = unPos $ sourceLine $ tlsourcepos actual
|
||||||
|
|
||||||
-- | Convert a timeclock clockin and clockout entry to an equivalent journal
|
-- | Convert a timeclock clockin and clockout entry to an equivalent journal
|
||||||
-- transaction, representing the time expenditure. Note this entry is not balanced,
|
-- transaction, representing the time expenditure. Note this entry is not balanced,
|
||||||
@ -87,9 +92,18 @@ errorWithSourceLine line msg = error $ "line " ++ show line ++ ": " ++ msg
|
|||||||
entryFromTimeclockInOut :: TimeclockEntry -> TimeclockEntry -> Transaction
|
entryFromTimeclockInOut :: TimeclockEntry -> TimeclockEntry -> Transaction
|
||||||
entryFromTimeclockInOut i o
|
entryFromTimeclockInOut i o
|
||||||
| otime >= itime = t
|
| otime >= itime = t
|
||||||
| otherwise = error' . T.unpack $
|
| otherwise =
|
||||||
"clock-out time less than clock-in time in:\n" <> showTransaction t -- PARTIAL:
|
-- Clockout time earlier than clockin is an error.
|
||||||
|
-- (Clockin earlier than preceding clockin/clockout is allowed.)
|
||||||
|
error' $ printf
|
||||||
|
("%s:\n%s\nThis clockout time (%s) is earlier than the previous clockin.\n"
|
||||||
|
++"Please adjust it to be later than %s.")
|
||||||
|
(sourcePosPretty $ tlsourcepos o)
|
||||||
|
(unlines [replicate (length l) ' '++ " | " ++ show i, l ++ " | " ++ show o])
|
||||||
|
(show $ tldatetime o)
|
||||||
|
(show $ tldatetime i)
|
||||||
where
|
where
|
||||||
|
l = show $ unPos $ sourceLine $ tlsourcepos o
|
||||||
t = Transaction {
|
t = Transaction {
|
||||||
tindex = 0,
|
tindex = 0,
|
||||||
tsourcepos = (tlsourcepos i, tlsourcepos i),
|
tsourcepos = (tlsourcepos i, tlsourcepos i),
|
||||||
|
|||||||
5
hledger/test/errors/tcclockouttime.timeclock
Executable file
5
hledger/test/errors/tcclockouttime.timeclock
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env -S hledger check -f
|
||||||
|
# Clockout time before previous clockin.
|
||||||
|
|
||||||
|
i 2022/01/01 00:01:00
|
||||||
|
o 2022/01/01 00:00:00
|
||||||
8
hledger/test/errors/tcorderedactions.timeclock
Executable file
8
hledger/test/errors/tcorderedactions.timeclock
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env -S hledger check -f
|
||||||
|
# Clockin/clockout out of order:
|
||||||
|
# two clockins without intervening clockout,
|
||||||
|
# two clockouts without intervening clockin,
|
||||||
|
# or an initial clockout with no preceding clockin.
|
||||||
|
|
||||||
|
i 2022/01/01 00:00:00
|
||||||
|
i 2022/01/01 00:01:00
|
||||||
Loading…
Reference in New Issue
Block a user