summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-30 22:26:18 +0000
committerJoe Carstairs <me@joeac.net>2024-11-30 22:28:40 +0000
commit283475af457c71db280fe7732218450a3163614b (patch)
tree7bd0d5b25f1a672743d559887108da685fa3f735
parent19f03fd78f40923406e6282d210483c62725401a (diff)
Transforms budget drips with unique IDs across a single AB zero budget
-rw-r--r--rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs
index 2e9125b..7ec41af 100644
--- a/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs
+++ b/rust/actualbudget_to_schist_transformer/src/transform_state/transform_budget_drips.rs
@@ -1,3 +1,5 @@
+use std::hash::{DefaultHasher, Hash, Hasher};
+
use actualbudget_models::ActualbudgetZeroBudget;
use anyhow::{Context, Result};
use itertools::Itertools;
@@ -46,7 +48,7 @@ fn map_actualbudget_zero_budget_to_budget_drips(
let budget_drips: Vec<BudgetDrip> = days_in_month.iter().map(|&date|
BudgetDrip {
- id: transform_id(&actualbudget_zero_budget.id),
+ id: transform_budget_drip_id(&actualbudget_zero_budget, &date),
category_id: transform_id(&actualbudget_zero_budget.category_id),
date,
quantity: if date == first_day_of_month {
@@ -85,6 +87,18 @@ fn group_actualbudget_zero_budgets_by_category_id(
).collect()
}
+fn transform_budget_drip_id(
+ actualbudget_zero_budget: &ActualbudgetZeroBudget,
+ date: &DateUtc,
+) -> i32 {
+ let mut hasher = DefaultHasher::new();
+ let unique_str = actualbudget_zero_budget.id.clone() + date.to_string().as_str();
+ unique_str.hash(&mut hasher);
+ (hasher.finish() % std::convert::TryInto::<u64>::try_into(i32::MAX).unwrap())
+ .try_into()
+ .unwrap()
+}
+
#[cfg(test)]
mod test {
use actualbudget_fakes::actualbudget_zero_budget::make_fake_actualbudget_zero_budget_builder;