public IActionResult AddWaybill(WaybillIndexViewModel model)
 {
     ViewData["Message"] = "";
     if (model.ProviderName == null || model.Material == null || model.DateOfSupply == null)
     {
         ViewData["Message"] += "Отсутствие значений в строках";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.ProviderId <= 0)
     {
         ViewData["Message"] += "Неправильное значение номера поставщика";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Weight <= 0)
     {
         ViewData["Message"] += "Неправильное значение веса";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Price <= 0)
     {
         ViewData["Message"] += "Неправильное значение стоимости";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.ProviderName.Length > 100)
     {
         ViewData["Message"] += "Неправильный ввод названия поставщика";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Material.Length > 60)
     {
         ViewData["Message"] += "Неправильный ввод материала";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else
     {
         var id = 0;
         if (db.Waybills.Count() != 0)
         {
             id = db.Waybills.Select(item => item.Id).Max();
         }
         id++;
         db.Waybills.Add(new Waybill()
         {
             Id           = id,
             ProviderId   = model.ProviderId,
             ProviderName = model.ProviderName,
             Price        = model.Price,
             DateOfSupply = model.DateOfSupply,
             EmployeeId   = db.Employees.Where(item => item.FIO == model.EmployeeFIO).First().Id,
             FurnitureId  = db.Furniture.Where(item => item.Name == model.FurnitureName).First().Id,
             Material     = model.Material,
             Weight       = model.Weight
         });
         db.SaveChanges();
         cache.Remove("Waybills");
         return(RedirectToAction("Index", "Waybill"));
     }
 }
 public IActionResult UpdateWaybill(WaybillIndexViewModel model, string action = null)
 {
     ViewData["Message"] = "";
     if (action != null)
     {
         return(DeleteWaybill(model.Id));
     }
     if (model.ProviderName == null || model.Material == null || model.DateOfSupply == null)
     {
         ViewData["Message"] += "Отсутствие значений в строках";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.ProviderId <= 0)
     {
         ViewData["Message"] += "Неправильное значение номера поставщика";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Weight <= 0)
     {
         ViewData["Message"] += "Неправильное значение веса";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Price <= 0)
     {
         ViewData["Message"] += "Неправильное значение стоимости";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.ProviderName.Length > 100)
     {
         ViewData["Message"] += "Неправильный ввод названия поставщика";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else if (model.Material.Length > 60)
     {
         ViewData["Message"] += "Неправильный ввод материала";
         return(View("~/Views/Waybill/Index.cshtml", GetViewModel()));
     }
     else
     {
         var waybill = db.Waybills.Where(item => item.Id == model.Id).FirstOrDefault();
         waybill.ProviderId   = model.ProviderId;
         waybill.ProviderName = model.ProviderName;
         waybill.Price        = model.Price;
         waybill.DateOfSupply = model.DateOfSupply;
         waybill.EmployeeId   = db.Employees.Where(item => item.FIO == model.EmployeeFIO).First().Id;
         waybill.FurnitureId  = db.Furniture.Where(item => item.Name == model.FurnitureName).First().Id;
         waybill.Material     = model.Material;
         waybill.Weight       = model.Weight;
         db.SaveChanges();
         cache.Remove("Waybills");
         return(RedirectToAction("Index", "Waybill"));
     }
 }
        private WaybillIndexViewModel GetViewModel(int page = 1, string providerName = null, string furnitName = "Все", string type = null)
        {
            int                     pageSize  = 20;
            List <Employee>         employees = db.Employees.ToList();
            List <Furniture>        furniture = db.Furniture.ToList();
            List <WaybillViewModel> waybillViewModels;

            if (!cache.TryGetValue("Waybills", out waybillViewModels))
            {
                List <Waybill> waybills = db.Waybills.ToList();
                waybillViewModels = new List <WaybillViewModel>();
                foreach (var waybill in waybills)
                {
                    waybillViewModels.Add(new WaybillViewModel()
                    {
                        Id            = waybill.Id,
                        ProviderId    = waybill.ProviderId,
                        ProviderName  = waybill.ProviderName,
                        EmployeeFIO   = employees.Where(item => item.Id == waybill.EmployeeId).First().FIO,
                        DateOfSupply  = waybill.DateOfSupply,
                        FurnitureName = furniture.Where(item => item.Id == waybill.FurnitureId).First().Name,
                        Material      = waybill.Material,
                        Price         = waybill.Price,
                        Weight        = waybill.Weight
                    });
                }
                cache.Set("Waybills", db.Waybills.ToList(), new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(10)));
            }
            List <int>    Ids         = waybillViewModels.Select(item => item.Id).ToList();
            List <string> furnitNames = furniture.Select(item => item.Name).ToList();

            furnitNames.Add("Все");

            if (providerName != null)
            {
                waybillViewModels = waybillViewModels.Where(item => item.ProviderName.Contains(providerName)).ToList();
            }
            if (furnitName != "Все")
            {
                waybillViewModels = waybillViewModels.Where(item => item.FurnitureName == furnitName).ToList();
            }

            if (type != null)
            {
                waybillViewModels = type switch
                {
                    "Id" => waybillViewModels.OrderBy(item => item.Id).ToList(),
                    "numb" => waybillViewModels.OrderBy(item => item.ProviderId).ToList(),
                    "date" => waybillViewModels.OrderBy(item => item.DateOfSupply).ToList(),
                    "providerName" => waybillViewModels.OrderBy(item => item.ProviderName).ToList(),
                    "material" => waybillViewModels.OrderBy(item => item.Material).ToList(),
                    "price" => waybillViewModels.OrderBy(item => item.Price).ToList(),
                    "weight" => waybillViewModels.OrderBy(item => item.Weight).ToList(),
                    "furnit" => waybillViewModels.OrderBy(item => item.FurnitureName).ToList(),
                    _ => waybillViewModels.OrderBy(item => item.EmployeeFIO).ToList(),
                };
            }
            WaybillIndexViewModel waybillIndexViewModel = new WaybillIndexViewModel()
            {
                WaybillViewModels = waybillViewModels.Skip((page - 1) * pageSize).Take(pageSize).ToList(),
                Ids                  = Ids,
                EmployeesFIOs        = employees.Select(item => item.FIO).ToList(),
                FurnitureNames       = furniture.Select(item => item.Name).ToList(),
                PageViewModel        = new PageViewModel(waybillViewModels.Count, page, pageSize),
                FilterFurnitureNames = furnitNames
            };

            return(waybillIndexViewModel);
        }