summaryrefslogtreecommitdiff
path: root/rust/schist_actualbudget_importer/src/transformers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/schist_actualbudget_importer/src/transformers.rs')
-rw-r--r--rust/schist_actualbudget_importer/src/transformers.rs40
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)
+}