예제 #1
0
        public async Task <decimal> GetSum(IncomeGetSumBinding binding)
        {
            using (var context = GetMainContext())
            {
                int targetCurrencyId = context.GetCurrencyId(binding.TargetCurrencyId, UserId);

                var incomeIds = context.Incomes.WhereUser(UserId)
                                .Where(binding, context)
                                .Select(x => x.Id)
                                .ToList();

                if (incomeIds.Count == 0)
                {
                    return(0);
                }

                using (var sql = GetSqlConnection())
                {
                    var parameters = new GetIncomeSumQuery()
                    {
                        IncomeIds        = incomeIds,
                        TargetCurrencyId = targetCurrencyId,
                        UserId           = UserId
                    };

                    return(Math.Round(await sql.ExecuteScalarAsync <decimal>(SqlLoader.Load(SqlScripts.GetIncomeSum), parameters), 2));
                }
            }
        }
예제 #2
0
        public IEnumerable <KeyValuePair <int, decimal> > GetSumByYear(IncomeGetSumBinding binding)
        {
            using (var context = GetMainContext())
            {
                int startYear = binding.From?.Year ?? context.Incomes.WhereUser(UserId).OrderBy(x => x.Date).FirstOrDefault().Date.Year;
                int endYear   = binding.To?.Year ?? DateTime.Now.Year;

                var years = Enumerable.Range(startYear, endYear - startYear + 1);

                var periods = years.Select(x => new FilteredBinding(new DateTime(x, 1, 1), new DateTime(x, 12, 31)));

                var tasks = periods.Select(x => new KeyValuePair <int, Task <decimal> >(x.From.Value.Year, GetSum(binding.OverrideFromTo <IncomeGetSumBinding>(x.From, x.To))));

                return(tasks.Select(x => new KeyValuePair <int, decimal>(x.Key, x.Value.Result)));
            }
        }
예제 #3
0
        public IEnumerable <KeyValuePair <string, decimal> > GetSumByMonthOfYear(IncomeGetSumBinding binding)
        {
            using (var context = GetMainContext())
            {
                var from = binding.From ?? context.Incomes.WhereUser(UserId).OrderBy(x => x.Date).FirstOrDefault().Date;
                var to   = binding.To ?? DateTime.Now;

                var periods = from.RangeMonthsClosed(to)
                              .Select(x => new FilteredBinding(x.from, x.to))
                              .ToList();

                var tasks = periods.Select(x => new KeyValuePair <FilteredBinding, Task <decimal> >(x, GetSum(binding.OverrideFromTo <IncomeGetSumBinding>(x.From, x.To))));

                return(tasks.Select(x => new KeyValuePair <string, decimal>($"{x.Key.From.Value.Year}-{x.Key.From.Value.Month}", x.Value.Result)));
            }
        }