public async Task <IActionResult> Index(int?pageNumber, ExpencesFiltredModel expencesViewModel)
        {
            if (expencesViewModel.AdmFilter && !await IsAdminOrOwner(null, false))
            {
                expencesViewModel.AdmFilter = false;
            }
            var model = await IndexCreateViewModel(pageNumber, expencesViewModel, false);

            return(View(model));
        }
        public async Task <ExpencesFiltredModel> GetFilteredContentAsync(int?pageNumber, ExpencesFiltredModel expencesFilterModel, string currentUserId, bool adm)
        {
            IQueryable <Expences> defaultContext = _context.Expences.Include(e => e.DocumentType)
                                                   .Include(e => e.Company)
                                                   .Include(e => e.Currency)
                                                   .Include(e => e.OurCompany)
                                                   .Include(e => e.Person)
                                                   .Include(e => e.User);
            string total = null;

            if (expencesFilterModel.CurrencyFilter != null)
            {
                var currencyFilter = expencesFilterModel.CurrencyFilter;
                if (currencyFilter.Count != 0)
                {
                    defaultContext = defaultContext.Where(x => currencyFilter.Contains(x.CurrencyId));
                    if (currencyFilter.Count == 1)
                    {
                        total = defaultContext.Sum(x => x.AmountOfPayment).ToString();
                    }
                }
            }

            if (expencesFilterModel.CompanyFilter != null && expencesFilterModel.CompanyFilter.Count != 0)
            {
                defaultContext = defaultContext.Where(x => expencesFilterModel.CompanyFilter.Contains(x.CompanyId));
            }
            if (expencesFilterModel.OurCompanyFilter != null && expencesFilterModel.OurCompanyFilter.Count != 0)
            {
                defaultContext = defaultContext.Where(x => expencesFilterModel.OurCompanyFilter.Contains(x.OurCompanyId));
            }

            if (expencesFilterModel.FromFilter != null)
            {
                defaultContext = defaultContext.Where(x => x.ApprovedPaymentDate >= expencesFilterModel.FromFilter ||
                                                      x.DesiredPaymentDate >= expencesFilterModel.FromFilter);
            }
            if (expencesFilterModel.ToFilter != null)
            {
                defaultContext = defaultContext.Where(x => x.ApprovedPaymentDate <= expencesFilterModel.ToFilter ||
                                                      x.DesiredPaymentDate <= expencesFilterModel.ToFilter);
            }
            if (!expencesFilterModel.AdmFilter)
            {
                defaultContext = defaultContext.Where(x => x.Person.UserId == currentUserId);
            }

            expencesFilterModel.Expences = await PaginatedList <Expences> .CreateAsync(defaultContext.AsNoTracking(), pageNumber ?? 1, Constants.pageSize);

            expencesFilterModel.Total = total;
            return(expencesFilterModel);
        }
        private async Task <ExpencesFiltredModel> IndexCreateViewModel(int?pageNumber, ExpencesFiltredModel expencesViewModel, bool adm)
        {
            //Настройку хранения фильтров не реализовывал. В планах - хранить фильтры в базе для каждого сочетания пользователь/модуль
            var currentUserId = _userManager.GetUserId(User);

            expencesViewModel = await _expencesService.GetFilteredContentAsync(pageNumber, expencesViewModel, currentUserId, adm);

            ViewBag.CurrencyFilter   = new SelectList(_expencesService.GetCurrenciesIds(), "Id", "Name");
            ViewBag.CompanyFilter    = new SelectList(_expencesService.GetCompaniesIds(), "Id", "Name");
            ViewBag.OurCompanyFilter = new SelectList(_expencesService.GetOurCompaniesIds(), "Id", "Name");
            if (!string.IsNullOrEmpty(expencesViewModel.Total))
            {
                expencesViewModel.Total = Localization.currentLocalizatin["Amount of Expenses"] + ": " + expencesViewModel.Total;
            }

            return(expencesViewModel);
        }