public IActionResult Index(DateTime productionDate, string productName, SortState sortState, int countOfProd, int page = 1)
        {
            IEnumerable <ProductsProduction> productsProductions = _context.ProductsProductions.Include(p => p.DayProduction).Include(p => p.Product);

            if (productionDate == default)
            {
                _memoryCache.TryGetValue("productProductionDate", out productionDate);
            }
            else
            {
                _memoryCache.Set("productProductionDate", productionDate);
                productsProductions = productsProductions.Where(p => p.DayProduction.Date.Equals(productionDate));
            }
            if (productName == null)
            {
                _memoryCache.TryGetValue("productProductionName", out productName);
            }
            else
            {
                _memoryCache.Set("productProductionName", productName);
                productsProductions = productsProductions.Where(n => n.Product.ProductName.Contains(productName));
            }
            if (countOfProd == 0)
            {
                _memoryCache.TryGetValue("countProductProduction", out countOfProd);
            }
            else
            {
                _memoryCache.Set("countProductProduction", countOfProd);
                productsProductions = productsProductions.Where(p => p.Count == countOfProd);
            }
            if (sortState == SortState.No)
            {
                _memoryCache.TryGetValue("productProductionSort", out sortState);
            }
            else
            {
                _memoryCache.Set("productProductionSort", sortState);
                productsProductions = Sort(productsProductions, sortState);
            }
            int count    = productsProductions.Count();
            int pageSize = 15;

            productsProductions = productsProductions.Skip((page - 1) * pageSize).Take(pageSize).ToList();
            ProductProdactionViewModel viewModel = new ProductProdactionViewModel
            {
                ProductsProductions = productsProductions,
                PageViewModel       = new PageViewModel(count, page, pageSize),
                SortViewModel       = new SortViewModel(sortState),
                ProductionDate      = productionDate,
                ProductName         = productName,
                Count = countOfProd
            };

            return(View(viewModel));
        }
        public async Task <IActionResult> Create(ProductProdactionViewModel productProdactionViewModel)
        {
            DayProduction dayProduction = _context.DayProductions.Where(d => d.Date.Equals(productProdactionViewModel.Date)).FirstOrDefault();

            if (dayProduction == null)
            {
                _context.DayProductions.Add(new DayProduction {
                    Date = productProdactionViewModel.Date
                });
                await _context.SaveChangesAsync();

                dayProduction = _context.DayProductions.Where(d => d.Date.Equals(productProdactionViewModel.Date)).FirstOrDefault();
            }
            ProductsProduction productsProduction = productProdactionViewModel.ProductsProduction;

            productsProduction.DayProductionId = dayProduction.DayProductionId;
            _context.Add(productsProduction);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Index)));
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var productProduction = await _context.ProductsProductions.FindAsync(id);

            ProductProdactionViewModel productProdactionViewModel = new ProductProdactionViewModel
            {
                ProductsProduction = productProduction
            };
            var productsProduction = await _context.ProductsProductions.FindAsync(id);

            if (productsProduction == null)
            {
                return(NotFound());
            }
            ViewData["ProductId"] = new SelectList(_context.Products, "ProductId", "ProductName");
            return(View(productProdactionViewModel));
        }
        public async Task <IActionResult> Edit(int id, ProductProdactionViewModel productProdactionViewModel)
        {
            if (id != productProdactionViewModel.ProductsProduction.ProductProductionId)
            {
                return(NotFound());
            }
            DayProduction dayProduction = _context.DayProductions.Where(d => d.Date.Equals(productProdactionViewModel.Date)).FirstOrDefault();

            if (dayProduction == null)
            {
                _context.DayProductions.Add(new DayProduction {
                    Date = productProdactionViewModel.Date
                });
                await _context.SaveChangesAsync();

                dayProduction = _context.DayProductions.Where(d => d.Date.Equals(productProdactionViewModel.Date)).FirstOrDefault();
            }
            ProductsProduction productsProduction = productProdactionViewModel.ProductsProduction;

            productsProduction.DayProductionId = dayProduction.DayProductionId;
            try
            {
                _context.Update(productsProduction);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ProductsProductionExists(productsProduction.ProductProductionId))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
            return(RedirectToAction("Index"));
        }