diff --git a/hledger-lib/Hledger/Reports/PostingsReport.hs b/hledger-lib/Hledger/Reports/PostingsReport.hs index c1ed28082..d1e38a6f2 100644 --- a/hledger-lib/Hledger/Reports/PostingsReport.hs +++ b/hledger-lib/Hledger/Reports/PostingsReport.hs @@ -95,11 +95,12 @@ postingsReport ropts@ReportOpts{..} q j = if multiperiod then let showempty = empty_ || average_ - summaryps = summarisePostingsByInterval interval_ whichdate depth showempty reportspan reportps + -- for --value-at=transaction, need to value the postings before summarising them + maybevaluedreportps + | mvalueat==Just AtTransaction = [postingValueAtDate j (postingDate p) p | p <- reportps] + | otherwise = reportps + summaryps = summarisePostingsByInterval interval_ whichdate depth showempty reportspan maybevaluedreportps in case mvalueat of - Nothing -> [(p , periodend) | (p,periodend) <- summaryps] - Just AtTransaction -> [(postingValueAtDate j (postingDate p) p , periodend) | (p,periodend) <- summaryps] - -- ^ XXX shouldn't this value the individual ps at postingdate before summarising Just AtPeriod -> [(postingValueAtDate j periodlastday p , periodend) | (p,periodend) <- summaryps ,let periodlastday = maybe (error' "postingsReport: expected a subperiod end date") -- XXX shouldn't happen @@ -108,6 +109,7 @@ postingsReport ropts@ReportOpts{..} q j = ] Just AtNow -> [(postingValueAtDate j today p , periodend) | (p,periodend) <- summaryps] Just (AtDate d) -> [(postingValueAtDate j d p , periodend) | (p,periodend) <- summaryps] + _ -> summaryps else let reportperiodlastday = fromMaybe (error' "postingsReport: expected a non-empty journal") -- XXX shouldn't happen @@ -119,8 +121,6 @@ postingsReport ropts@ReportOpts{..} q j = Just AtNow -> [(postingValueAtDate j today p , Nothing) | p <- reportps] Just (AtDate d) -> [(postingValueAtDate j d p , Nothing) | p <- reportps] - -- For -H: postings preceding the report period, to calculate the initial running total/average. - -- posting report items ready for display items = dbg1 "postingsReport items" $ postingsReportItems displayps (nullposting,Nothing) whichdate depth valuedstartbal runningcalc startnum where diff --git a/hledger/hledger_options.m4.md b/hledger/hledger_options.m4.md index af1ed74f5..954e72da4 100644 --- a/hledger/hledger_options.m4.md +++ b/hledger/hledger_options.m4.md @@ -611,7 +611,7 @@ types, "-M" means any report interval, "Y" means supported): |-----------------------|:--------------------------------:|:---------------------------:|:-------------------------------:| | print | Y | Y | Y | | register | Y | Y | Y | -| register -M | *retest* | Y | Y | +| register -M | Y | Y | Y | | register -H | Y | Y | Y | | balance | Y | Y | Y | | balance -MTA | Y | Y | Y | diff --git a/tests/journal/market-prices.test b/tests/journal/market-prices.test index e0f876ce1..2ca049753 100644 --- a/tests/journal/market-prices.test +++ b/tests/journal/market-prices.test @@ -255,12 +255,51 @@ $ hledger -f- reg --value-at=2000-01-15 -b 200002 -H # register, periodic -# 22. periodic register report valued at transaction +# 22. periodic register report valued at transaction. +# The total for january is 6 B (1 A valued at 1/1, price 1 B, and 1 A +# valued at 1/20, price 5 B). +# Need an extra transaction for this test: +< +P 2000/01/01 A 1 B +P 2000/01/15 A 5 B +P 2000/02/01 A 2 B +P 2000/03/01 A 3 B +P 2000/04/01 A 4 B + +2000/01/01 + (a) 1 A + +2000/01/20 + (a) 1 A + +2000/02/01 + (a) 1 A + +2000/03/01 + (a) 1 A + $ hledger -f- reg --value-at=transaction -M -2000/01 a 1 B 1 B -2000/02 a 2 B 3 B -2000/03 a 3 B 6 B +2000/01 a 6 B 6 B +2000/02 a 2 B 8 B +2000/03 a 3 B 11 B +# back to the original test journal: +< +P 2000/01/01 A 1 B +P 2000/01/15 A 5 B +P 2000/02/01 A 2 B +P 2000/03/01 A 3 B +P 2000/04/01 A 4 B + +2000/01/01 + (a) 1 A + +2000/02/01 + (a) 1 A + +2000/03/01 + (a) 1 A + # 23. periodic register report valued at period end $ hledger -f- reg --value-at=period -M 2000/01 a 5 B 5 B