diff options
| author | Benedict Börger <benedict@0xb8000.de> | 2019-04-14 19:12:21 +0200 |
|---|---|---|
| committer | Benedict Börger <benedict@0xb8000.de> | 2019-04-14 19:12:21 +0200 |
| commit | f28e8a59c781f24ed9399268cc2536aad0cf534d (patch) | |
| tree | 5678dd6c12b5849ab15f9d63a49c9424d222390b /src/banking | |
| parent | 7e8656cb6d086f364baeeb79a69a04555a6fd4f6 (diff) | |
[global] update all files
Diffstat (limited to 'src/banking')
| -rw-r--r-- | src/banking/account.rs | 77 | ||||
| -rw-r--r-- | src/banking/asset.rs | 57 | ||||
| -rw-r--r-- | src/banking/mod.rs | 61 |
3 files changed, 136 insertions, 59 deletions
diff --git a/src/banking/account.rs b/src/banking/account.rs new file mode 100644 index 0000000..6994bb4 --- /dev/null +++ b/src/banking/account.rs @@ -0,0 +1,77 @@ +use parsers::csv::CsvFile; + +pub struct Account { + pub name : String, + pub iban : String, + pub transactions : Vec<Transaction>, + pub institute : String +} + +impl Account { + pub fn new(name : String, iban : String, transactions : Vec<String>, institute : String) -> Account { + let mut trans = Vec::new(); + if institute == "Sparkasse" { + // TODO als function/lambda übergeben die konvertierung.. + for trans_file in transactions { + let file = CsvFile::from_file(&trans_file, ";", true); + match file { + Ok(f) => { let mut tran = Transaction::from_sparkasse_csv_file(f); + trans.append(&mut tran); + }, + Err(e) => panic!("account: new: error reading csv transaction file: {}", e) + } + } + } + Account { name : name, iban : iban, transactions : trans, institute : institute } + } +} + +#[derive(Serialize)] +#[derive(Clone)] +pub struct Transaction { + pub sender_name : String, + pub amount : f32, + pub reference : String, + pub date : chrono::NaiveDate +} + +impl Transaction { + pub fn from_sparkasse_csv_file(file : CsvFile) -> Vec<Transaction> { + let mut ret = Vec::new(); + for line in file.iter() { + let mut sender_name_f = String::from(""); + let mut sender_iban_f = String::from(""); + let mut amount_f : f32 = 0.0; + let mut reference_f = String::from(""); + let mut date_f = chrono::NaiveDate::parse_from_str("01.01.2019", "%d.%m.%Y").unwrap(); + match line.get(&String::from("Kontonummer")) { + Some(value) => sender_iban_f = value.to_string(), + None => println!("missing sender") + } + match line.get(&String::from("Beguenstigter/Zahlungspflichtiger")) { + Some(value) => sender_name_f = value.to_string(), + None => println!("missing sender") + } + match line.get(&String::from("Verwendungszweck")) { + Some(value) => reference_f = value.to_string(), + None => println!("missing refernce") + } + match line.get(&String::from("Betrag")) { + Some(value) => amount_f = value.parse().unwrap(), + None => println!("missing amount") + } + match line.get(&String::from("Valutadatum")) { + Some(value) => { + date_f = chrono::NaiveDate::parse_from_str(value, "%d.%m.%y").unwrap();} , + None => println!("missing date") + } + ret.push(Transaction { + sender_name : sender_name_f, + amount : amount_f, + reference : reference_f, + date : date_f }); + + } + ret + } +} diff --git a/src/banking/asset.rs b/src/banking/asset.rs new file mode 100644 index 0000000..7b7287b --- /dev/null +++ b/src/banking/asset.rs @@ -0,0 +1,57 @@ +use crate::banking::account::Account; +use crate::parsers::ini::IniFile; + +pub struct Asset { + accounts : Vec<Account> +} + +impl Asset { + pub fn from_ini_file(file_name : &str) -> Asset { + // read in ini file + let t = crate::parsers::ini::IniFile::from_file(file_name); + let file; + match t { + Ok(f) => file = f, + Err(e) => panic!("asset: from_ini_file: could not read ini file: {}", e) + } + + let mut accounts = Vec::new(); + for (account_name, config) in file.sections { + let mut tmp; + match config.get("Institut") { + Some(i) => tmp = i, + None => panic!("asset: parse ini file: could not find \"Institute\" key for account {}", account_name) + } + let mut institute = String::from(""); + if let Some(i) = tmp.get(0) { + institute = i.to_string(); + } + let trans_files; + match config.get("TransactionFile") { + Some(i) => trans_files = i, + None => panic!("asset: ini file: no \"TransactionFile\" for account: {}", account_name) + } + match config.get("IBAN") { + Some(i) => tmp = i, + None => panic!("asset: no name for account {}", account_name) + } + let mut iban = String::from(""); + if let Some(i) = tmp.get(0) { + iban = i.to_string(); + } + accounts.push(Account::new(account_name, iban, trans_files.to_vec(), institute)); + + + } + Asset { accounts : accounts } + } + + pub fn get_account_by_name(self, name : &str) -> Option<Account> { + for account in self.accounts { + if account.name == name { + return Some(account); + } + } + None + } +} diff --git a/src/banking/mod.rs b/src/banking/mod.rs index 410bae1..e936286 100644 --- a/src/banking/mod.rs +++ b/src/banking/mod.rs @@ -1,59 +1,2 @@ - -use parsers::csv::CsvFile; - - -pub struct Account { - name : String, - iban : String, - transactions : Vec<Transaction> -} - - -#[derive(Serialize)] -pub struct Transaction { - pub sender_name : String, - pub amount : f32, - pub reference : String, - pub date : chrono::NaiveDate -} - -impl Transaction { - pub fn from_sparkasse_csv_file(file : CsvFile) -> Vec<Transaction> { - let mut ret = Vec::new(); - for line in file.iter() { - let mut sender_name_f = String::from(""); - let mut sender_iban_f = String::from(""); - let mut amount_f : f32 = 0.0; - let mut reference_f = String::from(""); - let mut date_f = chrono::NaiveDate::parse_from_str("01.01.2019", "%d.%m.%Y").unwrap(); - match line.get(&String::from("Kontonummer")) { - Some(value) => sender_iban_f = value.to_string(), - None => println!("missing sender") - } - match line.get(&String::from("Beguenstigter/Zahlungspflichtiger")) { - Some(value) => sender_name_f = value.to_string(), - None => println!("missing sender") - } - match line.get(&String::from("Verwendungszweck")) { - Some(value) => reference_f = value.to_string(), - None => println!("missing refernce") - } - match line.get(&String::from("Betrag")) { - Some(value) => amount_f = value.parse().unwrap(), - None => println!("missing amount") - } - match line.get(&String::from("Valutadatum")) { - Some(value) => { - date_f = chrono::NaiveDate::parse_from_str(value, "%d.%m.%y").unwrap();} , - None => println!("missing date") - } - ret.push(Transaction { - sender_name : sender_name_f, - amount : amount_f, - reference : reference_f, - date : date_f }); - - } - ret - } -} +pub mod asset; +pub mod account; |
