summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/banking/account.rs8
-rw-r--r--src/banking/asset.rs10
-rw-r--r--src/main.rs3
-rw-r--r--src/web_frontend/asset_risk_chart.rs47
-rw-r--r--src/web_frontend/mod.rs1
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};