From f1110d163dc080a8e45f5a67d36ce2bbd5d4874b Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 22 Jan 2020 14:15:30 -0800 Subject: [PATCH] close: --close-desc/--open-desc customise the descriptions (#1165) --- hledger/Hledger/Cli/Commands/Close.hs | 22 ++- hledger/Hledger/Cli/Commands/Close.md | 17 +- tests/close.test | 220 +++++++++++++------------- 3 files changed, 138 insertions(+), 121 deletions(-) diff --git a/hledger/Hledger/Cli/Commands/Close.hs b/hledger/Hledger/Cli/Commands/Close.hs index 366c041b5..7d91b0db3 100755 --- a/hledger/Hledger/Cli/Commands/Close.hs +++ b/hledger/Hledger/Cli/Commands/Close.hs @@ -29,6 +29,8 @@ closemode = hledgerCommandMode ,flagNone ["opening"] (setboolopt "opening") "show just opening transaction" ,flagReq ["close-to"] (\s opts -> Right $ setopt "close-to" s opts) "ACCT" ("account to transfer closing balances to (default: "++defclosingacct++")") ,flagReq ["open-from"] (\s opts -> Right $ setopt "open-from" s opts) "ACCT" ("account to transfer opening balances from (default: "++defopeningacct++")") + ,flagReq ["close-desc"] (\s opts -> Right $ setopt "close-desc" s opts) "DESC" ("description for closing transaction (default: "++defclosingdesc++")") + ,flagReq ["open-desc"] (\s opts -> Right $ setopt "open-desc" s opts) "DESC" ("description for opening transaction (default: "++defopeningdesc++")") ,flagNone ["explicit","x"] (setboolopt "explicit") "show all amounts explicitly" ,flagNone ["interleaved"] (setboolopt "interleaved") "keep equity and non-equity postings adjacent" ,flagNone ["show-costs"] (setboolopt "show-costs") "keep balances with different costs separate" @@ -49,15 +51,27 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do (o, c) -> (o, c) -- accounts to close to and open from - -- if a name is specified for only one, it is used for both + -- if only one is specified, it is used for both (closingacct, openingacct) = - let (mc, mo) = (T.pack <$> maybestringopt "close-to" rawopts, T.pack <$> maybestringopt "open-from" rawopts) + let (mc, mo) = + (T.pack <$> maybestringopt "close-to" rawopts, T.pack <$> maybestringopt "open-from" rawopts) in case (mc, mo) of (Just c, Just o) -> (c, o) (Just c, Nothing) -> (c, c) (Nothing, Just o) -> (o, o) (Nothing, Nothing) -> (T.pack defclosingacct, T.pack defopeningacct) + -- descriptions to use for the closing/opening transactions + -- if only one is specified, it is used for both + (closingdesc, openingdesc) = + let (mc, mo) = + (T.pack <$> maybestringopt "close-desc" rawopts, T.pack <$> maybestringopt "open-desc" rawopts) + in case (mc, mo) of + (Just c, Just o) -> (c, o) + (Just c, Nothing) -> (c, c) + (Nothing, Just o) -> (o, o) + (Nothing, Nothing) -> (T.pack defclosingdesc, T.pack defopeningdesc) + -- dates of the closing and opening transactions ropts_ = ropts{balancetype_=HistoricalBalance, accountlistmode_=ALFlat} q = queryFromOpts today ropts_ @@ -84,7 +98,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do interleaved = boolopt "interleaved" rawopts -- the closing transaction - closingtxn = nulltransaction{tdate=closingdate, tdescription=defclosingdesc, tpostings=closingps} + closingtxn = nulltransaction{tdate=closingdate, tdescription=closingdesc, tpostings=closingps} closingps = concat [ [posting{paccount = a @@ -114,7 +128,7 @@ close CliOpts{rawopts_=rawopts, reportopts_=ropts} j = do ++ [posting{paccount=closingacct, pamount=if explicit then mapMixedAmount precise totalamt else missingmixedamt} | not interleaved] -- the opening transaction - openingtxn = nulltransaction{tdate=openingdate, tdescription=defopeningdesc, tpostings=openingps} + openingtxn = nulltransaction{tdate=openingdate, tdescription=openingdesc, tpostings=openingps} openingps = concat [ [posting{paccount = a diff --git a/hledger/Hledger/Cli/Commands/Close.md b/hledger/Hledger/Cli/Commands/Close.md index 6e443a32d..b01e9e412 100644 --- a/hledger/Hledger/Cli/Commands/Close.md +++ b/hledger/Hledger/Cli/Commands/Close.md @@ -10,16 +10,19 @@ _FLAGS You can choose to print just one of these transactions by using the `--opening` or `--closing` flag. -One posting to `equity:opening/closing balances`, -with an implicit amount, is added to balance these transactions, -by default. -You can choose different closing/opening account names with the -`--close-to` and `--open-from` options. -If you specify only one, it is used for both. +One posting to `equity:opening/closing balances`, with an implicit +amount, is added to balance the transactions, by default. + +You can customise this account name with the `--close-to` and +`--open-from` options. (If you specify only one, it is used in both +transactions.) + +Similarly, you can customise the transaction descriptions with +`--close-desc` and `--open-desc`. With `--x/--explicit`, the equity posting's amount will be shown. If it involves multiple commodities, a posting for each commodity -will be shown (like the print command). +will be shown (as with the print command). With `--interleaved`, the equity postings are shown next to the postings they balance, which makes troubleshooting easier. diff --git a/tests/close.test b/tests/close.test index c9d0e51f7..09b88580c 100644 --- a/tests/close.test +++ b/tests/close.test @@ -20,16 +20,16 @@ $ hledger close -f- -p 2016 assets liabilities 2016-12-31 closing balances - assets:bank $-80 = $0 - assets:cash $-10 = $0 - liabilities $-25 = $0 - equity:closing balances + assets:bank $-80 = $0 + assets:cash $-10 = $0 + liabilities $-25 = $0 + equity:opening/closing balances 2017-01-01 opening balances - assets:bank $80 = $80 - assets:cash $10 = $10 - liabilities $25 = $25 - equity:opening balances + assets:bank $80 = $80 + assets:cash $10 = $10 + liabilities $25 = $25 + equity:opening/closing balances >=0 @@ -40,12 +40,12 @@ $ hledger close -f- -p 2016 assets liabilities $ hledger close -f- -b2017/6/1 -e2018 2017-12-31 closing balances - a -1 = 0 - equity:closing balances + a -1 = 0 + equity:opening/closing balances 2018-01-01 opening balances - a 1 = 1 - equity:opening balances + a 1 = 1 + equity:opening/closing balances >=0 @@ -70,10 +70,10 @@ $ hledger close -f- -b2017/6/1 -e2018 $ hledger close -f- -p 2016 assets liabilities --opening 2017-01-01 opening balances - assets:bank $80 = $80 - assets:cash $10 = $10 - liabilities $25 = $25 - equity:opening balances + assets:bank $80 = $80 + assets:cash $10 = $10 + liabilities $25 = $25 + equity:opening/closing balances >=0 @@ -98,10 +98,10 @@ $ hledger close -f- -p 2016 assets liabilities --opening $ hledger close -f- -p 2016 assets liabilities --closing 2016-12-31 closing balances - assets:bank $-80 = $0 - assets:cash $-10 = $0 - liabilities $-25 = $0 - equity:closing balances + assets:bank $-80 = $0 + assets:cash $-10 = $0 + liabilities $-25 = $0 + equity:opening/closing balances >=0 @@ -127,16 +127,16 @@ $ hledger close -f- -p 2016 assets liabilities --closing $ hledger close -f- -p 2016 assets liabilities --opening --closing -x 2016-12-31 closing balances - assets:bank $-80 = $0 - assets:cash $-10 = $0 - liabilities $-25 = $0 - equity:closing balances $115 + assets:bank $-80 = $0 + assets:cash $-10 = $0 + liabilities $-25 = $0 + equity:opening/closing balances $115 2017-01-01 opening balances - assets:bank $80 = $80 - assets:cash $10 = $10 - liabilities $25 = $25 - equity:opening balances $-115 + assets:bank $80 = $80 + assets:cash $10 = $10 + liabilities $25 = $25 + equity:opening/closing balances $-115 >=0 @@ -149,12 +149,12 @@ $ hledger close -f- -p 2016 assets liabilities --opening --closing -x $ hledger -f- close assets -p 2019 -x 2019-12-31 closing balances - assets -2A = 0A - equity:closing balances 2A + assets -2A = 0A + equity:opening/closing balances 2A 2020-01-01 opening balances - assets 2A = 2A - equity:opening balances -2A + assets 2A = 2A + equity:opening/closing balances -2A >=0 @@ -163,16 +163,16 @@ $ hledger -f- close assets -p 2019 -x # Balance assertion amounts do not have a price. $ hledger -f- close assets -p 2019 --show-costs -x 2019-12-31 closing balances - assets -1A @ 1B - assets -1A @ 1C = 0A - equity:closing balances 1A @ 1B - equity:closing balances 1A @ 1C + assets -1A @ 1B + assets -1A @ 1C = 0A + equity:opening/closing balances 1A @ 1B + equity:opening/closing balances 1A @ 1C 2020-01-01 opening balances - assets 1A @ 1B - assets 1A @ 1C = 2A - equity:opening balances -1A @ 1B - equity:opening balances -1A @ 1C + assets 1A @ 1B + assets 1A @ 1C = 2A + equity:opening/closing balances -1A @ 1B + equity:opening/closing balances -1A @ 1C >=0 @@ -187,12 +187,12 @@ $ hledger -f- close assets -p 2019 --show-costs -x $ hledger -f- close assets -p 2019 -x 2019-12-31 closing balances - assets -2A = 0A - equity:closing balances 2A + assets -2A = 0A + equity:opening/closing balances 2A 2020-01-01 opening balances - assets 2A = 2A - equity:opening balances -2A + assets 2A = 2A + equity:opening/closing balances -2A >=0 @@ -206,16 +206,16 @@ $ hledger -f- close assets -p 2019 -x $ hledger -f- close assets -p 2019 --show-costs -x 2019-12-31 closing balances - assets -1A @ 1B - assets -1A @ 2B = 0A - equity:closing balances 1A @ 1B - equity:closing balances 1A @ 2B + assets -1A @ 1B + assets -1A @ 2B = 0A + equity:opening/closing balances 1A @ 1B + equity:opening/closing balances 1A @ 2B 2020-01-01 opening balances - assets 1A @ 1B - assets 1A @ 2B = 2A - equity:opening balances -1A @ 1B - equity:opening balances -1A @ 2B + assets 1A @ 1B + assets 1A @ 2B = 2A + equity:opening/closing balances -1A @ 1B + equity:opening/closing balances -1A @ 2B >=0 @@ -245,26 +245,26 @@ $ hledger -f- close assets -p 2019 --show-costs -x $ hledger -f- close -p 2016 assets liabilities --show-costs -x 2016-12-31 closing balances - assets:bank -5,733.00 EUR = 0.00 EUR - liabilities:employer $-10,000.00 - liabilities:employer $5,000.00 @ 0.93 EUR - liabilities:employer $5,000.00 @ 0.95 EUR = $0.00 - liabilities:employer -1.00 EUR = 0.00 EUR - equity:closing balances $10,000.00 - equity:closing balances $-5,000.00 @ 0.93 EUR - equity:closing balances $-5,000.00 @ 0.95 EUR - equity:closing balances 5,734.00 EUR + assets:bank -5,733.00 EUR = 0.00 EUR + liabilities:employer $-10,000.00 + liabilities:employer $5,000.00 @ 0.93 EUR + liabilities:employer $5,000.00 @ 0.95 EUR = $0.00 + liabilities:employer -1.00 EUR = 0.00 EUR + equity:opening/closing balances $10,000.00 + equity:opening/closing balances $-5,000.00 @ 0.93 EUR + equity:opening/closing balances $-5,000.00 @ 0.95 EUR + equity:opening/closing balances 5,734.00 EUR 2017-01-01 opening balances - assets:bank 5,733.00 EUR = 5,733.00 EUR - liabilities:employer $10,000.00 - liabilities:employer $-5,000.00 @ 0.93 EUR - liabilities:employer $-5,000.00 @ 0.95 EUR = $0.00 - liabilities:employer 1.00 EUR = 1.00 EUR - equity:opening balances $-10,000.00 - equity:opening balances $5,000.00 @ 0.93 EUR - equity:opening balances $5,000.00 @ 0.95 EUR - equity:opening balances -5,734.00 EUR + assets:bank 5,733.00 EUR = 5,733.00 EUR + liabilities:employer $10,000.00 + liabilities:employer $-5,000.00 @ 0.93 EUR + liabilities:employer $-5,000.00 @ 0.95 EUR = $0.00 + liabilities:employer 1.00 EUR = 1.00 EUR + equity:opening/closing balances $-10,000.00 + equity:opening/closing balances $5,000.00 @ 0.93 EUR + equity:opening/closing balances $5,000.00 @ 0.95 EUR + equity:opening/closing balances -5,734.00 EUR >=0 @@ -273,28 +273,28 @@ $ hledger -f- close -p 2016 assets liabilities --show-costs -x # a single posting. Eg the 5734 EUR above is 5733 EUR and 1 EUR below.) $ hledger -f- close -p 2016 assets liabilities --interleaved --show-costs -x 2016-12-31 closing balances - assets:bank -5,733.00 EUR = 0.00 EUR - equity:closing balances 5,733.00 EUR - liabilities:employer $-10,000.00 - equity:closing balances $10,000.00 - liabilities:employer $5,000.00 @ 0.93 EUR - equity:closing balances $-5,000.00 @ 0.93 EUR - liabilities:employer $5,000.00 @ 0.95 EUR = $0.00 - equity:closing balances $-5,000.00 @ 0.95 EUR - liabilities:employer -1.00 EUR = 0.00 EUR - equity:closing balances 1.00 EUR + assets:bank -5,733.00 EUR = 0.00 EUR + equity:opening/closing balances 5,733.00 EUR + liabilities:employer $-10,000.00 + equity:opening/closing balances $10,000.00 + liabilities:employer $5,000.00 @ 0.93 EUR + equity:opening/closing balances $-5,000.00 @ 0.93 EUR + liabilities:employer $5,000.00 @ 0.95 EUR = $0.00 + equity:opening/closing balances $-5,000.00 @ 0.95 EUR + liabilities:employer -1.00 EUR = 0.00 EUR + equity:opening/closing balances 1.00 EUR 2017-01-01 opening balances - assets:bank 5,733.00 EUR = 5,733.00 EUR - equity:opening balances -5,733.00 EUR - liabilities:employer $10,000.00 - equity:opening balances $-10,000.00 - liabilities:employer $-5,000.00 @ 0.93 EUR - equity:opening balances $5,000.00 @ 0.93 EUR - liabilities:employer $-5,000.00 @ 0.95 EUR = $0.00 - equity:opening balances $5,000.00 @ 0.95 EUR - liabilities:employer 1.00 EUR = 1.00 EUR - equity:opening balances -1.00 EUR + assets:bank 5,733.00 EUR = 5,733.00 EUR + equity:opening/closing balances -5,733.00 EUR + liabilities:employer $10,000.00 + equity:opening/closing balances $-10,000.00 + liabilities:employer $-5,000.00 @ 0.93 EUR + equity:opening/closing balances $5,000.00 @ 0.93 EUR + liabilities:employer $-5,000.00 @ 0.95 EUR = $0.00 + equity:opening/closing balances $5,000.00 @ 0.95 EUR + liabilities:employer 1.00 EUR = 1.00 EUR + equity:opening/closing balances -1.00 EUR >=0 @@ -314,35 +314,35 @@ commodity AAA 0.00000000 $ hledger -f- close -p 2019 assets --show-costs -x 2019-12-31 closing balances - assets:aaa AAA -510.00000000 = AAA 0.00000000 - assets:usd $-49.50 - assets:usd $49.390001 @ AAA 10.3528242505 = $0.00 - equity:closing balances $49.50 - equity:closing balances $-49.390001 @ AAA 10.3528242505 - equity:closing balances AAA 510.00000000 + assets:aaa AAA -510.00000000 = AAA 0.00000000 + assets:usd $-49.50 + assets:usd $49.390001 @ AAA 10.3528242505 = $0.00 + equity:opening/closing balances $49.50 + equity:opening/closing balances $-49.390001 @ AAA 10.3528242505 + equity:opening/closing balances AAA 510.00000000 2020-01-01 opening balances - assets:aaa AAA 510.00000000 = AAA 510.00000000 - assets:usd $49.50 - assets:usd $-49.390001 @ AAA 10.3528242505 = $0.109999 - equity:opening balances $-49.50 - equity:opening balances $49.390001 @ AAA 10.3528242505 - equity:opening balances AAA -510.00000000 + assets:aaa AAA 510.00000000 = AAA 510.00000000 + assets:usd $49.50 + assets:usd $-49.390001 @ AAA 10.3528242505 = $0.109999 + equity:opening/closing balances $-49.50 + equity:opening/closing balances $49.390001 @ AAA 10.3528242505 + equity:opening/closing balances AAA -510.00000000 >=0 # 13. The same, without costs and with --interleaved. $ hledger -f- close -p 2019 assets --interleaved -x 2019-12-31 closing balances - assets:aaa AAA -510.00000000 = AAA 0.00000000 - equity:closing balances AAA 510.00000000 - assets:usd $-0.109999 = $0.00 - equity:closing balances $0.109999 + assets:aaa AAA -510.00000000 = AAA 0.00000000 + equity:opening/closing balances AAA 510.00000000 + assets:usd $-0.109999 = $0.00 + equity:opening/closing balances $0.109999 2020-01-01 opening balances - assets:aaa AAA 510.00000000 = AAA 510.00000000 - equity:opening balances AAA -510.00000000 - assets:usd $0.109999 = $0.109999 - equity:opening balances $-0.109999 + assets:aaa AAA 510.00000000 = AAA 510.00000000 + equity:opening/closing balances AAA -510.00000000 + assets:usd $0.109999 = $0.109999 + equity:opening/closing balances $-0.109999 >=0