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 =  | cacheLedger acctpats descpats l =  | ||||||
|     let  |     let  | ||||||
|         (acctpats', descpats') = (wilddefault acctpats, wilddefault descpats) |         (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 |         ans = flatten ant | ||||||
|         filterTxnsByAcctpats ts = concat [filter (matchTransactionAccount $ mkRegex r) ts | r <- acctpats'] |         filterTxnsByAcctpats ts = concat [filter (matchTransactionAccount $ mkRegex r) ts | r <- acctpats'] | ||||||
|         allts = rawLedgerTransactions l |         allts = rawLedgerTransactions l' | ||||||
|         ts = filterTxnsByAcctpats allts |         ts = filterTxnsByAcctpats allts | ||||||
|         sortedts = sortBy (comparing account) ts |         sortedts = sortBy (comparing account) ts | ||||||
|         groupedts = groupBy (\t1 t2 -> account t1 == account t2) sortedts |         groupedts = groupBy (\t1 t2 -> account t1 == account t2) sortedts | ||||||
| @ -61,7 +62,27 @@ cacheLedger acctpats descpats l = | |||||||
|                (Map.fromList [(a,nullamt) | a <- ans]) |                (Map.fromList [(a,nullamt) | a <- ans]) | ||||||
|         amap = Map.fromList [(a, Account a (tmap ! a) (bmap ! a)) | a <- ans] |         amap = Map.fromList [(a, Account a (tmap ! a) (bmap ! a)) | a <- ans] | ||||||
|     in |     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 :: Ledger -> [AccountName] | ||||||
| accountnames l = flatten $ accountnametree l | accountnames l = flatten $ accountnametree l | ||||||
| @ -90,11 +111,9 @@ ledgerTransactionsMatching (acctpats,descpats) l = | |||||||
|       descregexps = map mkRegex $ wilddefault descpats |       descregexps = map mkRegex $ wilddefault descpats | ||||||
| 
 | 
 | ||||||
| ledgerAccountTreeMatching :: Ledger -> [String] -> Bool -> Int -> Tree Account | ledgerAccountTreeMatching :: Ledger -> [String] -> Bool -> Int -> Tree Account | ||||||
| ledgerAccountTreeMatching l [] showsubs maxdepth =  |  | ||||||
|     ledgerAccountTreeMatching l [".*"] showsubs maxdepth |  | ||||||
| ledgerAccountTreeMatching l acctpats showsubs maxdepth =  | ledgerAccountTreeMatching l acctpats showsubs maxdepth =  | ||||||
|     addDataToAccountNameTree l $  |     addDataToAccountNameTree l $  | ||||||
|     filterAccountNameTree acctpats showsubs maxdepth $  |     filterAccountNameTree (wilddefault acctpats) showsubs maxdepth $  | ||||||
|     accountnametree l |     accountnametree l | ||||||
| 
 | 
 | ||||||
| addDataToAccountNameTree :: Ledger -> Tree AccountName -> Tree Account | addDataToAccountNameTree :: Ledger -> Tree AccountName -> Tree Account | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								hledger.hs
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								hledger.hs
									
									
									
									
									
								
							| @ -28,7 +28,7 @@ main = do | |||||||
|             | Help `elem` opts            = putStr usage |             | Help `elem` opts            = putStr usage | ||||||
|             | cmd `isPrefixOf` "register" = register opts acctpats descpats |             | cmd `isPrefixOf` "register" = register opts acctpats descpats | ||||||
|             | cmd `isPrefixOf` "balance"  = balance 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 |             | cmd `isPrefixOf` "test"     = test | ||||||
|             | otherwise                   = putStr usage |             | otherwise                   = putStr usage | ||||||
| 
 | 
 | ||||||
| @ -40,6 +40,14 @@ test = do | |||||||
|   Tests.quickcheck |   Tests.quickcheck | ||||||
|   return () |   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 :: [Flag] -> [String] -> [String] -> IO () | ||||||
| register opts acctpats descpats = do  | register opts acctpats descpats = do  | ||||||
|   doWithLedger opts acctpats descpats printregister |   doWithLedger opts acctpats descpats printregister | ||||||
| @ -49,17 +57,9 @@ register opts acctpats descpats = do | |||||||
|                      (sortBy (comparing date) (ledgerTransactionsMatching (acctpats, descpats) l)) |                      (sortBy (comparing date) (ledgerTransactionsMatching (acctpats, descpats) l)) | ||||||
|                      nullamt{precision=lprecision 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 :: [Flag] -> [String] -> [String] -> IO () | ||||||
| balance opts acctpats _ = do  -- XXX descpats | balance opts acctpats descpats = do | ||||||
|   doWithLedger opts acctpats [] printbalance |   doWithLedger opts acctpats descpats printbalance | ||||||
|     where |     where | ||||||
|       printbalance l = |       printbalance l = | ||||||
|           putStr $ showLedgerAccounts l acctpats showsubs maxdepth |           putStr $ showLedgerAccounts l acctpats showsubs maxdepth | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user