check: ordereddates: test --date2, clarify --unique and QUERY dropped

This commit is contained in:
Simon Michael 2020-12-31 11:43:51 -08:00
parent bb1d49c573
commit 2ffed3aec7
2 changed files with 38 additions and 12 deletions

View File

@ -8,26 +8,27 @@ import Hledger.Cli.CliOptions
import Text.Printf
journalCheckOrdereddates :: CliOpts -> Journal -> Either String ()
journalCheckOrdereddates CliOpts{rawopts_=rawopts,reportspec_=rspec} j = do
journalCheckOrdereddates CliOpts{reportspec_=rspec} j = do
let ropts = (rsOpts rspec){accountlistmode_=ALFlat}
let ts = filter (rsQuery rspec `matchesTransaction`) $
jtxns $ journalSelectingAmountFromOpts ropts j
let unique = boolopt "--unique" rawopts
let date = transactionDateFn ropts
let checkunique = False -- boolopt "unique" rawopts XXX was supported by checkdates command
let getdate = transactionDateFn ropts
let compare a b =
if unique
then date a < date b
else date a <= date b
if checkunique
then getdate a < getdate b
else getdate a <= getdate b
case checkTransactions compare ts of
FoldAcc{fa_previous=Nothing} -> return ()
FoldAcc{fa_error=Nothing} -> return ()
FoldAcc{fa_error=Just error, fa_previous=Just previous} -> do
let
uniquestr = if unique then " and/or not unique" else ""
uniquestr = if checkunique then " and/or not unique" else ""
positionstr = showGenericSourcePos $ tsourcepos error
txn1str = linesPrepend " " $ showTransaction previous
txn2str = linesPrepend2 "> " " " $ showTransaction error
Left $ printf "transaction date is out of order%s\nat %s:\n\n%s"
Left $ printf "transaction date%s is out of order%s\nat %s:\n\n%s"
(if date2_ ropts then "2" else "")
uniquestr
positionstr
(txn1str ++ txn2str)

View File

@ -14,7 +14,32 @@ $ hledger -f- check ordereddates
$ hledger -f- check ordereddates
>2 /transaction date is out of order/
>=1
# XXX
# With --date2, it checks secondary dates instead.
# With --strict, dates must also be unique.
# With a query, only matched transactions' dates are checked.
# With --date2, it checks secondary dates instead
<
2020-01-02
2020-01-01=2020-01-03
$ hledger -f- check ordereddates --date2
#
<
2020-01-01=2020-01-03
2020-01-02
$ hledger -f- check ordereddates --date2
>2 /transaction date2 is out of order/
>=1
# XXX not supported: With a query, only matched transactions' dates are checked.
# <
# 2020-01-01 a
# 2020-01-03 b
# 2020-01-02 a
# $ hledger -f- check ordereddates
# XXX not supported: With --unique, dates must also be unique.
# <
# 2020-01-01
# 2020-01-01
# $ hledger -f- check ordereddates --unique
# >2 /transaction date is out of order and/or not unique/
# >=1