Esempio 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);
        }
Esempio n. 2
0
        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;
        }