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 " |         "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 ["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 ["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 ["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 ["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" |      ,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} |                                | otherwise   = ropts{accountlistmode_=ALTree} | ||||||
|                     in singleBalanceReport ropts' (queryFromOpts d ropts) j |                     in singleBalanceReport ropts' (queryFromOpts d ropts) j | ||||||
|                 | otherwise = balanceReport 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 |               render = case format of | ||||||
|                 "csv" -> \ropts r -> (++ "\n") $ printCSV $ balanceReportAsCsv ropts r |                 "csv" -> \ropts r -> (++ "\n") $ printCSV $ balanceReportAsCsv ropts r | ||||||
|                 _     -> balanceReportAsText |                 _     -> balanceReportAsText | ||||||
|           writeOutput opts $ render ropts $ convert report |           writeOutput opts $ render ropts report | ||||||
|         _ -> do |         _ -> do | ||||||
|           let report = multiBalanceReport ropts (queryFromOpts d ropts) j |           let report = multiBalanceReport ropts (queryFromOpts d ropts) j | ||||||
|               convert | value_ ropts = maybe id (multiBalanceReportValue j) mvaluedate |  | ||||||
|                       | otherwise = id |  | ||||||
|               render = case format of |               render = case format of | ||||||
|                 "csv" -> \ropts r -> (++ "\n") $ printCSV $ multiBalanceReportAsCsv ropts r |                 "csv" -> \ropts r -> (++ "\n") $ printCSV $ multiBalanceReportAsCsv ropts r | ||||||
|                 _     -> case baltype of |                 _     -> case baltype of | ||||||
|                   PeriodChange     -> periodChangeReportAsText |                   PeriodChange     -> periodChangeReportAsText | ||||||
|                   CumulativeChange -> cumulativeChangeReportAsText |                   CumulativeChange -> cumulativeChangeReportAsText | ||||||
|                   HistoricalBalance -> historicalBalanceReportAsText |                   HistoricalBalance -> historicalBalanceReportAsText | ||||||
|           writeOutput opts $ render ropts $ convert report |           writeOutput opts $ render ropts report | ||||||
| 
 | 
 | ||||||
| -- single-column balance reports | -- single-column balance reports | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -30,7 +30,6 @@ balanceviewmode bv@BV{..} = (defCommandMode $ bvmode : bvaliases) { | |||||||
|      groupUnnamed = [ |      groupUnnamed = [ | ||||||
|       flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show accounts as a list" |       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" |      ,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-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)" |      ,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)" |      ,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) | balanceviewQueryReport ropts currDay reportEnd j t q = ([view], Sum amt) | ||||||
|     where |     where | ||||||
|       q' = And [queryFromOpts currDay (withoutBeginDate ropts), q j] |       q' = And [queryFromOpts currDay (withoutBeginDate ropts), q j] | ||||||
|       convert | value_ ropts = maybe id (balanceReportValue j) reportEnd |       rep@(_ , amt) = balanceReport ropts q' j | ||||||
|               | otherwise    = id |  | ||||||
|       rep@(_ , amt) = convert $ balanceReport ropts q' j |  | ||||||
|       view = intercalate "\n" [t <> ":", balanceReportAsText ropts rep] |       view = intercalate "\n" [t <> ":", balanceReportAsText ropts rep] | ||||||
| 
 | 
 | ||||||
| balanceviewReport :: BalanceView -> CliOpts -> Journal -> IO () | 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" |  ,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 ["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 ["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." |  ,flagNone ["anon"]              (setboolopt "anon") "output ledger with anonymized accounts and payees." | ||||||
|  ] |  ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ module Hledger.Cli.Utils | |||||||
|     ) |     ) | ||||||
| where | where | ||||||
| import Control.Exception as C | import Control.Exception as C | ||||||
|  | import Control.Monad ((<=<)) | ||||||
| import Data.Hashable (hash) | import Data.Hashable (hash) | ||||||
| import Data.List | import Data.List | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
| @ -63,6 +64,7 @@ import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds) | |||||||
| import Hledger.Cli.CliOptions | import Hledger.Cli.CliOptions | ||||||
| import Hledger.Data | import Hledger.Data | ||||||
| import Hledger.Read | import Hledger.Read | ||||||
|  | import Hledger.Reports | ||||||
| import Hledger.Utils | import Hledger.Utils | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -76,7 +78,12 @@ withJournalDo opts cmd = do | |||||||
|   rulespath <- rulesFilePathFromOpts opts |   rulespath <- rulesFilePathFromOpts opts | ||||||
|   journalpaths <- journalFilePathFromOpts opts |   journalpaths <- journalFilePathFromOpts opts | ||||||
|   ej <- readJournalFiles Nothing rulespath (not $ ignore_assertions_ opts) journalpaths |   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. | -- | Apply the pivot transformation on a journal, if option is present. | ||||||
| pivotByOpts :: CliOpts -> Journal -> Journal | pivotByOpts :: CliOpts -> Journal -> Journal | ||||||
| @ -119,6 +126,16 @@ anonymise j | |||||||
|   where |   where | ||||||
|     anon = T.pack . flip showHex "" . (fromIntegral :: Int -> Word32) . hash |     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. | -- | Write some output to stdout or to a file selected by --output-file. | ||||||
| writeOutput :: CliOpts -> String -> IO () | writeOutput :: CliOpts -> String -> IO () | ||||||
| writeOutput opts s = do | writeOutput opts s = do | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user