crate::ix!();
#[derive(Debug,Builder,Getters,Default)]
#[getset(get="pub")]
pub struct AccountAnalysis<TxCat:TransactionCategory> {
flags: AccountAnalysisFlags,
histogram_display_strategy: HistogramDisplayStrategy,
year: TrackedYear,
accounts: Vec<AccountKind>,
donations: Vec<Donation>,
amazon_biz_items: Option<Vec<AmazonStoreBusinessPurchase>>,
amazon_med_items: Option<Vec<AmazonStoreMedicalPurchase>>,
category_map: CategoryMap<TxCat>,
}
impl<TxCat:TransactionCategory + 'static> AccountAnalysis<TxCat> {
pub fn full_analysis(
&self,
program_config: &ProgramConfig
) -> Result<(),AccountError>
{
debug!("running full analysis with {:#?} {:#?}", self, program_config);
for kind in self.accounts().iter() {
Account::new(*self.year(), *kind, program_config)?.analyze(self)?;
}
if let Some(amazon_biz_items) = self.amazon_biz_items() {
analyze_amazon_line_items::<TxCat,_>(amazon_biz_items);
}
if let Some(amazon_med_items) = self.amazon_med_items() {
analyze_amazon_line_items::<TxCat,_>(amazon_med_items);
}
analyze_donations(&self.donations());
post_summary();
Ok(())
}
}