From ed0fbfb5ddd1190e04da55bc73801d8eab72398b Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Wed, 21 May 2025 18:20:19 +1000 Subject: [PATCH] Refactor AllTransactionsIncludingRetainedEarnings --- src/main.rs | 5 ++-- src/reporting/steps.rs | 57 ++++++++++++++++-------------------------- 2 files changed, 24 insertions(+), 38 deletions(-) diff --git a/src/main.rs b/src/main.rs index a80fcae..b112c11 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,10 +60,9 @@ fn main() { let targets: Vec> = vec![ Box::new(CalculateIncomeTax {}), Box::new(AllTransactionsIncludingRetainedEarnings { - product_kinds: &[ReportingProductKind::BalancesAt], - args: Box::new(DateArgs { + args: DateArgs { date: NaiveDate::from_ymd_opt(2025, 6, 30).unwrap(), - }), + }, }), ]; diff --git a/src/reporting/steps.rs b/src/reporting/steps.rs index 60b3c3e..e98c162 100644 --- a/src/reporting/steps.rs +++ b/src/reporting/steps.rs @@ -52,24 +52,7 @@ pub fn register_lookup_fns(context: &mut ReportingContext) { "AllTransactionsIncludingRetainedEarnings", &[ReportingProductKind::BalancesAt], AllTransactionsIncludingRetainedEarnings::takes_args, - |a| { - AllTransactionsIncludingRetainedEarnings::from_args( - &[ReportingProductKind::BalancesAt], - a, - ) - }, - ); - - context.register_lookup_fn( - "AllTransactionsIncludingRetainedEarnings", - &[ReportingProductKind::BalancesBetween], - AllTransactionsIncludingRetainedEarnings::takes_args, - |a| { - AllTransactionsIncludingRetainedEarnings::from_args( - &[ReportingProductKind::BalancesBetween], - a, - ) - }, + AllTransactionsIncludingRetainedEarnings::from_args, ); context.register_lookup_fn( @@ -141,22 +124,17 @@ impl ReportingStep for AllTransactionsExceptRetainedEarnings { #[derive(Debug)] pub struct AllTransactionsIncludingRetainedEarnings { - pub product_kinds: &'static [ReportingProductKind], // Must have single member - pub args: Box, + pub args: DateArgs, } impl AllTransactionsIncludingRetainedEarnings { - fn takes_args(_args: &Box) -> bool { - true + fn takes_args(args: &Box) -> bool { + args.is::() } - fn from_args( - product_kinds: &'static [ReportingProductKind], - args: Box, - ) -> Box { + fn from_args(args: Box) -> Box { Box::new(AllTransactionsIncludingRetainedEarnings { - product_kinds, - args, + args: *args.downcast().unwrap(), }) } } @@ -171,17 +149,26 @@ impl ReportingStep for AllTransactionsIncludingRetainedEarnings { fn id(&self) -> ReportingStepId { ReportingStepId { name: "AllTransactionsIncludingRetainedEarnings", - product_kinds: self.product_kinds, - args: self.args.clone(), + product_kinds: &[ReportingProductKind::BalancesAt], + args: Box::new(self.args.clone()), } } fn requires(&self, _context: &ReportingContext) -> Vec { - vec![ReportingProductId { - name: "AllTransactionsExceptRetainedEarnings", - kind: self.product_kinds[0], - args: self.args.clone(), - }] + vec![ + // AllTransactionsIncludingRetainedEarnings requires AllTransactionsExceptRetainedEarnings + ReportingProductId { + name: "AllTransactionsExceptRetainedEarnings", + kind: ReportingProductKind::BalancesAt, + args: Box::new(self.args.clone()), + }, + // AllTransactionsIncludingRetainedEarnings requires RetainedEarningsToEquity + ReportingProductId { + name: "RetainedEarningsToEquity", + kind: ReportingProductKind::Transactions, + args: Box::new(self.args.clone()), + }, + ] } }