summaryrefslogtreecommitdiff
path: root/src/web_frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/web_frontend')
-rw-r--r--src/web_frontend/balance.rs29
-rw-r--r--src/web_frontend/chart.rs12
-rw-r--r--src/web_frontend/transactions.rs37
-rw-r--r--src/web_frontend/util.rs12
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
+}
+