summaryrefslogtreecommitdiff
path: root/rust/schist_actualbudget_importer
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-24 15:45:04 +0000
committerJoe Carstairs <me@joeac.net>2024-11-24 15:56:01 +0000
commit1f5dcf9762a83d5972c0c8dbad22732505bf621c (patch)
tree5a1f5edd993733d48016ce2a8a8691b8f446858a /rust/schist_actualbudget_importer
parent022795ffcaaa0d904c9f911d8a059885c2254278 (diff)
Swaps budget updates for budget drips
Diffstat (limited to 'rust/schist_actualbudget_importer')
-rw-r--r--rust/schist_actualbudget_importer/src/schist_state.rs14
-rw-r--r--rust/schist_actualbudget_importer/src/transform_state/mod.rs3
-rw-r--r--rust/schist_actualbudget_importer/src/transform_state/transform_budget_drips.rs6
-rw-r--r--rust/schist_actualbudget_importer/src/transform_state/transform_budget_updates.rs48
-rw-r--r--rust/schist_actualbudget_importer/src/transform_state/transform_categories.rs15
-rw-r--r--rust/schist_actualbudget_importer/src/transform_state/transform_state.rs9
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,