imp: close: clarify date logic, use journal last day if later (#1604)

This commit is contained in:
Simon Michael 2021-07-11 13:40:05 -10:00
parent a681e5329d
commit 0a66068ad1
2 changed files with 38 additions and 4 deletions

View File

@ -73,16 +73,37 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec} j = do
(Nothing, Nothing) -> (T.pack defclosingacct, T.pack defopeningacct) (Nothing, Nothing) -> (T.pack defclosingacct, T.pack defopeningacct)
-- dates of the closing and opening transactions -- dates of the closing and opening transactions
rspec_ = rspec{rsOpts=ropts} --
ropts = (rsOpts rspec){balancetype_=HistoricalBalance, accountlistmode_=ALFlat} -- Close.md:
-- "The default closing date is yesterday, or the journal's end date, whichever is later.
--
-- Unless you are running `close` on exactly the first day of the new period,
-- you'll want to override the closing date.
-- This is done by specifying a [report period](#report-start--end-date),
-- where "last day of the report period" will be the closing date.
-- The opening date is always the following day.
-- So to close on 2020-12-31 and open on 2021-01-01, any of these work
--
-- - `-p 2020`
-- - `date:2020`
-- - `-e 2021-01-01` (remember `-e` specifies an exclusive report end date)
-- - `-e 2021`"
--
q = rsQuery rspec q = rsQuery rspec
openingdate = fromMaybe today $ queryEndDate False q yesterday = addDays (-1) today
closingdate = addDays (-1) openingdate yesterdayorjournalend = case journalLastDay False j of
Just journalend -> max yesterday journalend
Nothing -> yesterday
mreportlastday = addDays (-1) <$> queryEndDate False q
closingdate = fromMaybe yesterdayorjournalend mreportlastday
openingdate = addDays 1 closingdate
-- 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 explicit = boolopt "explicit" rawopts
-- the balances to close -- the balances to close
ropts = (rsOpts rspec){balancetype_=HistoricalBalance, accountlistmode_=ALFlat}
rspec_ = rspec{rsOpts=ropts}
(acctbals',_) = balanceReport rspec_ j (acctbals',_) = balanceReport rspec_ 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

@ -303,3 +303,16 @@ $ hledger -f- close -p 2019 assets --interleaved -x
equity:opening/closing balances $-0.109999 equity:opening/closing balances $-0.109999
>=0 >=0
# 14. "The default closing date is yesterday, or the journal's end date, whichever is later."
<
999999-12-31
(a) 1
$ hledger -f- close
> /999999-12-31 closing balances/
>=
# 15. "override the closing date ... by specifying a report period, where last day of the report period will be the closing date"
$ hledger -f- close -e 100000-01-01
> /99999-12-31 closing balances/
>=