From e801bc38e6ef8746ea61dd2bc7fce59e3204049f Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 17 Aug 2019 02:36:43 -0400 Subject: add ability to actually update transactions --- src/views/txn_table.rs | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'src/views') diff --git a/src/views/txn_table.rs b/src/views/txn_table.rs index 8cc927c..007b4e2 100644 --- a/src/views/txn_table.rs +++ b/src/views/txn_table.rs @@ -52,7 +52,9 @@ impl cursive_table_view::TableViewItem } } TxnColumn::Date => self.date.clone(), - TxnColumn::Payee => self.payee.clone(), + TxnColumn::Payee => { + self.payee.clone().unwrap_or_else(|| "".to_string()) + } TxnColumn::Amount => crate::ynab::format_amount(self.amount), TxnColumn::TotalAmount => { if self.amount == self.total_amount { @@ -114,33 +116,47 @@ fn txn_table( }) .default_column(TxnColumn::Date) .on_submit(move |s, _, _| { - let total_outflow = s - .call_on_id("outflows_table", |v: &mut TxnTableView| -> i64 { + let outflows: Vec<_> = s + .call_on_id("outflows_table", |v: &mut TxnTableView| { v.borrow_items() .iter() .filter(|t| t.selected) - .map(|t| t.amount) - .sum() + .cloned() + .collect() }) .unwrap(); - let total_inflow = s - .call_on_id("inflows_table", |v: &mut TxnTableView| -> i64 { + let inflows: Vec<_> = s + .call_on_id("inflows_table", |v: &mut TxnTableView| { v.borrow_items() .iter() .filter(|t| t.selected) - .map(|t| t.amount) - .sum() + .cloned() + .collect() }) .unwrap(); + let total_outflow: i64 = outflows.iter().map(|t| t.amount).sum(); + let total_inflow: i64 = inflows.iter().map(|t| t.amount).sum(); let total_amount = total_outflow + total_inflow; if total_amount == 0 { - s.add_layer(cursive::views::Dialog::info( - "success, sum is zero!", - )) + let budget: &mut crate::ynab::Budget = s.user_data().unwrap(); + let txns: Vec<_> = + outflows.iter().chain(inflows.iter()).collect(); + let err = budget.reconcile_transactions(&txns); + if let Some(err) = err { + s.add_layer(cursive::views::Dialog::info(format!( + "Error: {}", + err + ))) + } else { + s.add_layer(cursive::views::Dialog::info(format!( + "Successfully updated {} transactions", + txns.len() + ))) + } } else { s.add_layer(cursive::views::Dialog::info(format!( - "failed, sum is {}", - total_amount + "Selected amount is {}, must be 0", + crate::ynab::format_amount(total_amount) ))) } }) -- cgit v1.2.3-54-g00ecf