lib: multiBalanceReport derives query from ReportOpts
This commit is contained in:
parent
c35d0a8b44
commit
cbacef21eb
@ -61,7 +61,6 @@ budgetReport ropts' assrt reportspan d j =
|
||||
-- and that reports with and without --empty make sense when compared side by side
|
||||
ropts = ropts' { accountlistmode_ = ALTree }
|
||||
showunbudgeted = empty_ ropts
|
||||
q = queryFromOpts d ropts
|
||||
budgetedaccts =
|
||||
dbg2 "budgetedacctsinperiod" $
|
||||
nub $
|
||||
@ -73,9 +72,9 @@ budgetReport ropts' assrt reportspan d j =
|
||||
actualj = dbg1With (("actualj"++).show.jtxns) $ budgetRollUp budgetedaccts showunbudgeted j
|
||||
budgetj = dbg1With (("budgetj"++).show.jtxns) $ budgetJournal assrt ropts reportspan j
|
||||
actualreport@(PeriodicReport actualspans _ _) =
|
||||
dbg1 "actualreport" $ multiBalanceReport ropts q actualj
|
||||
dbg1 "actualreport" $ multiBalanceReport d ropts actualj
|
||||
budgetgoalreport@(PeriodicReport _ budgetgoalitems budgetgoaltotals) =
|
||||
dbg1 "budgetgoalreport" $ multiBalanceReport (ropts{empty_=True}) q budgetj
|
||||
dbg1 "budgetgoalreport" $ multiBalanceReport d (ropts{empty_=True}) budgetj
|
||||
budgetgoalreport'
|
||||
-- If no interval is specified:
|
||||
-- budgetgoalreport's span might be shorter actualreport's due to periodic txns;
|
||||
|
||||
@ -71,13 +71,15 @@ type ClippedAccountName = AccountName
|
||||
-- (see ReportOpts and CompoundBalanceCommand).
|
||||
-- hledger's most powerful and useful report, used by the balance
|
||||
-- command (in multiperiod mode) and (via multiBalanceReport') by the bs/cf/is commands.
|
||||
multiBalanceReport :: ReportOpts -> Query -> Journal -> MultiBalanceReport
|
||||
multiBalanceReport ropts q j = multiBalanceReportWith ropts q j (journalPriceOracle j)
|
||||
multiBalanceReport :: Day -> ReportOpts -> Journal -> MultiBalanceReport
|
||||
multiBalanceReport today ropts j = multiBalanceReportWith ropts (queryFromOpts today ropts) j (journalPriceOracle j)
|
||||
|
||||
-- | A helper for multiBalanceReport. This one takes an extra argument, a
|
||||
-- | A helper for multiBalanceReport. This one takes an explicit Query
|
||||
-- instead of deriving one from ReportOpts, and an extra argument, a
|
||||
-- PriceOracle to be used for looking up market prices. Commands which
|
||||
-- run multiple reports (bs etc.) can generate the price oracle just once
|
||||
-- for efficiency, passing it to each report by calling this function directly.
|
||||
-- run multiple reports (bs etc.) can generate the price oracle just
|
||||
-- once for efficiency, passing it to each report by calling this
|
||||
-- function directly.
|
||||
multiBalanceReportWith :: ReportOpts -> Query -> Journal -> PriceOracle -> MultiBalanceReport
|
||||
multiBalanceReportWith ropts@ReportOpts{..} q j priceoracle =
|
||||
(if invert_ then prNegate else id) $
|
||||
@ -358,7 +360,7 @@ multiBalanceReportWith ropts@ReportOpts{..} q j priceoracle =
|
||||
balanceReportFromMultiBalanceReport :: ReportOpts -> Query -> Journal -> BalanceReport
|
||||
balanceReportFromMultiBalanceReport opts q j = (rows', total)
|
||||
where
|
||||
PeriodicReport _ rows (PeriodicReportRow _ _ totals _ _) = multiBalanceReport opts q j
|
||||
PeriodicReport _ rows (PeriodicReportRow _ _ totals _ _) = multiBalanceReportWith opts q j (journalPriceOracle j)
|
||||
rows' = [( a
|
||||
, if flat_ opts then a else accountLeafName a -- BalanceReport expects full account name here with --flat
|
||||
, if tree_ opts then d-1 else 0 -- BalanceReport uses 0-based account depths
|
||||
@ -391,7 +393,7 @@ tests_MultiBalanceReport = tests "MultiBalanceReport" [
|
||||
amt0 = Amount {acommodity="$", aquantity=0, aprice=Nothing, astyle=AmountStyle {ascommodityside = L, ascommodityspaced = False, asprecision = 2, asdecimalpoint = Just '.', asdigitgroups = Nothing}, aismultiplier=False}
|
||||
(opts,journal) `gives` r = do
|
||||
let (eitems, etotal) = r
|
||||
(PeriodicReport _ aitems atotal) = multiBalanceReport opts (queryFromOpts nulldate opts) journal
|
||||
(PeriodicReport _ aitems atotal) = multiBalanceReport nulldate opts journal
|
||||
showw (PeriodicReportRow acct indent lAmt amt amt')
|
||||
= (acct, accountLeafName acct, indent, map showMixedAmountDebug lAmt, showMixedAmountDebug amt, showMixedAmountDebug amt')
|
||||
(map showw aitems) @?= (map showw eitems)
|
||||
|
||||
@ -327,7 +327,7 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do
|
||||
|
||||
else
|
||||
if multiperiod then do -- multi period balance report
|
||||
let report = multiBalanceReport ropts (queryFromOpts d ropts) j
|
||||
let report = multiBalanceReport d ropts j
|
||||
render = case fmt of
|
||||
"txt" -> multiBalanceReportAsText ropts
|
||||
"csv" -> (++"\n") . printCSV . multiBalanceReportAsCsv ropts
|
||||
|
||||
Loading…
Reference in New Issue
Block a user