mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
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 ?
|
||||
data QueryOpt = QueryOptInAcct AccountName -- ^ show an account register focussed on this account
|
||||
| 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
|
||||
-- | QueryOptEffectiveDate -- ^ show effective dates instead of actual dates
|
||||
deriving (Show, Eq)
|
||||
|
||||
-- | The account we are currently focussed on, if any.
|
||||
-- Just looks at the first query option.
|
||||
inAccount :: [QueryOpt] -> Maybe AccountName
|
||||
inAccount [] = Nothing
|
||||
inAccount [] = Nothing
|
||||
inAccount (QueryOptInAcct 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.
|
||||
-- Just looks at the first query option.
|
||||
inAccountMatcher :: [QueryOpt] -> Maybe Matcher
|
||||
inAccountMatcher [] = Nothing
|
||||
inAccountMatcher [] = Nothing
|
||||
inAccountMatcher (QueryOptInAcct a:_) = Just $ MatchAcct True $ accountNameToAccountOnlyRegex 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
|
||||
-- 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.
|
||||
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) = Right $ QueryOptInAcct s
|
||||
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.
|
||||
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
|
||||
l = journalToLedger nullfilterspec j
|
||||
inacctmatcher = inAccountMatcher qopts
|
||||
showacctmatcher = showAccountMatcher qopts
|
||||
allaccts = isNothing inacctmatcher
|
||||
items = maybe items' (\m -> filter (matchesAccount m . \(a,_,_,_)->a) items') showacctmatcher
|
||||
itemAsHtml :: ViewData -> BalanceReportItem -> Hamlet AppRoute
|
||||
itemAsHtml VD{here=here,q=q} (acct, adisplay, aindent, abal) = $(Settings.hamletFile "balancereportitem")
|
||||
where
|
||||
|
Loading…
Reference in New Issue
Block a user