imp:close: exclude E by default; and always exclude the balancing account [#2151]

The first of some changes discussed on the issue. A more useful default ?
This commit is contained in:
Simon Michael 2024-01-14 16:15:28 -10:00
parent 582d6dbdd7
commit cd72c62858
3 changed files with 18 additions and 19 deletions

View File

@ -62,11 +62,11 @@ close copts@CliOpts{rawopts_=rawopts, reportspec_=rspec0} j = do
-- currently only one of the six mode flags takes effect at a time (hledger close --close --open only does --open). -- currently only one of the six mode flags takes effect at a time (hledger close --close --open only does --open).
(close_, open_, assert_, assign_, defclosedesc_, defopendesc_, defcloseacct_, defacctsq_) = if (close_, open_, assert_, assign_, defclosedesc_, defopendesc_, defcloseacct_, defacctsq_) = if
| boolopt "retain" rawopts -> (True, False, False, False, defretaindesc, undefined, defretainacct, Type [Revenue, Expense]) | boolopt "retain" rawopts -> (True, False, False, False, defretaindesc, undefined, defretainacct, Type [Revenue, Expense])
| boolopt "migrate" rawopts -> (True, True, False, False, defclosedesc, defopendesc, defcloseacct, Type [Asset, Liability, Equity]) | boolopt "migrate" rawopts -> (True, True, False, False, defclosedesc, defopendesc, defcloseacct, Type [Asset, Liability])
| boolopt "assign" rawopts -> (False, False, False, True, undefined, defopendesc, defcloseacct, Type [Asset, Liability, Equity]) | boolopt "assign" rawopts -> (False, False, False, True, undefined, defopendesc, defcloseacct, Type [Asset, Liability])
| boolopt "assert" rawopts -> (False, False, True, False, defclosedesc, undefined, defcloseacct, Type [Asset, Liability, Equity]) | boolopt "assert" rawopts -> (False, False, True, False, defclosedesc, undefined, defcloseacct, Type [Asset, Liability])
| boolopt "open" rawopts -> (False, True, False, False, undefined, defopendesc, defcloseacct, Type [Asset, Liability, Equity]) | boolopt "open" rawopts -> (False, True, False, False, undefined, defopendesc, defcloseacct, Type [Asset, Liability])
| otherwise -> (True, False, False, False, defclosedesc, undefined, defcloseacct, Type [Asset, Liability, Equity]) -- close | otherwise {- close -} -> (True, False, False, False, defclosedesc, undefined, defcloseacct, Type [Asset, Liability])
-- descriptions to use for the closing/opening transactions -- descriptions to use for the closing/opening transactions
closedesc = T.pack $ fromMaybe defclosedesc_ $ maybestringopt "close-desc" rawopts closedesc = T.pack $ fromMaybe defclosedesc_ $ maybestringopt "close-desc" rawopts
@ -96,11 +96,14 @@ close copts@CliOpts{rawopts_=rawopts, reportspec_=rspec0} j = do
-- should we show the amount(s) on the equity posting(s) ? -- should we show the amount(s) on the equity posting(s) ?
explicit = boolopt "explicit" rawopts || copts ^. infer_costs explicit = boolopt "explicit" rawopts || copts ^. infer_costs
-- the balances to close -- the accounts to close
argsacctq = filterQuery (\q -> queryIsAcct q || queryIsType q) argsq argsacctq = filterQuery (\q -> queryIsAcct q || queryIsType q) argsq
q2 = if queryIsNull argsacctq then And [argsq, defacctsq_] else argsq q2 = if queryIsNull argsacctq then And [argsq, defacctsq_] else argsq
rspec2 = rspec1{_rsQuery=q2} -- always exclude the balancing equity account
(acctbals',_) = balanceReport rspec2 j q3 = And [q2, Not $ Acct $ accountNameToAccountOnlyRegex closeacct]
-- the balances to close
rspec3 = rspec1{_rsQuery=q3}
(acctbals',_) = balanceReport rspec3 j
acctbals = map (\(a,_,_,b) -> (a, if show_costs_ ropts then b else mixedAmountStripPrices b)) acctbals' acctbals = map (\(a,_,_,b) -> (a, if show_costs_ ropts then b else mixedAmountStripPrices b)) acctbals'
totalamt = maSum $ map snd acctbals totalamt = maSum $ map snd acctbals

View File

@ -17,14 +17,16 @@ or as a sort of generic mover of balances from any group of accounts to some oth
So it currently has six modes, selected by a mode flag. Use only one of these flags at a time: So it currently has six modes, selected by a mode flag. Use only one of these flags at a time:
1. With `--close` (or no mode flag) it prints a "closing balances" transaction 1. With `--close` (or no mode flag) it prints a "closing balances" transaction
that zeroes out all the asset, liability, and equity account balances, by default that zeroes out all the asset and liability account balances, by default
(this requires inferred or declared [account types](hledger.md#account-types)). (this requires [account types](hledger.md#account-types) to be detected or declared.).
Or, it will zero out the accounts matched by any ACCTQUERY arguments you provide.
All of the balances are transferred to a special "opening/closing balances" equity account. All of the balances are transferred to a special "opening/closing balances" equity account.
Or, if it will zero out the accounts matched by query arguments you provide.
Eg you could include assets, liabilities, and equity with `hledger close type:ALE`.
The "opening/closing balances" equity account is always excluded.
2. With `--open`, it prints an opposite "opening balances" transaction that 2. With `--open`, it prints an opposite "opening balances" transaction that
restores the same account balances, starting from zero. restores the same account balances, starting from zero.
This mode is similar to [Ledger's equity command](https://ledger-cli.org/doc/ledger3.html#The-equity-command). <!-- This mode is similar to [Ledger's equity command](https://ledger-cli.org/doc/ledger3.html#The-equity-command). -->
3. With `--migrate`, it prints both the closing and opening transactions above. 3. With `--migrate`, it prints both the closing and opening transactions above.
This is a common way to migrate balances to a new file at year end; This is a common way to migrate balances to a new file at year end;

View File

@ -23,7 +23,6 @@ $ hledger close -f- -e 2017
2016-12-31 closing balances 2016-12-31 closing balances
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
equity:opening $120 = $0
liabilities $-25 = $0 liabilities $-25 = $0
equity:opening/closing balances equity:opening/closing balances
@ -34,7 +33,6 @@ $ hledger close -f- -e 2017 --close
2016-12-31 closing balances 2016-12-31 closing balances
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
equity:opening $120 = $0
liabilities $-25 = $0 liabilities $-25 = $0
equity:opening/closing balances equity:opening/closing balances
@ -53,14 +51,12 @@ $ hledger close -f- -p 2016 --migrate
2016-12-31 closing balances 2016-12-31 closing balances
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
equity:opening $120 = $0
liabilities $-25 = $0 liabilities $-25 = $0
equity:opening/closing balances equity:opening/closing balances
2017-01-01 opening balances 2017-01-01 opening balances
assets:bank $80 = $80 assets:bank $80 = $80
assets:cash $10 = $10 assets:cash $10 = $10
equity:opening $-120 = $-120
liabilities $25 = $25 liabilities $25 = $25
equity:opening/closing balances equity:opening/closing balances
@ -71,7 +67,6 @@ $ hledger close -f- -p 2016 --open
2017-01-01 opening balances 2017-01-01 opening balances
assets:bank $80 = $80 assets:bank $80 = $80
assets:cash $10 = $10 assets:cash $10 = $10
equity:opening $-120 = $-120
liabilities $25 = $25 liabilities $25 = $25
equity:opening/closing balances equity:opening/closing balances
@ -82,9 +77,8 @@ $ hledger close -f- -p 2016 -x
2016-12-31 closing balances 2016-12-31 closing balances
assets:bank $-80 = $0 assets:bank $-80 = $0
assets:cash $-10 = $0 assets:cash $-10 = $0
equity:opening $120 = $0
liabilities $-25 = $0 liabilities $-25 = $0
equity:opening/closing balances $-5 equity:opening/closing balances $115
>=0 >=0