diff options
| author | Joe Carstairs <me@joeac.net> | 2024-12-06 14:47:12 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-12-06 14:47:12 +0000 |
| commit | 31d092b38da78e58efe5fa8de4f8b9c0267fc5be (patch) | |
| tree | 53a4e853c648b611737bc3973f972eb7e4a8b7b7 | |
| parent | b5c729e22095525a628721688a4afefb84749fac (diff) | |
Fix transaction transform: looks up payee names
| -rw-r--r-- | rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs | 1 | ||||
| -rw-r--r-- | rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs | 36 |
2 files changed, 32 insertions, 5 deletions
diff --git a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs index 55fa583..7c64e35 100644 --- a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs +++ b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs @@ -33,6 +33,7 @@ fn transform_state_without_context(actualbudget_state: ActualbudgetState) -> Res transform_transactions( &remaining_transactions, &actualbudget_state.actualbudget_category_transfers_account, + &actualbudget_state.actualbudget_payees, )?; let category_transfers: Vec<CategoryTransfer> = transform_category_transfers( &remaining_transactions, diff --git a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs index 3e9b49a..f7fb098 100644 --- a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs +++ b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs @@ -1,5 +1,5 @@ use anyhow::{Context, Result}; -use actualbudget_models::{ActualbudgetAccount, ActualbudgetTransaction}; +use actualbudget_models::{ActualbudgetAccount, ActualbudgetPayee, ActualbudgetTransaction}; use schist_models::{transaction::Transaction, transaction_categorisation::TransactionCategorisation}; use super::{is_not_category_transfer, transform_date, transform_id}; @@ -7,14 +7,20 @@ use super::{is_not_category_transfer, transform_date, transform_id}; pub fn transform_transactions( actualbudget_transactions: &[ActualbudgetTransaction], actualbudget_category_transfers_account: &Option<ActualbudgetAccount>, + actualbudget_payees: &[ActualbudgetPayee], ) -> Result<(Vec<Transaction>, Vec<TransactionCategorisation>)> { - transform_transactions_without_context(actualbudget_transactions, actualbudget_category_transfers_account) + transform_transactions_without_context( + actualbudget_transactions, + actualbudget_category_transfers_account, + actualbudget_payees, + ) .with_context(|| "failed to transform actualbudget transactions to schist transactions") } fn transform_transactions_without_context( actualbudget_transactions: &[ActualbudgetTransaction], actualbudget_category_transfers_account: &Option<ActualbudgetAccount>, + actualbudget_payees: &[ActualbudgetPayee], ) -> Result<(Vec<Transaction>, Vec<TransactionCategorisation>)> { let mut transactions = Vec::<Transaction>::new(); let mut transaction_categorisations = Vec::<TransactionCategorisation>::new(); @@ -37,10 +43,20 @@ fn transform_transactions_without_context( for atomic_actualbudget_transaction in atomic_actualbudget_transactions { let transaction_id = transform_id(&atomic_actualbudget_transaction.id); + let payee_name = atomic_actualbudget_transaction + .payee + .clone() + .map(|p| actualbudget_payees + .iter() + .find(|pp| pp.id == p) + .map(|pp| pp.name.clone()) + ).unwrap_or(None) + .unwrap_or_else(String::new); + transactions.push(Transaction { id: transaction_id, description: atomic_actualbudget_transaction.notes.clone().unwrap_or_else(String::new), - payee: atomic_actualbudget_transaction.payee.clone().unwrap_or_else(String::new), + payee: payee_name, quantity: atomic_actualbudget_transaction.amount.try_into().unwrap(), date: transform_date(&atomic_actualbudget_transaction.date)?, account_id: transform_id(&atomic_actualbudget_transaction.account_id), @@ -107,7 +123,7 @@ fn transform_transactions_without_context( #[cfg(test)] mod test { - use actualbudget_fakes::{actualbudget_account::make_fake_actualbudget_account, actualbudget_transaction::make_fake_actualbudget_transaction_builder}; + use actualbudget_fakes::{actualbudget_account::make_fake_actualbudget_account, actualbudget_payee::{make_fake_actualbudget_payee, make_fake_actualbudget_payee_builder}, actualbudget_transaction::make_fake_actualbudget_transaction_builder}; use actualbudget_models::ActualbudgetDate; use schist_models::date_utc::DateUtc; @@ -124,10 +140,12 @@ mod test { .unwrap(), ]; let actualbudget_category_transfers_account = make_fake_actualbudget_account("0"); + let actualbudget_payees = [make_fake_actualbudget_payee("0")]; let (transactions, transaction_categorisations) = transform_transactions( &actualbudget_transactions, &Some(actualbudget_category_transfers_account), + &actualbudget_payees, ).unwrap(); assert_eq!(0, transactions.len()); @@ -141,16 +159,23 @@ mod test { .account_id(String::from("0")) .amount(100) .category_id(Some(String::from("0"))) - .payee(Some(String::from("Gringotts"))) + .payee(Some(String::from("0"))) .notes(Some(String::from("Savings"))) .date(ActualbudgetDate::from_i32(19700101)) .build() .unwrap(), ]; + let actualbudget_payees = [ + make_fake_actualbudget_payee_builder("0") + .name(String::from("Gringotts")) + .build() + .unwrap(), + ]; let (transactions, transaction_categorisations) = transform_transactions( &actualbudget_transactions, &None, + &actualbudget_payees, ).unwrap(); assert_eq!(1, transactions.len()); @@ -198,6 +223,7 @@ mod test { let (transactions, transaction_categorisations) = transform_transactions( &actualbudget_transactions, &None, + &[], ).unwrap(); assert_eq!(1, transactions.len()); |
