summaryrefslogtreecommitdiff
path: root/rust/schist_actualbudget_importer
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-17 13:00:53 +0000
committerJoe Carstairs <me@joeac.net>2024-11-17 13:00:53 +0000
commit19f5040910ad297ecd618f67675cd2fa00771bdd (patch)
tree403d6e0a8924b18678d41d5d5fccf0c26bbf7d82 /rust/schist_actualbudget_importer
parent99fa72e2b9d572e00cd232bd55a3fa24722c3134 (diff)
Refactors Actualbudget importer
Diffstat (limited to 'rust/schist_actualbudget_importer')
-rw-r--r--rust/schist_actualbudget_importer/Cargo.toml3
-rw-r--r--rust/schist_actualbudget_importer/src/main.rs5
-rw-r--r--rust/schist_actualbudget_importer/src/models/actualbudget_account.rs8
-rw-r--r--rust/schist_actualbudget_importer/src/models/actualbudget_category.rs8
-rw-r--r--rust/schist_actualbudget_importer/src/models/actualbudget_date.rs75
-rw-r--r--rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs18
-rw-r--r--rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs13
-rw-r--r--rust/schist_actualbudget_importer/src/models/mod.rs5
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_all.rs6
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/get_category_transfers_account.rs13
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_accounts/mod.rs5
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_categories/get_all.rs6
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_categories/mod.rs3
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_all.rs6
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/get_first_date.rs14
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_transactions/mod.rs5
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/get_all.rs6
-rw-r--r--rust/schist_actualbudget_importer/src/queries/actualbudget_zero_budgets/mod.rs3
-rw-r--r--rust/schist_actualbudget_importer/src/queries/mod.rs4
-rw-r--r--rust/schist_actualbudget_importer/src/schema.rs47
-rw-r--r--rust/schist_actualbudget_importer/src/transformers.rs40
21 files changed, 35 insertions, 258 deletions
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/models/actualbudget_account.rs b/rust/schist_actualbudget_importer/src/models/actualbudget_account.rs
deleted file mode 100644
index b3d00ac..0000000
--- a/rust/schist_actualbudget_importer/src/models/actualbudget_account.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-use diesel::prelude::{Queryable, Selectable};
-
-#[derive(Queryable, Selectable)]
-#[diesel(table_name = crate::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/schist_actualbudget_importer/src/models/actualbudget_category.rs
deleted file mode 100644
index cbea99b..0000000
--- a/rust/schist_actualbudget_importer/src/models/actualbudget_category.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-use diesel::{prelude::Queryable, Selectable};
-
-#[derive(Queryable, Selectable)]
-#[diesel(table_name = crate::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/schist_actualbudget_importer/src/models/actualbudget_date.rs
deleted file mode 100644
index bef160c..0000000
--- a/rust/schist_actualbudget_importer/src/models/actualbudget_date.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-use diesel::{backend::Backend, deserialize::{FromSql, FromSqlRow}, expression::AsExpression, sql_types::Integer, sqlite::Sqlite};
-
-#[derive(Clone, PartialEq, Eq, Debug, AsExpression, FromSqlRow)]
-#[diesel(sql_type=Integer)]
-pub struct ActualbudgetDate(i32);
-
-#[derive(Clone, PartialOrd, PartialEq, Eq)]
-enum DatePart {
- MonthOfYear,
- DayOfMonth,
-}
-
-// actualbudget represents dates as numbers which "look like" the corresponding
-// ISO string when written in decimal. E.g. 20240901 represents 1 Sep 2024. It
-// also uses month specifiers, e.g. 202409 to represent Sep 2024. In this case,
-// we interpret this as the first day of the month, e.g. 2024-09-01.
-
-impl ActualbudgetDate {
- pub fn to_iso(&self) -> String {
- format!("{0}-{1}-{2}", self.year(), self.month(), self.day())
- }
-
- pub fn year(&self) -> String {
- self.0.to_string()[0..4].to_string()
- }
-
- pub fn month(&self) -> String {
- self.0.to_string()[4..6].to_string()
- }
-
- pub fn day(&self) -> String {
- match self.date_part() {
- DatePart::DayOfMonth => self.0.to_string()[6..8].to_string(),
- DatePart::MonthOfYear => String::from("01"),
- }
- }
-
- pub fn from_i32(i: i32) -> Self {
- ActualbudgetDate(i)
- }
-
- fn date_part(&self) -> DatePart {
- if self.0 < 10000000 {
- DatePart::MonthOfYear
- } else {
- DatePart::DayOfMonth
- }
- }
-
- fn dayified_value(&self) -> i32 {
- match self.date_part() {
- DatePart::DayOfMonth => self.0,
- DatePart::MonthOfYear => self.0 * 100 + 1,
- }
- }
-}
-
-impl Ord for ActualbudgetDate {
- fn cmp(&self, other: &Self) -> std::cmp::Ordering {
- self.dayified_value().cmp(&other.dayified_value())
- }
-}
-
-impl PartialOrd for ActualbudgetDate {
- fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
- Some(self.cmp(other))
- }
-}
-
-impl FromSql<Integer, Sqlite> for ActualbudgetDate {
- fn from_sql(bytes: <Sqlite as Backend>::RawValue<'_>) -> diesel::deserialize::Result<Self> {
- let int: i32 = FromSql::<Integer, Sqlite>::from_sql(bytes)?;
- Ok(ActualbudgetDate(int))
- }
-}
diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs b/rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs
deleted file mode 100644
index be2ca1a..0000000
--- a/rust/schist_actualbudget_importer/src/models/actualbudget_transaction.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use diesel::prelude::{Identifiable, Queryable, QueryableByName, Selectable};
-
-use crate::models::actualbudget_date::ActualbudgetDate;
-
-#[derive(Identifiable, QueryableByName, Queryable, Selectable, Clone)]
-#[diesel(table_name = crate::schema::transactions)]
-pub struct ActualbudgetTransaction {
- pub id: String,
- pub is_parent: bool,
- pub is_child: bool,
- pub account_id: String,
- pub category_id: String,
- pub amount: i32,
- pub payee: String,
- pub notes: String,
- pub date: ActualbudgetDate,
- pub parent_id: Option<String>,
-}
diff --git a/rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs b/rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs
deleted file mode 100644
index 6478d34..0000000
--- a/rust/schist_actualbudget_importer/src/models/actualbudget_zero_budget.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-use crate::models::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(check_for_backend(Sqlite))]
-pub struct ActualbudgetZeroBudget {
- pub id: String,
- pub month: ActualbudgetDate,
- pub category_id: String,
- pub amount: i32,
- pub do_carry_over: i32,
-}
diff --git a/rust/schist_actualbudget_importer/src/models/mod.rs b/rust/schist_actualbudget_importer/src/models/mod.rs
deleted file mode 100644
index 1c97c65..0000000
--- a/rust/schist_actualbudget_importer/src/models/mod.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-pub mod actualbudget_account;
-pub mod actualbudget_category;
-pub mod actualbudget_date;
-pub mod actualbudget_transaction;
-pub mod actualbudget_zero_budget;
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/get_all.rs b/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/get_all.rs
deleted file mode 100644
index 4cb7ebc..0000000
--- a/rust/schist_actualbudget_importer/src/queries/actualbudget_categories/get_all.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-use crate::{models::actualbudget_category::ActualbudgetCategory, 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> {
- categories.select(ActualbudgetCategory::as_select()).load(connection)
-}
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/queries/mod.rs b/rust/schist_actualbudget_importer/src/queries/mod.rs
deleted file mode 100644
index e16dafc..0000000
--- a/rust/schist_actualbudget_importer/src/queries/mod.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-pub mod actualbudget_accounts;
-pub mod actualbudget_categories;
-pub mod actualbudget_transactions;
-pub mod actualbudget_zero_budgets;
diff --git a/rust/schist_actualbudget_importer/src/schema.rs b/rust/schist_actualbudget_importer/src/schema.rs
deleted file mode 100644
index a872231..0000000
--- a/rust/schist_actualbudget_importer/src/schema.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-diesel::table! {
- accounts (id) {
- id -> Text,
- name -> Text,
- }
-}
-
-diesel::table! {
- categories (id) {
- id -> Text,
- name -> Text,
- }
-}
-
-diesel::table! {
- transactions (id) {
- id -> Text,
- #[sql_name = "isParent"]
- is_parent -> Bool,
- #[sql_name = "isChild"]
- is_child -> Bool,
- #[sql_name = "acct"]
- account_id -> Text,
- #[sql_name = "category"]
- category_id -> Text,
- amount -> Integer,
- #[sql_name = "description"]
- payee -> Text,
- notes -> Text,
- date -> Integer,
- parent_id -> Nullable<Text>,
- }
-}
-
-diesel::table! {
- zero_budgets (id) {
- id -> Text,
- month -> Integer,
- #[sql_name = "category"]
- category_id -> Text,
- amount -> Integer,
- #[sql_name = "carryover"]
- do_carry_over -> Integer,
- // goal -> Integer,
- // long_goal -> Integer,
- }
-}
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)
+}