feat: ui: add "Cash accounts" screen
This commit is contained in:
parent
13cd01ca36
commit
a4b3476e2f
@ -39,6 +39,7 @@ import Hledger.UI.UIState (uiState, getDepth)
|
|||||||
import Hledger.UI.UIUtils (dbguiEv, showScreenStack, showScreenSelection)
|
import Hledger.UI.UIUtils (dbguiEv, showScreenStack, showScreenSelection)
|
||||||
import Hledger.UI.MenuScreen
|
import Hledger.UI.MenuScreen
|
||||||
import Hledger.UI.AccountsScreen
|
import Hledger.UI.AccountsScreen
|
||||||
|
import Hledger.UI.CashScreen
|
||||||
import Hledger.UI.BalancesheetScreen
|
import Hledger.UI.BalancesheetScreen
|
||||||
import Hledger.UI.IncomestatementScreen
|
import Hledger.UI.IncomestatementScreen
|
||||||
import Hledger.UI.RegisterScreen
|
import Hledger.UI.RegisterScreen
|
||||||
@ -298,6 +299,7 @@ uiHandle ev = do
|
|||||||
case aScreen ui of
|
case aScreen ui of
|
||||||
MS _ -> msHandle ev
|
MS _ -> msHandle ev
|
||||||
AS _ -> asHandle ev
|
AS _ -> asHandle ev
|
||||||
|
CS _ -> csHandle ev
|
||||||
BS _ -> bsHandle ev
|
BS _ -> bsHandle ev
|
||||||
IS _ -> isHandle ev
|
IS _ -> isHandle ev
|
||||||
RS _ -> rsHandle ev
|
RS _ -> rsHandle ev
|
||||||
@ -309,6 +311,7 @@ uiDraw ui =
|
|||||||
case aScreen ui of
|
case aScreen ui of
|
||||||
MS _ -> msDraw ui
|
MS _ -> msDraw ui
|
||||||
AS _ -> asDraw ui
|
AS _ -> asDraw ui
|
||||||
|
CS _ -> csDraw ui
|
||||||
BS _ -> bsDraw ui
|
BS _ -> bsDraw ui
|
||||||
IS _ -> isDraw ui
|
IS _ -> isDraw ui
|
||||||
RS _ -> rsDraw ui
|
RS _ -> rsDraw ui
|
||||||
|
|||||||
@ -258,6 +258,7 @@ msEnterScreen d scrname ui@UIState{ajournal=j, aopts=uopts} = do
|
|||||||
let
|
let
|
||||||
scr = case scrname of
|
scr = case scrname of
|
||||||
Accounts -> asNew uopts d j Nothing
|
Accounts -> asNew uopts d j Nothing
|
||||||
|
CashScreen -> csNew uopts d j Nothing
|
||||||
Balancesheet -> bsNew uopts d j Nothing
|
Balancesheet -> bsNew uopts d j Nothing
|
||||||
Incomestatement -> isNew uopts d j Nothing
|
Incomestatement -> isNew uopts d j Nothing
|
||||||
put' $ pushScreen scr ui
|
put' $ pushScreen scr ui
|
||||||
|
|||||||
@ -38,6 +38,7 @@ uiflags = [
|
|||||||
,flagReq ["theme"] (\s opts -> Right $ setopt "theme" s opts) "THEME" ("use this custom display theme ("++intercalate ", " themeNames++")")
|
,flagReq ["theme"] (\s opts -> Right $ setopt "theme" s opts) "THEME" ("use this custom display theme ("++intercalate ", " themeNames++")")
|
||||||
,flagNone ["menu"] (setboolopt "menu") "start in the menu screen"
|
,flagNone ["menu"] (setboolopt "menu") "start in the menu screen"
|
||||||
,flagNone ["all"] (setboolopt "all") "start in the all accounts screen"
|
,flagNone ["all"] (setboolopt "all") "start in the all accounts screen"
|
||||||
|
,flagNone ["cash"] (setboolopt "cash") "start in the cash accounts screen"
|
||||||
,flagNone ["bs"] (setboolopt "bs") "start in the balance sheet accounts screen"
|
,flagNone ["bs"] (setboolopt "bs") "start in the balance sheet accounts screen"
|
||||||
,flagNone ["is"] (setboolopt "is") "start in the income statement accounts screen"
|
,flagNone ["is"] (setboolopt "is") "start in the income statement accounts screen"
|
||||||
,flagReq ["register"] (\s opts -> Right $ setopt "register" s opts) "ACCTREGEX" "start in the (first matched) account's register"
|
,flagReq ["register"] (\s opts -> Right $ setopt "register" s opts) "ACCTREGEX" "start in the (first matched) account's register"
|
||||||
@ -57,7 +58,7 @@ uiflags = [
|
|||||||
--uimode :: Mode RawOpts
|
--uimode :: Mode RawOpts
|
||||||
uimode = (mode "hledger-ui" (setopt "command" "ui" def)
|
uimode = (mode "hledger-ui" (setopt "command" "ui" def)
|
||||||
"browse accounts, postings and entries in a full-window TUI"
|
"browse accounts, postings and entries in a full-window TUI"
|
||||||
(argsFlag "[--menu|--all|--bs|--is|--register=ACCT] [QUERY]") []){
|
(argsFlag "[--menu|--all|--cash|--bs|--is|--register=ACCT] [QUERY]") []){
|
||||||
modeGroupFlags = Group {
|
modeGroupFlags = Group {
|
||||||
groupUnnamed = uiflags
|
groupUnnamed = uiflags
|
||||||
,groupHidden = hiddenflags
|
,groupHidden = hiddenflags
|
||||||
|
|||||||
@ -24,6 +24,8 @@ module Hledger.UI.UIScreens
|
|||||||
,asUpdate
|
,asUpdate
|
||||||
,bsNew
|
,bsNew
|
||||||
,bsUpdate
|
,bsUpdate
|
||||||
|
,csNew
|
||||||
|
,csUpdate
|
||||||
,isNew
|
,isNew
|
||||||
,isUpdate
|
,isUpdate
|
||||||
,rsNew
|
,rsNew
|
||||||
@ -52,6 +54,7 @@ screenUpdate :: UIOpts -> Day -> Journal -> Screen -> Screen
|
|||||||
screenUpdate opts d j = \case
|
screenUpdate opts d j = \case
|
||||||
MS sst -> MS $ msUpdate sst -- opts d j ass
|
MS sst -> MS $ msUpdate sst -- opts d j ass
|
||||||
AS sst -> AS $ asUpdate opts d j sst
|
AS sst -> AS $ asUpdate opts d j sst
|
||||||
|
CS sst -> CS $ csUpdate opts d j sst
|
||||||
BS sst -> BS $ bsUpdate opts d j sst
|
BS sst -> BS $ bsUpdate opts d j sst
|
||||||
IS sst -> IS $ isUpdate opts d j sst
|
IS sst -> IS $ isUpdate opts d j sst
|
||||||
RS sst -> RS $ rsUpdate opts d j sst
|
RS sst -> RS $ rsUpdate opts d j sst
|
||||||
@ -82,12 +85,13 @@ msNew =
|
|||||||
_mssList = list MenuList (V.fromList [
|
_mssList = list MenuList (V.fromList [
|
||||||
-- keep initial screen stack setup in UI.Main synced with these
|
-- keep initial screen stack setup in UI.Main synced with these
|
||||||
MenuScreenItem "All accounts" Accounts
|
MenuScreenItem "All accounts" Accounts
|
||||||
|
,MenuScreenItem "Cash accounts" CashScreen
|
||||||
,MenuScreenItem "Balance sheet accounts" Balancesheet
|
,MenuScreenItem "Balance sheet accounts" Balancesheet
|
||||||
,MenuScreenItem "Income statement accounts" Incomestatement
|
,MenuScreenItem "Income statement accounts" Incomestatement
|
||||||
]) 1
|
]) 1
|
||||||
& listMoveTo 1 -- select balance sheet accounts screen at startup (currently this screen is constructed only then)
|
& listMoveTo defaultscreenitem
|
||||||
,_mssUnused = ()
|
,_mssUnused = ()
|
||||||
}
|
} where defaultscreenitem = 2 -- select this one at startup (currently this screen is constructed only then)
|
||||||
|
|
||||||
-- | Update a menu screen. Currently a no-op since menu screen
|
-- | Update a menu screen. Currently a no-op since menu screen
|
||||||
-- has unchanging content.
|
-- has unchanging content.
|
||||||
@ -177,6 +181,21 @@ bsUpdate uopts d = dbgui "bsUpdate" .
|
|||||||
roptsmod ropts = ropts{balanceaccum_=Historical} -- always show historical end balances
|
roptsmod ropts = ropts{balanceaccum_=Historical} -- always show historical end balances
|
||||||
extraquery = Type [Asset,Liability,Equity] -- restrict to balance sheet accounts
|
extraquery = Type [Asset,Liability,Equity] -- restrict to balance sheet accounts
|
||||||
|
|
||||||
|
-- | Construct a cash accounts screen listing the appropriate set of accounts,
|
||||||
|
-- with the appropriate one selected.
|
||||||
|
-- Screen-specific arguments: the account to select if any.
|
||||||
|
csNew :: UIOpts -> Day -> Journal -> Maybe AccountName -> Screen
|
||||||
|
csNew uopts d j macct = dbgui "csNew" $ CS $ csUpdate uopts d j $ nullass macct
|
||||||
|
|
||||||
|
-- | Update a balance sheet screen's state from these options, reporting date, and journal.
|
||||||
|
csUpdate :: UIOpts -> Day -> Journal -> AccountsScreenState -> AccountsScreenState
|
||||||
|
csUpdate uopts d = dbgui "csUpdate" .
|
||||||
|
asUpdateHelper rspec d copts roptsmod extraquery
|
||||||
|
where
|
||||||
|
UIOpts{uoCliOpts=copts@CliOpts{reportspec_=rspec}} = uopts
|
||||||
|
roptsmod ropts = ropts{balanceaccum_=Historical} -- always show historical end balances
|
||||||
|
extraquery = Type [Cash] -- restrict to cash accounts
|
||||||
|
|
||||||
-- | Construct an income statement screen listing the appropriate set of accounts,
|
-- | Construct an income statement screen listing the appropriate set of accounts,
|
||||||
-- with the appropriate one selected.
|
-- with the appropriate one selected.
|
||||||
-- Screen-specific arguments: the account to select if any.
|
-- Screen-specific arguments: the account to select if any.
|
||||||
|
|||||||
@ -101,6 +101,7 @@ data Name =
|
|||||||
-- Unique names for screens the user can navigate to from the menu.
|
-- Unique names for screens the user can navigate to from the menu.
|
||||||
data ScreenName =
|
data ScreenName =
|
||||||
Accounts
|
Accounts
|
||||||
|
| CashScreen
|
||||||
| Balancesheet
|
| Balancesheet
|
||||||
| Incomestatement
|
| Incomestatement
|
||||||
deriving (Ord, Show, Eq)
|
deriving (Ord, Show, Eq)
|
||||||
@ -176,6 +177,7 @@ data ScreenName =
|
|||||||
data Screen =
|
data Screen =
|
||||||
MS MenuScreenState
|
MS MenuScreenState
|
||||||
| AS AccountsScreenState
|
| AS AccountsScreenState
|
||||||
|
| CS AccountsScreenState
|
||||||
| BS AccountsScreenState
|
| BS AccountsScreenState
|
||||||
| IS AccountsScreenState
|
| IS AccountsScreenState
|
||||||
| RS RegisterScreenState
|
| RS RegisterScreenState
|
||||||
@ -192,6 +194,7 @@ data AccountsLikeScreen = ALS (AccountsScreenState -> Screen) AccountsScreenStat
|
|||||||
toAccountsLikeScreen :: Screen -> Maybe AccountsLikeScreen
|
toAccountsLikeScreen :: Screen -> Maybe AccountsLikeScreen
|
||||||
toAccountsLikeScreen scr = case scr of
|
toAccountsLikeScreen scr = case scr of
|
||||||
AS ass -> Just $ ALS AS ass
|
AS ass -> Just $ ALS AS ass
|
||||||
|
CS ass -> Just $ ALS CS ass
|
||||||
BS ass -> Just $ ALS BS ass
|
BS ass -> Just $ ALS BS ass
|
||||||
IS ass -> Just $ ALS IS ass
|
IS ass -> Just $ ALS IS ass
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
|||||||
@ -497,6 +497,7 @@ showScreenId :: Screen -> String
|
|||||||
showScreenId = \case
|
showScreenId = \case
|
||||||
MS _ -> "M" -- menu
|
MS _ -> "M" -- menu
|
||||||
AS _ -> "A" -- all accounts
|
AS _ -> "A" -- all accounts
|
||||||
|
CS _ -> "C" -- cash accounts
|
||||||
BS _ -> "B" -- bs accounts
|
BS _ -> "B" -- bs accounts
|
||||||
IS _ -> "I" -- is accounts
|
IS _ -> "I" -- is accounts
|
||||||
RS _ -> "R" -- menu
|
RS _ -> "R" -- menu
|
||||||
@ -516,6 +517,7 @@ showScreenSelection :: Screen -> String
|
|||||||
showScreenSelection = \case
|
showScreenSelection = \case
|
||||||
MS MSS{_mssList} -> "M" ++ (maybe "" show $ listSelected _mssList) -- menu
|
MS MSS{_mssList} -> "M" ++ (maybe "" show $ listSelected _mssList) -- menu
|
||||||
AS ASS{_assList} -> "A" ++ (maybe "" show $ listSelected _assList) -- all accounts
|
AS ASS{_assList} -> "A" ++ (maybe "" show $ listSelected _assList) -- all accounts
|
||||||
|
CS ASS{_assList} -> "C" ++ (maybe "" show $ listSelected _assList) -- cash accounts
|
||||||
BS ASS{_assList} -> "B" ++ (maybe "" show $ listSelected _assList) -- bs accounts
|
BS ASS{_assList} -> "B" ++ (maybe "" show $ listSelected _assList) -- bs accounts
|
||||||
IS ASS{_assList} -> "I" ++ (maybe "" show $ listSelected _assList) -- is accounts
|
IS ASS{_assList} -> "I" ++ (maybe "" show $ listSelected _assList) -- is accounts
|
||||||
RS RSS{_rssList} -> "R" ++ (maybe "" show $ listSelected _rssList) -- menu
|
RS RSS{_rssList} -> "R" ++ (maybe "" show $ listSelected _rssList) -- menu
|
||||||
|
|||||||
@ -67,6 +67,9 @@ Any QUERYARGS are interpreted as a hledger search query which filters the data.
|
|||||||
`--all`
|
`--all`
|
||||||
: start in the all accounts screen
|
: start in the all accounts screen
|
||||||
|
|
||||||
|
`--cash`
|
||||||
|
: start in the cash accounts screen
|
||||||
|
|
||||||
`--bs`
|
`--bs`
|
||||||
: start in the balance sheet accounts screen
|
: start in the balance sheet accounts screen
|
||||||
|
|
||||||
@ -237,17 +240,21 @@ and their end balances on the date shown in the title bar
|
|||||||
(or their balance changes in the period shown in the title bar, toggleable with `H`).
|
(or their balance changes in the period shown in the title bar, toggleable with `H`).
|
||||||
It is like the `hledger balance` command.
|
It is like the `hledger balance` command.
|
||||||
|
|
||||||
|
## Cash accounts
|
||||||
|
|
||||||
|
This screen shows "cash" (ie, liquid asset) accounts (like `hledger balancesheet type:c`),
|
||||||
|
if these can be detected (see [account types](/hledger.html#account-types)).
|
||||||
|
It always shows end balances.
|
||||||
|
|
||||||
## Balance sheet accounts
|
## Balance sheet accounts
|
||||||
|
|
||||||
This screen shows asset, liability and equity accounts, if these can be detected (see [account types](/hledger.html#account-types)).
|
This screen shows asset, liability and equity accounts (like `hledger balancesheetequity`).
|
||||||
It always shows end balances.
|
It always shows end balances.
|
||||||
It is like the `hledger balancesheetequity` command.
|
|
||||||
|
|
||||||
## Income statement accounts
|
## Income statement accounts
|
||||||
|
|
||||||
This screen shows revenue and expense accounts.
|
This screen shows revenue and expense accounts (like `hledger incomestatement`).
|
||||||
It always shows balance changes.
|
It always shows balance changes.
|
||||||
It is like the `hledger incomestatement` command.
|
|
||||||
|
|
||||||
All of these accounts screens work in much the same way:
|
All of these accounts screens work in much the same way:
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user