web: "inacctsonly:" narrows the sidebar to current account and subs
This commit is contained in:
parent
d5ab811796
commit
d343614690
@ -55,21 +55,32 @@ data Matcher = MatchAny -- ^ always match
|
|||||||
-- XXX could use regular cli Opts ?
|
-- XXX could use regular cli Opts ?
|
||||||
data QueryOpt = QueryOptInAcct AccountName -- ^ show an account register focussed on this account
|
data QueryOpt = QueryOptInAcct AccountName -- ^ show an account register focussed on this account
|
||||||
| QueryOptInAcctSubs AccountName -- ^ as above but include sub-accounts in the account register
|
| QueryOptInAcctSubs AccountName -- ^ as above but include sub-accounts in the account register
|
||||||
|
| QueryOptInAcctSubsOnly AccountName -- ^ as above plus narrow the accounts sidebar to show just these accounts
|
||||||
-- | QueryOptCostBasis -- ^ show amounts converted to cost where possible
|
-- | QueryOptCostBasis -- ^ show amounts converted to cost where possible
|
||||||
-- | QueryOptEffectiveDate -- ^ show effective dates instead of actual dates
|
-- | QueryOptEffectiveDate -- ^ show effective dates instead of actual dates
|
||||||
deriving (Show, Eq)
|
deriving (Show, Eq)
|
||||||
|
|
||||||
-- | The account we are currently focussed on, if any.
|
-- | The account we are currently focussed on, if any.
|
||||||
|
-- Just looks at the first query option.
|
||||||
inAccount :: [QueryOpt] -> Maybe AccountName
|
inAccount :: [QueryOpt] -> Maybe AccountName
|
||||||
inAccount [] = Nothing
|
inAccount [] = Nothing
|
||||||
inAccount (QueryOptInAcct a:_) = Just a
|
inAccount (QueryOptInAcct a:_) = Just a
|
||||||
inAccount (QueryOptInAcctSubs a:_) = Just a
|
inAccount (QueryOptInAcctSubs a:_) = Just a
|
||||||
|
inAccount (QueryOptInAcctSubsOnly a:_) = Just a
|
||||||
|
|
||||||
-- | A matcher for the account(s) we are currently focussed on, if any.
|
-- | A matcher for the account(s) we are currently focussed on, if any.
|
||||||
|
-- Just looks at the first query option.
|
||||||
inAccountMatcher :: [QueryOpt] -> Maybe Matcher
|
inAccountMatcher :: [QueryOpt] -> Maybe Matcher
|
||||||
inAccountMatcher [] = Nothing
|
inAccountMatcher [] = Nothing
|
||||||
inAccountMatcher (QueryOptInAcct a:_) = Just $ MatchAcct True $ accountNameToAccountOnlyRegex a
|
inAccountMatcher (QueryOptInAcct a:_) = Just $ MatchAcct True $ accountNameToAccountOnlyRegex a
|
||||||
inAccountMatcher (QueryOptInAcctSubs a:_) = Just $ MatchAcct True $ accountNameToAccountRegex a
|
inAccountMatcher (QueryOptInAcctSubs a:_) = Just $ MatchAcct True $ accountNameToAccountRegex a
|
||||||
|
inAccountMatcher (QueryOptInAcctSubsOnly a:_) = Just $ MatchAcct True $ accountNameToAccountRegex a
|
||||||
|
|
||||||
|
-- | A matcher restricting the account(s) to be shown in the sidebar, if any.
|
||||||
|
-- Just looks at the first query option.
|
||||||
|
showAccountMatcher :: [QueryOpt] -> Maybe Matcher
|
||||||
|
showAccountMatcher (QueryOptInAcctSubsOnly a:_) = Just $ MatchAcct True $ accountNameToAccountRegex a
|
||||||
|
showAccountMatcher _ = Nothing
|
||||||
|
|
||||||
-- | Convert a query expression containing zero or more space-separated
|
-- | Convert a query expression containing zero or more space-separated
|
||||||
-- terms to a matcher and zero or more query options. A query term is either:
|
-- terms to a matcher and zero or more query options. A query term is either:
|
||||||
@ -104,6 +115,7 @@ defaultprefix = "acct"
|
|||||||
|
|
||||||
-- | Parse a single query term as either a matcher or a query option.
|
-- | Parse a single query term as either a matcher or a query option.
|
||||||
parseMatcher :: Day -> String -> Either Matcher QueryOpt
|
parseMatcher :: Day -> String -> Either Matcher QueryOpt
|
||||||
|
parseMatcher _ ('i':'n':'a':'c':'c':'t':'s':'o':'n':'l':'y':':':s) = Right $ QueryOptInAcctSubsOnly s
|
||||||
parseMatcher _ ('i':'n':'a':'c':'c':'t':'s':':':s) = Right $ QueryOptInAcctSubs s
|
parseMatcher _ ('i':'n':'a':'c':'c':'t':'s':':':s) = Right $ QueryOptInAcctSubs s
|
||||||
parseMatcher _ ('i':'n':'a':'c':'c':'t':':':s) = Right $ QueryOptInAcct s
|
parseMatcher _ ('i':'n':'a':'c':'c':'t':':':s) = Right $ QueryOptInAcct s
|
||||||
parseMatcher d ('n':'o':'t':':':s) = case parseMatcher d $ quoteIfSpaced s of
|
parseMatcher d ('n':'o':'t':':':s) = case parseMatcher d $ quoteIfSpaced s of
|
||||||
|
|||||||
@ -133,11 +133,13 @@ accountUrl r a = (r, [("q",pack $ accountQuery a)])
|
|||||||
|
|
||||||
-- | Render a balance report as HTML.
|
-- | Render a balance report as HTML.
|
||||||
balanceReportAsHtml :: [Opt] -> ViewData -> BalanceReport -> Hamlet AppRoute
|
balanceReportAsHtml :: [Opt] -> ViewData -> BalanceReport -> Hamlet AppRoute
|
||||||
balanceReportAsHtml _ vd@VD{here=here,q=q,m=m,qopts=qopts,j=j} (items,total) = $(Settings.hamletFile "balancereport")
|
balanceReportAsHtml _ vd@VD{here=here,q=q,m=m,qopts=qopts,j=j} (items',total) = $(Settings.hamletFile "balancereport")
|
||||||
where
|
where
|
||||||
l = journalToLedger nullfilterspec j
|
l = journalToLedger nullfilterspec j
|
||||||
inacctmatcher = inAccountMatcher qopts
|
inacctmatcher = inAccountMatcher qopts
|
||||||
|
showacctmatcher = showAccountMatcher qopts
|
||||||
allaccts = isNothing inacctmatcher
|
allaccts = isNothing inacctmatcher
|
||||||
|
items = maybe items' (\m -> filter (matchesAccount m . \(a,_,_,_)->a) items') showacctmatcher
|
||||||
itemAsHtml :: ViewData -> BalanceReportItem -> Hamlet AppRoute
|
itemAsHtml :: ViewData -> BalanceReportItem -> Hamlet AppRoute
|
||||||
itemAsHtml VD{here=here,q=q} (acct, adisplay, aindent, abal) = $(Settings.hamletFile "balancereportitem")
|
itemAsHtml VD{here=here,q=q} (acct, adisplay, aindent, abal) = $(Settings.hamletFile "balancereportitem")
|
||||||
where
|
where
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user