diff options
| author | Joe Carstairs <me@joeac.net> | 2024-11-24 15:45:04 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-11-24 15:56:01 +0000 |
| commit | 1f5dcf9762a83d5972c0c8dbad22732505bf621c (patch) | |
| tree | 5a1f5edd993733d48016ce2a8a8691b8f446858a /rust/schist_actualbudget_importer | |
| parent | 022795ffcaaa0d904c9f911d8a059885c2254278 (diff) | |
Swaps budget updates for budget drips
Diffstat (limited to 'rust/schist_actualbudget_importer')
6 files changed, 36 insertions, 59 deletions
diff --git a/rust/schist_actualbudget_importer/src/schist_state.rs b/rust/schist_actualbudget_importer/src/schist_state.rs index a42e446..92c97b3 100644 --- a/rust/schist_actualbudget_importer/src/schist_state.rs +++ b/rust/schist_actualbudget_importer/src/schist_state.rs @@ -1,12 +1,20 @@ use anyhow::Result; use diesel::SqliteConnection; -use schist_models::{account::Account, budget_update::BudgetUpdate, category::Category, category_transfer::CategoryTransfer, datetime_utc::DatetimeUtc, transaction::Transaction, transaction_categorisation::TransactionCategorisation}; +use schist_models::{ + account::Account, + budget_drip::BudgetDrip, + category::Category, + category_transfer::CategoryTransfer, + datetime_utc::DatetimeUtc, + transaction::Transaction, + transaction_categorisation::TransactionCategorisation, +}; pub struct SchistState { pub first_transaction_date: DatetimeUtc, pub accounts: Vec<Account>, pub categories: Vec<Category>, - pub budget_updates: Vec<BudgetUpdate>, + pub budget_drips: Vec<BudgetDrip>, pub transactions: Vec<Transaction>, pub transaction_categorisations: Vec<TransactionCategorisation>, pub category_transfers: Vec<CategoryTransfer>, @@ -16,7 +24,7 @@ pub fn export_schist_state(schist_state: &SchistState, schist_connection: &mut S schist_queries::clear::clear(schist_connection)?; schist_queries::accounts::insert_accounts(&schist_state.accounts, schist_connection)?; schist_queries::categories::insert_categories(&schist_state.categories, schist_connection)?; - schist_queries::budget_updates::insert_budget_updates(&schist_state.budget_updates, schist_connection)?; + schist_queries::budget_drips::insert_budget_drips(&schist_state.budget_drips, schist_connection)?; schist_queries::transactions::insert_transactions(&schist_state.transactions, schist_connection)?; schist_queries::transaction_categorisations::insert_transaction_categorisations(&schist_state.transaction_categorisations, schist_connection)?; schist_queries::category_transfers::insert_category_transfers(&schist_state.category_transfers, schist_connection)?; diff --git a/rust/schist_actualbudget_importer/src/transform_state/mod.rs b/rust/schist_actualbudget_importer/src/transform_state/mod.rs index d82a59e..916894a 100644 --- a/rust/schist_actualbudget_importer/src/transform_state/mod.rs +++ b/rust/schist_actualbudget_importer/src/transform_state/mod.rs @@ -1,6 +1,6 @@ mod is_category_transfer; mod transform_accounts; -mod transform_budget_updates; +mod transform_budget_drips; mod transform_categories; mod transform_category_transfers; mod transform_date; @@ -11,7 +11,6 @@ mod transform_transactions; use is_category_transfer::is_category_transfer; use is_category_transfer::is_not_category_transfer; use transform_accounts::transform_accounts; -use transform_budget_updates::transform_budget_updates; use transform_categories::transform_categories; use transform_category_transfers::transform_category_transfers; use transform_date::transform_date; diff --git a/rust/schist_actualbudget_importer/src/transform_state/transform_budget_drips.rs b/rust/schist_actualbudget_importer/src/transform_state/transform_budget_drips.rs new file mode 100644 index 0000000..418c759 --- /dev/null +++ b/rust/schist_actualbudget_importer/src/transform_state/transform_budget_drips.rs @@ -0,0 +1,6 @@ +use anyhow::Result; +use schist_models::budget_drip::BudgetDrip; + +pub fn transform_budget_drips() -> Result<Vec<BudgetDrip>> { + todo!(); +} diff --git a/rust/schist_actualbudget_importer/src/transform_state/transform_budget_updates.rs b/rust/schist_actualbudget_importer/src/transform_state/transform_budget_updates.rs deleted file mode 100644 index f4d0e3f..0000000 --- a/rust/schist_actualbudget_importer/src/transform_state/transform_budget_updates.rs +++ /dev/null @@ -1,48 +0,0 @@ -use anyhow::Result; -use actualbudget_models::ActualbudgetZeroBudget; -use schist_models::{budget_update::BudgetUpdate, date_utc::DateUtc}; - -use super::{transform_date, transform_id}; - -pub fn transform_budget_updates( - actualbudget_zero_budgets: &[ActualbudgetZeroBudget], -) -> Result<Vec<BudgetUpdate>> { - let mut budget_updates = Vec::<BudgetUpdate>::new(); - for zero_budget in actualbudget_zero_budgets { - let first_zero_budget_in_category = get_first_zero_budget_in_category( - actualbudget_zero_budgets, - &zero_budget.category_id.clone(), - ); - if first_zero_budget_in_category.is_some_and(|zb| zb.id == zero_budget.id) { - continue; - } - budget_updates.push(BudgetUpdate { - id: transform_id(&zero_budget.id.clone()), - category_id: transform_id(&zero_budget.category_id.clone()), - date: DateUtc::from(transform_date(&zero_budget.month.clone())?), - new_budget: zero_budget.amount.try_into().unwrap(), - new_period: 30, - }) - } - Ok(budget_updates) -} - -fn get_first_zero_budget_in_category( - actualbudget_zero_budgets: &[ActualbudgetZeroBudget], - actualbudget_category_id: &str, -) -> Option<ActualbudgetZeroBudget> { - let mut category_zero_budgets = actualbudget_zero_budgets.to_vec(); - category_zero_budgets.retain(|zb| zb.category_id == actualbudget_category_id); - category_zero_budgets - .iter() - .min_by_key(|zb| zb.month.clone()) - .cloned() -} - -#[cfg(test)] -mod test { - #[test] - fn todo() { - todo!() - } -} diff --git a/rust/schist_actualbudget_importer/src/transform_state/transform_categories.rs b/rust/schist_actualbudget_importer/src/transform_state/transform_categories.rs index 8b4a962..e0fc687 100644 --- a/rust/schist_actualbudget_importer/src/transform_state/transform_categories.rs +++ b/rust/schist_actualbudget_importer/src/transform_state/transform_categories.rs @@ -1,5 +1,5 @@ use actualbudget_models::ActualbudgetCategory; -use schist_models::category::Category; +use schist_models::{budget_period_unit::BudgetPeriodUnit, category::Category}; use super::transform_id; @@ -11,11 +11,24 @@ pub fn transform_categories( categories.push(Category { id: transform_id(&actualbudget_category.id.clone()), name: actualbudget_category.name.clone(), + balance: 0, + balance_date: get_balance_date(), + budget_period: 1, + budget_period_unit: BudgetPeriodUnit::Month, + budget_quantity: get_budget_quantity(), }) } categories } +fn get_balance_date() -> schist_models::date_utc::DateUtc { + todo!() +} + +fn get_budget_quantity() -> i32 { + todo!() +} + #[cfg(test)] mod test { #[test] diff --git a/rust/schist_actualbudget_importer/src/transform_state/transform_state.rs b/rust/schist_actualbudget_importer/src/transform_state/transform_state.rs index 9236532..d8918bc 100644 --- a/rust/schist_actualbudget_importer/src/transform_state/transform_state.rs +++ b/rust/schist_actualbudget_importer/src/transform_state/transform_state.rs @@ -1,19 +1,18 @@ use anyhow::Result; -use schist_models::{account::Account, budget_update::BudgetUpdate, category::Category, category_transfer::CategoryTransfer, transaction::Transaction, transaction_categorisation::TransactionCategorisation}; +use schist_models::{account::Account, category::Category, category_transfer::CategoryTransfer, transaction::Transaction, transaction_categorisation::TransactionCategorisation}; use crate::{actualbudget_state::ActualbudgetState, schist_state::SchistState}; -use super::{transform_accounts, transform_budget_updates, transform_categories, transform_category_transfers, transform_date, transform_transactions}; +use super::{transform_accounts, transform_budget_drips::transform_budget_drips, transform_categories, transform_category_transfers, transform_date, transform_transactions}; pub fn transform_state(actualbudget_state: ActualbudgetState) -> Result<SchistState> { let first_transaction_date = transform_date(&actualbudget_state.actualbudget_first_transaction_date)?; let accounts: Vec<Account> = transform_accounts(&actualbudget_state.actualbudget_accounts, &first_transaction_date); + let budget_drips = transform_budget_drips()?; let categories: Vec<Category> = transform_categories(&actualbudget_state.actualbudget_categories); - let budget_updates: Vec<BudgetUpdate> = - transform_budget_updates(&actualbudget_state.actualbudget_zero_budgets)?; let (transactions, transaction_categorisations): (Vec<Transaction>, Vec<TransactionCategorisation>) = transform_transactions( &actualbudget_state.actualbudget_transactions, @@ -28,7 +27,7 @@ pub fn transform_state(actualbudget_state: ActualbudgetState) -> Result<SchistSt first_transaction_date, accounts, categories, - budget_updates, + budget_drips, transactions, transaction_categorisations, category_transfers, |
