mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-07 21:15:19 +03:00
parent
0142482834
commit
c138c35d3b
@ -19,11 +19,14 @@ module Hledger.Query (
|
|||||||
queryIsAcct,
|
queryIsAcct,
|
||||||
queryIsDepth,
|
queryIsDepth,
|
||||||
queryIsDate,
|
queryIsDate,
|
||||||
|
queryIsDate2,
|
||||||
|
queryIsDateOrDate2,
|
||||||
queryIsStartDateOnly,
|
queryIsStartDateOnly,
|
||||||
queryIsSym,
|
queryIsSym,
|
||||||
queryStartDate,
|
queryStartDate,
|
||||||
queryEndDate,
|
queryEndDate,
|
||||||
queryDateSpan,
|
queryDateSpan,
|
||||||
|
queryDateSpan',
|
||||||
queryDepth,
|
queryDepth,
|
||||||
queryEmpty,
|
queryEmpty,
|
||||||
inAccount,
|
inAccount,
|
||||||
@ -415,9 +418,17 @@ queryIsDepth _ = False
|
|||||||
|
|
||||||
queryIsDate :: Query -> Bool
|
queryIsDate :: Query -> Bool
|
||||||
queryIsDate (Date _) = True
|
queryIsDate (Date _) = True
|
||||||
queryIsDate (Date2 _) = True
|
|
||||||
queryIsDate _ = False
|
queryIsDate _ = False
|
||||||
|
|
||||||
|
queryIsDate2 :: Query -> Bool
|
||||||
|
queryIsDate2 (Date2 _) = True
|
||||||
|
queryIsDate2 _ = False
|
||||||
|
|
||||||
|
queryIsDateOrDate2 :: Query -> Bool
|
||||||
|
queryIsDateOrDate2 (Date _) = True
|
||||||
|
queryIsDateOrDate2 (Date2 _) = True
|
||||||
|
queryIsDateOrDate2 _ = False
|
||||||
|
|
||||||
queryIsDesc :: Query -> Bool
|
queryIsDesc :: Query -> Bool
|
||||||
queryIsDesc (Desc _) = True
|
queryIsDesc (Desc _) = True
|
||||||
queryIsDesc _ = False
|
queryIsDesc _ = False
|
||||||
@ -477,6 +488,20 @@ queryDateSpans False (Date span) = [span]
|
|||||||
queryDateSpans True (Date2 span) = [span]
|
queryDateSpans True (Date2 span) = [span]
|
||||||
queryDateSpans _ _ = []
|
queryDateSpans _ _ = []
|
||||||
|
|
||||||
|
-- | What date span (or secondary date span) does this query specify ?
|
||||||
|
-- For OR expressions, use the widest possible span. NOT is ignored.
|
||||||
|
queryDateSpan' :: Query -> DateSpan
|
||||||
|
queryDateSpan' q = spansUnion $ queryDateSpans' q
|
||||||
|
|
||||||
|
-- | Extract all date (or secondary date) spans specified in this query.
|
||||||
|
-- NOT is ignored.
|
||||||
|
queryDateSpans' :: Query -> [DateSpan]
|
||||||
|
queryDateSpans' (Or qs) = concatMap queryDateSpans' qs
|
||||||
|
queryDateSpans' (And qs) = concatMap queryDateSpans' qs
|
||||||
|
queryDateSpans' (Date span) = [span]
|
||||||
|
queryDateSpans' (Date2 span) = [span]
|
||||||
|
queryDateSpans' _ = []
|
||||||
|
|
||||||
-- | What is the earliest of these dates, where Nothing is latest ?
|
-- | What is the earliest of these dates, where Nothing is latest ?
|
||||||
earliestMaybeDate :: [Maybe Day] -> Maybe Day
|
earliestMaybeDate :: [Maybe Day] -> Maybe Day
|
||||||
earliestMaybeDate mds = head $ sortBy compareMaybeDates mds ++ [Nothing]
|
earliestMaybeDate mds = head $ sortBy compareMaybeDates mds ++ [Nothing]
|
||||||
|
@ -71,7 +71,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, items, totals)
|
|||||||
depthq = dbg "depthq" $ filterQuery queryIsDepth q
|
depthq = dbg "depthq" $ filterQuery queryIsDepth q
|
||||||
depth = queryDepth depthq
|
depth = queryDepth depthq
|
||||||
depthless = dbg "depthless" . filterQuery (not . queryIsDepth)
|
depthless = dbg "depthless" . filterQuery (not . queryIsDepth)
|
||||||
datelessq = dbg "datelessq" $ filterQuery (not . queryIsDate) q
|
datelessq = dbg "datelessq" $ filterQuery (not . queryIsDateOrDate2) q
|
||||||
dateqcons = if date2_ opts then Date2 else Date
|
dateqcons = if date2_ opts then Date2 else Date
|
||||||
precedingq = dbg "precedingq" $ And [datelessq, dateqcons $ DateSpan Nothing (spanStart reportspan)]
|
precedingq = dbg "precedingq" $ And [datelessq, dateqcons $ DateSpan Nothing (spanStart reportspan)]
|
||||||
requestedspan = dbg "requestedspan" $ queryDateSpan (date2_ opts) q -- span specified by -b/-e/-p options and query args
|
requestedspan = dbg "requestedspan" $ queryDateSpan (date2_ opts) q -- span specified by -b/-e/-p options and query args
|
||||||
|
@ -57,12 +57,13 @@ postingsReport opts q j = (totallabel, items)
|
|||||||
symq = dbg "symq" $ filterQuery queryIsSym $ dbg "requested q" q
|
symq = dbg "symq" $ filterQuery queryIsSym $ dbg "requested q" q
|
||||||
depth = queryDepth q
|
depth = queryDepth q
|
||||||
depthless = filterQuery (not . queryIsDepth)
|
depthless = filterQuery (not . queryIsDepth)
|
||||||
datelessq = filterQuery (not . queryIsDate) q
|
datelessq = filterQuery (not . queryIsDateOrDate2) q
|
||||||
(dateqcons,pdate) | date2_ opts = (Date2, postingDate2)
|
-- XXX date:/date2:/--date2 handling is not robust, combinations of these can confuse it
|
||||||
| otherwise = (Date, postingDate)
|
dateq = filterQuery queryIsDateOrDate2 q
|
||||||
requestedspan = dbg "requestedspan" $ queryDateSpan (date2_ opts) q -- span specified by -b/-e/-p options and query args
|
(dateqcons,pdate) | queryIsDate2 dateq || (queryIsDate dateq && date2_ opts) = (Date2, postingDate2)
|
||||||
-- XXX doesn't handle date2:
|
| otherwise = (Date, postingDate)
|
||||||
requestedspan' = dbg "requestedspan'" $ requestedspan `spanDefaultsFrom` journalDateSpan (date2_ opts) j -- if open-ended, close it using the journal's end dates
|
requestedspan = dbg "requestedspan" $ queryDateSpan' q -- span specified by -b/-e/-p options and query args
|
||||||
|
requestedspan' = dbg "requestedspan'" $ requestedspan `spanDefaultsFrom` journalDateSpan ({-date2_ opts-} False) j -- if open-ended, close it using the journal's end dates
|
||||||
intervalspans = dbg "intervalspans" $ splitSpan (intervalFromOpts opts) requestedspan' -- interval spans enclosing it
|
intervalspans = dbg "intervalspans" $ splitSpan (intervalFromOpts opts) requestedspan' -- interval spans enclosing it
|
||||||
reportstart = dbg "reportstart" $ maybe Nothing spanStart $ headMay intervalspans
|
reportstart = dbg "reportstart" $ maybe Nothing spanStart $ headMay intervalspans
|
||||||
reportend = dbg "reportend" $ maybe Nothing spanEnd $ lastMay intervalspans
|
reportend = dbg "reportend" $ maybe Nothing spanEnd $ lastMay intervalspans
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
# filtering by secondary date (cf #201)
|
|
||||||
|
|
||||||
# 1. -b/-e/-p match the secondary date if --date2 is present
|
|
||||||
hledgerdev -f- register -p 2014/1/2 --date2
|
|
||||||
<<<
|
|
||||||
2014/1/1=1/2
|
|
||||||
(a) 1
|
|
||||||
|
|
||||||
2014/1/3
|
|
||||||
(b) 1
|
|
||||||
>>>
|
|
||||||
2014/01/02 (a) 1 1
|
|
||||||
>>>=0
|
|
||||||
|
|
||||||
# 2. date: is not affected by --date2
|
|
||||||
hledgerdev -f- register date:2014/1/2 --date2
|
|
||||||
<<<
|
|
||||||
2014/1/1=1/2
|
|
||||||
(a) 1
|
|
||||||
|
|
||||||
2014/1/3
|
|
||||||
(b) 1
|
|
||||||
>>>
|
|
||||||
>>>=0
|
|
||||||
|
|
||||||
# 3. date2: matches the secondary date
|
|
||||||
hledgerdev -f- register date2:2014/1/2
|
|
||||||
<<<
|
|
||||||
2014/1/1=1/2
|
|
||||||
(a) 1
|
|
||||||
|
|
||||||
2014/1/3
|
|
||||||
(b) 1
|
|
||||||
>>>
|
|
||||||
2014/01/02 (a) 1 1
|
|
||||||
>>>=0
|
|
||||||
|
|
||||||
# 4. date2: is not affected by --date2
|
|
||||||
hledgerdev -f- register date2:2014/1/1 --date2
|
|
||||||
<<<
|
|
||||||
2014/1/1=1/2
|
|
||||||
(a) 1
|
|
||||||
|
|
||||||
2014/1/3
|
|
||||||
(b) 1
|
|
||||||
>>>
|
|
||||||
>>>=0
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
|||||||
|
# 1.
|
||||||
hledgerdev -f - register --date2
|
hledgerdev -f - register --date2
|
||||||
<<<
|
<<<
|
||||||
2009/1/1=2010/1/1 x
|
2009/1/1=2010/1/1 x
|
||||||
@ -7,3 +8,63 @@ hledgerdev -f - register --date2
|
|||||||
2010/01/01 x a 1 1
|
2010/01/01 x a 1 1
|
||||||
b -1 0
|
b -1 0
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
|
# 2. -b/-e/-p match the secondary date if --date2 is present (also, the secondary date is displayed)
|
||||||
|
hledgerdev -f- register -p 2014/1/2 --date2
|
||||||
|
<<<
|
||||||
|
2014/1/1=1/2
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
2014/1/3
|
||||||
|
(b) 1
|
||||||
|
>>>
|
||||||
|
2014/01/02 (a) 1 1
|
||||||
|
>>>=0
|
||||||
|
|
||||||
|
# 3. date: matches the secondary date if --date2 is present (on the command line, at least)
|
||||||
|
hledgerdev -f- register date:2014/1/2 --date2
|
||||||
|
<<<
|
||||||
|
2014/1/1=1/2
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
2014/1/3
|
||||||
|
(b) 1
|
||||||
|
>>>
|
||||||
|
2014/01/02 (a) 1 1
|
||||||
|
>>>=0
|
||||||
|
|
||||||
|
# 4. date2: matches the secondary date
|
||||||
|
hledgerdev -f- register date2:2014/1/2
|
||||||
|
<<<
|
||||||
|
2014/1/1=1/2
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
2014/1/3
|
||||||
|
(b) 1
|
||||||
|
>>>
|
||||||
|
2014/01/01 (a) 1 1
|
||||||
|
>>>=0
|
||||||
|
|
||||||
|
# 5. you need to add --date2 if you also want the secondary date displayed
|
||||||
|
hledgerdev -f- register date2:2014/1/2 --date2
|
||||||
|
<<<
|
||||||
|
2014/1/1=1/2
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
2014/1/3
|
||||||
|
(b) 1
|
||||||
|
>>>
|
||||||
|
2014/01/02 (a) 1 1
|
||||||
|
>>>=0
|
||||||
|
|
||||||
|
# 3. date2: matching is not affected by --date2
|
||||||
|
hledgerdev -f- register date2:2014/1/1 --date2
|
||||||
|
<<<
|
||||||
|
2014/1/1=1/2
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
2014/1/3
|
||||||
|
(b) 1
|
||||||
|
>>>
|
||||||
|
>>>=0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user