diff options
Diffstat (limited to 'rust')
30 files changed, 156 insertions, 82 deletions
diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f4c8ea2..bb96e98 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -6,8 +6,9 @@ version = 3 name = "actualbudget_importer" version = "0.1.0" dependencies = [ + "actualbudget_models", + "actualbudget_queries", "anyhow", - "chrono", "diesel", "libsqlite3-sys", "schist_models", @@ -15,6 +16,30 @@ dependencies = [ ] [[package]] +name = "actualbudget_models" +version = "0.1.0" +dependencies = [ + "diesel", +] + +[[package]] +name = "actualbudget_queries" +version = "0.1.0" +dependencies = [ + "actualbudget_models", + "actualbudget_schema", + "anyhow", + "diesel", +] + +[[package]] +name = "actualbudget_schema" +version = "0.1.0" +dependencies = [ + "actualbudget_models", +] + +[[package]] name = "addr2line" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 499747d..9c7ac98 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = [ + "actualbudget_models", "actualbudget_queries", "actualbudget_schema", "schist_actualbudget_importer", "schist_backend", "schist_fakes", diff --git a/rust/actualbudget_models/Cargo.toml b/rust/actualbudget_models/Cargo.toml new file mode 100644 index 0000000..83d3093 --- /dev/null +++ b/rust/actualbudget_models/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "actualbudget_models" +version = "0.1.0" +edition = "2021" + +[dependencies] +diesel = { workspace = true, features = ["sqlite"] } diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_account.rs b/rust/actualbudget_models/src/actualbudget_account.rs index b3d00ac..9f058cd 100644 --- a/rust/schist_actualbudget_importer/src/models/actualbudget_account.rs +++ b/rust/actualbudget_models/src/actualbudget_account.rs @@ -1,7 +1,7 @@ use diesel::prelude::{Queryable, Selectable}; #[derive(Queryable, Selectable)] -#[diesel(table_name = crate::schema::accounts)] +#[diesel(table_name = crate::actualbudget_schema::accounts)] pub struct ActualbudgetAccount { pub id: String, pub name: String, diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_category.rs b/rust/actualbudget_models/src/actualbudget_category.rs index cbea99b..8702f19 100644 --- a/rust/schist_actualbudget_importer/src/models/actualbudget_category.rs +++ b/rust/actualbudget_models/src/actualbudget_category.rs @@ -1,7 +1,7 @@ use diesel::{prelude::Queryable, Selectable}; #[derive(Queryable, Selectable)] -#[diesel(table_name = crate::schema::categories)] +#[diesel(table_name = crate::actualbudget_schema::categories)] pub struct ActualbudgetCategory { pub id: String, pub name: String, diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_date.rs b/rust/actualbudget_models/src/actualbudget_date.rs index bef160c..bef160c 100644 --- a/rust/schist_actualbudget_importer/src/models/actualbudget_date.rs +++ b/rust/actualbudget_models/src/actualbudget_date.rs diff --git a/rust/schist_actualbudget_importer/src/schema.rs b/rust/actualbudget_models/src/actualbudget_schema.rs index a872231..a872231 100644 --- a/rust/schist_actualbudget_importer/src/schema.rs +++ b/rust/actualbudget_models/src/actualbudget_schema.rs diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs b/rust/actualbudget_models/src/actualbudget_transaction.rs index be2ca1a..2b2f67b 100644 --- a/rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs +++ b/rust/actualbudget_models/src/actualbudget_transaction.rs @@ -1,9 +1,9 @@ use diesel::prelude::{Identifiable, Queryable, QueryableByName, Selectable}; -use crate::models::actualbudget_date::ActualbudgetDate; +use crate::actualbudget_date::ActualbudgetDate; #[derive(Identifiable, QueryableByName, Queryable, Selectable, Clone)] -#[diesel(table_name = crate::schema::transactions)] +#[diesel(table_name = crate::actualbudget_schema::transactions)] pub struct ActualbudgetTransaction { pub id: String, pub is_parent: bool, diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs b/rust/actualbudget_models/src/actualbudget_zero_budget.rs index 6478d34..41b3443 100644 --- a/rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs +++ b/rust/actualbudget_models/src/actualbudget_zero_budget.rs @@ -1,8 +1,8 @@ -use crate::models::actualbudget_date::ActualbudgetDate; +use crate::actualbudget_date::ActualbudgetDate; use diesel::{prelude::{Identifiable, Queryable, QueryableByName, Selectable}, sqlite::Sqlite}; #[derive(Identifiable, QueryableByName, Queryable, Selectable, Clone)] -#[diesel(table_name = crate::schema::zero_budgets)] +#[diesel(table_name = crate::actualbudget_schema::zero_budgets)] #[diesel(check_for_backend(Sqlite))] pub struct ActualbudgetZeroBudget { pub id: String, diff --git a/rust/schist_actualbudget_importer/src/models/mod.rs b/rust/actualbudget_models/src/lib.rs index 1c97c65..2fae261 100644 --- a/rust/schist_actualbudget_importer/src/models/mod.rs +++ b/rust/actualbudget_models/src/lib.rs @@ -1,5 +1,6 @@ pub mod actualbudget_account; pub mod actualbudget_category; pub mod actualbudget_date; +pub mod actualbudget_schema; pub mod actualbudget_transaction; pub mod actualbudget_zero_budget; diff --git a/rust/actualbudget_queries/Cargo.toml b/rust/actualbudget_queries/Cargo.toml new file mode 100644 index 0000000..6108461 --- /dev/null +++ b/rust/actualbudget_queries/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "actualbudget_queries" +version = "0.1.0" +edition = "2021" + +[dependencies] +actualbudget_models = { path = "../actualbudget_models" } +actualbudget_schema = { path = "../actualbudget_schema" } +anyhow = { workspace = true } +diesel = { workspace = true } diff --git a/rust/actualbudget_queries/src/actualbudget_accounts.rs b/rust/actualbudget_queries/src/actualbudget_accounts.rs new file mode 100644 index 0000000..1d8843d --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_accounts.rs @@ -0,0 +1,25 @@ +use actualbudget_models::actualbudget_account::ActualbudgetAccount; +use actualbudget_schema::actualbudget_schema::accounts::{ + self as accounts_schema, + dsl::accounts as accounts_table, +}; +use anyhow::{Context, Result}; +use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_accounts(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetAccount>> { + let actualbudget_accounts = accounts_table + .select(ActualbudgetAccount::as_select()) + .load(connection) + .with_context(|| "failed to get all Actualbudget accounts")?; + Ok(actualbudget_accounts) +} + +pub fn get_category_transfers_account(connection: &mut SqliteConnection) -> Result<Option<ActualbudgetAccount>> { + let category_transfers_account = accounts_table + .filter(accounts_schema::name.eq("Category transfers")) + .select(ActualbudgetAccount::as_select()) + .first(connection) + .optional() + .with_context(|| "failed to get Category Transfers account")?; + Ok(category_transfers_account) +} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/get_all.rs b/rust/actualbudget_queries/src/actualbudget_categories.rs index 4cb7ebc..5f33e1e 100644 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/get_all.rs +++ b/rust/actualbudget_queries/src/actualbudget_categories.rs @@ -1,4 +1,5 @@ -use crate::{models::actualbudget_category::ActualbudgetCategory, schema::categories::dsl::categories}; +use actualbudget_models::actualbudget_category::ActualbudgetCategory; +use actualbudget_schema::actualbudget_schema::categories::dsl::categories; use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; pub fn get_all_actualbudget_categories(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetCategory>, Error> { diff --git a/rust/actualbudget_queries/src/actualbudget_transactions.rs b/rust/actualbudget_queries/src/actualbudget_transactions.rs new file mode 100644 index 0000000..44d3730 --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_transactions.rs @@ -0,0 +1,23 @@ +use actualbudget_models::{actualbudget_date::ActualbudgetDate, actualbudget_transaction::ActualbudgetTransaction}; +use actualbudget_schema::actualbudget_schema::transactions::{ + self as transactions_schema, + dsl::transactions as transactions_table, +}; +use anyhow::{Context, Result}; +use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_transactions(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetTransaction>> { + let actualbudget_transactions = transactions_table + .select(ActualbudgetTransaction::as_select()) + .load(connection) + .with_context(|| "failed to get all Actualbudget transactions")?; + Ok(actualbudget_transactions) +} + +pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate> { + let date_as_int = transactions_table + .select(min(transactions_schema::date)) + .first::<Option<i32>>(connection) + .map_or_else(|e| Err(e), |o| o.map_or_else(|| Err(Error::NotFound), |i| Ok(i)))?; + Ok(ActualbudgetDate::from_i32(date_as_int)) +} diff --git a/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs new file mode 100644 index 0000000..187fe8d --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs @@ -0,0 +1,12 @@ +use anyhow::{Context, Result}; +use actualbudget_models::actualbudget_zero_budget::ActualbudgetZeroBudget; +use actualbudget_schema::actualbudget_schema::zero_budgets::dsl::zero_budgets as zero_budgets_table; +use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetZeroBudget>> { + let zero_budgets = zero_budgets_table + .select(ActualbudgetZeroBudget::as_select()) + .load(connection) + .with_context(|| "failed to get all Actualbudget zero budgets")?; + Ok(zero_budgets) +} diff --git a/rust/schist_actualbudget_importer/src/queries/mod.rs b/rust/actualbudget_queries/src/lib.rs index e16dafc..e16dafc 100644 --- a/rust/schist_actualbudget_importer/src/queries/mod.rs +++ b/rust/actualbudget_queries/src/lib.rs diff --git a/rust/actualbudget_schema/Cargo.toml b/rust/actualbudget_schema/Cargo.toml new file mode 100644 index 0000000..58e956f --- /dev/null +++ b/rust/actualbudget_schema/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "actualbudget_schema" +version = "0.1.0" +edition = "2021" + +[dependencies] +actualbudget_models = { path = "../actualbudget_models" } diff --git a/rust/actualbudget_schema/src/lib.rs b/rust/actualbudget_schema/src/lib.rs new file mode 100644 index 0000000..ef66b22 --- /dev/null +++ b/rust/actualbudget_schema/src/lib.rs @@ -0,0 +1 @@ +pub use actualbudget_models::actualbudget_schema; diff --git a/rust/schist_actualbudget_importer/Cargo.toml b/rust/schist_actualbudget_importer/Cargo.toml index ea46aa0..9afefef 100644 --- a/rust/schist_actualbudget_importer/Cargo.toml +++ b/rust/schist_actualbudget_importer/Cargo.toml @@ -4,8 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] +actualbudget_models = { path = "../actualbudget_models" } +actualbudget_queries = { path = "../actualbudget_queries" } anyhow = { workspace = true } -chrono = { workspace = true, features = ["serde"] } diesel = { workspace = true, features = ["sqlite"] } libsqlite3-sys = { workspace = true, features = ["bundled"] } schist_models = { path = "../schist_models" } diff --git a/rust/schist_actualbudget_importer/src/main.rs b/rust/schist_actualbudget_importer/src/main.rs index ebf5353..2236f73 100644 --- a/rust/schist_actualbudget_importer/src/main.rs +++ b/rust/schist_actualbudget_importer/src/main.rs @@ -1,13 +1,10 @@ -pub mod models; -pub mod queries; -pub mod schema; pub mod transformers; use anyhow::Result; use schist_models::{account::Account, budget_update::BudgetUpdate, category::Category, category_transfer::CategoryTransfer, transaction::Transaction, transaction_categorisation::TransactionCategorisation}; use schist_queries; use diesel::{Connection, SqliteConnection}; -use queries::{actualbudget_accounts::{get_all_actualbudget_accounts, get_category_transfers_account}, actualbudget_categories::get_all_actualbudget_categories, actualbudget_transactions::{get_all_actualbudget_transactions, get_first_actualbudget_transaction_date}, actualbudget_zero_budgets::get_all_actualbudget_zero_budgets}; +use actualbudget_queries::{actualbudget_accounts::{get_all_actualbudget_accounts, get_category_transfers_account}, actualbudget_categories::get_all_actualbudget_categories, actualbudget_transactions::{get_all_actualbudget_transactions, get_first_actualbudget_transaction_date}, actualbudget_zero_budgets::get_all_actualbudget_zero_budgets}; fn main() -> Result<()> { let connection_src = &mut SqliteConnection::establish("in.sqlite").unwrap(); diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_all.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_all.rs deleted file mode 100644 index 6f667de..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_all.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::{models::actualbudget_account::ActualbudgetAccount, schema::accounts::dsl::accounts}; -use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; - -pub fn get_all_actualbudget_accounts(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetAccount>, Error> { - accounts.select(ActualbudgetAccount::as_select()).load(connection) -} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_category_transfers_account.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_category_transfers_account.rs deleted file mode 100644 index f05dc78..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_category_transfers_account.rs +++ /dev/null @@ -1,13 +0,0 @@ -use diesel::{result::Error, ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; - -use crate::{models::actualbudget_account::ActualbudgetAccount, schema::accounts::{ - self as accounts_schema, - dsl::accounts as accounts_table, -}}; - -pub fn get_category_transfers_account(connection: &mut SqliteConnection) -> Result<ActualbudgetAccount, Error> { - accounts_table - .filter(accounts_schema::name.eq("Category transfers")) - .select(ActualbudgetAccount::as_select()) - .first(connection) -} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/mod.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/mod.rs deleted file mode 100644 index c6d6015..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod get_all; -mod get_category_transfers_account; - -pub use get_all::get_all_actualbudget_accounts; -pub use get_category_transfers_account::get_category_transfers_account; diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/mod.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/mod.rs deleted file mode 100644 index 0c04e53..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod get_all; - -pub use get_all::get_all_actualbudget_categories; diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_all.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_all.rs deleted file mode 100644 index 84c8d08..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_all.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::{models::actualbudget_transaction::ActualbudgetTransaction, schema::transactions::dsl::transactions}; -use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; - -pub fn get_all_actualbudget_transactions(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetTransaction>, Error> { - transactions.select(ActualbudgetTransaction::as_select()).load(connection) -} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_first_date.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_first_date.rs deleted file mode 100644 index b958c37..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_first_date.rs +++ /dev/null @@ -1,14 +0,0 @@ -use anyhow::Result; -use crate::{models::actualbudget_date::ActualbudgetDate, schema::transactions::{ - self as transactions_schema, - dsl::transactions as transactions_table, -}}; -use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; - -pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate> { - let date_as_int = transactions_table - .select(min(transactions_schema::date)) - .first::<Option<i32>>(connection) - .map_or_else(|e| Err(e), |o| o.map_or_else(|| Err(Error::NotFound), |i| Ok(i)))?; - Ok(ActualbudgetDate::from_i32(date_as_int)) -} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/mod.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/mod.rs deleted file mode 100644 index b4ed0dd..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod get_all; -mod get_first_date; - -pub use get_all::get_all_actualbudget_transactions; -pub use get_first_date::get_first_actualbudget_transaction_date; diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/get_all.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/get_all.rs deleted file mode 100644 index 0c3f695..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/get_all.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::{models::actualbudget_zero_budget::ActualbudgetZeroBudget, schema::zero_budgets::dsl::zero_budgets}; -use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; - -pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetZeroBudget>, Error> { - zero_budgets.select(ActualbudgetZeroBudget::as_select()).load(connection) -} diff --git a/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/mod.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/mod.rs deleted file mode 100644 index ba7e21b..0000000 --- a/rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod get_all; - -pub use get_all::get_all_actualbudget_zero_budgets; diff --git a/rust/schist_actualbudget_importer/src/transformers.rs b/rust/schist_actualbudget_importer/src/transformers.rs index d1b1564..cf62608 100644 --- a/rust/schist_actualbudget_importer/src/transformers.rs +++ b/rust/schist_actualbudget_importer/src/transformers.rs @@ -1,3 +1,10 @@ +use actualbudget_models::{ + actualbudget_account::ActualbudgetAccount, + actualbudget_category::ActualbudgetCategory, + actualbudget_date::ActualbudgetDate, + actualbudget_transaction::ActualbudgetTransaction, + actualbudget_zero_budget::ActualbudgetZeroBudget, +}; use anyhow::Result; use schist_models::{ account::Account, @@ -12,8 +19,6 @@ use schist_models::{ use core::panic; use std::hash::{DefaultHasher, Hash, Hasher}; -use crate::models::{actualbudget_account::ActualbudgetAccount, actualbudget_category::ActualbudgetCategory, actualbudget_date::ActualbudgetDate, actualbudget_transaction::ActualbudgetTransaction, actualbudget_zero_budget::ActualbudgetZeroBudget}; - pub fn transform_date(actualbudget_date: &ActualbudgetDate) -> Result<DatetimeUtc> { actualbudget_date.to_iso().parse() } @@ -99,14 +104,15 @@ fn get_first_zero_budget_in_category( pub fn transform_transactions( actualbudget_transactions: &[ActualbudgetTransaction], - actualbudget_category_transfers_account: &ActualbudgetAccount, + actualbudget_category_transfers_account: &Option<ActualbudgetAccount>, ) -> Result<(Vec<Transaction>, Vec<TransactionCategorisation>)> { let mut transactions = Vec::<Transaction>::new(); let mut transaction_categorisations = Vec::<TransactionCategorisation>::new(); let mut actualbudget_transactions = actualbudget_transactions.to_vec(); - actualbudget_transactions - .retain(|t| t.category_id.clone() != actualbudget_category_transfers_account.id.clone()); + actualbudget_transactions.retain(|transaction| + is_not_category_transfer(transaction, actualbudget_category_transfers_account) + ); let mut parent_actualbudget_transactions = actualbudget_transactions.to_vec(); parent_actualbudget_transactions.retain(|t| t.is_parent); let mut child_actualbudget_transactions = actualbudget_transactions.to_vec(); @@ -170,13 +176,14 @@ pub fn transform_transactions( pub fn transform_category_transfers( actualbudget_transactions: &[ActualbudgetTransaction], - actualbudget_category_transfers_account: &ActualbudgetAccount, + actualbudget_category_transfers_account: &Option<ActualbudgetAccount>, ) -> Vec<CategoryTransfer> { let mut category_transfers = Vec::<CategoryTransfer>::new(); let mut actualbudget_category_transfers = actualbudget_transactions.to_vec(); - actualbudget_category_transfers - .retain(|t| t.category_id.clone() == actualbudget_category_transfers_account.id.clone()); + actualbudget_category_transfers.retain(|transaction| + is_category_transfer(transaction, actualbudget_category_transfers_account) + ); let mut actualbudget_parent_category_transfers = actualbudget_category_transfers.to_vec(); actualbudget_parent_category_transfers.retain(|t| t.is_parent); let mut actualbudget_child_category_transfers = actualbudget_category_transfers.to_vec(); @@ -223,3 +230,20 @@ pub fn transform_category_transfers( category_transfers } + +fn is_category_transfer( + transaction: &ActualbudgetTransaction, + actualbudget_category_transfers_account: &Option<ActualbudgetAccount> +) -> bool { + match actualbudget_category_transfers_account { + None => false, + Some(acc) => transaction.category_id.clone() == acc.id.clone(), + } +} + +fn is_not_category_transfer( + transaction: &ActualbudgetTransaction, + actualbudget_category_transfers_account: &Option<ActualbudgetAccount> +) -> bool { + !is_category_transfer(transaction, actualbudget_category_transfers_account) +} |
