fix the timelog parser, make timelog reports work

This commit is contained in:
Simon Michael 2008-10-03 13:41:27 +00:00
parent 48700f323f
commit 9ad1310f60
3 changed files with 27 additions and 11 deletions

View File

@ -153,7 +153,7 @@ reservedOp = P.reservedOp lexer
-- parsers -- parsers
ledgerfile :: Parser RawLedger ledgerfile :: Parser RawLedger
ledgerfile = ledger <|> ledgerfromtimelog ledgerfile = try (ledger) <|> ledgerfromtimelog
ledger :: Parser RawLedger ledger :: Parser RawLedger
ledger = do ledger = do
@ -330,12 +330,13 @@ o 2007/03/10 17:26:02
-} -}
timelog :: Parser TimeLog timelog :: Parser TimeLog
timelog = do timelog = do
entries <- many timelogentry entries <- many timelogentry <?> "timelog entry"
eof eof
return $ TimeLog entries return $ TimeLog entries
timelogentry :: Parser TimeLogEntry timelogentry :: Parser TimeLogEntry
timelogentry = do timelogentry = do
many (commentline <|> blankline)
code <- oneOf "bhioO" code <- oneOf "bhioO"
many1 spacenonewline many1 spacenonewline
date <- ledgerdate date <- ledgerdate

View File

@ -1,12 +1,17 @@
{-| {-|
A 'TimeLog' is a parsed timelog file (generated by timeclock.el). A 'TimeLog' is a parsed timelog file (generated by timeclock.el),
It contains zero or more 'TimeLogEntry's. containing zero or more 'TimeLogEntry's. It can be converted to a
'RawLedger' for querying.
-} -}
module Ledger.TimeLog module Ledger.TimeLog
where where
import System.Locale (defaultTimeLocale)
import Data.Time.Clock (UTCTime, diffUTCTime)
import Data.Time.Format (parseTime, formatTime)
import Ledger.Utils import Ledger.Utils
import Ledger.Types import Ledger.Types
import Ledger.Currency import Ledger.Currency
@ -40,20 +45,29 @@ entriesFromTimeLogEntries [clockin,clockout] =
ecomment = "", ecomment = "",
etransactions = [ etransactions = [
RawTransaction accountname amount "", RawTransaction accountname amount "",
RawTransaction "TIME" (-amount) "" RawTransaction "assets:TIME" (-amount) ""
], ],
epreceding_comment_lines=""} epreceding_comment_lines=""}
] ]
where where
accountname = tlcomment clockin accountname = tlcomment clockin
intime = tldatetime clockin indate = showDateFrom intime
indate = dateFrom $ tldatetime clockin intime = parseDateTime $ tldatetime clockin
outtime = tldatetime clockout outtime = parseDateTime $ tldatetime clockout
amount = hours 0 -- read $ outtime - intime hours = fromRational (toRational (diffUTCTime outtime intime) / 3600) -- whatever
amount = Amount (getcurrency "h") hours 1
entriesFromTimeLogEntries many = entriesFromTimeLogEntries many =
(entriesFromTimeLogEntries $ take 2 many) ++ (entriesFromTimeLogEntries $ take 2 many) ++
(entriesFromTimeLogEntries $ drop 2 many) (entriesFromTimeLogEntries $ drop 2 many)
clockoutNowEntry = TimeLogEntry ' ' "" "" clockoutNowEntry = TimeLogEntry ' ' "" ""
dateFrom = id
parseDateTime :: String -> UTCTime
parseDateTime s = fromMaybe err parsed
where
err = error $ printf "could not parse timestamp \"%s\"" s
parsed = parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" s
showDateFrom :: UTCTime -> String
showDateFrom = formatTime defaultTimeLocale "%Y/%m/%d"

3
README
View File

@ -30,4 +30,5 @@ possible, see the ledger manual for more info:
Bugs: Bugs:
* timelog parser doesn't work * timelog balance report shows all accounts when it shouldn't
* timelog balance total is a little off compared to ledger