tackler_core/kernel/
report_settings.rs

1/*
2 * Tackler-NG 2025
3 * SPDX-License-Identifier: Apache-2.0
4 */
5use crate::config::Scale;
6use crate::kernel::Settings;
7use crate::kernel::price_lookup::PriceLookup;
8use crate::model::Commodity;
9use crate::tackler;
10use jiff::tz::TimeZone;
11use std::sync::Arc;
12use tackler_api::txn_ts::{GroupBy, TimestampStyle};
13
14#[derive(Debug, Clone)]
15pub struct BalanceSettings {
16    pub(crate) title: String,
17    pub(crate) ras: Vec<String>,
18    pub(crate) scale: Scale,
19    pub(crate) report_commodity: Option<Arc<Commodity>>,
20    pub(crate) price_lookup: PriceLookup,
21}
22
23impl TryFrom<&Settings> for BalanceSettings {
24    type Error = tackler::Error;
25
26    fn try_from(settings: &Settings) -> Result<Self, Self::Error> {
27        Ok(BalanceSettings {
28            title: settings.report.balance.title.clone(),
29            ras: settings.get_balance_ras(),
30            scale: settings.report.scale.clone(),
31            report_commodity: settings.get_report_commodity(),
32            price_lookup: settings.get_price_lookup(),
33        })
34    }
35}
36
37#[derive(Debug, Clone)]
38pub struct BalanceGroupSettings {
39    pub title: String,
40    pub ras: Vec<String>,
41    pub group_by: GroupBy,
42    pub report_tz: TimeZone,
43    pub report_commodity: Option<Arc<Commodity>>,
44    pub price_lookup: PriceLookup,
45    pub scale: Scale,
46}
47
48impl TryFrom<&Settings> for BalanceGroupSettings {
49    type Error = tackler::Error;
50
51    fn try_from(settings: &Settings) -> Result<Self, Self::Error> {
52        let bgs = BalanceGroupSettings {
53            title: settings.report.balance_group.title.clone(),
54            ras: settings.get_balance_group_ras(),
55            group_by: settings.report.balance_group.group_by,
56            report_tz: settings.report.report_tz.clone(),
57            report_commodity: settings.get_report_commodity(),
58            price_lookup: settings.get_price_lookup(),
59            scale: settings.report.scale.clone(),
60        };
61        Ok(bgs)
62    }
63}
64
65#[derive(Debug, Clone)]
66pub struct RegisterSettings {
67    pub title: String,
68    pub ras: Vec<String>,
69    pub report_tz: TimeZone,
70    pub report_commodity: Option<Arc<Commodity>>,
71    pub price_lookup: PriceLookup,
72    pub timestamp_style: TimestampStyle,
73    pub(crate) scale: Scale,
74}
75
76impl TryFrom<&Settings> for RegisterSettings {
77    type Error = tackler::Error;
78
79    fn try_from(settings: &Settings) -> Result<RegisterSettings, tackler::Error> {
80        let rs = RegisterSettings {
81            title: settings.report.register.title.clone(),
82            ras: settings.get_register_ras(),
83            report_tz: settings.report.report_tz.clone(),
84            report_commodity: settings.get_report_commodity(),
85            price_lookup: settings.get_price_lookup(),
86            timestamp_style: settings.report.register.timestamp_style,
87            scale: settings.report.scale.clone(),
88        };
89        Ok(rs)
90    }
91}