fix: journal: don't generate bad assertion when assigning with cost (fix #1965)
This commit is contained in:
parent
0f2fe39e43
commit
71bd102b4b
@ -193,6 +193,7 @@ showPostingLines p = first3 $ postingAsLines False False maxacctwidth maxamtwidt
|
|||||||
-- if onelineamounts is true, these amounts are shown on one line,
|
-- if onelineamounts is true, these amounts are shown on one line,
|
||||||
-- comma-separated, and the output will not be valid journal syntax.
|
-- comma-separated, and the output will not be valid journal syntax.
|
||||||
-- Otherwise, they are shown as several similar postings, one per commodity.
|
-- Otherwise, they are shown as several similar postings, one per commodity.
|
||||||
|
-- When the posting has a balance assertion, it is attached to the last of these postings.
|
||||||
--
|
--
|
||||||
-- The output will appear to be a balanced transaction.
|
-- The output will appear to be a balanced transaction.
|
||||||
-- Amounts' display precisions, which may have been limited by commodity
|
-- Amounts' display precisions, which may have been limited by commodity
|
||||||
@ -243,16 +244,11 @@ postingAsLines elideamount onelineamounts acctwidth amtwidth p =
|
|||||||
, Cell BottomLeft [assertion]
|
, Cell BottomLeft [assertion]
|
||||||
, textCell BottomLeft samelinecomment
|
, textCell BottomLeft samelinecomment
|
||||||
]
|
]
|
||||||
| amt <- shownAmounts]
|
| (amt,assertion) <- shownAmountsAssertions]
|
||||||
render = renderRow def{tableBorders=False, borderSpaces=False} . Group NoLine . map Header
|
render = renderRow def{tableBorders=False, borderSpaces=False} . Group NoLine . map Header
|
||||||
pad amt = WideBuilder (TB.fromText $ T.replicate w " ") w <> amt
|
pad amt = WideBuilder (TB.fromText $ T.replicate w " ") w <> amt
|
||||||
where w = max 12 amtwidth - wbWidth amt -- min. 12 for backwards compatibility
|
where w = max 12 amtwidth - wbWidth amt -- min. 12 for backwards compatibility
|
||||||
|
|
||||||
assertion = maybe mempty ((WideBuilder (TB.singleton ' ') 1 <>).showBalanceAssertion) $ pbalanceassertion p
|
|
||||||
-- pad to the maximum account name width, plus 2 to leave room for status flags, to keep amounts aligned
|
|
||||||
statusandaccount = lineIndent . fitText (Just $ 2 + acctwidth) Nothing False True $ pstatusandacct p
|
|
||||||
thisacctwidth = realLength $ pacctstr p
|
|
||||||
|
|
||||||
pacctstr p' = showAccountName Nothing (ptype p') (paccount p')
|
pacctstr p' = showAccountName Nothing (ptype p') (paccount p')
|
||||||
pstatusandacct p' = pstatusprefix p' <> pacctstr p'
|
pstatusandacct p' = pstatusprefix p' <> pacctstr p'
|
||||||
pstatusprefix p' = case pstatus p' of
|
pstatusprefix p' = case pstatus p' of
|
||||||
@ -268,6 +264,17 @@ postingAsLines elideamount onelineamounts acctwidth amtwidth p =
|
|||||||
| otherwise = showMixedAmountLinesB noColour{displayOneLine=onelineamounts} $ pamount p
|
| otherwise = showMixedAmountLinesB noColour{displayOneLine=onelineamounts} $ pamount p
|
||||||
thisamtwidth = maximumBound 0 $ map wbWidth shownAmounts
|
thisamtwidth = maximumBound 0 $ map wbWidth shownAmounts
|
||||||
|
|
||||||
|
-- when there is a balance assertion, show it only on the last posting line
|
||||||
|
shownAmountsAssertions = zip shownAmounts shownAssertions
|
||||||
|
where
|
||||||
|
shownAssertions = replicate (length shownAmounts - 1) mempty ++ [assertion]
|
||||||
|
where
|
||||||
|
assertion = maybe mempty ((WideBuilder (TB.singleton ' ') 1 <>).showBalanceAssertion) $ pbalanceassertion p
|
||||||
|
|
||||||
|
-- pad to the maximum account name width, plus 2 to leave room for status flags, to keep amounts aligned
|
||||||
|
statusandaccount = lineIndent . fitText (Just $ 2 + acctwidth) Nothing False True $ pstatusandacct p
|
||||||
|
thisacctwidth = realLength $ pacctstr p
|
||||||
|
|
||||||
(samelinecomment, newlinecomments) =
|
(samelinecomment, newlinecomments) =
|
||||||
case renderCommentLines (pcomment p) of [] -> ("",[])
|
case renderCommentLines (pcomment p) of [] -> ("",[])
|
||||||
c:cs -> (c,cs)
|
c:cs -> (c,cs)
|
||||||
|
|||||||
@ -455,3 +455,23 @@ $ hledger -f- print -x
|
|||||||
(a) -2 ==* 1
|
(a) -2 ==* 1
|
||||||
|
|
||||||
>=0
|
>=0
|
||||||
|
|
||||||
|
# 26. When balance assignment with a cost generates two postings in one commodity,
|
||||||
|
# the balance assertion appears only on the last, not both. (#1965)
|
||||||
|
<
|
||||||
|
2022-01-01
|
||||||
|
assets:eur €10
|
||||||
|
equity
|
||||||
|
|
||||||
|
2022-01-02
|
||||||
|
assets:eur = €1 @ $1
|
||||||
|
assets:usd
|
||||||
|
|
||||||
|
$ hledger -f- print -x date:2022-01-02
|
||||||
|
2022-01-02
|
||||||
|
assets:eur €-10
|
||||||
|
assets:eur €1 @ $1 = €1 @ $1
|
||||||
|
assets:usd $-1
|
||||||
|
assets:usd €10
|
||||||
|
|
||||||
|
>=
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user