mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 10:47:29 +03:00
cli: Use PeriodicReport.
This commit is contained in:
parent
2e20d0717f
commit
8882b6fc85
@ -458,18 +458,19 @@ renderComponent1 opts (acctname, depth, total) (FormatField ljust min max field)
|
||||
-- The CSV will always include the initial headings row,
|
||||
-- and will include the final totals row unless --no-total is set.
|
||||
multiBalanceReportAsCsv :: ReportOpts -> MultiBalanceReport -> CSV
|
||||
multiBalanceReportAsCsv opts@ReportOpts{average_, row_total_} (MultiBalanceReport (colspans, items, (coltotals,tot,avg))) =
|
||||
multiBalanceReportAsCsv opts@ReportOpts{average_, row_total_}
|
||||
(PeriodicReport colspans items (PeriodicReportRow _ _ coltotals tot avg)) =
|
||||
maybetranspose $
|
||||
("Account" : map showDateSpan colspans
|
||||
++ ["Total" | row_total_]
|
||||
++ ["Average" | average_]
|
||||
) :
|
||||
[T.unpack (maybeAccountNameDrop opts a) :
|
||||
[T.unpack (maybeAccountNameDrop opts $ acctFull a) :
|
||||
map showMixedAmountOneLineWithoutPrice
|
||||
(amts
|
||||
++ [rowtot | row_total_]
|
||||
++ [rowavg | average_])
|
||||
| (a, _, _, amts, rowtot, rowavg) <- items]
|
||||
| PeriodicReportRow a _ amts rowtot rowavg <- items]
|
||||
++
|
||||
if no_total_ opts
|
||||
then []
|
||||
@ -583,7 +584,7 @@ multiBalanceReportAsText ropts@ReportOpts{..} r =
|
||||
PeriodChange -> "Balance changes"
|
||||
CumulativeChange -> "Ending balances (cumulative)"
|
||||
HistoricalBalance -> "Ending balances (historical)")
|
||||
(showDateSpan $ multiBalanceReportSpan r)
|
||||
(showDateSpan $ periodicReportSpan r)
|
||||
(case value_ of
|
||||
Just (AtCost _mc) -> ", valued at cost"
|
||||
Just (AtEnd _mc) -> ", valued at period ends"
|
||||
@ -596,7 +597,8 @@ multiBalanceReportAsText ropts@ReportOpts{..} r =
|
||||
|
||||
-- | Build a 'Table' from a multi-column balance report.
|
||||
balanceReportAsTable :: ReportOpts -> MultiBalanceReport -> Table String String MixedAmount
|
||||
balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_} (MultiBalanceReport (colspans, items, (coltotals,tot,avg))) =
|
||||
balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
|
||||
(PeriodicReport colspans items (PeriodicReportRow _ _ coltotals tot avg)) =
|
||||
maybetranspose $
|
||||
addtotalrow $
|
||||
Table
|
||||
@ -612,10 +614,10 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_} (MultiB
|
||||
++ [" Total" | totalscolumn]
|
||||
++ ["Average" | average_]
|
||||
accts = map renderacct items
|
||||
renderacct (a,a',i,_,_,_)
|
||||
renderacct (PeriodicReportRow (AccountLeaf a a') i _ _ _)
|
||||
| tree_ opts = replicate ((i-1)*2) ' ' ++ T.unpack a'
|
||||
| otherwise = T.unpack $ maybeAccountNameDrop opts a
|
||||
rowvals (_,_,_,as,rowtot,rowavg) = as
|
||||
rowvals (PeriodicReportRow _ _ as rowtot rowavg) = as
|
||||
++ [rowtot | totalscolumn]
|
||||
++ [rowavg | average_]
|
||||
addtotalrow | no_total_ opts = id
|
||||
|
@ -151,15 +151,15 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportopts_=r
|
||||
subreports =
|
||||
map (\CBCSubreportSpec{..} ->
|
||||
(cbcsubreporttitle
|
||||
,mbrNormaliseSign cbcsubreportnormalsign $ -- <- convert normal-negative to normal-positive
|
||||
,prNormaliseSign cbcsubreportnormalsign $ -- <- convert normal-negative to normal-positive
|
||||
compoundBalanceSubreport ropts' userq j priceoracle cbcsubreportquery cbcsubreportnormalsign
|
||||
,cbcsubreportincreasestotal
|
||||
))
|
||||
cbcqueries
|
||||
|
||||
subtotalrows =
|
||||
[(coltotals, increasesoveralltotal)
|
||||
| (_, MultiBalanceReport (_,_,(coltotals,_,_)), increasesoveralltotal) <- subreports
|
||||
[(prrAmounts $ prTotals report, increasesoveralltotal)
|
||||
| (_, report, increasesoveralltotal) <- subreports
|
||||
]
|
||||
|
||||
-- Sum the subreport totals by column. Handle these cases:
|
||||
@ -186,7 +186,7 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportopts_=r
|
||||
|
||||
colspans =
|
||||
case subreports of
|
||||
(_, MultiBalanceReport (ds,_,_), _):_ -> ds
|
||||
(_, PeriodicReport ds _ _, _):_ -> ds
|
||||
[] -> []
|
||||
|
||||
title =
|
||||
@ -261,20 +261,20 @@ compoundBalanceSubreport ropts@ReportOpts{..} userq j priceoracle subreportqfn s
|
||||
ropts' = ropts { empty_=True, normalbalance_=Just subreportnormalsign }
|
||||
-- run the report
|
||||
q = And [subreportqfn j, userq]
|
||||
r@(MultiBalanceReport (dates, rows, totals)) = multiBalanceReportWith ropts' q j priceoracle
|
||||
r@(PeriodicReport dates rows totals) = multiBalanceReportWith ropts' q j priceoracle
|
||||
-- if user didn't specify --empty, now remove the all-zero rows, unless they have non-zero subaccounts
|
||||
-- in this report
|
||||
r' | empty_ = r
|
||||
| otherwise = MultiBalanceReport (dates, rows', totals)
|
||||
| otherwise = PeriodicReport dates rows' totals
|
||||
where
|
||||
nonzeroaccounts =
|
||||
dbg1 "nonzeroaccounts" $
|
||||
catMaybes $ map (\(act,_,_,amts,_,_) ->
|
||||
if not (all isZeroMixedAmount amts) then Just act else Nothing) rows
|
||||
mapMaybe (\(PeriodicReportRow act _ amts _ _) ->
|
||||
if not (all isZeroMixedAmount amts) then Just (acctFull act) else Nothing) rows
|
||||
rows' = filter (not . emptyRow) rows
|
||||
where
|
||||
emptyRow (act,_,_,amts,_,_) =
|
||||
all isZeroMixedAmount amts && all (not . (act `isAccountNamePrefixOf`)) nonzeroaccounts
|
||||
emptyRow (PeriodicReportRow act _ amts _ _) =
|
||||
all isZeroMixedAmount amts && all (not . (acctFull act `isAccountNamePrefixOf`)) nonzeroaccounts
|
||||
|
||||
-- | Render a compound balance report as plain text suitable for console output.
|
||||
{- Eg:
|
||||
@ -367,8 +367,7 @@ compoundBalanceReportAsCsv ropts (title, colspans, subreports, (coltotals, grand
|
||||
(if row_total_ ropts then (1+) else id) $
|
||||
(if average_ ropts then (1+) else id) $
|
||||
maximum $ -- depends on non-null subreports
|
||||
map (\(MultiBalanceReport (amtcolheadings, _, _)) -> length amtcolheadings) $
|
||||
map second3 subreports
|
||||
map (length . prDates . second3) subreports
|
||||
addtotals
|
||||
| no_total_ ropts || length subreports == 1 = id
|
||||
| otherwise = (++
|
||||
|
Loading…
Reference in New Issue
Block a user