Exemplo n.º 1
0
        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);
        }