public ReportResult Build(ReportBuildSettings settings, bool force = false) { // load data that doen't depend of settings LoadBaseReportData(); // load data correpont to provided settings LoadData(settings, force); // filter transactions by data type var filteredTransactions = _transactions.Where(x => (settings.DataType == RecordType.Expense && x.IsExpense) || (settings.DataType == RecordType.Income && x.IsIncome)); // filter transactions by user data filter filteredTransactions = settings.ApplyFilter(filteredTransactions); // build result var result = new ReportResult(); // populate report units correspont to selected section result.ReportUnits = settings.Section == BarChartSection.Category ? BuildReportUnits(filteredTransactions, settings.CategoryLevel, settings.DetailsDepth, settings.Sorting) : BuildReportUnits(filteredTransactions, settings.PeriodType, settings.DateFrom, settings.DateUntil); // calculate total result.TotAmountDetailed = FormatMainCurrency(result.ReportUnits.Sum(x => x.Amount), true); return(result); }
private void LoadData(ReportBuildSettings settings, bool force) { if (settings.Section == BarChartSection.Category) { // set category level mapping MakeSureCategoryMapping(settings.CategoryLevel, force); // set category mapping for detailing for (int i = 1; i <= settings.DetailsDepth; i++) { MakeSureCategoryMapping(settings.CategoryLevel + i, force); } } // load transactions if (_prevReportSettings == null || force || _prevReportSettings.DateFrom != settings.DateFrom || _prevReportSettings.DateUntil != settings.DateUntil) { // cleanup existing transactions list _transactions = new List <ITransaction>(); // load actual transactions if (settings.IncludeActualTransactions) { _transactions.AddRange( _transactionService.GetActual(_userId, settings.DateFrom, settings.DateUntil).Where(x => x.TransactionAmount != 0)); } // load planned future transactions if (settings.IncludeFuturePlannedTransactions) { _transactions.AddRange( _transactionService.GetPlanned(_userId, settings.DateFrom, settings.DateUntil).Where(x => x.TransactionAmount != 0)); } } // save settings _prevReportSettings = settings; }