balance: multicolumn now includes all postings in the displayed periods
This commit is contained in:
parent
1fca3e7472
commit
6743f8c2a1
@ -18,6 +18,7 @@ where
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
import Data.Ord
|
||||
import Safe
|
||||
-- import Test.HUnit
|
||||
|
||||
import Hledger.Data
|
||||
@ -64,7 +65,7 @@ type ClippedAccountName = AccountName
|
||||
-- showing the change of balance, accumulated balance, or historical balance
|
||||
-- in each of the specified periods.
|
||||
multiBalanceReport :: ReportOpts -> Query -> Journal -> MultiBalanceReport
|
||||
multiBalanceReport opts q j = MultiBalanceReport (spans, items, totals)
|
||||
multiBalanceReport opts q j = MultiBalanceReport (displayspans, items, totals)
|
||||
where
|
||||
-- dbg = const id -- exclude from debug output
|
||||
dbg s = let p = "multiBalanceReport" in Hledger.Utils.dbg (p++" "++s) -- add prefix in debug output
|
||||
@ -75,7 +76,12 @@ multiBalanceReport opts q j = MultiBalanceReport (spans, items, totals)
|
||||
depthless = dbg "depthless" . filterQuery (not . queryIsDepth)
|
||||
datelessq = dbg "datelessq" $ filterQuery (not . queryIsDate) q
|
||||
precedingq = dbg "precedingq" $ And [datelessq, Date $ DateSpan Nothing (spanStart reportspan)]
|
||||
reportq = dbg "reportq" $ depthless q -- $ And [datelessq, Date reportspan] -- laziness at work -- XXX no good, works only in GHCI
|
||||
requestedspan = dbg "requestedspan" $ queryDateSpan (date2_ opts) q -- span specified by -b/-e/-p options and query args
|
||||
requestedspan' = dbg "requestedspan'" $ requestedspan `spanDefaultsFrom` journalDateSpan j -- if open-ended, close it using the journal's end dates
|
||||
intervalspans = dbg "intervalspans" $ splitSpan (intervalFromOpts opts) requestedspan' -- interval spans enclosing it
|
||||
reportspan = dbg "reportspan" $ DateSpan (maybe Nothing spanStart $ headMay intervalspans) -- the requested span enlarged to a whole number of intervals
|
||||
(maybe Nothing spanEnd $ lastMay intervalspans)
|
||||
reportq = dbg "reportq" $ depthless $ And [datelessq, Date reportspan] -- user's query enlarged to whole intervals and with no depth limit
|
||||
|
||||
ps :: [Posting] =
|
||||
dbg "ps" $
|
||||
@ -84,11 +90,16 @@ multiBalanceReport opts q j = MultiBalanceReport (spans, items, totals)
|
||||
filterJournalPostings reportq $ -- remove postings not matched by (adjusted) query
|
||||
journalSelectingAmountFromOpts opts j
|
||||
|
||||
(reportspan, spans) = dbg "report spans" $ reportSpans opts q j ps
|
||||
displayspans = dbg "displayspans" $ splitSpan (intervalFromOpts opts) displayspan
|
||||
where
|
||||
displayspan
|
||||
| empty_ opts = dbg "displayspan (-E)" $ reportspan -- all the requested intervals
|
||||
| otherwise = dbg "displayspan" $ requestedspan `spanIntersect` matchedspan -- exclude leading/trailing empty intervals
|
||||
matchedspan = dbg "matchedspan" $ postingsDateSpan' (whichDateFromOpts opts) ps
|
||||
|
||||
psPerSpan :: [[Posting]] =
|
||||
dbg "psPerSpan" $
|
||||
[filter (isPostingInDateSpan' (whichDateFromOpts opts) s) ps | s <- spans]
|
||||
[filter (isPostingInDateSpan' (whichDateFromOpts opts) s) ps | s <- displayspans]
|
||||
|
||||
postedAcctBalChangesPerSpan :: [[(ClippedAccountName, MixedAmount)]] =
|
||||
dbg "postedAcctBalChangesPerSpan" $
|
||||
|
||||
@ -19,7 +19,6 @@ module Hledger.Reports.ReportOptions (
|
||||
queryFromOpts,
|
||||
queryFromOptsOnly,
|
||||
queryOptsFromOpts,
|
||||
reportSpans,
|
||||
transactionDateFn,
|
||||
postingDateFn,
|
||||
|
||||
@ -290,45 +289,6 @@ tests_queryOptsFromOpts = [
|
||||
})
|
||||
]
|
||||
|
||||
-- | Calculate the overall and (if a reporting interval is specified)
|
||||
-- per-interval date spans for a report, based on command-line
|
||||
-- options, the search query, and the journal data.
|
||||
--
|
||||
-- The basic overall report span is:
|
||||
-- without -E: the intersection of the requested span and the matched data's span.
|
||||
-- with -E: the full requested span, including leading/trailing intervals that are empty.
|
||||
-- If the begin or end date is not specified, those of the journal are used.
|
||||
--
|
||||
-- The report span will be enlarged if necessary to include a whole
|
||||
-- number of report periods, when a reporting interval is specified.
|
||||
--
|
||||
reportSpans :: ReportOpts -> Query -> Journal -> [Posting] -> (DateSpan, [DateSpan])
|
||||
reportSpans opts q j matchedps = (reportspan, spans)
|
||||
where
|
||||
(reportspan, spans)
|
||||
| empty_ opts = (dbg "reportspan1" $ enlargedrequestedspan, sps)
|
||||
| otherwise = (dbg "reportspan2" $ requestedspan `spanIntersect` matchedspan, sps)
|
||||
where
|
||||
sps = dbg "spans" $ splitSpan (intervalFromOpts opts) reportspan
|
||||
|
||||
-- the requested span specified by the query (-b/-e/-p options and query args);
|
||||
-- might be open-ended
|
||||
requestedspan = dbg "requestedspan" $ queryDateSpan (date2_ opts) q
|
||||
|
||||
-- the requested span with unspecified dates filled from the journal data
|
||||
finiterequestedspan = dbg "finiterequestedspan" $ requestedspan `orDatesFrom` journalDateSpan j
|
||||
|
||||
-- enlarge the requested span to a whole number of periods
|
||||
enlargedrequestedspan = dbg "enlargedrequestedspan" $
|
||||
DateSpan (maybe Nothing spanStart $ headMay requestedspans)
|
||||
(maybe Nothing spanEnd $ lastMay requestedspans)
|
||||
where
|
||||
-- spans of the requested report interval which enclose the requested span
|
||||
requestedspans = dbg "requestedspans" $ splitSpan (intervalFromOpts opts) finiterequestedspan
|
||||
|
||||
-- earliest and latest dates of matched postings
|
||||
matchedspan = dbg "matchedspan" $ postingsDateSpan' (whichDateFromOpts opts) matchedps
|
||||
|
||||
|
||||
tests_Hledger_Reports_ReportOptions :: Test
|
||||
tests_Hledger_Reports_ReportOptions = TestList $
|
||||
|
||||
@ -257,3 +257,28 @@ Change of balance (flow):
|
||||
|| 2
|
||||
|
||||
>>>=0
|
||||
|
||||
# 18. All matched postings in the displayed intervals should be reported on.
|
||||
hledgerdev -f- balance -p 'monthly 2014/1/10-2014/2/20'
|
||||
<<<
|
||||
2014/1/5
|
||||
(before) 1
|
||||
|
||||
2014/2/1
|
||||
(within) 1
|
||||
|
||||
2014/2/25
|
||||
(after) 1
|
||||
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2014/01/01-2014/01/31 2014/02/01-2014/02/28
|
||||
========++===============================================
|
||||
after || 0 1
|
||||
before || 1 0
|
||||
within || 0 1
|
||||
--------++-----------------------------------------------
|
||||
|| 1 2
|
||||
|
||||
>>>=0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user