lib: Filter starting balances by subreport query in compoundBalanceReportWith.
This commit is contained in:
		
							parent
							
								
									40ca6c62e7
								
							
						
					
					
						commit
						5b647902c9
					
				| @ -115,8 +115,13 @@ multiBalanceReportWith ropts q j priceoracle = report | |||||||
|     colps    = dbg'' "colps"  $ getPostingsByColumn ropts reportq j reportspan |     colps    = dbg'' "colps"  $ getPostingsByColumn ropts reportq j reportspan | ||||||
|     colspans = dbg "colspans" $ M.keys colps |     colspans = dbg "colspans" $ M.keys colps | ||||||
| 
 | 
 | ||||||
|  |     -- The matched accounts with a starting balance. All of these should appear | ||||||
|  |     -- in the report, even if they have no postings during the report period. | ||||||
|  |     startbals = dbg' "startbals" $ startingBalances ropts reportq j reportspan | ||||||
|  | 
 | ||||||
|     -- Generate and postprocess the report, negating balances and taking percentages if needed |     -- Generate and postprocess the report, negating balances and taking percentages if needed | ||||||
|     report = dbg' "report" $ generateMultiBalanceReport ropts reportq j priceoracle reportspan colspans colps |     report = dbg' "report" $ | ||||||
|  |       generateMultiBalanceReport ropts reportq j priceoracle colspans colps startbals | ||||||
| 
 | 
 | ||||||
| -- | Generate a compound balance report from a list of CBCSubreportSpec. This | -- | Generate a compound balance report from a list of CBCSubreportSpec. This | ||||||
| -- shares postings between the subreports. | -- shares postings between the subreports. | ||||||
| @ -141,21 +146,24 @@ compoundBalanceReportWith ropts q j priceoracle subreportspecs = cbr | |||||||
|     colps    = dbg'' "colps"  $ getPostingsByColumn ropts{empty_=True} reportq j reportspan |     colps    = dbg'' "colps"  $ getPostingsByColumn ropts{empty_=True} reportq j reportspan | ||||||
|     colspans = dbg "colspans" $ M.keys colps |     colspans = dbg "colspans" $ M.keys colps | ||||||
| 
 | 
 | ||||||
|     -- Filter the column postings according to each subreport |     -- The matched accounts with a starting balance. All of these should appear | ||||||
|     subreportcolps = map filterSubreport subreportspecs |     -- in the report, even if they have no postings during the report period. | ||||||
|       where filterSubreport sr = filter (matchesPosting $ cbcsubreportquery sr j) <$> colps |     startbals = dbg' "startbals" $ startingBalances ropts reportq j reportspan | ||||||
| 
 | 
 | ||||||
|     subreports = zipWith generateSubreport subreportspecs subreportcolps |     subreports = map generateSubreport subreportspecs | ||||||
|       where |       where | ||||||
|         generateSubreport CBCSubreportSpec{..} colps' = |         generateSubreport CBCSubreportSpec{..} = | ||||||
|             ( cbcsubreporttitle |             ( cbcsubreporttitle | ||||||
|             -- Postprocess the report, negating balances and taking percentages if needed |             -- Postprocess the report, negating balances and taking percentages if needed | ||||||
|             , prNormaliseSign cbcsubreportnormalsign $ |             , prNormaliseSign cbcsubreportnormalsign $ | ||||||
|                 generateMultiBalanceReport ropts' reportq j priceoracle reportspan colspans colps' |                 generateMultiBalanceReport ropts' reportq j priceoracle colspans colps' startbals' | ||||||
|             , cbcsubreportincreasestotal |             , cbcsubreportincreasestotal | ||||||
|             ) |             ) | ||||||
|           where |           where | ||||||
|             ropts' = ropts{normalbalance_=Just cbcsubreportnormalsign} |             ropts'     = ropts{normalbalance_=Just cbcsubreportnormalsign} | ||||||
|  |             -- Filter the column postings according to each subreport | ||||||
|  |             colps'     = filter (matchesPosting $ cbcsubreportquery j) <$> colps | ||||||
|  |             startbals' = HM.filterWithKey (\k _ -> matchesAccount (cbcsubreportquery j) k) startbals | ||||||
| 
 | 
 | ||||||
|     -- Sum the subreport totals by column. Handle these cases: |     -- Sum the subreport totals by column. Handle these cases: | ||||||
|     -- - no subreports |     -- - no subreports | ||||||
| @ -363,18 +371,15 @@ accumValueAmounts ropts j priceoracle colspans startbals acctchanges =  -- PARTI | |||||||
| -- given by AccountName and columns by DateSpan, then generate a MultiBalanceReport | -- given by AccountName and columns by DateSpan, then generate a MultiBalanceReport | ||||||
| -- from the columns. | -- from the columns. | ||||||
| generateMultiBalanceReport :: ReportOpts -> Query -> Journal -> PriceOracle | generateMultiBalanceReport :: ReportOpts -> Query -> Journal -> PriceOracle | ||||||
|                            -> DateSpan -> [DateSpan] |                            -> [DateSpan] | ||||||
|                            -> Map DateSpan [Posting] |                            -> Map DateSpan [Posting] | ||||||
|  |                            -> HashMap AccountName Account | ||||||
|                            -> MultiBalanceReport |                            -> MultiBalanceReport | ||||||
| generateMultiBalanceReport ropts q j priceoracle reportspan colspans colps = report | generateMultiBalanceReport ropts q j priceoracle colspans colps startbals = report | ||||||
|   where |   where | ||||||
|     -- Each account's balance changes across all columns. |     -- Each account's balance changes across all columns. | ||||||
|     acctchanges = dbg'' "acctchanges" $ calculateAccountChanges ropts q colspans colps |     acctchanges = dbg'' "acctchanges" $ calculateAccountChanges ropts q colspans colps | ||||||
| 
 | 
 | ||||||
|     -- The matched accounts with a starting balance. All of these should appear |  | ||||||
|     -- in the report, even if they have no postings during the report period. |  | ||||||
|     startbals = dbg' "startbals" $ startingBalances ropts q j reportspan |  | ||||||
| 
 |  | ||||||
|     -- Process changes into normal, cumulative, or historical amounts, plus value them |     -- Process changes into normal, cumulative, or historical amounts, plus value them | ||||||
|     accumvalued = accumValueAmounts ropts j priceoracle colspans startbals acctchanges |     accumvalued = accumValueAmounts ropts j priceoracle colspans startbals acctchanges | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -278,3 +278,33 @@ Balance Sheet 2018-10-03 | |||||||
|  Net:                                ||       $120  |  Net:                                ||       $120  | ||||||
| >>>2 | >>>2 | ||||||
| >>>= 0 | >>>= 0 | ||||||
|  | 
 | ||||||
|  | # 10. Check that starting balances are also filtered by subreport query. (See issue #1335) | ||||||
|  | hledger -f - balancesheet --begin 2020-03-02 | ||||||
|  | <<< | ||||||
|  | 2020-03-01 * Rent | ||||||
|  |     assets:a     -$1 | ||||||
|  |     expenses | ||||||
|  | 
 | ||||||
|  | 2020-03-25 * Salary | ||||||
|  |     assets:a      $2 | ||||||
|  |     income | ||||||
|  | >>> | ||||||
|  | Balance Sheet 2020-03-25 | ||||||
|  | 
 | ||||||
|  |              || 2020-03-25  | ||||||
|  | =============++============ | ||||||
|  |  Assets      ||             | ||||||
|  | -------------++------------ | ||||||
|  |  assets:a    ||         $1  | ||||||
|  | -------------++------------ | ||||||
|  |              ||         $1  | ||||||
|  | =============++============ | ||||||
|  |  Liabilities ||             | ||||||
|  | -------------++------------ | ||||||
|  | -------------++------------ | ||||||
|  |              ||             | ||||||
|  | =============++============ | ||||||
|  |  Net:        ||         $1  | ||||||
|  | >>>2 | ||||||
|  | >>>= 0 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user