mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
make print & balance support both account & description patterns
This commit is contained in:
parent
ec1b5b9bce
commit
11c96dd042
31
Ledger.hs
31
Ledger.hs
@ -42,10 +42,11 @@ cacheLedger :: [String] -> [String] -> LedgerFile -> Ledger
|
||||
cacheLedger acctpats descpats l =
|
||||
let
|
||||
(acctpats', descpats') = (wilddefault acctpats, wilddefault descpats)
|
||||
ant = filterAccountNameTree acctpats' True 9999 $ rawLedgerAccountNameTree l
|
||||
l' = filterLedgerEntries acctpats descpats l
|
||||
ant = filterAccountNameTree acctpats' True 9999 $ rawLedgerAccountNameTree l'
|
||||
ans = flatten ant
|
||||
filterTxnsByAcctpats ts = concat [filter (matchTransactionAccount $ mkRegex r) ts | r <- acctpats']
|
||||
allts = rawLedgerTransactions l
|
||||
allts = rawLedgerTransactions l'
|
||||
ts = filterTxnsByAcctpats allts
|
||||
sortedts = sortBy (comparing account) ts
|
||||
groupedts = groupBy (\t1 t2 -> account t1 == account t2) sortedts
|
||||
@ -61,7 +62,27 @@ cacheLedger acctpats descpats l =
|
||||
(Map.fromList [(a,nullamt) | a <- ans])
|
||||
amap = Map.fromList [(a, Account a (tmap ! a) (bmap ! a)) | a <- ans]
|
||||
in
|
||||
Ledger l ant amap lprecision
|
||||
Ledger l' ant amap lprecision
|
||||
|
||||
filterLedgerEntries :: [String] -> [String] -> LedgerFile -> LedgerFile
|
||||
filterLedgerEntries acctpats descpats (LedgerFile ms ps es) =
|
||||
LedgerFile ms ps es'
|
||||
where
|
||||
es' = intersect
|
||||
(concat [filter (matchacct r) es | r <- acctregexps])
|
||||
(concat [filter (matchdesc r) es | r <- descregexps])
|
||||
acctregexps = map mkRegex $ wilddefault acctpats
|
||||
descregexps = map mkRegex $ wilddefault descpats
|
||||
matchacct :: Regex -> LedgerEntry -> Bool
|
||||
matchacct r e = any (matchtxn r) (etransactions e)
|
||||
matchtxn :: Regex -> LedgerTransaction -> Bool
|
||||
matchtxn r t = case matchRegex r (taccount t) of
|
||||
Nothing -> False
|
||||
otherwise -> True
|
||||
matchdesc :: Regex -> LedgerEntry -> Bool
|
||||
matchdesc r e = case matchRegex r (edescription e) of
|
||||
Nothing -> False
|
||||
otherwise -> True
|
||||
|
||||
accountnames :: Ledger -> [AccountName]
|
||||
accountnames l = flatten $ accountnametree l
|
||||
@ -90,11 +111,9 @@ ledgerTransactionsMatching (acctpats,descpats) l =
|
||||
descregexps = map mkRegex $ wilddefault descpats
|
||||
|
||||
ledgerAccountTreeMatching :: Ledger -> [String] -> Bool -> Int -> Tree Account
|
||||
ledgerAccountTreeMatching l [] showsubs maxdepth =
|
||||
ledgerAccountTreeMatching l [".*"] showsubs maxdepth
|
||||
ledgerAccountTreeMatching l acctpats showsubs maxdepth =
|
||||
addDataToAccountNameTree l $
|
||||
filterAccountNameTree acctpats showsubs maxdepth $
|
||||
filterAccountNameTree (wilddefault acctpats) showsubs maxdepth $
|
||||
accountnametree l
|
||||
|
||||
addDataToAccountNameTree :: Ledger -> Tree AccountName -> Tree Account
|
||||
|
22
hledger.hs
22
hledger.hs
@ -28,7 +28,7 @@ main = do
|
||||
| Help `elem` opts = putStr usage
|
||||
| cmd `isPrefixOf` "register" = register opts acctpats descpats
|
||||
| cmd `isPrefixOf` "balance" = balance opts acctpats descpats
|
||||
| cmd `isPrefixOf` "print" = printcmd opts
|
||||
| cmd `isPrefixOf` "print" = printcmd opts acctpats descpats
|
||||
| cmd `isPrefixOf` "test" = test
|
||||
| otherwise = putStr usage
|
||||
|
||||
@ -40,6 +40,14 @@ test = do
|
||||
Tests.quickcheck
|
||||
return ()
|
||||
|
||||
printcmd :: [Flag] -> [String] -> [String] -> IO ()
|
||||
printcmd opts acctpats descpats = do
|
||||
doWithLedger opts acctpats descpats printentries
|
||||
where
|
||||
printentries l = putStr $ showEntries $ setprecision $ entries $ rawledger l
|
||||
where
|
||||
setprecision = map (entrySetPrecision (lprecision l))
|
||||
|
||||
register :: [Flag] -> [String] -> [String] -> IO ()
|
||||
register opts acctpats descpats = do
|
||||
doWithLedger opts acctpats descpats printregister
|
||||
@ -49,17 +57,9 @@ register opts acctpats descpats = do
|
||||
(sortBy (comparing date) (ledgerTransactionsMatching (acctpats, descpats) l))
|
||||
nullamt{precision=lprecision l}
|
||||
|
||||
printcmd :: [Flag] -> IO () -- XXX acctpats descpats ?
|
||||
printcmd opts = do
|
||||
doWithLedger opts [] [] printentries
|
||||
where
|
||||
printentries l = putStr $ showEntries $ setprecision $ entries $ rawledger l
|
||||
where
|
||||
setprecision = map (entrySetPrecision (lprecision l))
|
||||
|
||||
balance :: [Flag] -> [String] -> [String] -> IO ()
|
||||
balance opts acctpats _ = do -- XXX descpats
|
||||
doWithLedger opts acctpats [] printbalance
|
||||
balance opts acctpats descpats = do
|
||||
doWithLedger opts acctpats descpats printbalance
|
||||
where
|
||||
printbalance l =
|
||||
putStr $ showLedgerAccounts l acctpats showsubs maxdepth
|
||||
|
Loading…
Reference in New Issue
Block a user