module Ledger.TimeLog
where
import Ledger.Utils
import Ledger.Types
import Ledger.Dates
import Ledger.Commodity
import Ledger.Amount
import Ledger.Entry
instance Show TimeLogEntry where
show t = printf "%s %s %s" (show $ tlcode t) (show $ tldatetime t) (tlcomment t)
instance Show TimeLog where
show tl = printf "TimeLog with %d entries" $ length $ timelog_entries tl
entriesFromTimeLogEntries :: [TimeLogEntry] -> [Entry]
entriesFromTimeLogEntries [] = []
entriesFromTimeLogEntries [i] = entriesFromTimeLogEntries [i, clockoutFor i]
entriesFromTimeLogEntries (i:o:rest) = [entryFromTimeLogInOut i o] ++ entriesFromTimeLogEntries rest
clockoutFor :: TimeLogEntry -> TimeLogEntry
clockoutFor (TimeLogEntry _ t _) = TimeLogEntry 'o' t ""
entryFromTimeLogInOut :: TimeLogEntry -> TimeLogEntry -> Entry
entryFromTimeLogInOut i o
| outtime >= intime = e
| otherwise =
error $ "clock-out time less than clock-in time in:\n" ++ showEntry e
where
e = Entry {
edate = outdate,
estatus = True,
ecode = "",
edescription = showtime intime ++ " - " ++ showtime outtime,
ecomment = "",
etransactions = txns,
epreceding_comment_lines=""
}
showtime = show . timeToTimeOfDay . utctDayTime
acctname = tlcomment i
indate = utctDay intime
outdate = utctDay outtime
intime = tldatetime i
outtime = tldatetime o
amount = Mixed [hours $ elapsedSeconds outtime intime / 3600]
txns = [RawTransaction acctname amount "" RegularTransaction
]