cli: --auto adds automated postings to reports
Ledger-style automated postings, previously supported only by hledger-budget, have landed as a first-class feature. The --auto flag activates them, so that any postings they generate are included in reports.
This commit is contained in:
parent
f101d5b515
commit
23f3da4e92
@ -105,6 +105,7 @@ data ReportOpts = ReportOpts {
|
||||
-- how to sort negative numbers.
|
||||
,color_ :: Bool
|
||||
,forecast_ :: Bool
|
||||
,auto_ :: Bool
|
||||
} deriving (Show, Data, Typeable)
|
||||
|
||||
instance Default ReportOpts where def = defreportopts
|
||||
@ -136,6 +137,7 @@ defreportopts = ReportOpts
|
||||
def
|
||||
def
|
||||
def
|
||||
def
|
||||
|
||||
rawOptsToReportOpts :: RawOpts -> IO ReportOpts
|
||||
rawOptsToReportOpts rawopts = checkReportOpts <$> do
|
||||
@ -167,6 +169,7 @@ rawOptsToReportOpts rawopts = checkReportOpts <$> do
|
||||
,pretty_tables_ = boolopt "pretty-tables" rawopts'
|
||||
,color_ = color
|
||||
,forecast_ = boolopt "forecast" rawopts'
|
||||
,auto_ = boolopt "auto" rawopts'
|
||||
}
|
||||
|
||||
-- | Do extra validation of raw option values, raising an error if there's a problem.
|
||||
|
||||
@ -155,7 +155,8 @@ reportflags = [
|
||||
,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 ["forecast"] (\opts -> setboolopt "forecast" opts) "generate forecast transactions"
|
||||
,flagNone ["forecast"] (setboolopt "forecast") "generate forecast transactions"
|
||||
,flagNone ["auto"] (setboolopt "auto") "generate automated postings"
|
||||
]
|
||||
|
||||
-- | Common output-related flags: --output-file, --output-format...
|
||||
|
||||
@ -54,6 +54,7 @@ import Hledger.Data
|
||||
import Hledger.Read
|
||||
import Hledger.Reports
|
||||
import Hledger.Utils
|
||||
import Hledger.Query (Query(Any))
|
||||
|
||||
|
||||
-- | Parse the user's specified journal file, maybe apply some transformations
|
||||
@ -71,6 +72,7 @@ withJournalDo opts cmd = do
|
||||
. journalApplyAliases (aliasesFromOpts opts)
|
||||
<=< journalApplyValue (reportopts_ opts)
|
||||
<=< journalAddForecast opts
|
||||
. generateAutomaticPostings (reportopts_ opts)
|
||||
either error' f ej
|
||||
|
||||
-- | Apply the pivot transformation on a journal, if option is present.
|
||||
@ -141,6 +143,15 @@ journalAddForecast opts j = do
|
||||
in
|
||||
either error' id $ journalBalanceTransactions assrt j
|
||||
|
||||
-- | Generate Automatic postings and add them to the current journal.
|
||||
generateAutomaticPostings :: ReportOpts -> Journal -> Journal
|
||||
generateAutomaticPostings ropts j =
|
||||
if auto_ ropts then j { jtxns = map modifier $ jtxns j } else j
|
||||
where
|
||||
modifier = foldr (flip (.) . runModifierTransaction') id mtxns
|
||||
runModifierTransaction' = fmap txnTieKnot . runModifierTransaction Any
|
||||
mtxns = jmodifiertxns j
|
||||
|
||||
-- | Write some output to stdout or to a file selected by --output-file.
|
||||
-- If the file exists it will be overwritten.
|
||||
writeOutput :: CliOpts -> String -> IO ()
|
||||
|
||||
78
tests/budget/auto.test
Normal file
78
tests/budget/auto.test
Normal file
@ -0,0 +1,78 @@
|
||||
# Add proportional income tax (from documentation)
|
||||
hledger print -f- --auto
|
||||
<<<
|
||||
2016/1/1 paycheck
|
||||
income:remuneration $-100
|
||||
income:donations $-15
|
||||
assets:bank
|
||||
|
||||
2016/1/1 withdraw
|
||||
assets:cash $20
|
||||
assets:bank
|
||||
|
||||
= ^income
|
||||
(liabilities:tax) *.33 ; income tax
|
||||
>>>
|
||||
2016/01/01 paycheck
|
||||
income:remuneration $-100
|
||||
income:donations $-15
|
||||
assets:bank
|
||||
(liabilities:tax) $-33 ; income tax
|
||||
(liabilities:tax) $-5 ; income tax
|
||||
|
||||
2016/01/01 withdraw
|
||||
assets:cash $20
|
||||
assets:bank
|
||||
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
hledger register -f- --auto
|
||||
<<<
|
||||
2016/1/1 paycheck
|
||||
income:remuneration $-100
|
||||
income:donations $-15
|
||||
assets:bank
|
||||
|
||||
2016/1/1 withdraw
|
||||
assets:cash $20
|
||||
assets:bank
|
||||
|
||||
= ^income
|
||||
(liabilities:tax) *.33 ; income tax
|
||||
>>>
|
||||
2016/01/01 paycheck income:remuneration $-100 $-100
|
||||
income:donations $-15 $-115
|
||||
assets:bank $115 0
|
||||
(liabilities:tax) $-33 $-33
|
||||
(liabilities:tax) $-5 $-38
|
||||
2016/01/01 withdraw assets:cash $20 $-18
|
||||
assets:bank $-20 $-38
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
hledger balance -f- --auto
|
||||
<<<
|
||||
2016/1/1 paycheck
|
||||
income:remuneration $-100
|
||||
income:donations $-15
|
||||
assets:bank
|
||||
|
||||
2016/1/1 withdraw
|
||||
assets:cash $20
|
||||
assets:bank
|
||||
|
||||
= ^income
|
||||
(liabilities:tax) *.33 ; income tax
|
||||
>>>
|
||||
$115 assets
|
||||
$95 bank
|
||||
$20 cash
|
||||
$-115 income
|
||||
$-15 donations
|
||||
$-100 remuneration
|
||||
$-38 liabilities:tax
|
||||
--------------------
|
||||
$-38
|
||||
>>>2
|
||||
>>>=0
|
||||
Loading…
Reference in New Issue
Block a user