summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-06 14:47:12 +0000
committerJoe Carstairs <me@joeac.net>2024-12-06 14:47:12 +0000
commit31d092b38da78e58efe5fa8de4f8b9c0267fc5be (patch)
tree53a4e853c648b611737bc3973f972eb7e4a8b7b7
parentb5c729e22095525a628721688a4afefb84749fac (diff)
Fix transaction transform: looks up payee names
-rw-r--r--rust/actualbudget_to_schist_transformer/src/transform_state/transform_state.rs1
-rw-r--r--rust/actualbudget_to_schist_transformer/src/transform_state/transform_transactions.rs36
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());