diff options
| author | Benedict Börger <benedict@0xb8000.de> | 2019-06-28 21:41:23 +0200 |
|---|---|---|
| committer | Benedict Börger <benedict@0xb8000.de> | 2019-06-28 21:41:23 +0200 |
| commit | 5d33ed945c5be832d6a6e08eda4e35dde00ac362 (patch) | |
| tree | 7d4b6b7d56aaa298bae655f35ab0c7af12be57a0 /src | |
| parent | 04c9461ef53f5eaa8e7d72442e211d91546b88e3 (diff) | |
[web_fronted] added new site asset/risk_chart
Diffstat (limited to 'src')
| -rw-r--r-- | src/banking/account.rs | 8 | ||||
| -rw-r--r-- | src/banking/asset.rs | 10 | ||||
| -rw-r--r-- | src/main.rs | 3 | ||||
| -rw-r--r-- | src/web_frontend/asset_risk_chart.rs | 47 | ||||
| -rw-r--r-- | src/web_frontend/mod.rs | 1 |
5 files changed, 63 insertions, 6 deletions
diff --git a/src/banking/account.rs b/src/banking/account.rs index 95cb71b..b13e72f 100644 --- a/src/banking/account.rs +++ b/src/banking/account.rs @@ -7,12 +7,12 @@ pub struct Account { pub transactions : Vec<Transaction>, pub institute : String, pub groupFile : String, - pub category : String - + pub category : String, + pub riskCategory : String } impl Account { - pub fn new(name : String, iban : String, transactions : Vec<String>, institute : String, groupFile : String, category : String) -> Account { + pub fn new(name : String, iban : String, transactions : Vec<String>, institute : String, groupFile : String, category : String, riskCategory : String) -> Account { let mut trans = Vec::new(); if institute == "SpecialParser" { } @@ -29,7 +29,7 @@ impl Account { } } } - Account { name : name, iban : iban, transactions : trans, institute : institute, groupFile : groupFile, category : category } + Account { name : name, iban : iban, transactions : trans, institute : institute, groupFile : groupFile, category : category, riskCategory : riskCategory } } pub fn get_balance(&self, date : chrono::NaiveDate) -> f32 { diff --git a/src/banking/asset.rs b/src/banking/asset.rs index 642f153..3255b29 100644 --- a/src/banking/asset.rs +++ b/src/banking/asset.rs @@ -59,6 +59,14 @@ impl Asset { if let Some(i) = tmp.get(0) { category = i.to_string(); } + match config.get("RiskCategory") { + Some(i) => tmp = i, + None => panic!("asset: ini file: no \"RiskCategory\" for account: {}", account_name) + } + let mut risk_category = String::from(""); + if let Some(i) = tmp.get(0) { + risk_category = i.to_string(); + } match config.get("IBAN") { Some(i) => tmp = i, None => panic!("asset: no name for account {}", account_name) @@ -75,7 +83,7 @@ impl Asset { if let Some(i) = tmp.get(0) { groupFile = i.to_string(); } - accounts.push(Account::new(account_name, iban, trans_files.to_vec(), institute, groupFile, category)); + accounts.push(Account::new(account_name, iban, trans_files.to_vec(), institute, groupFile, category, risk_category)); } diff --git a/src/main.rs b/src/main.rs index c085bfc..47848d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,7 @@ fn main() { .attach(Template::fairing()) .mount("/", routes![web_frontend::transactions::transaction_handler, web_frontend::balance::balance_handler, web_frontend::static_handler, - web_frontend::chart::chart_handler, web_frontend::asset::asset_handler]) + web_frontend::chart::chart_handler, web_frontend::asset::asset_handler, + web_frontend::asset_risk_chart::asset_risk_chart_handler]) .launch(); } diff --git a/src/web_frontend/asset_risk_chart.rs b/src/web_frontend/asset_risk_chart.rs new file mode 100644 index 0000000..560a6f3 --- /dev/null +++ b/src/web_frontend/asset_risk_chart.rs @@ -0,0 +1,47 @@ +use std::collections::HashMap; +use rocket_contrib::templates::Template; +use crate::parsers::ini::IniFile; +use crate::parsers::csv::CsvFile; +use chrono::Utc; + + +#[derive(Serialize)] +pub struct AssetRiskContext { + risk_category : Vec<RiskCategory> +} + +#[derive(Serialize)] +pub struct RiskCategory{ + name : String, + balance : f32 +} + +#[get("/asset/risk_chart")] +pub fn asset_risk_chart_handler() -> rocket_contrib::templates::Template { + let asset_file = "data/asset.ini"; + let asset = crate::banking::asset::Asset::from_ini_file(asset_file); + + let mut acc : Vec<RiskCategory> = Vec::new(); + + let today = Utc::today().naive_utc(); + + for account in asset.iter() { + println!("{}", account.riskCategory); + let mut found = false; + for mut t in &mut acc { + if t.name == account.riskCategory { + found = true; + t.balance = t.balance + account.get_balance(today); + } + } + if !found { + acc.push( RiskCategory { + name : account.riskCategory.to_string(), + balance : account.get_balance(today) + }); + } + } + + let context = AssetRiskContext { risk_category : acc }; + Template::render("asset_risk_chart", context) +} diff --git a/src/web_frontend/mod.rs b/src/web_frontend/mod.rs index 3f58227..3dbc693 100644 --- a/src/web_frontend/mod.rs +++ b/src/web_frontend/mod.rs @@ -2,6 +2,7 @@ pub mod transactions; pub mod balance; pub mod chart; pub mod asset; +pub mod asset_risk_chart; mod util; use rocket::response::NamedFile; use std::path::{PathBuf, Path}; |
