consolidate register command code, make it do filtering
This commit is contained in:
		
							parent
							
								
									b9b9ce7d51
								
							
						
					
					
						commit
						ce3eeb80b6
					
				| @ -37,33 +37,4 @@ accountNamesFromTransactions ts = nub $ map account ts | ||||
| sumTransactions :: [Transaction] -> Amount | ||||
| sumTransactions = sum . map amount | ||||
| 
 | ||||
| -- | for register command  | ||||
| 
 | ||||
| showTransactionsWithBalances :: [Transaction] -> Amount -> String | ||||
| showTransactionsWithBalances [] _ = [] | ||||
| showTransactionsWithBalances ts b = | ||||
|     unlines $ showTransactionsWithBalances' ts dummyt b | ||||
|         where | ||||
|           dummyt = Transaction 0 "" "" "" nullamt | ||||
|           showTransactionsWithBalances' [] _ _ = [] | ||||
|           showTransactionsWithBalances' (t:ts) tprev b = | ||||
|               (if sameentry t tprev | ||||
|                then [showTransactionAndBalance t b'] | ||||
|                else [showTransactionDescriptionAndBalance t b']) | ||||
|               ++ (showTransactionsWithBalances' ts t b') | ||||
|                   where  | ||||
|                     b' = b + (amount t) | ||||
|                     sameentry (Transaction e1 _ _ _ _) (Transaction e2 _ _ _ _) = e1 == e2 | ||||
| 
 | ||||
| showTransactionDescriptionAndBalance :: Transaction -> Amount -> String | ||||
| showTransactionDescriptionAndBalance t b = | ||||
|     (showEntryDescription $ Entry (date t) False "" (description t) "" [] "")  | ||||
|     ++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b) | ||||
| 
 | ||||
| showTransactionAndBalance :: Transaction -> Amount -> String | ||||
| showTransactionAndBalance t b = | ||||
|     (replicate 32 ' ') ++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b) | ||||
| 
 | ||||
| showBalance :: Amount -> String | ||||
| showBalance b = printf " %12s" (showAmountRoundedOrZero b) | ||||
| 
 | ||||
| nulltxn = Transaction 0 "" "" "" nullamt | ||||
|  | ||||
| @ -15,7 +15,36 @@ registercommandtests = TestList [ | ||||
| 
 | ||||
| -- | Print a register report. | ||||
| printregister :: [Opt] -> [String] -> Ledger -> IO () | ||||
| printregister opts args l = putStr $ showTransactionsWithBalances txns startingbalance | ||||
| printregister opts args l = putStr $ showTransactionsWithBalances opts args l | ||||
| 
 | ||||
| showTransactionsWithBalances :: [Opt] -> [String] -> Ledger -> String | ||||
| showTransactionsWithBalances opts args l = | ||||
|     unlines $ showTransactionsWithBalances' ts nulltxn startingbalance | ||||
|         where | ||||
|       txns = sortBy (comparing date) $ ledgerTransactions l | ||||
|           ts = filter matchtxn $ ledgerTransactions l | ||||
|           matchtxn (Transaction _ _ desc acct _) = (containsRegex (regexFor apats) acct) | ||||
|           pats@(apats,dpats) = parseAccountDescriptionArgs args | ||||
|           startingbalance = nullamt{precision=lprecision l} | ||||
|           showTransactionsWithBalances' :: [Transaction] -> Transaction -> Amount -> [String] | ||||
|           showTransactionsWithBalances' [] _ _ = [] | ||||
|           showTransactionsWithBalances' (t:ts) tprev b = | ||||
|               (if sameentry t tprev | ||||
|                then [showTransactionAndBalance t b'] | ||||
|                else [showTransactionDescriptionAndBalance t b']) | ||||
|               ++ (showTransactionsWithBalances' ts t b') | ||||
|                   where  | ||||
|                     b' = b + (amount t) | ||||
|                     sameentry (Transaction e1 _ _ _ _) (Transaction e2 _ _ _ _) = e1 == e2 | ||||
| 
 | ||||
| showTransactionDescriptionAndBalance :: Transaction -> Amount -> String | ||||
| showTransactionDescriptionAndBalance t b = | ||||
|     (showEntryDescription $ Entry (date t) False "" (description t) "" [] "")  | ||||
|     ++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b) | ||||
| 
 | ||||
| showTransactionAndBalance :: Transaction -> Amount -> String | ||||
| showTransactionAndBalance t b = | ||||
|     (replicate 32 ' ') ++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b) | ||||
| 
 | ||||
| showBalance :: Amount -> String | ||||
| showBalance b = printf " %12s" (showAmountRoundedOrZero b) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user