summaryrefslogtreecommitdiff
path: root/importers/actualbudget/src/getters.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-09-09 21:54:29 +0100
committerJoe Carstairs <me@joeac.net>2024-09-09 21:54:29 +0100
commitc737b6df94eae4981bb03dda3583e24046e24865 (patch)
treefbc309d9d4e71bf145e764a230eab9421797e74b /importers/actualbudget/src/getters.rs
parente0d7cd9bbf02e7d52aadfb8d56f774a8a4099adf (diff)
Adds actualbudget importer
Diffstat (limited to 'importers/actualbudget/src/getters.rs')
-rw-r--r--importers/actualbudget/src/getters.rs61
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
+}