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