hledger/LedgerEntry.hs

83 lines
3.0 KiB
Haskell
Raw Normal View History

module LedgerEntry
where
import Utils
2007-07-02 18:54:36 +04:00
import Types
import LedgerTransaction
2007-07-04 13:28:07 +04:00
import Amount
instance Show LedgerEntry where show = showEntryDescription
2007-07-03 03:41:07 +04:00
2007-07-04 13:28:07 +04:00
-- for register report
--
-- a register entry is displayed as two or more lines like this:
-- date description account amount balance
-- DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaaaaa AAAAAAAAAAA AAAAAAAAAAAA
-- aaaaaaaaaaaaaaaaaaaaaa AAAAAAAAAAA AAAAAAAAAAAA
-- ... ... ...
2007-07-04 13:28:07 +04:00
-- datewidth = 10
-- descwidth = 20
-- acctwidth = 22
-- amtwidth = 11
-- balwidth = 12
2007-07-04 13:28:07 +04:00
showEntryDescription e = (showDate $ edate e) ++ " " ++ (showDescription $ edescription e) ++ " "
showDate d = printf "%-10s" d
showDescription s = printf "%-20s" (elideRight 20 s)
isEntryBalanced :: LedgerEntry -> Bool
2007-07-04 14:59:29 +04:00
isEntryBalanced e = (sumLedgerTransactions . etransactions) e == 0
autofillEntry :: LedgerEntry -> LedgerEntry
autofillEntry e =
LedgerEntry (edate e) (estatus e) (ecode e) (edescription e) (ecomment e)
(autofillTransactions (etransactions e))
2007-07-04 13:28:07 +04:00
-- the print command shows cleaned up ledger file entries, something like:
--
-- yyyy/mm/dd[ *][ CODE] description......... [ ; comment...............]
-- account name 1..................... ...$amount1[ ; comment...............]
-- account name 2..................... ..$-amount1[ ; comment...............]
2007-07-04 13:28:07 +04:00
--
-- codewidth = 10
-- descwidth = 20
-- acctwidth = 35
-- amtwidth = 11
-- commentwidth = 22
2007-07-04 13:28:07 +04:00
showEntry :: LedgerEntry -> String
2007-07-04 13:28:07 +04:00
showEntry e =
unlines $ ["", description] ++ (showtxns $ etransactions e)
where
description = concat [date, status, code, desc, comment]
2007-07-04 13:28:07 +04:00
date = showDate $ edate e
status = if estatus e then " *" else ""
code = if (length $ ecode e) > 0 then (printf " (%s)" $ ecode e) else ""
2007-07-04 13:28:07 +04:00
desc = " " ++ (elideRight 20 $ edescription e)
comment = if (length $ ecomment e) > 0 then " ; "++(ecomment e) else ""
2007-07-04 13:28:07 +04:00
showtxns (t1:t2:[]) = [showtxn t1, showtxnnoamt t2]
showtxns ts = map showtxn ts
showtxn t = showacct t ++ " " ++ (showamount $ tamount t) ++ (showcomment $ tcomment t)
showtxnnoamt t = showacct t ++ " " ++ (showcomment $ tcomment t)
2007-07-04 13:28:07 +04:00
showacct t = " " ++ (showaccountname $ taccount t)
showamount = printf "%11s" . showAmountRounded
showaccountname = printf "%-35s" . elideRight 35
showcomment s = if (length s) > 0 then " ; "++s else ""
2007-07-04 13:28:07 +04:00
showEntries :: [LedgerEntry] -> String
2007-07-04 13:28:07 +04:00
showEntries = concatMap showEntry
entrySetPrecision :: Int -> LedgerEntry -> LedgerEntry
entrySetPrecision p (LedgerEntry d s c desc comm ts) =
LedgerEntry d s c desc comm $ map (ledgerTransactionSetPrecision p) ts
2007-07-04 13:28:07 +04:00
-- modifier & periodic entries
instance Show ModifierEntry where
show e = "= " ++ (valueexpr e) ++ "\n" ++ unlines (map show (m_transactions e))
instance Show PeriodicEntry where
show e = "~ " ++ (periodexpr e) ++ "\n" ++ unlines (map show (p_transactions e))