diff --git a/hledger-lib/Hledger/Reports/BudgetReport.hs b/hledger-lib/Hledger/Reports/BudgetReport.hs index 8977818bf..9f63f12f2 100644 --- a/hledger-lib/Hledger/Reports/BudgetReport.hs +++ b/hledger-lib/Hledger/Reports/BudgetReport.hs @@ -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; diff --git a/hledger-lib/Hledger/Reports/MultiBalanceReport.hs b/hledger-lib/Hledger/Reports/MultiBalanceReport.hs index 4512bb335..738ef7894 100644 --- a/hledger-lib/Hledger/Reports/MultiBalanceReport.hs +++ b/hledger-lib/Hledger/Reports/MultiBalanceReport.hs @@ -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) diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index 821647a46..f87360ba5 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -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