aboutsummaryrefslogtreecommitdiffstats
path: root/src/ynab
diff options
context:
space:
mode:
Diffstat (limited to 'src/ynab')
-rw-r--r--src/ynab/budget.rs130
-rw-r--r--src/ynab/transaction.rs3
2 files changed, 73 insertions, 60 deletions
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,