This is done to be more consistent with future field naming conventions, and to make automatic generation of lenses simpler. See discussion in \#1545. rsOpts -> _rsReportOpts rsToday -> _rsDay rsQuery -> _rsQuery rsQueryOpts -> _rsQueryOpts
49 lines
1.6 KiB
Haskell
49 lines
1.6 KiB
Haskell
{-|
|
|
|
|
The @payees@ command lists all unique payees (description part before a |) seen in transactions, sorted alphabetically.
|
|
|
|
-}
|
|
|
|
{-# LANGUAGE MultiWayIf #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE ScopedTypeVariables #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Hledger.Cli.Commands.Payees (
|
|
payeesmode
|
|
,payees
|
|
) where
|
|
|
|
import qualified Data.Set as S
|
|
import qualified Data.Text.IO as T
|
|
import System.Console.CmdArgs.Explicit as C
|
|
|
|
import Hledger
|
|
import Hledger.Cli.CliOptions
|
|
|
|
|
|
-- | Command line options for this command.
|
|
payeesmode = hledgerCommandMode
|
|
$(embedFileRelative "Hledger/Cli/Commands/Payees.txt")
|
|
[flagNone ["declared"] (setboolopt "declared") "show payees declared with payee directives"
|
|
,flagNone ["used"] (setboolopt "used") "show payees referenced by transactions"
|
|
]
|
|
[generalflagsgroup1]
|
|
hiddenflags
|
|
([], Just $ argsFlag "[QUERY]")
|
|
|
|
-- | The payees command.
|
|
payees :: CliOpts -> Journal -> IO ()
|
|
payees CliOpts{rawopts_=rawopts, reportspec_=ReportSpec{_rsQuery=query}} j = do
|
|
let
|
|
declared = boolopt "declared" rawopts
|
|
used = boolopt "used" rawopts
|
|
-- XXX matchesPayee is currently an alias for matchesDescription, not sure if it matters
|
|
matcheddeclaredpayees = S.fromList . filter (matchesPayeeWIP query) $ journalPayeesDeclared j
|
|
matchedusedpayees = S.fromList . map transactionPayee $ filter (matchesTransaction query) $ jtxns j
|
|
payees =
|
|
if | declared && not used -> matcheddeclaredpayees
|
|
| not declared && used -> matchedusedpayees
|
|
| otherwise -> matcheddeclaredpayees <> matchedusedpayees
|
|
mapM_ T.putStrLn payees
|