diff options
| -rw-r--r-- | src/web_frontend/balance.rs | 26 | ||||
| -rw-r--r-- | templates/balance.html.tera | 9 |
2 files changed, 20 insertions, 15 deletions
diff --git a/src/web_frontend/balance.rs b/src/web_frontend/balance.rs index 77311b0..f05b69a 100644 --- a/src/web_frontend/balance.rs +++ b/src/web_frontend/balance.rs @@ -1,5 +1,6 @@ use parsers::csv::CsvFile; use banking::account::Account; +use crate::banking::asset::Asset; //use parsers::ini::IniFile; use std::collections::HashMap; use rocket_contrib::templates::Template; @@ -29,8 +30,9 @@ struct BalanceContext { } -#[get("/balance?<start>&<end>")] -pub fn balance_handler(start : Option<&RawStr>, end : Option<&RawStr>) -> rocket_contrib::templates::Template { +#[get("/balance/<account>?<start>&<end>")] +pub fn balance_handler(account : &RawStr, start : Option<&RawStr>, end : Option<&RawStr>) -> rocket_contrib::templates::Template { + let account_name = account.to_string(); let date_start = match start { Some(s) => { let mut tmp = s.to_string(); tmp.push_str("-01"); @@ -45,15 +47,19 @@ pub fn balance_handler(start : Option<&RawStr>, end : Option<&RawStr>) -> rocket }; let date_range = crate::web_frontend::util::DateRange::new(date_start, date_end); + let asset_ini = "data/asset.ini"; + let asset : Asset = crate::banking::asset::Asset::from_ini_file(asset_ini); + let transactions = asset.get_account_by_name(&account_name); + let acc; + match transactions { + Some(trans) => acc = trans, + None => panic!("could not read file") + } + let t = acc.transactions; + let mut earn_spend_v = Vec::new(); for date in date_range { - let transactions = CsvFile::from_file("data/t.csv", ";", true); - let t : Vec<crate::banking::account::Transaction> ; - match transactions { - Ok(trans) => t = crate::banking::account::Transaction::from_sparkasse_csv_file(trans), - Err(e) => panic!("could not read file {:?}", e) - } - let result : Vec<_> = t.iter().filter(|x| x.date.month() == date.month()).collect(); + let result : Vec<_> = t.iter().filter(|x| x.date.month() == date.month() && x.date.year() == date.year()).collect(); let mut earn = 0.0; let mut spend = 0.0; for r in &result { @@ -65,7 +71,7 @@ pub fn balance_handler(start : Option<&RawStr>, end : Option<&RawStr>) -> rocket } earn_spend_v.push(MonthEarnSpend { name : date.to_string(), earned : earn, spent : spend}); } - let context = BalanceContext { account_name : String::from("Girokonto"), + let context = BalanceContext { account_name : account_name, months : earn_spend_v , date_start : date_start.to_string()[0..7].to_string(), date_end : date_end.to_string()[0..7].to_string()}; Template::render("balance", context) diff --git a/templates/balance.html.tera b/templates/balance.html.tera index 8f9ebec..332c8c1 100644 --- a/templates/balance.html.tera +++ b/templates/balance.html.tera @@ -22,9 +22,9 @@ {{ account_name }} </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> - <a class="dropdown-item" href="/transactions">All Transactions</a> - <a class="dropdown-item" href="/chart">Spending chart</a> - <a class="dropdown-item" href="/balance">Balance</a> + <a class="dropdown-item" href="/transactions/{{ account_name }}">All Transactions</a> + <a class="dropdown-item" href="/chart/{{ account_name }}">Spending chart</a> + <a class="dropdown-item" href="/balance/{{account_name }}">Balance</a> </div> </li> <li class="nav-item dropdown active"> @@ -33,7 +33,6 @@ </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <a class="dropdown-item" href="/asset">Overview</a> - <a class="dropdown-item" href="/chart">Girokonto</a> </div> </li> <li class="nav-item"> @@ -46,7 +45,7 @@ <div class="container"> <h1>Balance <small class="text-muted">{{ account_name }}</small></h1> <div style="text-align:center; margin: auto; width:100%; padding: 10px;"> - <form method="get" action="/balance"><input type="month" id="start" name="start" value="{{ date_start }}"> to <input type="month" id="end" name="end"value="{{ date_end }}"> + <form method="get" action="/balance/{{ account_name }}"><input type="month" id="start" name="start" value="{{ date_start }}"> to <input type="month" id="end" name="end"value="{{ date_end }}"> <input type="submit" value="Show" class="btn btn-light"> </form> </div> |
