// GET: Products/Details/5 public async Task <IActionResult> Details(string id, bool recommended = false) { if (id == null) { return(NotFound()); } var product = await _context.Computer.FirstOrDefaultAsync(m => m.Id == id); if (product == null) { return(NotFound()); } //StockItem stockItem = await _apiClient.ApiStockGetAsync(product.Id); //ViewBag.AmountInStock = stockItem.AmountInStock; if (recommended) { RecommendationStats recommendationStats = _context.RecommendationStats.FirstOrDefault(); recommendationStats.BoughtCount += 1; _context.RecommendationStats.Update(recommendationStats); _context.Entry(recommendationStats).Property("RecommendedCount").IsModified = false; await _context.SaveChangesAsync(); } return(View(product)); }
public async Task <IActionResult> Index(RecommendationViewModel recommendationViewModel) { if (ModelState.IsValid) { Computer requestedComputer = recommendationViewModel.RequestedComputer; int requestedCores = recommendationViewModel.CoresNotImportant ? 0 : requestedComputer.Cores; double requestedCpuClockSpeed = recommendationViewModel.ClockSpeedNotImportant ? 0 : requestedComputer.ClockSpeed; int requestedRAM = recommendationViewModel.RAMNotImportant ? 0 : requestedComputer.RAM; int requestedStorage = recommendationViewModel.StorageNotImportant ? 0 : requestedComputer.Storage; double requestedPrice = recommendationViewModel.PriceNotImportant ? 0 : requestedComputer.Price; double coresPriority = recommendationViewModel.CoresNotImportant ? 0 : recommendationViewModel.CorePriority; double clockSpeedPriority = recommendationViewModel.ClockSpeedNotImportant ? 0 : recommendationViewModel.ClockSpeedPriority; double ramPriority = recommendationViewModel.RAMNotImportant ? 0 : recommendationViewModel.RAMPriority; double storagePriority = recommendationViewModel.StorageNotImportant ? 0 : recommendationViewModel.StoragePriority; double pricePriority = recommendationViewModel.PriceNotImportant ? 0 : recommendationViewModel.PricePriority; IList <Computer> computers = await _context.Computer .Where(c => c.CategoryId == requestedComputer.CategoryId) .ToListAsync(); RecommendationStats recommendationStats = _context.RecommendationStats.FirstOrDefault(); recommendationStats.RecommendedCount += 1; _context.RecommendationStats.Update(recommendationStats); _context.Entry(recommendationStats).Property("BoughtCount").IsModified = false; await _context.SaveChangesAsync(); IDictionary <double, Computer> offers = new Dictionary <double, Computer>(); foreach (Computer computer in computers) { double distance = Math.Sqrt(coresPriority * Math.Pow(requestedCores - computer.Cores, 2) + clockSpeedPriority * Math.Pow(requestedCpuClockSpeed - computer.ClockSpeed, 2) + ramPriority * Math.Pow(requestedRAM - computer.RAM, 2) + storagePriority * Math.Pow(requestedStorage - computer.Storage, 2) + pricePriority * Math.Pow(requestedPrice - computer.Price, 2)); offers.Add(distance, computer); } IOrderedEnumerable <KeyValuePair <double, Computer> > sortedOffers = offers.OrderBy(key => key.Key); Computer bestOffer = sortedOffers.FirstOrDefault().Value; bestOffer.Category = _context.Category.Where(c => c.Id == bestOffer.CategoryId).FirstOrDefault(); recommendationViewModel.RecommendedComputer = bestOffer; } ViewData["CategoryId"] = new SelectList(await _context.Category.ToListAsync(), "Id", "Name"); return(View(recommendationViewModel)); }