diff options
Diffstat (limited to 'src/web_frontend')
| -rw-r--r-- | src/web_frontend/balance.rs | 29 | ||||
| -rw-r--r-- | src/web_frontend/chart.rs | 12 | ||||
| -rw-r--r-- | src/web_frontend/transactions.rs | 37 | ||||
| -rw-r--r-- | src/web_frontend/util.rs | 12 |
4 files changed, 46 insertions, 44 deletions
diff --git a/src/web_frontend/balance.rs b/src/web_frontend/balance.rs index f05b69a..98d86b6 100644 --- a/src/web_frontend/balance.rs +++ b/src/web_frontend/balance.rs @@ -49,28 +49,29 @@ pub fn balance_handler(account : &RawStr, start : Option<&RawStr>, end : Option< 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 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(); + let mut earn_spend_v = Vec::new(); for date in date_range { - 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 { + 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 { if r.amount > 0.0 { earn = earn + r.amount; } else { spend = spend + r.amount.abs(); } - } - earn_spend_v.push(MonthEarnSpend { name : date.to_string(), earned : earn, spent : spend}); + } + earn_spend_v.push(MonthEarnSpend { name : date.to_string(), earned : earn, spent : spend}); } + 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()}; diff --git a/src/web_frontend/chart.rs b/src/web_frontend/chart.rs index a6b387a..1c74e80 100644 --- a/src/web_frontend/chart.rs +++ b/src/web_frontend/chart.rs @@ -44,7 +44,6 @@ pub fn chart_handler(account : &RawStr, start : Option<&RawStr>, end : Option<&R 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); let asset_ini = "data/asset.ini"; let asset = crate::banking::asset::Asset::from_ini_file(asset_ini); let account = asset.get_account_by_name(&account_name); @@ -64,18 +63,13 @@ pub fn chart_handler(account : &RawStr, start : Option<&RawStr>, end : Option<&R let t = acc.transactions; // filter transaction to match only the specified timeframe - let mut t_filtered = Vec::new(); - for date in date_range { - let tc = t.clone(); - let mut tmp : Vec<_> = tc.into_iter().filter(|x| x.date.month() == date.month() && x.date.year() == date.year()).collect(); - t_filtered.append(&mut tmp); + let t_filtered = crate::web_frontend::util::apply_date_filter(t, date_start, date_end); - } // spending chart, so do not consider income let t_final : Vec<_> = t_filtered.clone().into_iter().filter(|t| t.amount < 0.0 ).collect(); let total_sum = t_final.clone().into_iter().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 filter_string = String::from(""); @@ -92,7 +86,7 @@ pub fn chart_handler(account : &RawStr, start : Option<&RawStr>, end : Option<&R } } let t_filtered_cloned = crate::web_frontend::util::apply_transaction_filter(filter_string.clone(), t_final.clone()); - println!("for filter: {}: transactions: {}", filter_string, t_filtered_cloned.len()); + let tmp = t_filtered_cloned.into_iter() .fold(0.0, |acc, x| acc + x.amount); complete = complete + tmp.abs(); diff --git a/src/web_frontend/transactions.rs b/src/web_frontend/transactions.rs index 6e5ae8c..b3aa8cf 100644 --- a/src/web_frontend/transactions.rs +++ b/src/web_frontend/transactions.rs @@ -49,32 +49,27 @@ pub fn transaction_handler(account : &RawStr, start : Option<&RawStr>, end : Opt None => String::from("") }; let tf_c = transaction_filter.clone(); - let test = Uri::percent_decode_lossy(tf_c.as_bytes()); - let transaction_filter = test.to_string(); + let filter_html_decoded = Uri::percent_decode_lossy(tf_c.as_bytes()); + let transaction_filter = filter_html_decoded.to_string(); 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 { + 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; - // apply parameters - // apply date filters - let date_range = crate::web_frontend::util::DateRange::new(date_start, date_end); - let mut t_filtered = Vec::new(); - for date in date_range { - let tc = t.clone(); - let mut tmp : Vec<_> = tc.into_iter().filter(|x| x.date.month() == date.month() && x.date.year() == date.year()).collect(); - t_filtered.append(&mut tmp); } + let t = acc.transactions; + // apply parameters - // apply filter - let ft = crate::web_frontend::util::apply_transaction_filter(transaction_filter.clone(), t_filtered); + // apply date filters + let t_filtered = crate::web_frontend::util::apply_date_filter(t.clone(), date_start, date_end); + // apply filter + let ft = crate::web_frontend::util::apply_transaction_filter(transaction_filter.clone(), t_filtered); - let context = TransactionContext { transactions: ft, account_name : account_name, - filter : transaction_filter, date_start : date_start.to_string()[0..7].to_string(), - date_end : date_end.to_string()[0..7].to_string()}; - Template::render("transaction", context) + let context = TransactionContext { transactions: ft, account_name : account_name, + filter : transaction_filter, date_start : date_start.to_string()[0..7].to_string(), + date_end : date_end.to_string()[0..7].to_string()}; + + Template::render("transaction", context) } diff --git a/src/web_frontend/util.rs b/src/web_frontend/util.rs index 8c24465..2012068 100644 --- a/src/web_frontend/util.rs +++ b/src/web_frontend/util.rs @@ -116,3 +116,15 @@ pub fn apply_transaction_filter(filter : String, transactions : Vec<crate::banki tmp } + +pub fn apply_date_filter(transactions : Vec<crate::banking::account::Transaction>, date_start : chrono::NaiveDate, date_end : chrono::NaiveDate) -> Vec<crate::banking::account::Transaction> { + let date_range = DateRange::new(date_start, date_end); + let mut t_filtered = Vec::new(); + for date in date_range { + let tc = transactions.clone(); + let mut tmp : Vec<_> = tc.into_iter().filter(|x| x.date.month() == date.month() && x.date.year() == date.year()).collect(); + t_filtered.append(&mut tmp); + } + t_filtered +} + |
