refactor
This commit is contained in:
		
							parent
							
								
									e09ac0cb53
								
							
						
					
					
						commit
						c8cd88ba5f
					
				| @ -28,6 +28,46 @@ import Text.ParserCombinators.Parsec | |||||||
| import Test.HUnit | import Test.HUnit | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | {- | | ||||||
|  | A set of data definitions and account-matching patterns sufficient to | ||||||
|  | convert a particular CSV data file into meaningful ledger transactions. See above. | ||||||
|  | -} | ||||||
|  | data CsvRules = CsvRules { | ||||||
|  |       dateField :: Maybe FieldPosition, | ||||||
|  |       statusField :: Maybe FieldPosition, | ||||||
|  |       codeField :: Maybe FieldPosition, | ||||||
|  |       descriptionField :: Maybe FieldPosition, | ||||||
|  |       amountField :: Maybe FieldPosition, | ||||||
|  |       currencyField :: Maybe FieldPosition, | ||||||
|  |       baseCurrency :: Maybe String, | ||||||
|  |       baseAccount :: AccountName, | ||||||
|  |       accountRules :: [AccountRule] | ||||||
|  | } deriving (Show, Eq) | ||||||
|  | 
 | ||||||
|  | nullrules = CsvRules { | ||||||
|  |       dateField=Nothing, | ||||||
|  |       statusField=Nothing, | ||||||
|  |       codeField=Nothing, | ||||||
|  |       descriptionField=Nothing, | ||||||
|  |       amountField=Nothing, | ||||||
|  |       currencyField=Nothing, | ||||||
|  |       baseCurrency=Nothing, | ||||||
|  |       baseAccount="unknown", | ||||||
|  |       accountRules=[] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type FieldPosition = Int | ||||||
|  | 
 | ||||||
|  | type AccountRule = ( | ||||||
|  |    [(String, Maybe String)] -- list of regex match patterns with optional replacements | ||||||
|  |   ,AccountName              -- account name to use for a transaction matching this rule | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | type CsvRecord = [String] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | Read the CSV file named as an argument and print equivalent ledger transactions, | ||||||
|  | -- using/creating a .rules file. | ||||||
| convert :: [Opt] -> [String] -> Ledger -> IO () | convert :: [Opt] -> [String] -> Ledger -> IO () | ||||||
| convert opts args _ = do | convert opts args _ = do | ||||||
|   when (null args) $ error "please specify a csv data file." |   when (null args) $ error "please specify a csv data file." | ||||||
| @ -97,43 +137,6 @@ initialRulesFileContent = | |||||||
|     "(TO|FROM) SAVINGS\n" ++ |     "(TO|FROM) SAVINGS\n" ++ | ||||||
|     "assets:bank:savings\n" |     "assets:bank:savings\n" | ||||||
| 
 | 
 | ||||||
| {- | |  | ||||||
| A set of data definitions and account-matching patterns sufficient to |  | ||||||
| convert a particular CSV data file into meaningful ledger transactions. See above. |  | ||||||
| -} |  | ||||||
| data CsvRules = CsvRules { |  | ||||||
|       dateField :: Maybe FieldPosition, |  | ||||||
|       statusField :: Maybe FieldPosition, |  | ||||||
|       codeField :: Maybe FieldPosition, |  | ||||||
|       descriptionField :: Maybe FieldPosition, |  | ||||||
|       amountField :: Maybe FieldPosition, |  | ||||||
|       currencyField :: Maybe FieldPosition, |  | ||||||
|       baseCurrency :: Maybe String, |  | ||||||
|       baseAccount :: AccountName, |  | ||||||
|       accountRules :: [AccountRule] |  | ||||||
| } deriving (Show, Eq) |  | ||||||
| 
 |  | ||||||
| nullrules = CsvRules { |  | ||||||
|       dateField=Nothing, |  | ||||||
|       statusField=Nothing, |  | ||||||
|       codeField=Nothing, |  | ||||||
|       descriptionField=Nothing, |  | ||||||
|       amountField=Nothing, |  | ||||||
|       currencyField=Nothing, |  | ||||||
|       baseCurrency=Nothing, |  | ||||||
|       baseAccount="unknown", |  | ||||||
|       accountRules=[] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type FieldPosition = Int |  | ||||||
| 
 |  | ||||||
| type AccountRule = ( |  | ||||||
|    [(String, Maybe String)] -- list of regex match patterns with optional replacements |  | ||||||
|   ,AccountName              -- account name to use for a transaction matching this rule |  | ||||||
|   ) |  | ||||||
| 
 |  | ||||||
| type CsvRecord = [String] |  | ||||||
| 
 |  | ||||||
| -- rules file parser | -- rules file parser | ||||||
| 
 | 
 | ||||||
| parseCsvRulesFile :: FilePath -> IO (Either ParseError CsvRules) | parseCsvRulesFile :: FilePath -> IO (Either ParseError CsvRules) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user