lib, cli: -U/-P/-C flags can be combined (#564)
This commit is contained in:
parent
44c6b324ab
commit
7fc921db86
@ -34,6 +34,7 @@ import Data.Data (Data)
|
||||
#if !MIN_VERSION_base(4,8,0)
|
||||
import Data.Functor.Compat ((<$>))
|
||||
#endif
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
import qualified Data.Text as T
|
||||
import Data.Typeable (Typeable)
|
||||
@ -73,7 +74,7 @@ instance Default AccountListMode where def = ALDefault
|
||||
data ReportOpts = ReportOpts {
|
||||
period_ :: Period
|
||||
,interval_ :: Interval
|
||||
,clearedstatus_ :: Maybe ClearedStatus
|
||||
,clearedstatus_ :: [ClearedStatus] -- ^ Zero, one, or two statuses to be matched
|
||||
,cost_ :: Bool
|
||||
,depth_ :: Maybe Int
|
||||
,display_ :: Maybe DisplayExp
|
||||
@ -262,16 +263,18 @@ intervalFromRawOpts = lastDef NoInterval . catMaybes . map intervalfromrawopt
|
||||
| n == "yearly" = Just $ Years 1
|
||||
| otherwise = Nothing
|
||||
|
||||
-- | Get the cleared status, if any, specified by the last of -C/--cleared,
|
||||
-- --pending, -U/--uncleared options.
|
||||
clearedStatusFromRawOpts :: RawOpts -> Maybe ClearedStatus
|
||||
clearedStatusFromRawOpts = lastMay . catMaybes . map clearedstatusfromrawopt
|
||||
-- | Get any cleared statuses to be matched, as specified by -C/--cleared,
|
||||
-- -P/--pending, -U/--uncleared options. -UPC is equivalent to no flags,
|
||||
-- so this returns a list of 0-2 unique statuses.
|
||||
clearedStatusFromRawOpts :: RawOpts -> [ClearedStatus]
|
||||
clearedStatusFromRawOpts = simplify . nub . sort . catMaybes . map clearedstatusfromrawopt
|
||||
where
|
||||
clearedstatusfromrawopt (n,_)
|
||||
| n == "cleared" = Just Cleared
|
||||
| n == "pending" = Just Pending
|
||||
| n == "uncleared" = Just Uncleared
|
||||
| otherwise = Nothing
|
||||
simplify l = if length l == 3 then [] else l -- TODO: (maxBound :: ClearedStatus) or something
|
||||
|
||||
type DisplayExp = String
|
||||
|
||||
@ -319,7 +322,7 @@ queryFromOpts d ReportOpts{..} = simplifyQuery $ And $ [flagsq, argsq]
|
||||
[(if date2_ then Date2 else Date) $ periodAsDateSpan period_]
|
||||
++ (if real_ then [Real True] else [])
|
||||
++ (if empty_ then [Empty True] else []) -- ?
|
||||
++ (maybe [] ((:[]) . Status) clearedstatus_)
|
||||
++ [Or $ map Status clearedstatus_]
|
||||
++ (maybe [] ((:[]) . Depth) depth_)
|
||||
argsq = fst $ parseQuery d (T.pack query_)
|
||||
|
||||
@ -331,7 +334,7 @@ queryFromOptsOnly _d ReportOpts{..} = simplifyQuery flagsq
|
||||
[(if date2_ then Date2 else Date) $ periodAsDateSpan period_]
|
||||
++ (if real_ then [Real True] else [])
|
||||
++ (if empty_ then [Empty True] else []) -- ?
|
||||
++ (maybe [] ((:[]) . Status) clearedstatus_)
|
||||
++ [Or $ map Status clearedstatus_]
|
||||
++ (maybe [] ((:[]) . Depth) depth_)
|
||||
|
||||
tests_queryFromOpts :: [Test]
|
||||
|
||||
@ -20,26 +20,21 @@ import Hledger.UI.UIOptions
|
||||
-- | Toggle between showing only cleared items or all items.
|
||||
toggleCleared :: UIState -> UIState
|
||||
toggleCleared ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=toggleCleared ropts}}}
|
||||
where
|
||||
toggleCleared ropts@ReportOpts{clearedstatus_=Just Cleared} = ropts{clearedstatus_=Nothing}
|
||||
toggleCleared ropts = ropts{clearedstatus_=Just Cleared}
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Cleared ropts}}}
|
||||
|
||||
-- | Toggle between showing only pending items or all items.
|
||||
togglePending :: UIState -> UIState
|
||||
togglePending ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=togglePending ropts}}}
|
||||
where
|
||||
togglePending ropts@ReportOpts{clearedstatus_=Just Pending} = ropts{clearedstatus_=Nothing}
|
||||
togglePending ropts = ropts{clearedstatus_=Just Pending}
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Pending ropts}}}
|
||||
|
||||
-- | Toggle between showing only uncleared items or all items.
|
||||
toggleUncleared :: UIState -> UIState
|
||||
toggleUncleared ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=toggleUncleared ropts}}}
|
||||
where
|
||||
toggleUncleared ropts@ReportOpts{clearedstatus_=Just Uncleared} = ropts{clearedstatus_=Nothing}
|
||||
toggleUncleared ropts = ropts{clearedstatus_=Just Uncleared}
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Uncleared ropts}}}
|
||||
|
||||
reportOptsToggleStatus s ropts
|
||||
| clearedstatus_ ropts == [s] = ropts{clearedstatus_=[]}
|
||||
| otherwise = ropts{clearedstatus_=[s]}
|
||||
|
||||
-- | Toggle between showing all and showing only nonempty (more precisely, nonzero) items.
|
||||
toggleEmpty :: UIState -> UIState
|
||||
@ -125,7 +120,7 @@ resetFilter ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=rop
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{
|
||||
accountlistmode_=ALTree
|
||||
,empty_=True
|
||||
,clearedstatus_=Nothing
|
||||
,clearedstatus_=[]
|
||||
,real_=False
|
||||
,query_=""
|
||||
--,period_=PeriodAll
|
||||
|
||||
@ -28,12 +28,11 @@ runHelp = runCommand "hledger-ui --help | less" >>= waitForProcess
|
||||
|
||||
-- ui
|
||||
|
||||
uiShowClearedStatus mc =
|
||||
case mc of
|
||||
Just Cleared -> ["cleared"]
|
||||
Just Pending -> ["pending"]
|
||||
Just Uncleared -> ["uncleared"]
|
||||
Nothing -> []
|
||||
uiShowClearedStatus = map showstatus
|
||||
where
|
||||
showstatus Cleared = "cleared"
|
||||
showstatus Pending = "pending"
|
||||
showstatus Uncleared = "uncleared"
|
||||
|
||||
-- | Draw the help dialog, called when help mode is active.
|
||||
helpDialog :: Widget Name
|
||||
|
||||
@ -55,11 +55,13 @@ hledger -fstatus.journal print --uncleared
|
||||
|
||||
>>>=0
|
||||
|
||||
# 6. only one of these flags (the last) takes effect
|
||||
hledger -fstatus.journal register --uncleared --pending --cleared
|
||||
# 6. these flags can be combined
|
||||
hledger -fstatus.journal register --uncleared --pending
|
||||
>>>
|
||||
2017/01/03 cleared (a) 1 1
|
||||
2017/01/01 uncleared (a) 1 1
|
||||
(b) 1 2
|
||||
2017/01/02 pending (a) 1 3
|
||||
(b) 1 4
|
||||
>>>= 0
|
||||
|
||||
# 7. these flags work with other commands
|
||||
|
||||
Loading…
Reference in New Issue
Block a user