diff options
Diffstat (limited to 'src/ynab')
-rw-r--r-- | src/ynab/budget.rs | 40 | ||||
-rw-r--r-- | src/ynab/util.rs | 2 |
2 files changed, 26 insertions, 16 deletions
diff --git a/src/ynab/budget.rs b/src/ynab/budget.rs index d31b803..fba6dd0 100644 --- a/src/ynab/budget.rs +++ b/src/ynab/budget.rs @@ -1,10 +1,15 @@ pub struct Budget { budget: ynab_api::models::BudgetDetail, + reimbursables: Vec<super::transaction::Transaction>, } impl Budget { pub fn new(budget: ynab_api::models::BudgetDetail) -> Self { - Self { budget } + let reimbursables = Self::get_reimbursables(&budget); + Self { + budget, + reimbursables, + } } pub fn name(&self) -> String { @@ -15,20 +20,25 @@ impl Budget { self.budget.id.clone() } - pub fn reimbursables(&self) -> Vec<super::transaction::Transaction> { - let reimbursables_id = - if let Some(categories) = &self.budget.categories { - categories - .iter() - .find(|c| c.name == "Reimbursables") - .map(|c| c.id.clone()) - .unwrap() - } else { - panic!("no categories found") - }; + pub fn reimbursables(&self) -> &[super::transaction::Transaction] { + &self.reimbursables + } + + fn get_reimbursables( + budget: &ynab_api::models::BudgetDetail, + ) -> Vec<super::transaction::Transaction> { + let reimbursables_id = if let Some(categories) = &budget.categories { + categories + .iter() + .find(|c| c.name == "Reimbursables") + .map(|c| c.id.clone()) + .unwrap() + } else { + panic!("no categories found") + }; let mut reimbursables = vec![]; - if let Some(payees) = &self.budget.payees { + 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()); @@ -36,7 +46,7 @@ impl Budget { let payee_map = payee_map; let mut transaction_map = std::collections::HashMap::new(); - if let Some(transactions) = &self.budget.transactions { + if let Some(transactions) = &budget.transactions { for t in transactions { transaction_map.insert(t.id.clone(), t); @@ -71,7 +81,7 @@ impl Budget { } let transaction_map = transaction_map; - if let Some(subtransactions) = &self.budget.subtransactions { + if let Some(subtransactions) = &budget.subtransactions { for st in subtransactions { if let Some(category_id) = &st.category_id { if category_id != &reimbursables_id { diff --git a/src/ynab/util.rs b/src/ynab/util.rs index 6be9e6a..af8a8d1 100644 --- a/src/ynab/util.rs +++ b/src/ynab/util.rs @@ -2,5 +2,5 @@ pub fn format_amount(amount: i64) -> String { let dollars = amount.abs() / 1000; let cents = (amount.abs() % 1000) / 10; let sign = if amount < 0 { "-" } else { "" }; - format!("{}{}.{:02}", sign, dollars, cents) + format!("${}{}.{:02}", sign, dollars, cents) } |