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/web_frontend/chart.rs | |
| parent | 7e8656cb6d086f364baeeb79a69a04555a6fd4f6 (diff) | |
[global] update all files
Diffstat (limited to 'src/web_frontend/chart.rs')
| -rw-r--r-- | src/web_frontend/chart.rs | 79 |
1 files changed, 58 insertions, 21 deletions
diff --git a/src/web_frontend/chart.rs b/src/web_frontend/chart.rs index c5948fe..7065c6d 100644 --- a/src/web_frontend/chart.rs +++ b/src/web_frontend/chart.rs @@ -1,6 +1,7 @@ -use parsers::csv::CsvFile; -use banking::Account; -//use parsers::ini::IniFile; +use crate::parsers::csv::CsvFile; +use crate::banking::account::Account; +use crate::banking::asset::Asset; +use crate::parsers::ini::IniFile; use std::collections::HashMap; use rocket_contrib::templates::Template; use rocket::response::NamedFile; @@ -14,12 +15,29 @@ use chrono::Datelike; #[derive(Serialize)] struct ChartContext { account_name : String, - groups : HashMap<String, f32> + groups : HashMap<String, f32>, + total_sum : f32, + total_chart : f32, + date_start : String, + date_end : String } -#[get("/chart")] -fn chart_handler() -> rocket_contrib::templates::Template { +#[get("/chart?<start>&<end>")] +pub fn chart_handler(start : Option<&RawStr>, end : Option<&RawStr>) -> rocket_contrib::templates::Template { + let date_start = match start { + Some(s) => { let mut tmp = s.to_string(); + tmp.push_str("-01"); + chrono::NaiveDate::parse_from_str(&tmp, "%Y-%m-%d").unwrap() }, + None => Utc::today().naive_utc() + }; + let date_end = match end { + Some(s) => { let mut tmp = s.to_string(); + tmp.push_str("-01"); + chrono::NaiveDate::parse_from_str(&tmp, "%Y-%m-%d").unwrap() }, + None => Utc::today().naive_utc() + }; + let date_range = crate::web_frontend::util::DateRange::new(date_start, date_end); // read group config let chart_file = "data/giro"; let chart_config = IniFile::from_file(chart_file); @@ -29,33 +47,52 @@ fn chart_handler() -> rocket_contrib::templates::Template { Err(e) => panic!("could not read group file {:?}", e) } let mut groups = HashMap::new(); + + let asset_ini = "data/asset.ini"; + let asset = crate::banking::asset::Asset::from_ini_file(asset_ini); + let transactions = asset.get_account_by_name("Girokonto"); + let acc; + match transactions { + Some(trans) => acc = trans, + None => panic!("could not read file") + } + let t = acc.transactions; + // filter transaction to match only the specified timeframe + println!("unfiltered number: {}", t.len()); + let mut t_filtered = Vec::new(); + for date in date_range { + let mut tmp : Vec<_> = t.iter().filter(|x| x.date.month() == date.month()).collect(); + t_filtered.append(& mut tmp); + + } + println!("filtered number: {}", t_filtered.len()); + let total_sum = t_filtered.iter().filter(|t| t.amount < 0.0 ) + .fold(0.0, |acc, x| acc + x.amount).abs(); + println!("total sum: {}", total_sum); + let mut total_chart = 0.0; for (section_name, entries) in ini_file.sections { let mut complete = 0.0; - println!("section name: {}", section_name); - for entrie in entries { - for val in entrie.values { - if entrie.name.is_empty() || val.is_empty() { + for (key, values) in entries { + for val in values { + let mut t_filtered_cloned = t_filtered.clone(); + if val.is_empty() || val.is_empty() { continue } - println!("entrie is : {}", entrie.name); - let transactions = CsvFile::from_file("data/t.csv", ";", true); - let t : Vec<banking::Transaction> ; - match transactions { - Ok(trans) => t = banking::Transaction::from_sparkasse_csv_file(trans), - Err(e) => panic!("could not read file {:?}", e) - } - let re = Regex::new(&val).unwrap(); - let tmp = t.into_iter().filter(|transaction| + let re = Regex::new(&val).unwrap(); + let tmp = t_filtered_cloned.into_iter().filter(|transaction| re.is_match(&transaction.sender_name) ) .fold(0.0, |acc, x| acc + x.amount); - complete = complete + tmp.abs(); + complete = complete + tmp.abs(); } } groups.insert(section_name, complete); + total_chart = total_chart + complete; // ALSO INSERT OTHER, AKA THE REST } let context = ChartContext { account_name : String::from("Girokonto"), - groups : groups }; + groups : groups, total_sum : total_sum, total_chart : total_chart, + date_start : date_start.to_string()[0..7].to_string(), + date_end : date_end.to_string()[0..7].to_string() }; Template::render("chart", context) } |
