mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
moved -V/--value to be a global report option, so it works with balance, print, register, balancesheet, incomestatement, cashflow, etc.
This commit is contained in:
parent
f47df67167
commit
baf232d3d9
@ -275,7 +275,6 @@ balancemode = (defCommandMode $ ["balance"] ++ aliases) { -- also accept but don
|
||||
"show historical ending balance in each period (includes postings before report start date)\n "
|
||||
,flagNone ["tree"] (\opts -> setboolopt "tree" opts) "show accounts as a tree; amounts include subaccounts (default in simple reports)"
|
||||
,flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show accounts as a list; amounts exclude subaccounts except when account is depth-clipped (default in multicolumn reports)\n "
|
||||
,flagNone ["value","V"] (setboolopt "value") "convert amounts to their market value on the report end date (using the most recent applicable market price, if any)"
|
||||
,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "show a row average column (in multicolumn reports)"
|
||||
,flagNone ["row-total","T"] (\opts -> setboolopt "row-total" opts) "show a row total column (in multicolumn reports)"
|
||||
,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "omit the final total row"
|
||||
@ -314,23 +313,19 @@ balance opts@CliOpts{reportopts_=ropts} j = do
|
||||
| otherwise = ropts{accountlistmode_=ALTree}
|
||||
in singleBalanceReport ropts' (queryFromOpts d ropts) j
|
||||
| otherwise = balanceReport ropts (queryFromOpts d ropts) j
|
||||
convert | value_ ropts = maybe id (balanceReportValue j) mvaluedate
|
||||
| otherwise = id
|
||||
render = case format of
|
||||
"csv" -> \ropts r -> (++ "\n") $ printCSV $ balanceReportAsCsv ropts r
|
||||
_ -> balanceReportAsText
|
||||
writeOutput opts $ render ropts $ convert report
|
||||
writeOutput opts $ render ropts report
|
||||
_ -> do
|
||||
let report = multiBalanceReport ropts (queryFromOpts d ropts) j
|
||||
convert | value_ ropts = maybe id (multiBalanceReportValue j) mvaluedate
|
||||
| otherwise = id
|
||||
render = case format of
|
||||
"csv" -> \ropts r -> (++ "\n") $ printCSV $ multiBalanceReportAsCsv ropts r
|
||||
_ -> case baltype of
|
||||
PeriodChange -> periodChangeReportAsText
|
||||
CumulativeChange -> cumulativeChangeReportAsText
|
||||
HistoricalBalance -> historicalBalanceReportAsText
|
||||
writeOutput opts $ render ropts $ convert report
|
||||
writeOutput opts $ render ropts report
|
||||
|
||||
-- single-column balance reports
|
||||
|
||||
|
@ -30,7 +30,6 @@ balanceviewmode bv@BV{..} = (defCommandMode $ bvmode : bvaliases) {
|
||||
groupUnnamed = [
|
||||
flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show accounts as a list"
|
||||
,flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "flat mode: omit N leading account name parts"
|
||||
,flagNone ["value","V"] (setboolopt "value") "convert amounts to their market value on the report end date (using the most recent applicable market price, if any)"
|
||||
,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "omit the final total row"
|
||||
,flagNone ["no-elide"] (\opts -> setboolopt "no-elide" opts) "don't squash boring parent accounts (in tree mode)"
|
||||
,flagReq ["format"] (\s opts -> Right $ setopt "format" s opts) "FORMATSTR" "use this custom line format (in simple reports)"
|
||||
@ -51,9 +50,7 @@ balanceviewQueryReport
|
||||
balanceviewQueryReport ropts currDay reportEnd j t q = ([view], Sum amt)
|
||||
where
|
||||
q' = And [queryFromOpts currDay (withoutBeginDate ropts), q j]
|
||||
convert | value_ ropts = maybe id (balanceReportValue j) reportEnd
|
||||
| otherwise = id
|
||||
rep@(_ , amt) = convert $ balanceReport ropts q' j
|
||||
rep@(_ , amt) = balanceReport ropts q' j
|
||||
view = intercalate "\n" [t <> ":", balanceReportAsText ropts rep]
|
||||
|
||||
balanceviewReport :: BalanceView -> CliOpts -> Journal -> IO ()
|
||||
|
@ -144,6 +144,7 @@ reportflags = [
|
||||
,flagReq ["depth"] (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N"
|
||||
,flagNone ["empty","E"] (setboolopt "empty") "show items with zero amount, normally hidden"
|
||||
,flagNone ["cost","B"] (setboolopt "cost") "convert amounts to their cost at transaction time (using the transaction price, if any)"
|
||||
,flagNone ["value","V"] (setboolopt "value") "convert amounts to their market value on the report end date (using the most recent applicable market price, if any)"
|
||||
,flagNone ["anon"] (setboolopt "anon") "output ledger with anonymized accounts and payees."
|
||||
]
|
||||
|
||||
|
@ -23,6 +23,7 @@ module Hledger.Cli.Utils
|
||||
)
|
||||
where
|
||||
import Control.Exception as C
|
||||
import Control.Monad ((<=<))
|
||||
import Data.Hashable (hash)
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
@ -63,6 +64,7 @@ import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
|
||||
import Hledger.Cli.CliOptions
|
||||
import Hledger.Data
|
||||
import Hledger.Read
|
||||
import Hledger.Reports
|
||||
import Hledger.Utils
|
||||
|
||||
|
||||
@ -76,7 +78,12 @@ withJournalDo opts cmd = do
|
||||
rulespath <- rulesFilePathFromOpts opts
|
||||
journalpaths <- journalFilePathFromOpts opts
|
||||
ej <- readJournalFiles Nothing rulespath (not $ ignore_assertions_ opts) journalpaths
|
||||
either error' (cmd opts . pivotByOpts opts . anonymiseByOpts opts . journalApplyAliases (aliasesFromOpts opts)) ej
|
||||
let f = cmd opts
|
||||
. pivotByOpts opts
|
||||
. anonymiseByOpts opts
|
||||
. journalApplyAliases (aliasesFromOpts opts)
|
||||
<=< journalApplyValue (reportopts_ opts)
|
||||
either error' f ej
|
||||
|
||||
-- | Apply the pivot transformation on a journal, if option is present.
|
||||
pivotByOpts :: CliOpts -> Journal -> Journal
|
||||
@ -119,6 +126,16 @@ anonymise j
|
||||
where
|
||||
anon = T.pack . flip showHex "" . (fromIntegral :: Int -> Word32) . hash
|
||||
|
||||
journalApplyValue :: ReportOpts -> Journal -> IO Journal
|
||||
journalApplyValue ropts j = do
|
||||
mvaluedate <- reportEndDate j ropts
|
||||
let convert | value_ ropts
|
||||
, Just d <- mvaluedate
|
||||
= overJournalAmounts (amountValue j d)
|
||||
| otherwise
|
||||
= id
|
||||
return $ convert j
|
||||
|
||||
-- | Write some output to stdout or to a file selected by --output-file.
|
||||
writeOutput :: CliOpts -> String -> IO ()
|
||||
writeOutput opts s = do
|
||||
|
Loading…
Reference in New Issue
Block a user