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