public IActionResult List(ReceiptListInputModel model) { ViewData["Title"] = "Lista Scontrini"; ViewBag.NewBreadcrumItem = new BreadcrumComponentsModel { ItemController = "receipt", ItemAction = "list", ItemTitle = "lista" }; ListReceiptsViewModel receipts = receiptService.GetReceiptsAsync(model.Page, model.PaymentMethods, model.PriceMinValue, model.PriceMaxValue, model.StartDate, model.EndtDate); return(View(new ReceiptsViewModel { ListReceipts = receipts, MinValueSlider = new SliderComponentsModel { SliderPosition = model.UserMinValue, SliderMinValue = 0.00m, SliderMaxValue = ReceiptsPriceMaxValue }, MaxValueSlider = new SliderComponentsModel { SliderPosition = model.UserMaxValue, SliderMaxValue = ReceiptsPriceMaxValue }, YearRadio = new RadioComponentsModel { CurrentlyActive = model.Year, RadioList = ReceiptsStoredYears }, MonthRadio = new RadioComponentsModel { CurrentlyActive = model.Month }, PaymentMethodsCheckbox = new CheckboxComponentsModel { PaymentMethodsChecked = model.PaymentMethods, PaymentMethodsStored = ReceiptsTransactionMethods }, CurrentPage = model.Page })); }
public ListReceiptsViewModel GetReceiptsAsync(int page, List <string> paymentMethods, decimal minValue, decimal maxValue, DateTime startDate, DateTime endDate) { int limit = optionsMonitor.CurrentValue.PerPage; int offset = (page - 1) * limit; IQueryable <ReceiptViewModel> query = dbContext.Receipts .Where(receipt => receipt.Price.Amount.CompareTo(minValue) >= 0 && receipt.Price.Amount.CompareTo(maxValue) <= 0 && paymentMethods.Contains(dbContext.TransMethods .Where(transactionMethod => transactionMethod.IdTransMethod == receipt.IdTransactionMethod) .Select(method => new TransactionMethods { PaymentMethod = method.PaymentMethod }).Single().PaymentMethod.ToLower()) && receipt.FullDate > startDate && receipt.FullDate < endDate) .Select(receipt => new ReceiptViewModel { Id = receipt.IdReceipt, TransactionMethod = dbContext.TransMethods .Where(transactionMethod => transactionMethod.IdTransMethod == receipt.IdTransactionMethod) .Select(method => new TransactionMethods { ImagePath = method.TransImagePath, PaymentMethod = method.PaymentMethod }).Single(), Location = receipt.Location, DateTime = receipt.FullDate, Price = receipt.Price, StoreItems = receipt.StoreItems.Select(item => new StoreItem { Amount = item.Amount, Currency = item.Currency, Name = item.Name }).ToList() }).Skip(offset).Take(limit); IQueryable <ReceiptViewModel> queryCount = dbContext.Receipts .Where(receipt => receipt.Price.Amount.CompareTo(minValue) >= 0 && receipt.Price.Amount.CompareTo(maxValue) <= 0 && paymentMethods.Contains(dbContext.TransMethods .Where(transactionMethod => transactionMethod.IdTransMethod == receipt.IdTransactionMethod) .Select(method => new TransactionMethods { PaymentMethod = method.PaymentMethod }).Single().PaymentMethod.ToLower()) && receipt.FullDate > startDate && receipt.FullDate < endDate) .Select(receipt => new ReceiptViewModel { Id = receipt.IdReceipt, TransactionMethod = dbContext.TransMethods .Where(transactionMethod => transactionMethod.IdTransMethod == receipt.IdTransactionMethod) .Select(method => new TransactionMethods { ImagePath = method.TransImagePath, PaymentMethod = method.PaymentMethod }).Single(), Location = receipt.Location, DateTime = receipt.FullDate, Price = receipt.Price, StoreItems = receipt.StoreItems.Select(item => new StoreItem { Amount = item.Amount, Currency = item.Currency, Name = item.Name }).ToList() }); Task <List <ReceiptViewModel> > receipts = query.AsNoTracking().ToListAsync(); Task <int> receiptsCounter = queryCount.CountAsync(); int totalPages = (int)Math.Ceiling(receiptsCounter.Result / (decimal)limit); ListReceiptsViewModel listReceipts = new ListReceiptsViewModel { Results = receipts.Result, TotalPages = totalPages }; return(listReceipts); }