private async Task FillRequiredViewBagData()
        {
            ViewBag.Transactions = await _transactions.GetByRange(User.Identity.Name, DateTime.Today, DateTime.Today.AddDays(1));

            ViewBag.Currencies = await _currencies.GetAll();

            ViewBag.Categories = await _categories.GetAll();

            ViewBag.TransactionTypes = await _transactionTypes.GetAll();
        }
Example #2
0
        public async Task <IActionResult> Index(DateTime startDate, DateTime endDate, int currencyId)
        {
            if (startDate == default(DateTime) || endDate == default(DateTime) || currencyId == default(int))
            {
                startDate  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                endDate    = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
                currencyId = (int)Enums.Currency.BYN;
            }

            ViewBag.Currencies = await _currencies.GetAll();


            if (endDate < startDate ||
                endDate > startDate.AddDays(30))
            {
                ViewBag.HasRangeError = true;
                return(View("Index"));
            }
            else
            {
                ViewBag.HasRangeError = false;
            }

            ViewBag.Transactions = await _transactions.GetByRange(User.Identity.Name, startDate, endDate);

            var transactions    = (IEnumerable <Transactions>)ViewBag.Transactions;
            var currencies      = (IEnumerable <Currency>)ViewBag.Currencies;
            var currentCurrency = currencies.FirstOrDefault(c => c.Id == currencyId)?.Abbreviation;

            var dateRange = startDate.ListAllDates(endDate);

            ViewBag.Labels = dateRange.Select(d => d.ToShortDateString()).ToArray();

            var recalculatedTransactions = transactions.Select(t => {
                return(new Transactions
                {
                    Amount = (decimal)CurrencyConvertingHelper.Convert(t.Currency.Abbreviation.ToCurrency(), currentCurrency.ToCurrency(), (double)t.Amount),
                    Categories = t.Categories,
                    CurrencyId = currencyId,
                    Description = t.Description,
                    TransactionTypeId = t.TransactionTypeId,
                    TransactionType = t.TransactionType,
                    Date = t.Date,
                    Id = t.Id
                });
            }).OrderBy(tr => tr.Date).ToList();

            ViewBag.Transactions = recalculatedTransactions;

            var incomeTransactions  = recalculatedTransactions.Where(t => t.TransactionTypeId == 1);
            var outcomeTransactions = recalculatedTransactions.Where(t => t.TransactionTypeId == 2);

            List <double> incomeDataSet  = new List <double>();
            List <double> outcomeDataSet = new List <double>();

            foreach (var date in dateRange)
            {
                var incomeTransaction  = incomeTransactions.Where(t => t.Date == date);
                var outcomeTransaction = outcomeTransactions.Where(t => t.Date == date);
                if (incomeTransaction.Any())
                {
                    incomeDataSet.Add(decimal.ToDouble(incomeTransaction.Sum(t => t.Amount)));
                }
                else
                {
                    incomeDataSet.Add(0);
                }

                if (outcomeTransaction.Any())
                {
                    outcomeDataSet.Add(decimal.ToDouble(outcomeTransaction.Sum(t => t.Amount)));
                }
                else
                {
                    outcomeDataSet.Add(0);
                }
            }

            ViewBag.IncomeDataSet  = incomeDataSet;
            ViewBag.OutcomeDataSet = outcomeDataSet;

            ViewBag.CurrentCurrency = currentCurrency;
            ViewBag.TotalIncome     = incomeDataSet.Sum(x => x);
            ViewBag.TotalOutCome    = outcomeDataSet.Sum(x => x);
            return(View());
        }