lib: more history awareness for account transactions report #392
The account transactions report (and eg hledger-ui's register screen) no longer aborts showing historical balances when -E/--empty/nonzero mode or cur: are in effect.
This commit is contained in:
		
							parent
							
								
									974b1e3be0
								
							
						
					
					
						commit
						156922e419
					
				@ -26,6 +26,7 @@ module Hledger.Query (
 | 
				
			|||||||
  queryIsSym,
 | 
					  queryIsSym,
 | 
				
			||||||
  queryIsReal,
 | 
					  queryIsReal,
 | 
				
			||||||
  queryIsStatus,
 | 
					  queryIsStatus,
 | 
				
			||||||
 | 
					  queryIsEmpty,
 | 
				
			||||||
  queryStartDate,
 | 
					  queryStartDate,
 | 
				
			||||||
  queryEndDate,
 | 
					  queryEndDate,
 | 
				
			||||||
  queryDateSpan,
 | 
					  queryDateSpan,
 | 
				
			||||||
@ -480,6 +481,10 @@ queryIsStatus :: Query -> Bool
 | 
				
			|||||||
queryIsStatus (Status _) = True
 | 
					queryIsStatus (Status _) = True
 | 
				
			||||||
queryIsStatus _ = False
 | 
					queryIsStatus _ = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					queryIsEmpty :: Query -> Bool
 | 
				
			||||||
 | 
					queryIsEmpty (Empty _) = True
 | 
				
			||||||
 | 
					queryIsEmpty _ = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- | Does this query specify a start date and nothing else (that would
 | 
					-- | Does this query specify a start date and nothing else (that would
 | 
				
			||||||
-- filter postings prior to the date) ?
 | 
					-- filter postings prior to the date) ?
 | 
				
			||||||
-- When the flag is true, look for a starting secondary date instead.
 | 
					-- When the flag is true, look for a starting secondary date instead.
 | 
				
			||||||
 | 
				
			|||||||
@ -149,9 +149,9 @@ accountTransactionsReport opts j reportq thisacctq = (label, items)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    -- starting balance: if we are filtering by a start date and nothing else,
 | 
					    -- starting balance: if we are filtering by a start date and nothing else,
 | 
				
			||||||
    -- this is the sum of the (possibly realness or status-filtered) postings
 | 
					    -- this is the sum of the (possibly realness or status-filtered) postings
 | 
				
			||||||
    -- to this account before that date; otherwise zero.
 | 
					    -- to this account before that date; otherwise start from zero.
 | 
				
			||||||
    (startbal,label) | queryIsNull q                        = (nullmixedamt,        balancelabel)
 | 
					    (startbal,label) | queryIsNull q                        = (nullmixedamt,        balancelabel)
 | 
				
			||||||
                     | queryIsStartDateOnly (date2_ opts) q = (sumPostings priorps, balancelabel)
 | 
					                     | queryIsStartBalancePreserving opts q = (sumPostings priorps, balancelabel)
 | 
				
			||||||
                     | otherwise                            = (nullmixedamt,        totallabel)
 | 
					                     | otherwise                            = (nullmixedamt,        totallabel)
 | 
				
			||||||
                     where
 | 
					                     where
 | 
				
			||||||
                       priorps = -- ltrace "priorps" $
 | 
					                       priorps = -- ltrace "priorps" $
 | 
				
			||||||
@ -165,6 +165,20 @@ accountTransactionsReport opts j reportq thisacctq = (label, items)
 | 
				
			|||||||
    items = reverse $ -- see also registerChartHtml
 | 
					    items = reverse $ -- see also registerChartHtml
 | 
				
			||||||
            accountTransactionsReportItems q thisacctq startbal negate ts
 | 
					            accountTransactionsReportItems q thisacctq startbal negate ts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Assuming this query specifies a start date, if we switch that to
 | 
				
			||||||
 | 
					-- an end date, will the resulting query calculate an accurate
 | 
				
			||||||
 | 
					-- starting balance ?
 | 
				
			||||||
 | 
					-- XXX WIP, probably misses many balance-preserving cases,
 | 
				
			||||||
 | 
					-- not sure how this should work.
 | 
				
			||||||
 | 
					queryIsStartBalancePreserving :: ReportOpts -> Query -> Bool
 | 
				
			||||||
 | 
					queryIsStartBalancePreserving opts q =
 | 
				
			||||||
 | 
					  queryIsStartDateOnly (date2_ opts) $
 | 
				
			||||||
 | 
					  filterQuery (\q -> not (
 | 
				
			||||||
 | 
					                         queryIsEmpty q
 | 
				
			||||||
 | 
					                      || queryIsSym q
 | 
				
			||||||
 | 
					                      -- || queryIsReal q))
 | 
				
			||||||
 | 
					                      )) q
 | 
				
			||||||
 | 
					
 | 
				
			||||||
totallabel = "Running Total"
 | 
					totallabel = "Running Total"
 | 
				
			||||||
balancelabel = "Historical Balance"
 | 
					balancelabel = "Historical Balance"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user