more balance/amount clarifications and a test

This commit is contained in:
Simon Michael 2011-08-30 11:37:36 +00:00
parent 9aaf489a38
commit 1273f02a9a
5 changed files with 27 additions and 12 deletions

View File

@ -109,6 +109,7 @@ instance Num MixedAmount where
negate (Mixed as) = Mixed $ map negateAmountPreservingPrice as
where negateAmountPreservingPrice a = (-a){price=price a}
(+) (Mixed as) (Mixed bs) = normaliseMixedAmount $ Mixed $ as ++ bs
-- (+) (Mixed as) (Mixed bs) = normaliseMixedAmountPreservingHighestPrecision $ Mixed $ as ++ bs
(*) = error' "programming error, mixed amounts do not support multiplication"
abs = error' "programming error, mixed amounts do not support abs"
signum = error' "programming error, mixed amounts do not support signum"

View File

@ -415,6 +415,10 @@ postingsByAccount ps = m'
groupedps = groupBy (\p1 p2 -> paccount p1 == paccount p2) sortedps
m' = Map.fromList [(paccount $ head g, g) | g <- groupedps]
-- debug helpers
traceAmountPrecision a = trace (show $ map (precision . commodity) $ amounts a) a
tracePostingsCommodities ps = trace (show $ map ((map (precision . commodity) . amounts) . pamount) ps) ps
tests_Hledger_Data_Journal = TestList [
]

View File

@ -17,7 +17,7 @@ import Hledger.Data.Types
import Hledger.Utils
import Hledger.Data.Posting
import Hledger.Data.Dates (getCurrentYear)
import Hledger.Data.Journal (nullctx, nulljournal, journalFinalise)
import Hledger.Data.Journal
juSequence :: [JournalUpdate] -> JournalUpdate

View File

@ -153,32 +153,30 @@ accountsReportItemAsText opts format (_, accountName, depth, Mixed amounts) =
case amounts of
[] -> []
[a] -> [formatAccountsReportItem opts (Just accountName) depth a format]
(as) -> asText as
(as) -> multiline as
where
asText :: [Amount] -> [String]
asText [] = []
asText [a] = [formatAccountsReportItem opts (Just accountName) depth a format]
asText (a:as) = (formatAccountsReportItem opts Nothing depth a format) : asText as
multiline :: [Amount] -> [String]
multiline [] = []
multiline [a] = [formatAccountsReportItem opts (Just accountName) depth a format]
multiline (a:as) = (formatAccountsReportItem opts Nothing depth a format) : multiline as
formatAccountsReportItem :: ReportOpts -> Maybe AccountName -> Int -> Amount -> [FormatString] -> String
formatAccountsReportItem _ _ _ _ [] = ""
formatAccountsReportItem opts accountName depth amount (fmt:fmts) =
s ++ (formatAccountsReportItem opts accountName depth amount fs)
s ++ (formatAccountsReportItem opts accountName depth amount fmts)
where
s = case fmt of
FormatLiteral l -> l
FormatField ljust min max field -> formatField opts accountName depth amount ljust min max field
formatField :: ReportOpts -> Maybe AccountName -> Int -> Amount -> Bool -> Maybe Int -> Maybe Int -> Field -> String
formatField opts accountName depth balance ljust min max field = case field of
Format.Account -> formatValue ljust min max a
formatField opts accountName depth total ljust min max field = case field of
Format.Account -> formatValue ljust min max $ maybe "" (accountNameDrop (drop_ opts)) accountName
Format.DepthSpacer -> case min of
Just m -> formatValue ljust Nothing max $ replicate (depth * m) ' '
Nothing -> formatValue ljust Nothing max $ replicate depth ' '
Format.Total -> formatValue ljust min max $ showAmountWithoutPrice balance
Format.Total -> formatValue ljust min max $ showAmountWithoutPrice total
_ -> ""
where
a = maybe "" (accountNameDrop (drop_ opts)) accountName
tests_Hledger_Cli_Balance = TestList
[

View File

@ -0,0 +1,12 @@
#
bin/hledger -f- bal
<<<
1/1
a 1.00
b -1
>>>
1.00 a
-1.00 b
--------------------
0
>>>=0