register: --average/-A shows a running average, like ledger
This commit is contained in:
parent
3d205ec03f
commit
7ed0705398
@ -720,15 +720,17 @@ summary postings within each interval:
|
||||
$ hledger register --monthly rent
|
||||
$ hledger register --monthly -E food --depth 4
|
||||
|
||||
The `--average`/`-A` flag shows a running average instead of the running total.
|
||||
|
||||
The `--related`/`-r` flag shows the *other* postings in the transactions
|
||||
of the postings which would normally be shown.
|
||||
|
||||
The `--width`/`-w` option adjusts the width of the output. By default,
|
||||
this is 80 characters. To allow more space for descriptions and account
|
||||
names, use `-w` to increase the width to 120 characters, or `-wN` to set
|
||||
any desired width (at least 50 recommended, with no space before the N -
|
||||
eg `-w200` or `--width=200`,
|
||||
|
||||
The `--related`/`-r` flag shows the *other* postings in the transactions
|
||||
of the postings which would normally be shown.
|
||||
|
||||
#### balance
|
||||
|
||||
The balance command displays accounts and their balances, indented to show the account hierarchy.
|
||||
|
||||
1
NEWS.md
1
NEWS.md
@ -6,6 +6,7 @@ title: hledger news
|
||||
|
||||
## unreleased
|
||||
|
||||
- register: `--average/-A` shows a running average, like ledger
|
||||
- queries: `sym:REGEXP` matches (whole) commodity symbols
|
||||
- queries: `amt` now uses the = operator by default, eg amt:50 finds amounts equal to 50
|
||||
- don't break when there are non-ascii characters in CSV files
|
||||
|
||||
@ -94,6 +94,7 @@ data ReportOpts = ReportOpts {
|
||||
,yearly_ :: Bool
|
||||
,format_ :: Maybe FormatStr
|
||||
,related_ :: Bool
|
||||
,average_ :: Bool
|
||||
,query_ :: String -- all arguments, as a string
|
||||
} deriving (Show)
|
||||
|
||||
@ -124,6 +125,7 @@ defreportopts = ReportOpts
|
||||
def
|
||||
def
|
||||
def
|
||||
def
|
||||
|
||||
instance Default ReportOpts where def = defreportopts
|
||||
|
||||
@ -254,14 +256,14 @@ type PostingsReport = (String -- label for the running balance col
|
||||
type PostingsReportItem = (Maybe Day -- posting date, if this is the first posting in a transaction or if it's different from the previous posting's date
|
||||
,Maybe String -- transaction description, if this is the first posting in a transaction
|
||||
,Posting -- the posting, possibly with account name depth-clipped
|
||||
,MixedAmount -- the running total after this posting
|
||||
,MixedAmount -- the running total after this posting (or with --average, the running average)
|
||||
)
|
||||
|
||||
-- | Select postings from the journal and add running balance and other
|
||||
-- information to make a postings report. Used by eg hledger's register command.
|
||||
postingsReport :: ReportOpts -> Query -> Journal -> PostingsReport
|
||||
postingsReport opts q j = -- trace ("q: "++show q++"\nq': "++show q') $
|
||||
(totallabel, postingsReportItems ps nullposting wd depth startbal (+))
|
||||
(totallabel, postingsReportItems ps nullposting wd depth startbal runningcalcfn 1)
|
||||
where
|
||||
ps | interval == NoInterval = displayableps
|
||||
| otherwise = summarisePostingsByInterval interval depth empty reportspan displayableps
|
||||
@ -293,14 +295,16 @@ postingsReport opts q j = -- trace ("q: "++show q++"\nq': "++show q') $
|
||||
reportspan | empty = requestedspan `orDatesFrom` journalspan
|
||||
| otherwise = requestedspan `spanIntersect` matchedspan
|
||||
startbal = sumPostings precedingps
|
||||
runningcalcfn | average_ opts = \i avg amt -> avg + (amt - avg) `divideMixedAmount` (fromIntegral i)
|
||||
| otherwise = \_ bal amt -> bal + amt
|
||||
|
||||
totallabel = "Total"
|
||||
balancelabel = "Balance"
|
||||
|
||||
-- | Generate postings report line items.
|
||||
postingsReportItems :: [Posting] -> Posting -> WhichDate -> Int -> MixedAmount -> (MixedAmount -> MixedAmount -> MixedAmount) -> [PostingsReportItem]
|
||||
postingsReportItems [] _ _ _ _ _ = []
|
||||
postingsReportItems (p:ps) pprev wd d b sumfn = i:(postingsReportItems ps p wd d b' sumfn)
|
||||
postingsReportItems :: [Posting] -> Posting -> WhichDate -> Int -> MixedAmount -> (Int -> MixedAmount -> MixedAmount -> MixedAmount) -> Int -> [PostingsReportItem]
|
||||
postingsReportItems [] _ _ _ _ _ _ = []
|
||||
postingsReportItems (p:ps) pprev wd d b runningcalcfn itemnum = i:(postingsReportItems ps p wd d b' runningcalcfn (itemnum+1))
|
||||
where
|
||||
i = mkpostingsReportItem showdate showdesc wd p' b'
|
||||
showdate = isfirstintxn || isdifferentdate
|
||||
@ -309,7 +313,7 @@ postingsReportItems (p:ps) pprev wd d b sumfn = i:(postingsReportItems ps p wd d
|
||||
isdifferentdate = case wd of PrimaryDate -> postingDate p /= postingDate pprev
|
||||
SecondaryDate -> postingDate2 p /= postingDate2 pprev
|
||||
p' = p{paccount=clipAccountName d $ paccount p}
|
||||
b' = b `sumfn` pamount p
|
||||
b' = runningcalcfn itemnum b (pamount p)
|
||||
|
||||
-- | Generate one postings report line item, containing the posting,
|
||||
-- the current running balance, and optionally the posting date and/or
|
||||
|
||||
@ -215,6 +215,7 @@ postingsmode = (commandmode ["register","postings"]) {
|
||||
,modeGroupFlags = Group {
|
||||
groupUnnamed = [
|
||||
flagOpt (show defaultWidthWithFlag) ["width","w"] (\s opts -> Right $ setopt "width" s opts) "N" "increase or set the output width (default: 80)"
|
||||
,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "show the running average instead of the running total"
|
||||
,flagNone ["related","r"] (\opts -> setboolopt "related" opts) "show the other postings in the transactions of those that would have been shown"
|
||||
]
|
||||
,groupHidden = []
|
||||
@ -350,6 +351,7 @@ toCliOpts rawopts = do
|
||||
,quarterly_ = boolopt "quarterly" rawopts
|
||||
,yearly_ = boolopt "yearly" rawopts
|
||||
,format_ = maybestringopt "format" rawopts
|
||||
,average_ = boolopt "average" rawopts -- register
|
||||
,related_ = boolopt "related" rawopts -- register
|
||||
,query_ = unwords $ listofstringopt "args" rawopts
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user