balance: with --tree and --flat, use the last (fix #219)
This commit is contained in:
parent
d352bbedd2
commit
855d4e1131
@ -122,7 +122,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, items, totals)
|
|||||||
(startbalanceitems,_) = dbg "starting balance report" $ balanceReport opts' precedingq j
|
(startbalanceitems,_) = dbg "starting balance report" $ balanceReport opts' precedingq j
|
||||||
where
|
where
|
||||||
opts' | tree_ opts = opts{no_elide_=True}
|
opts' | tree_ opts = opts{no_elide_=True}
|
||||||
| otherwise = opts{flat_=True}
|
| otherwise = opts{accountlistmode_=ALFlat}
|
||||||
startingBalanceFor a = fromMaybe nullmixedamt $ lookup a startacctbals
|
startingBalanceFor a = fromMaybe nullmixedamt $ lookup a startacctbals
|
||||||
startAccts = dbg "startAccts" $ map fst startacctbals
|
startAccts = dbg "startAccts" $ map fst startacctbals
|
||||||
|
|
||||||
|
|||||||
@ -8,9 +8,12 @@ Options common to most hledger reports.
|
|||||||
module Hledger.Reports.ReportOptions (
|
module Hledger.Reports.ReportOptions (
|
||||||
ReportOpts(..),
|
ReportOpts(..),
|
||||||
BalanceType(..),
|
BalanceType(..),
|
||||||
|
AccountListMode(..),
|
||||||
FormatStr,
|
FormatStr,
|
||||||
defreportopts,
|
defreportopts,
|
||||||
rawOptsToReportOpts,
|
rawOptsToReportOpts,
|
||||||
|
flat_,
|
||||||
|
tree_,
|
||||||
dateSpanFromOpts,
|
dateSpanFromOpts,
|
||||||
intervalFromOpts,
|
intervalFromOpts,
|
||||||
clearedValueFromOpts,
|
clearedValueFromOpts,
|
||||||
@ -47,6 +50,11 @@ data BalanceType = PeriodBalance -- ^ The change of balance in each period.
|
|||||||
|
|
||||||
instance Default BalanceType where def = PeriodBalance
|
instance Default BalanceType where def = PeriodBalance
|
||||||
|
|
||||||
|
-- | Should accounts be displayed: in the command's default style, hierarchically, or as a flat list ?
|
||||||
|
data AccountListMode = ALDefault | ALTree | ALFlat deriving (Eq, Show, Data, Typeable)
|
||||||
|
|
||||||
|
instance Default AccountListMode where def = ALDefault
|
||||||
|
|
||||||
-- | Standard options for customising report filtering and output,
|
-- | Standard options for customising report filtering and output,
|
||||||
-- corresponding to hledger's command-line options and query language
|
-- corresponding to hledger's command-line options and query language
|
||||||
-- arguments. Used in hledger-lib and above.
|
-- arguments. Used in hledger-lib and above.
|
||||||
@ -75,8 +83,7 @@ data ReportOpts = ReportOpts {
|
|||||||
,related_ :: Bool
|
,related_ :: Bool
|
||||||
-- balance
|
-- balance
|
||||||
,balancetype_ :: BalanceType
|
,balancetype_ :: BalanceType
|
||||||
,flat_ :: Bool -- mutually
|
,accountlistmode_ :: AccountListMode
|
||||||
,tree_ :: Bool -- exclusive
|
|
||||||
,drop_ :: Int
|
,drop_ :: Int
|
||||||
,no_total_ :: Bool
|
,no_total_ :: Bool
|
||||||
} deriving (Show, Data, Typeable)
|
} deriving (Show, Data, Typeable)
|
||||||
@ -110,7 +117,6 @@ defreportopts = ReportOpts
|
|||||||
def
|
def
|
||||||
def
|
def
|
||||||
def
|
def
|
||||||
def
|
|
||||||
|
|
||||||
rawOptsToReportOpts :: RawOpts -> IO ReportOpts
|
rawOptsToReportOpts :: RawOpts -> IO ReportOpts
|
||||||
rawOptsToReportOpts rawopts = do
|
rawOptsToReportOpts rawopts = do
|
||||||
@ -138,12 +144,18 @@ rawOptsToReportOpts rawopts = do
|
|||||||
,average_ = boolopt "average" rawopts
|
,average_ = boolopt "average" rawopts
|
||||||
,related_ = boolopt "related" rawopts
|
,related_ = boolopt "related" rawopts
|
||||||
,balancetype_ = balancetypeopt rawopts
|
,balancetype_ = balancetypeopt rawopts
|
||||||
,flat_ = boolopt "flat" rawopts
|
,accountlistmode_ = accountlistmodeopt rawopts
|
||||||
,tree_ = boolopt "tree" rawopts
|
|
||||||
,drop_ = intopt "drop" rawopts
|
,drop_ = intopt "drop" rawopts
|
||||||
,no_total_ = boolopt "no-total" rawopts
|
,no_total_ = boolopt "no-total" rawopts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
accountlistmodeopt :: RawOpts -> AccountListMode
|
||||||
|
accountlistmodeopt rawopts =
|
||||||
|
case reverse $ filter (`elem` ["tree","flat"]) $ map fst rawopts of
|
||||||
|
("tree":_) -> ALTree
|
||||||
|
("flat":_) -> ALFlat
|
||||||
|
_ -> ALDefault
|
||||||
|
|
||||||
balancetypeopt :: RawOpts -> BalanceType
|
balancetypeopt :: RawOpts -> BalanceType
|
||||||
balancetypeopt rawopts
|
balancetypeopt rawopts
|
||||||
| length [o | o <- ["cumulative","historical"], isset o] > 1
|
| length [o | o <- ["cumulative","historical"], isset o] > 1
|
||||||
@ -181,6 +193,13 @@ maybeperiodopt d rawopts =
|
|||||||
Just
|
Just
|
||||||
$ parsePeriodExpr d s
|
$ parsePeriodExpr d s
|
||||||
|
|
||||||
|
-- | Legacy-compatible convenience aliases for accountlistmode_.
|
||||||
|
tree_ :: ReportOpts -> Bool
|
||||||
|
tree_ = (==ALTree) . accountlistmode_
|
||||||
|
|
||||||
|
flat_ :: ReportOpts -> Bool
|
||||||
|
flat_ = (==ALFlat) . accountlistmode_
|
||||||
|
|
||||||
-- | Figure out the date span we should report on, based on any
|
-- | Figure out the date span we should report on, based on any
|
||||||
-- begin/end/period options provided. A period option will cause begin and
|
-- begin/end/period options provided. A period option will cause begin and
|
||||||
-- end options to be ignored.
|
-- end options to be ignored.
|
||||||
|
|||||||
@ -38,7 +38,7 @@ print' opts@CliOpts{reportopts_=ropts} j = do
|
|||||||
let q = queryFromOpts d ropts
|
let q = queryFromOpts d ropts
|
||||||
fmt = outputFormatFromOpts opts
|
fmt = outputFormatFromOpts opts
|
||||||
(render, ropts') = case fmt of
|
(render, ropts') = case fmt of
|
||||||
"csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{flat_=True})
|
"csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{accountlistmode_=ALFlat})
|
||||||
_ -> (entriesReportAsText, ropts)
|
_ -> (entriesReportAsText, ropts)
|
||||||
writeOutput opts $ render $ entriesReport ropts' q j
|
writeOutput opts $ render $ entriesReport ropts' q j
|
||||||
|
|
||||||
|
|||||||
23
tests/balance/219.test
Normal file
23
tests/balance/219.test
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# issue 219, --tree and --flat flags should override each other cleanly
|
||||||
|
# 1. multiple flags ending with --flat, equivalent to --flat
|
||||||
|
hledgerdev -f balance-multicol.journal bal -MEH --no-total date:2013/1 --tree --flat
|
||||||
|
>>>
|
||||||
|
Ending balances (historical) in 2013/01:
|
||||||
|
|
||||||
|
|| 2013/01/31
|
||||||
|
=================++=============
|
||||||
|
assets:checking || 10
|
||||||
|
|
||||||
|
>>>= 0
|
||||||
|
|
||||||
|
# 2. multiple flags ending with --tree, equivalent to --tree
|
||||||
|
hledgerdev -f balance-multicol.journal bal -MEH --no-total date:2013/1 --flat --tree
|
||||||
|
>>>
|
||||||
|
Ending balances (historical) in 2013/01:
|
||||||
|
|
||||||
|
|| 2013/01/31
|
||||||
|
============++=============
|
||||||
|
assets || 10
|
||||||
|
checking || 10
|
||||||
|
|
||||||
|
>>>= 0
|
||||||
Loading…
Reference in New Issue
Block a user