From 6796decb72c71e2b71c237e315a4f4d47aae934d Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 1 May 2024 14:16:53 -1000 Subject: [PATCH] fix: show trailing decimal mark on cost amounts too, when needed --- hledger-lib/Hledger/Data/Amount.hs | 32 +++++++++++++++--------------- hledger/test/close.test | 26 +++++++++++++----------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/hledger-lib/Hledger/Data/Amount.hs b/hledger-lib/Hledger/Data/Amount.hs index 844ad4431..0b255e3ad 100644 --- a/hledger-lib/Hledger/Data/Amount.hs +++ b/hledger-lib/Hledger/Data/Amount.hs @@ -87,7 +87,7 @@ module Hledger.Data.Amount ( showAmount, showAmountWith, showAmountB, - showAmountsCostB, + showAmountCostB, cshowAmount, showAmountWithZeroCommodity, showAmountDebug, @@ -633,19 +633,6 @@ withDecimalPoint = flip setAmountDecimalPoint -- Amount rendering --- Show an amount's cost as @ UNITCOST or @@ TOTALCOST (builder version). -showAmountsCostB :: Amount -> WideBuilder -showAmountsCostB amt = case acost amt of - Nothing -> mempty - Just (UnitCost pa) -> WideBuilder (TB.fromString " @ ") 3 <> showAmountB defaultFmt{displayZeroCommodity=True} pa - Just (TotalCost pa) -> WideBuilder (TB.fromString " @@ ") 4 <> showAmountB defaultFmt{displayZeroCommodity=True} (sign pa) - where sign = if aquantity amt < 0 then negate else id - -showAmountCostDebug :: Maybe AmountCost -> String -showAmountCostDebug Nothing = "" -showAmountCostDebug (Just (UnitCost pa)) = " @ " ++ showAmountDebug pa -showAmountCostDebug (Just (TotalCost pa)) = " @@ " ++ showAmountDebug pa - -- | Render an amount using its display style and the default amount format. -- Zero-equivalent amounts are shown as just \"0\". -- The special "missing" amount is shown as the empty string. @@ -662,7 +649,7 @@ showAmountWith fmt = wbUnpack . showAmountB fmt showAmountB :: AmountFormat -> Amount -> WideBuilder showAmountB _ Amount{acommodity="AUTO"} = mempty showAmountB - AmountFormat{displayCommodity, displayZeroCommodity, displayDigitGroups + afmt@AmountFormat{displayCommodity, displayZeroCommodity, displayDigitGroups ,displayForceDecimalMark, displayCost, displayColour} a@Amount{astyle=style} = color $ case ascommodityside style of @@ -676,7 +663,20 @@ showAmountB | amountLooksZero a && not displayZeroCommodity = (WideBuilder (TB.singleton '0') 1, "") | otherwise = (quantity, quoteCommoditySymbolIfNeeded $ acommodity a) space = if not (T.null comm) && ascommodityspaced style then WideBuilder (TB.singleton ' ') 1 else mempty - cost = if displayCost then showAmountsCostB a else mempty + cost = if displayCost then showAmountCostB afmt a else mempty + +-- Show an amount's cost as @ UNITCOST or @@ TOTALCOST (builder version). +showAmountCostB :: AmountFormat -> Amount -> WideBuilder +showAmountCostB afmt amt = case acost amt of + Nothing -> mempty + Just (UnitCost pa) -> WideBuilder (TB.fromString " @ ") 3 <> showAmountB afmt pa + Just (TotalCost pa) -> WideBuilder (TB.fromString " @@ ") 4 <> showAmountB afmt (sign pa) + where sign = if aquantity amt < 0 then negate else id + +showAmountCostDebug :: Maybe AmountCost -> String +showAmountCostDebug Nothing = "" +showAmountCostDebug (Just (UnitCost pa)) = " @ " ++ showAmountDebug pa +showAmountCostDebug (Just (TotalCost pa)) = " @@ " ++ showAmountDebug pa -- | Colour version. For a negative amount, adds ANSI codes to change the colour, -- currently to hard-coded red. diff --git a/hledger/test/close.test b/hledger/test/close.test index 5cc3f61e3..e39311c66 100644 --- a/hledger/test/close.test +++ b/hledger/test/close.test @@ -239,36 +239,38 @@ $ hledger -f- close -e 100000-01-01 > /99999-12-31 closing balances/ >= -# ** 17. Not specific to close, but easy to reproduce with it: trailing decimal marks should be added -# in balance assertion/assignment amounts also, like posting amounts. (#2076) +# ** 17. close (and print) should add trailing decimal marks when needed to posting amounts and costs. < +commodity $1,000.00 2000-01-01 - (assets:a) $1,000.00 - (assets:b) $1000 + (assets:a) $1,000 @@ $1,000 -$ hledger -f- close --migrate -e 2001 +$ hledger -f- close --migrate --show-costs -e 2001 2000-12-31 closing balances ; start: - assets:a $-1,000.00 = $0.00 - assets:b $-1,000. = $0 + assets:a $-1,000. @@ $1,000. = $0 equity:opening/closing balances 2001-01-01 opening balances ; start: - assets:a $1,000.00 = $1,000.00 - assets:b $1,000. = $1,000. + assets:a $1,000. @@ $1,000. = $1,000. equity:opening/closing balances >= -# ** 18. close supports --round, like print. +# ** 18. And to balance assertion and balance assignment amounts and costs. (#2076) +$ hledger -f- close --assert --show-costs -e 2001 +2000-12-31 assert balances ; assert: + assets:a $0 = $1,000. @@ $1,000. + +>= + +# ** 19. close supports --round, like print. $ hledger -f- close --migrate -e 2001 --round=hard -c '$1.0' 2000-12-31 closing balances ; start: assets:a $-1000.0 = $0.0 - assets:b $-1000.0 = $0.0 equity:opening/closing balances 2001-01-01 opening balances ; start: assets:a $1000.0 = $1000.0 - assets:b $1000.0 = $1000.0 equity:opening/closing balances >=