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 | ||||
|     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 | ||||
|     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 | ||||
| -- 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 | ||||
|     colspans = dbg "colspans" $ M.keys colps | ||||
| 
 | ||||
|     -- Filter the column postings according to each subreport | ||||
|     subreportcolps = map filterSubreport subreportspecs | ||||
|       where filterSubreport sr = filter (matchesPosting $ cbcsubreportquery sr j) <$> 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 | ||||
| 
 | ||||
|     subreports = zipWith generateSubreport subreportspecs subreportcolps | ||||
|     subreports = map generateSubreport subreportspecs | ||||
|       where | ||||
|         generateSubreport CBCSubreportSpec{..} colps' = | ||||
|         generateSubreport CBCSubreportSpec{..} = | ||||
|             ( cbcsubreporttitle | ||||
|             -- Postprocess the report, negating balances and taking percentages if needed | ||||
|             , prNormaliseSign cbcsubreportnormalsign $ | ||||
|                 generateMultiBalanceReport ropts' reportq j priceoracle reportspan colspans colps' | ||||
|                 generateMultiBalanceReport ropts' reportq j priceoracle colspans colps' startbals' | ||||
|             , cbcsubreportincreasestotal | ||||
|             ) | ||||
|           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: | ||||
|     -- - 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 | ||||
| -- from the columns. | ||||
| generateMultiBalanceReport :: ReportOpts -> Query -> Journal -> PriceOracle | ||||
|                            -> DateSpan -> [DateSpan] | ||||
|                            -> [DateSpan] | ||||
|                            -> Map DateSpan [Posting] | ||||
|                            -> HashMap AccountName Account | ||||
|                            -> MultiBalanceReport | ||||
| generateMultiBalanceReport ropts q j priceoracle reportspan colspans colps = report | ||||
| generateMultiBalanceReport ropts q j priceoracle colspans colps startbals = report | ||||
|   where | ||||
|     -- Each account's balance changes across all columns. | ||||
|     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 | ||||
|     accumvalued = accumValueAmounts ropts j priceoracle colspans startbals acctchanges | ||||
| 
 | ||||
|  | ||||
| @ -278,3 +278,33 @@ Balance Sheet 2018-10-03 | ||||
|  Net:                                ||       $120  | ||||
| >>>2 | ||||
| >>>= 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