diff options
Diffstat (limited to 'rust/schist_actualbudget_importer/src/transformers.rs')
| -rw-r--r-- | rust/schist_actualbudget_importer/src/transformers.rs | 40 |
1 files changed, 32 insertions, 8 deletions
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) +} |
