From c737b6df94eae4981bb03dda3583e24046e24865 Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Mon, 9 Sep 2024 21:54:29 +0100 Subject: Adds actualbudget importer --- importers/actualbudget/src/getters.rs | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 importers/actualbudget/src/getters.rs (limited to 'importers/actualbudget/src/getters.rs') diff --git a/importers/actualbudget/src/getters.rs b/importers/actualbudget/src/getters.rs new file mode 100644 index 0000000..88a660d --- /dev/null +++ b/importers/actualbudget/src/getters.rs @@ -0,0 +1,61 @@ +use crate::models::actualbudget::{ + account::Account, category::Category, date::Date, transaction::Transaction, + zero_budget::ZeroBudget, +}; +use sqlite::Connection; + +pub fn get_first_transaction_date(connection: &Connection) -> Date { + let mut statement = connection + .prepare("select min(date) as min_date from transactions;") + .unwrap(); + match statement.next() { + Ok(sqlite::State::Row) => Date::from_date_row(&statement, "min_date"), + err => panic!("Could not find first transaction date: {:?}", err), + } +} + +pub fn get_accounts(connection: &Connection) -> Vec { + let mut statement = connection.prepare("select * from accounts;").unwrap(); + let mut accounts = Vec::::new(); + while let Ok(sqlite::State::Row) = statement.next() { + accounts.push(Account::from_row(&statement)); + } + accounts +} + +pub fn get_categories(connection: &Connection) -> Vec { + let mut statement = connection.prepare("select * from categories;").unwrap(); + let mut categories = Vec::::new(); + while let Ok(sqlite::State::Row) = statement.next() { + categories.push(Category::from_row(&statement)); + } + categories +} + +pub fn get_zero_budgets(connection: &Connection) -> Vec { + let mut statement = connection.prepare("select * from zero_budgets;").unwrap(); + let mut zero_budgets = Vec::::new(); + while let Ok(sqlite::State::Row) = statement.next() { + zero_budgets.push(ZeroBudget::from_row(&statement)); + } + zero_budgets +} + +pub fn get_category_transfers_account(connection: &Connection) -> Account { + let mut statement = connection + .prepare("select * from accounts where name = 'Category transfers';") + .unwrap(); + match statement.next() { + Ok(sqlite::State::Row) => Account::from_row(&statement), + _ => panic!("Could not determine category transfers account"), + } +} + +pub fn get_transactions(connection: &Connection) -> Vec { + let mut statement = connection.prepare("select * from transactions;").unwrap(); + let mut transactions = Vec::::new(); + while let Ok(sqlite::State::Row) = statement.next() { + transactions.push(Transaction::from_row(&statement)); + } + transactions +} -- cgit v1.2.3