feat: accounts: --types shows account types (#1820)
This commit is contained in:
parent
dbbd300aa2
commit
807717805a
@ -151,7 +151,16 @@ data AccountType =
|
|||||||
| Expense
|
| Expense
|
||||||
| Cash -- ^ a subtype of Asset - liquid assets to show in cashflow report
|
| Cash -- ^ a subtype of Asset - liquid assets to show in cashflow report
|
||||||
| Conversion -- ^ a subtype of Equity - account in which to generate conversion postings for transaction prices
|
| Conversion -- ^ a subtype of Equity - account in which to generate conversion postings for transaction prices
|
||||||
deriving (Show,Eq,Ord,Generic)
|
deriving (Eq,Ord,Generic)
|
||||||
|
|
||||||
|
instance Show AccountType where
|
||||||
|
show Asset = "A"
|
||||||
|
show Liability = "L"
|
||||||
|
show Equity = "E"
|
||||||
|
show Revenue = "R"
|
||||||
|
show Expense = "X"
|
||||||
|
show Cash = "C"
|
||||||
|
show Conversion = "V"
|
||||||
|
|
||||||
-- not worth the trouble, letters defined in accountdirectivep for now
|
-- not worth the trouble, letters defined in accountdirectivep for now
|
||||||
--instance Read AccountType
|
--instance Read AccountType
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import System.Console.CmdArgs.Explicit as C
|
|||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
|
import Control.Monad (forM_)
|
||||||
|
|
||||||
|
|
||||||
-- | Command line options for this command.
|
-- | Command line options for this command.
|
||||||
@ -34,6 +35,7 @@ accountsmode = hledgerCommandMode
|
|||||||
$(embedFileRelative "Hledger/Cli/Commands/Accounts.txt")
|
$(embedFileRelative "Hledger/Cli/Commands/Accounts.txt")
|
||||||
([flagNone ["declared"] (setboolopt "declared") "show account names declared with account directives"
|
([flagNone ["declared"] (setboolopt "declared") "show account names declared with account directives"
|
||||||
,flagNone ["used"] (setboolopt "used") "show account names referenced by transactions"
|
,flagNone ["used"] (setboolopt "used") "show account names referenced by transactions"
|
||||||
|
,flagNone ["types"] (setboolopt "types") "also show accounts' types, when known"
|
||||||
]
|
]
|
||||||
++ flattreeflags False ++
|
++ flattreeflags False ++
|
||||||
[flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "flat mode: omit N leading account name parts"
|
[flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "flat mode: omit N leading account name parts"
|
||||||
@ -50,6 +52,7 @@ accounts CliOpts{rawopts_=rawopts, reportspec_=ReportSpec{_rsQuery=query,_rsRepo
|
|||||||
let tree = tree_ ropts
|
let tree = tree_ ropts
|
||||||
declared = boolopt "declared" rawopts
|
declared = boolopt "declared" rawopts
|
||||||
used = boolopt "used" rawopts
|
used = boolopt "used" rawopts
|
||||||
|
types = boolopt "types" rawopts
|
||||||
-- a depth limit will clip and exclude account names later, but we don't want to exclude accounts at this stage
|
-- a depth limit will clip and exclude account names later, but we don't want to exclude accounts at this stage
|
||||||
nodepthq = dbg1 "nodepthq" $ filterQuery (not . queryIsDepth) query
|
nodepthq = dbg1 "nodepthq" $ filterQuery (not . queryIsDepth) query
|
||||||
-- just the acct: part of the query will be reapplied later, after clipping
|
-- just the acct: part of the query will be reapplied later, after clipping
|
||||||
@ -77,12 +80,20 @@ accounts CliOpts{rawopts_=rawopts, reportspec_=ReportSpec{_rsQuery=query,_rsRepo
|
|||||||
map (clipAccountName depth) $ -- clip at depth if specified
|
map (clipAccountName depth) $ -- clip at depth if specified
|
||||||
sortedaccts
|
sortedaccts
|
||||||
|
|
||||||
-- 4. print what remains as a list or tree, maybe applying --drop in the former case
|
-- 4. print what remains as a list or tree, maybe applying --drop in the former case.
|
||||||
mapM_ (T.putStrLn . render) clippedaccts
|
-- With --types, also show the account type.
|
||||||
where
|
let
|
||||||
render a = case accountlistmode_ ropts of
|
-- some contortions here to show types nicely aligned
|
||||||
ALTree -> T.replicate indent " " <> accountLeafName droppedName
|
showName a = case accountlistmode_ ropts of
|
||||||
|
ALTree -> indent <> accountLeafName droppedName
|
||||||
ALFlat -> droppedName
|
ALFlat -> droppedName
|
||||||
where
|
where
|
||||||
indent = 2 * (max 0 (accountNameLevel a - drop_ ropts) - 1)
|
indent = T.replicate (2 * (max 0 (accountNameLevel a - drop_ ropts) - 1)) " "
|
||||||
droppedName = accountNameDrop (drop_ ropts) a
|
droppedName = accountNameDrop (drop_ ropts) a
|
||||||
|
showType a
|
||||||
|
| types = spacer <> " ; type: " <> maybe "" (T.pack . show) (journalAccountType j a)
|
||||||
|
| otherwise = ""
|
||||||
|
where
|
||||||
|
spacer = T.replicate (maxwidth - T.length (showName a)) " "
|
||||||
|
maxwidth = maximum $ map (T.length . showName) clippedaccts
|
||||||
|
forM_ clippedaccts $ \a -> T.putStrLn $ showName a <> showType a
|
||||||
|
|||||||
@ -12,6 +12,9 @@ show the account hierarchy.
|
|||||||
In flat mode you can add `--drop N` to omit the first few account name components.
|
In flat mode you can add `--drop N` to omit the first few account name components.
|
||||||
Account names can be depth-clipped with `depth:N` or `--depth N` or `-N`.
|
Account names can be depth-clipped with `depth:N` or `--depth N` or `-N`.
|
||||||
|
|
||||||
|
With `--types`, it also shows each account's type, if it's known.
|
||||||
|
(See Declaring accounts > Account types.)
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
@ -30,3 +30,12 @@ aa
|
|||||||
$ hledger -f - accounts tag:foo
|
$ hledger -f - accounts tag:foo
|
||||||
a:aa
|
a:aa
|
||||||
|
|
||||||
|
# 6. Show account types.
|
||||||
|
<
|
||||||
|
account asset
|
||||||
|
2022-01-01
|
||||||
|
(unknown) 1
|
||||||
|
|
||||||
|
$ hledger -f - accounts --types
|
||||||
|
asset ; type: A
|
||||||
|
unknown ; type:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user