amount/currency updates

This commit is contained in:
Simon Michael 2007-03-12 17:53:39 +00:00
parent 2b696b8f0d
commit 23cb79e1f9
7 changed files with 29 additions and 26 deletions

View File

@ -25,7 +25,7 @@ data Entry = Entry {
ecode :: String, ecode :: String,
edescription :: String, edescription :: String,
etransactions :: [Transaction] etransactions :: [Transaction]
} deriving (Eq,Ord) } deriving (Eq)
instance Show Entry where show = showEntry instance Show Entry where show = showEntry

View File

@ -51,7 +51,7 @@ showTransactionsWithBalances [] _ = []
showTransactionsWithBalances ts b = showTransactionsWithBalances ts b =
unlines $ showTransactionsWithBalances' ts dummyt b unlines $ showTransactionsWithBalances' ts dummyt b
where where
dummyt = (Entry "" False "" "" [], Transaction "" (Amount "" 0)) dummyt = (Entry "" False "" "" [], Transaction "" (dollars 0))
showTransactionsWithBalances' [] _ _ = [] showTransactionsWithBalances' [] _ _ = []
showTransactionsWithBalances' (t:ts) tprev b = showTransactionsWithBalances' (t:ts) tprev b =
(if (entry t /= (entry tprev)) (if (entry t /= (entry tprev))

View File

@ -231,9 +231,9 @@ ledgeramount = try (do
many1 spacenonewline many1 spacenonewline
currency <- many (noneOf "-.0123456789\n") <?> "currency" currency <- many (noneOf "-.0123456789\n") <?> "currency"
quantity <- many1 (oneOf "-.,0123456789") <?> "quantity" quantity <- many1 (oneOf "-.,0123456789") <?> "quantity"
return (Amount currency (read $ stripcommas quantity)) return (Amount (getcurrency currency) (read $ stripcommas quantity))
) <|> ) <|>
return (Amount "AUTO" 0) return (Amount (Currency "AUTO" 0) 0)
stripcommas = filter (',' /=) stripcommas = filter (',' /=)

6
TODO
View File

@ -1,7 +1,11 @@
fix up Amounts
allow flexible display by currency
allow parsing by currency
fix arithmetic
feature: read timelog files feature: read timelog files
timelog parser timelog parser
handle time amounts handle time amounts
fix arithmetic
calculate time intervals calculate time intervals
find datetime type find datetime type
auto-generate missing clock-out auto-generate missing clock-out

View File

@ -13,7 +13,7 @@ import Utils
transaction1_str = " expenses:food:dining $10.00\n" transaction1_str = " expenses:food:dining $10.00\n"
transaction1 = Transaction "expenses:food:dining" (Amount "$" 10) transaction1 = Transaction "expenses:food:dining" (dollars 10)
entry1_str = "\ entry1_str = "\
\2007/01/28 coopportunity\n\ \2007/01/28 coopportunity\n\
@ -23,8 +23,8 @@ entry1_str = "\
entry1 = entry1 =
(Entry "2007/01/28" False "" "coopportunity" (Entry "2007/01/28" False "" "coopportunity"
[Transaction "expenses:food:groceries" (Amount "$" 47.18), [Transaction "expenses:food:groceries" (Amount (getcurrency "$") 47.18),
Transaction "assets:checking" (Amount "$" (-47.18))]) Transaction "assets:checking" (Amount (getcurrency "$") (-47.18))])
entry2_str = "\ entry2_str = "\
\2007/01/27 * joes diner\n\ \2007/01/27 * joes diner\n\
@ -163,9 +163,9 @@ ledger7 = Ledger
edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance", edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance",
etransactions=[ etransactions=[
Transaction {taccount="assets:cash", Transaction {taccount="assets:cash",
tamount=Amount {currency="$", quantity=4.82}}, tamount=Amount {currency=(getcurrency "$"), quantity=4.82}},
Transaction {taccount="equity:opening balances", Transaction {taccount="equity:opening balances",
tamount=Amount {currency="$", quantity=(-4.82)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82)}}
] ]
} }
, ,
@ -173,9 +173,9 @@ ledger7 = Ledger
edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites", edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites",
etransactions=[ etransactions=[
Transaction {taccount="expenses:vacation", Transaction {taccount="expenses:vacation",
tamount=Amount {currency="$", quantity=179.92}}, tamount=Amount {currency=(getcurrency "$"), quantity=179.92}},
Transaction {taccount="assets:checking", Transaction {taccount="assets:checking",
tamount=Amount {currency="$", quantity=(-179.92)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-179.92)}}
] ]
} }
, ,
@ -183,9 +183,9 @@ ledger7 = Ledger
edate="2007/01/02", estatus=False, ecode="*", edescription="auto transfer to savings", edate="2007/01/02", estatus=False, ecode="*", edescription="auto transfer to savings",
etransactions=[ etransactions=[
Transaction {taccount="assets:saving", Transaction {taccount="assets:saving",
tamount=Amount {currency="$", quantity=200}}, tamount=Amount {currency=(getcurrency "$"), quantity=200}},
Transaction {taccount="assets:checking", Transaction {taccount="assets:checking",
tamount=Amount {currency="$", quantity=(-200)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-200)}}
] ]
} }
, ,
@ -193,9 +193,9 @@ ledger7 = Ledger
edate="2007/01/03", estatus=False, ecode="*", edescription="poquito mas", edate="2007/01/03", estatus=False, ecode="*", edescription="poquito mas",
etransactions=[ etransactions=[
Transaction {taccount="expenses:food:dining", Transaction {taccount="expenses:food:dining",
tamount=Amount {currency="$", quantity=4.82}}, tamount=Amount {currency=(getcurrency "$"), quantity=4.82}},
Transaction {taccount="assets:cash", Transaction {taccount="assets:cash",
tamount=Amount {currency="$", quantity=(-4.82)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82)}}
] ]
} }
, ,
@ -203,9 +203,9 @@ ledger7 = Ledger
edate="2007/01/03", estatus=False, ecode="*", edescription="verizon", edate="2007/01/03", estatus=False, ecode="*", edescription="verizon",
etransactions=[ etransactions=[
Transaction {taccount="expenses:phone", Transaction {taccount="expenses:phone",
tamount=Amount {currency="$", quantity=95.11}}, tamount=Amount {currency=(getcurrency "$"), quantity=95.11}},
Transaction {taccount="assets:checking", Transaction {taccount="assets:checking",
tamount=Amount {currency="$", quantity=(-95.11)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-95.11)}}
] ]
} }
, ,
@ -213,9 +213,9 @@ ledger7 = Ledger
edate="2007/01/03", estatus=False, ecode="*", edescription="discover", edate="2007/01/03", estatus=False, ecode="*", edescription="discover",
etransactions=[ etransactions=[
Transaction {taccount="liabilities:credit cards:discover", Transaction {taccount="liabilities:credit cards:discover",
tamount=Amount {currency="$", quantity=80}}, tamount=Amount {currency=(getcurrency "$"), quantity=80}},
Transaction {taccount="assets:checking", Transaction {taccount="assets:checking",
tamount=Amount {currency="$", quantity=(-80)}} tamount=Amount {currency=(getcurrency "$"), quantity=(-80)}}
] ]
} }
] ]
@ -274,7 +274,7 @@ test_ledgerentry =
test_autofillEntry = test_autofillEntry =
assertEqual' assertEqual'
(Amount "$" (-47.18)) (Amount (getcurrency "$") (-47.18))
(tamount $ last $ etransactions $ autofillEntry entry1) (tamount $ last $ etransactions $ autofillEntry entry1)
test_expandAccountNames = test_expandAccountNames =
@ -294,7 +294,7 @@ test_ledgerAccountNames =
props = mapM quickCheck props = mapM quickCheck
[ [
parse' ledgertransaction transaction1_str `parseEquals` parse' ledgertransaction transaction1_str `parseEquals`
(Transaction "expenses:food:dining" (Amount "$" 10)) (Transaction "expenses:food:dining" (Amount (getcurrency "$") 10))
, ,
ledgerAccountNames ledger7 == ledgerAccountNames ledger7 ==
["assets","assets:cash","assets:checking","assets:saving","equity", ["assets","assets:cash","assets:checking","assets:saving","equity",

View File

@ -49,12 +49,11 @@ entriesFromTimeLogEntries [clockin,clockout] =
intime = tdatetime clockin intime = tdatetime clockin
indate = dateFrom $ tdatetime clockin indate = dateFrom $ tdatetime clockin
outtime = tdatetime clockout outtime = tdatetime clockout
amount = timeAmount $ 0 -- read $ outtime - intime amount = hours 0 -- read $ outtime - intime
entriesFromTimeLogEntries many = entriesFromTimeLogEntries many =
(entriesFromTimeLogEntries $ take 2 many) ++ (entriesFromTimeLogEntries $ take 2 many) ++
(entriesFromTimeLogEntries $ drop 2 many) (entriesFromTimeLogEntries $ drop 2 many)
clockoutNowEntry = TimeLogEntry ' ' "" "" clockoutNowEntry = TimeLogEntry ' ' "" ""
timeAmount = Amount "h"
dateFrom = id dateFrom = id

View File

@ -10,7 +10,7 @@ import Amount
data Transaction = Transaction { data Transaction = Transaction {
taccount :: AccountName, taccount :: AccountName,
tamount :: Amount tamount :: Amount
} deriving (Eq,Ord) } deriving (Eq)
instance Show Transaction where show = showTransaction instance Show Transaction where show = showTransaction
@ -26,7 +26,7 @@ elideRight width s =
autofillTransactions :: [Transaction] -> [Transaction] autofillTransactions :: [Transaction] -> [Transaction]
autofillTransactions ts = autofillTransactions ts =
let (ns, as) = partition isNormal ts let (ns, as) = partition isNormal ts
where isNormal t = (currency $ tamount t) /= "AUTO" in where isNormal t = (symbol $ currency $ tamount t) /= "AUTO" in
case (length as) of case (length as) of
0 -> ns 0 -> ns
1 -> ns ++ [balanceTransaction $ head as] 1 -> ns ++ [balanceTransaction $ head as]