aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-08-18 12:58:09 -0400
committerJesse Luehrs <doy@tozt.net>2019-08-18 12:58:09 -0400
commit5f4468ad1fc515aadd06cfcb59e26cc30c5ba6df (patch)
treef0ed4dd804d3379fed07d2c2a1e10a1657dd6f68
parent4bfd73b6fb39f112e45780dea0d7acc2046d46b3 (diff)
downloadynab-reimbursements-5f4468ad1fc515aadd06cfcb59e26cc30c5ba6df.tar.gz
ynab-reimbursements-5f4468ad1fc515aadd06cfcb59e26cc30c5ba6df.zip
run checks on refresh too
-rw-r--r--src/checks.rs32
-rw-r--r--src/main.rs7
-rw-r--r--src/ynab/budget.rs65
-rw-r--r--src/ynab/client.rs8
4 files changed, 56 insertions, 56 deletions
diff --git a/src/checks.rs b/src/checks.rs
deleted file mode 100644
index dfd5362..0000000
--- a/src/checks.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-pub fn run_checks(budget: &crate::ynab::Budget) {
- check_reconciled(budget);
- check_has_inflows(budget);
-}
-
-fn check_reconciled(budget: &crate::ynab::Budget) {
- let reconciled_amount: i64 = budget
- .reimbursables()
- .iter()
- .filter(|t| t.reimbursed)
- .map(|t| t.amount)
- .sum();
- if reconciled_amount != 0 {
- eprintln!(
- "reconciled reimbursables don't sum to $0.00: ${}",
- crate::ynab::format_amount(reconciled_amount)
- );
- std::process::exit(1);
- }
-}
-
-fn check_has_inflows(budget: &crate::ynab::Budget) {
- let txns = budget
- .reimbursables()
- .iter()
- .filter(|t| !t.reimbursed && t.amount > 0)
- .count();
- if txns == 0 {
- eprintln!("no transactions to reconcile");
- std::process::exit(1);
- }
-}
diff --git a/src/main.rs b/src/main.rs
index 54a25b6..8a380e2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,3 @@
-mod checks;
mod display;
mod paths;
mod views;
@@ -12,10 +11,8 @@ fn main() {
.unwrap()
.read_to_string(&mut key)
.unwrap();
- let client = ynab::Client::new(&key.trim());
- let budget = client.into_default_budget();
-
- checks::run_checks(&budget);
+ let key = key.trim();
+ let budget = ynab::Budget::new(&key);
let mut app = cursive::Cursive::default();
let term_width = app.screen_size().x;
diff --git a/src/ynab/budget.rs b/src/ynab/budget.rs
index 1d3b80a..b11e72a 100644
--- a/src/ynab/budget.rs
+++ b/src/ynab/budget.rs
@@ -1,33 +1,39 @@
pub struct Budget {
client: super::client::Client,
- budget: ynab_api::models::BudgetDetail,
+ id: String,
+ name: String,
reimbursables: Vec<super::transaction::Transaction>,
}
impl Budget {
- pub fn new(
- client: super::client::Client,
- budget: ynab_api::models::BudgetDetail,
- ) -> Self {
+ pub fn new(key: &str) -> Self {
+ let client = super::client::Client::new(key);
+ let budget = client.default_budget();
let reimbursables = Self::get_reimbursables(&budget);
- Self {
+ let budget = Self {
client,
- budget,
+ id: budget.id.clone(),
+ name: budget.name.clone(),
reimbursables,
- }
+ };
+ budget.check();
+ budget
}
pub fn refresh(&mut self) {
- self.budget = self.client.default_budget();
- self.reimbursables = Self::get_reimbursables(&self.budget)
+ let budget = self.client.default_budget();
+ self.id = budget.id.clone();
+ self.name = budget.name.clone();
+ self.reimbursables = Self::get_reimbursables(&budget);
+ self.check();
}
pub fn name(&self) -> String {
- self.budget.name.clone()
+ self.name.clone()
}
pub fn id(&self) -> String {
- self.budget.id.clone()
+ self.id.clone()
}
pub fn reimbursables(&self) -> &[super::transaction::Transaction] {
@@ -49,7 +55,7 @@ impl Budget {
})
.collect(),
);
- self.client.update_transactions(&self.budget.id, to_update)
+ self.client.update_transactions(&self.id, to_update)
}
fn get_reimbursables(
@@ -152,4 +158,37 @@ impl Budget {
reimbursables.sort_by_cached_key(|t| t.date.clone());
reimbursables
}
+
+ fn check(&self) {
+ self.check_reconciled();
+ self.check_has_inflows();
+ }
+
+ fn check_reconciled(&self) {
+ let reconciled_amount: i64 = self
+ .reimbursables()
+ .iter()
+ .filter(|t| t.reimbursed)
+ .map(|t| t.amount)
+ .sum();
+ if reconciled_amount != 0 {
+ eprintln!(
+ "reconciled reimbursables don't sum to $0.00: ${}",
+ crate::ynab::format_amount(reconciled_amount)
+ );
+ std::process::exit(1);
+ }
+ }
+
+ fn check_has_inflows(&self) {
+ let txns = self
+ .reimbursables()
+ .iter()
+ .filter(|t| !t.reimbursed && t.amount > 0)
+ .count();
+ if txns == 0 {
+ eprintln!("no transactions to reconcile");
+ std::process::exit(1);
+ }
+ }
}
diff --git a/src/ynab/client.rs b/src/ynab/client.rs
index 9e2d3ea..74445f2 100644
--- a/src/ynab/client.rs
+++ b/src/ynab/client.rs
@@ -19,7 +19,8 @@ impl Client {
let budgets =
self.api.budgets_api().get_budgets().unwrap().data.budgets;
let budget = budgets.iter().next().unwrap();
- self.api
+ self
+ .api
.budgets_api()
.get_budget_by_id(&budget.id, 0)
.unwrap()
@@ -27,11 +28,6 @@ impl Client {
.budget
}
- pub fn into_default_budget(self) -> super::budget::Budget {
- let full_budget = self.default_budget();
- super::budget::Budget::new(self, full_budget)
- }
-
pub fn update_transactions(
&self,
budget_id: &str,