support all single-column balance features for balancesheet/incomestatement/cashflow
This commit is contained in:
		
							parent
							
								
									321ace107e
								
							
						
					
					
						commit
						573eda15e6
					
				| @ -6,6 +6,7 @@ module Hledger.Cli.BalanceView ( | ||||
|  ,balanceviewReport | ||||
| ) where | ||||
| 
 | ||||
| import Control.Monad (unless) | ||||
| import Data.Time.Calendar (Day) | ||||
| import Data.List (intercalate) | ||||
| import Data.Monoid (Sum(..), (<>)) | ||||
| @ -29,6 +30,10 @@ 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)" | ||||
|      ] | ||||
|     ,groupHidden = [] | ||||
|     ,groupNamed = [generalflagsgroup1] | ||||
| @ -38,22 +43,29 @@ balanceviewmode bv@BV{..} = (defCommandMode $ bvmode : bvaliases) { | ||||
| balanceviewQueryReport | ||||
|     :: ReportOpts | ||||
|     -> Day | ||||
|     -> Maybe Day | ||||
|     -> Journal | ||||
|     -> String | ||||
|     -> (Journal -> Query) | ||||
|     -> ([String], Sum MixedAmount) | ||||
| balanceviewQueryReport ropts d j t q = ([view], Sum amt) | ||||
| balanceviewQueryReport ropts currDay reportEnd j t q = ([view], Sum amt) | ||||
|     where | ||||
|       q' = And [queryFromOpts d (withoutBeginDate ropts), q j] | ||||
|       rep@(_ , amt) = balanceReport ropts q' j | ||||
|       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 | ||||
|       view = intercalate "\n" [t <> ":", balanceReportAsText ropts rep] | ||||
| 
 | ||||
| balanceviewReport :: BalanceView -> CliOpts -> Journal -> IO () | ||||
| balanceviewReport BV{..} CliOpts{reportopts_=ropts} j = do | ||||
|   d <- getCurrentDay | ||||
|   let (views, amt) = foldMap (uncurry (balanceviewQueryReport ropts d j)) bvqueries | ||||
|   currDay   <- getCurrentDay | ||||
|   reportEnd <- reportEndDate j ropts | ||||
|   let (views, amt) = | ||||
|         foldMap (uncurry (balanceviewQueryReport ropts currDay reportEnd j)) | ||||
|            bvqueries | ||||
|   mapM_ putStrLn (bvname : "" : views) | ||||
|   putStrLn . unlines $ | ||||
| 
 | ||||
|   unless (no_total_ ropts) .  putStrLn . unlines $ | ||||
|     [ "Total:" | ||||
|     , "--------------------" | ||||
|     , padleft 20 $ showMixedAmountWithoutPrice (getSum amt) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user