diff options
| author | Joe Carstairs <me@joeac.net> | 2024-09-09 21:54:29 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-09-09 21:54:29 +0100 |
| commit | c737b6df94eae4981bb03dda3583e24046e24865 (patch) | |
| tree | fbc309d9d4e71bf145e764a230eab9421797e74b /importers/actualbudget/src/getters.rs | |
| parent | e0d7cd9bbf02e7d52aadfb8d56f774a8a4099adf (diff) | |
Adds actualbudget importer
Diffstat (limited to 'importers/actualbudget/src/getters.rs')
| -rw-r--r-- | importers/actualbudget/src/getters.rs | 61 |
1 files changed, 61 insertions, 0 deletions
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<Account> { + let mut statement = connection.prepare("select * from accounts;").unwrap(); + let mut accounts = Vec::<Account>::new(); + while let Ok(sqlite::State::Row) = statement.next() { + accounts.push(Account::from_row(&statement)); + } + accounts +} + +pub fn get_categories(connection: &Connection) -> Vec<Category> { + let mut statement = connection.prepare("select * from categories;").unwrap(); + let mut categories = Vec::<Category>::new(); + while let Ok(sqlite::State::Row) = statement.next() { + categories.push(Category::from_row(&statement)); + } + categories +} + +pub fn get_zero_budgets(connection: &Connection) -> Vec<ZeroBudget> { + let mut statement = connection.prepare("select * from zero_budgets;").unwrap(); + let mut zero_budgets = Vec::<ZeroBudget>::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<Transaction> { + let mut statement = connection.prepare("select * from transactions;").unwrap(); + let mut transactions = Vec::<Transaction>::new(); + while let Ok(sqlite::State::Row) = statement.next() { + transactions.push(Transaction::from_row(&statement)); + } + transactions +} |
