aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-08-17 04:24:54 -0400
committerJesse Luehrs <doy@tozt.net>2019-08-17 04:24:54 -0400
commit41df9d4e94bad6b89f0b4e4e535a6e30576b2879 (patch)
treeab4f3600e94234fce39141817529850fe2fcdce4
parentf04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e (diff)
downloadynab-api-41df9d4e94bad6b89f0b4e4e535a6e30576b2879.tar.gz
ynab-api-41df9d4e94bad6b89f0b4e4e535a6e30576b2879.zip
display the account name too
-rw-r--r--src/views/txn_table.rs6
-rw-r--r--src/ynab/budget.rs130
-rw-r--r--src/ynab/transaction.rs3
3 files changed, 79 insertions, 60 deletions
diff --git a/src/views/txn_table.rs b/src/views/txn_table.rs
index 5b93829..7314337 100644
--- a/src/views/txn_table.rs
+++ b/src/views/txn_table.rs
@@ -4,6 +4,7 @@ use cursive::view::{Identifiable, ViewWrapper};
enum TxnColumn {
Selected,
Date,
+ Account,
Payee,
Amount,
TotalAmount,
@@ -52,6 +53,9 @@ impl cursive_table_view::TableViewItem<TxnColumn>
}
}
TxnColumn::Date => self.date.clone(),
+ TxnColumn::Account => {
+ self.account.clone().unwrap_or_else(|| "".to_string())
+ }
TxnColumn::Payee => {
self.payee.clone().unwrap_or_else(|| "".to_string())
}
@@ -73,6 +77,7 @@ impl cursive_table_view::TableViewItem<TxnColumn>
match column {
TxnColumn::Selected => std::cmp::Ordering::Equal,
TxnColumn::Date => self.date.cmp(&other.date),
+ TxnColumn::Account => self.account.cmp(&other.account),
TxnColumn::Payee => self.payee.cmp(&other.payee),
TxnColumn::Amount => self.amount.cmp(&other.amount),
TxnColumn::TotalAmount => self.amount.cmp(&other.total_amount),
@@ -107,6 +112,7 @@ fn txn_table(
let mut table = cursive_table_view::TableView::new()
.column(TxnColumn::Selected, "Sel", |c| c.width(3))
.column(TxnColumn::Date, "Date", |c| c.width(10))
+ .column(TxnColumn::Account, "Account", |c| c.width(15))
.column(TxnColumn::Payee, "Payee", |c| c)
.column(TxnColumn::Amount, "Amount", |c| {
c.align(cursive::align::HAlign::Right).width(10)
diff --git a/src/ynab/budget.rs b/src/ynab/budget.rs
index dfaaf81..c5a9cde 100644
--- a/src/ynab/budget.rs
+++ b/src/ynab/budget.rs
@@ -60,78 +60,88 @@ impl Budget {
panic!("no categories found")
};
- let mut reimbursables = vec![];
+ let mut payee_map = std::collections::HashMap::new();
if let Some(payees) = &budget.payees {
- let mut payee_map = std::collections::HashMap::new();
for p in payees {
payee_map.insert(p.id.clone(), p.name.clone());
}
- let payee_map = payee_map;
-
- let mut transaction_map = std::collections::HashMap::new();
- if let Some(transactions) = &budget.transactions {
- for t in transactions {
- transaction_map.insert(t.id.clone(), t);
-
- if let Some(category_id) = &t.category_id {
- if category_id != &reimbursables_id {
- continue;
- }
- } else {
+ } else {
+ panic!("no payees?");
+ }
+ let payee_map = payee_map;
+
+ let mut account_map = std::collections::HashMap::new();
+ if let Some(accounts) = &budget.accounts {
+ for a in accounts {
+ account_map.insert(a.id.clone(), a.name.clone());
+ }
+ }
+
+ let mut reimbursables = vec![];
+
+ let mut transaction_map = std::collections::HashMap::new();
+ if let Some(transactions) = &budget.transactions {
+ for t in transactions {
+ transaction_map.insert(t.id.clone(), t);
+
+ if let Some(category_id) = &t.category_id {
+ if category_id != &reimbursables_id {
continue;
}
-
- let payee = t
- .payee_id
- .iter()
- .map(|payee_id| payee_map.get(payee_id).cloned())
- .next()
- .unwrap_or(None);
-
- let mut txn =
- super::transaction::Transaction::from_transaction(t);
- txn.payee = payee;
- reimbursables.push(txn);
+ } else {
+ continue;
}
+
+ let payee = t
+ .payee_id
+ .iter()
+ .map(|payee_id| payee_map.get(payee_id).cloned())
+ .next()
+ .unwrap_or(None);
+ let account = account_map.get(&t.account_id).cloned();
+
+ let mut txn =
+ super::transaction::Transaction::from_transaction(t);
+ txn.payee = payee;
+ txn.account = account;
+ reimbursables.push(txn);
}
- let transaction_map = transaction_map;
-
- if let Some(subtransactions) = &budget.subtransactions {
- for st in subtransactions {
- if let Some(category_id) = &st.category_id {
- if category_id != &reimbursables_id {
- continue;
- }
- } else {
+ }
+ let transaction_map = transaction_map;
+
+ if let Some(subtransactions) = &budget.subtransactions {
+ for st in subtransactions {
+ if let Some(category_id) = &st.category_id {
+ if category_id != &reimbursables_id {
continue;
}
-
- let t = transaction_map[&st.transaction_id];
- let payee = st
- .payee_id
- .iter()
- .map(|payee_id| payee_map.get(payee_id).cloned())
- .next()
- .unwrap_or_else(|| {
- t.payee_id
- .iter()
- .map(|payee_id| {
- payee_map.get(payee_id).cloned()
- })
- .next()
- .unwrap_or(None)
- });
-
- let mut txn =
- super::transaction::Transaction::from_sub_transaction(
- t, st,
- );
- txn.payee = payee;
- reimbursables.push(txn);
+ } else {
+ continue;
}
+
+ let t = transaction_map[&st.transaction_id];
+ let payee = st
+ .payee_id
+ .iter()
+ .map(|payee_id| payee_map.get(payee_id).cloned())
+ .next()
+ .unwrap_or_else(|| {
+ t.payee_id
+ .iter()
+ .map(|payee_id| payee_map.get(payee_id).cloned())
+ .next()
+ .unwrap_or(None)
+ });
+ let account = account_map.get(&t.account_id).cloned();
+
+ let mut txn =
+ super::transaction::Transaction::from_sub_transaction(
+ t, st,
+ );
+ txn.payee = payee;
+ txn.account = account;
+ reimbursables.push(txn);
}
- } else {
- panic!("no payees?");
}
reimbursables.sort_by_cached_key(|t| t.date.clone());
diff --git a/src/ynab/transaction.rs b/src/ynab/transaction.rs
index 38e5d54..be31019 100644
--- a/src/ynab/transaction.rs
+++ b/src/ynab/transaction.rs
@@ -12,6 +12,7 @@ pub struct Transaction {
pub category_id: Option<String>,
pub import_id: Option<String>,
+ pub account: Option<String>,
pub payee: Option<String>,
pub total_amount: i64,
pub reimbursed: bool,
@@ -40,6 +41,7 @@ impl Transaction {
category_id: t.category_id.clone(),
import_id: t.import_id.clone(),
+ account: None,
payee: None,
total_amount: t.amount,
reimbursed,
@@ -69,6 +71,7 @@ impl Transaction {
category_id: t.category_id.clone(),
import_id: t.import_id.clone(),
+ account: None,
payee: None,
total_amount: t.amount,
reimbursed,