public int Save(DishAvailability dishAvail) { DishAvailability dbDishAvail; if (dishAvail.Id == 0) { var newDish = _context.DishesAvail.Add(dishAvail); _context.SaveChanges(); dbDishAvail = newDish.Entity; } else { dbDishAvail = _context.DishesAvail.FirstOrDefault(da => da.Id == dishAvail.Id); if (dbDishAvail != null) { dbDishAvail.StartDate = dishAvail.StartDate; dbDishAvail.EndDate = dishAvail.EndDate; dbDishAvail.OriginalPrice = dishAvail.OriginalPrice; dbDishAvail.DiscountPrice = dishAvail.DiscountPrice; dbDishAvail.Quantity = dishAvail.Quantity; dbDishAvail.QuantityTotal = dishAvail.QuantityTotal; } } _context.SaveChanges(); return(dbDishAvail.Id); }
public async Task <IActionResult> CreateEditDishAvail(int?id, int dishId) { DishAvailability avail; if ((id == null) || (id <= 0)) { avail = new DishAvailability(); avail.Dish = _repoDish.GetAll.FirstOrDefault(d => d.Id == dishId); avail.DishId = avail.Dish.Id; } else { avail = await _repoAvail.GetAll.FirstOrDefaultAsync(t => t.Id == id); if (avail == null) { TempData["StatusMessage"] = "#E#:The selected Dish Availability was not found to edit."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } } if (avail?.Dish == null) { TempData["StatusMessage"] = "#E#:An error occurred retrieving the Dish, please try again."; return(RedirectToAction(nameof(IndexDish))); } ViewData["availDish"] = avail.Dish; return(View(avail)); }
public DishAvailability Delete(int dishAvailId) { DishAvailability dbDishAvail = _context.DishesAvail.FirstOrDefault(da => da.Id == dishAvailId); if (dbDishAvail != null) { _context.DishesAvail.Remove(dbDishAvail); _context.SaveChanges(); } return(dbDishAvail); }
public void Update(DishAvailability dishAvailability) { var existingDishAvailability = _context.DishesAvail.FirstOrDefault(da => da.Id == dishAvailability.Id); if (existingDishAvailability != null) { existingDishAvailability.StartDate = dishAvailability.StartDate; existingDishAvailability.EndDate = dishAvailability.EndDate; existingDishAvailability.OriginalPrice = dishAvailability.OriginalPrice; existingDishAvailability.DiscountPrice = dishAvailability.DiscountPrice; existingDishAvailability.Quantity = dishAvailability.Quantity; } _context.SaveChanges(); }
public async Task <IActionResult> CreateEditDishAvail(int?id, int dishId) { DishAvailability avail; var dish = _dishRepo.GetAll.FirstOrDefault(d => d.Id == dishId); if (dish == null) { TempData["StatusMessage"] = "#E#:Unable to find the Dish to see their Availability."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } var user = await _userManager.GetUserAsync(User); if (dish.Partner.Id != user?.Id) { TempData["StatusMessage"] = "#E#:You are not authorized to access this dish."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } if ((id == null) || (id <= 0)) { avail = new DishAvailability(); avail.StartDate = DateTime.Now.Date; avail.EndDate = DateTime.Now.Date; avail.Dish = dish; avail.DishId = dish.Id; } else { avail = await _availRepo.GetAll.FirstOrDefaultAsync(t => t.Id == id); if (avail == null) { TempData["StatusMessage"] = "#E#:The selected Dish Availability was not found to edit."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } if (avail.Dish?.Id != dish.Id) { TempData["StatusMessage"] = "#E#:You are not authorized to access this dish availability."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } } ViewData["availDish"] = avail.Dish; return(View(avail)); }
public IActionResult CreateEditDishAvail(int?id, int dishId, DishAvailability avail) { if (id != avail.Id) { TempData["StatusMessage"] = "#E#:Invalid information to save the Dish Availability."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } if (ModelState.IsValid) { _repoAvail.Save(avail); TempData["StatusMessage"] = $"The Dish Availability information was saved."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } if ((ViewData["availDish"] = _repoDish.GetAll.FirstOrDefault(d => d.Id == dishId)) == null) { TempData["StatusMessage"] = "#E#:Unable to find the Dish to create/edit their Availability."; return(RedirectToAction(nameof(IndexDish))); } return(View(avail)); }
public async Task <IActionResult> CreateEditDishAvail(int?id, int dishId, DishAvailability avail) { var dish = await _dishRepo.GetAll.FirstOrDefaultAsync(d => d.Id == dishId); if (dish == null) { TempData["StatusMessage"] = "#E#:Unable to find the Dish to edit/create their Availability."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } var user = await _userManager.GetUserAsync(User); if (dish.Partner.Id != user?.Id) { TempData["StatusMessage"] = "#E#:You are not authorized to access this dish."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } if ((avail.Id != id) || (avail.DishId != dishId)) { TempData["StatusMessage"] = "#E#:Invalid information to save the Dish Availability."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } // If it is a edit, verify the quantity. Otherwise, set the quantity as the total if (id != 0) { var dbAvail = await _availRepo.GetAll.FirstOrDefaultAsync(d => d.Id == id); if (dbAvail == null) { TempData["StatusMessage"] = "#E#:Unable to find the Dish Availability to edit."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } var dishSold = dbAvail.QuantityTotal - dbAvail.Quantity; if (dishSold > avail.QuantityTotal) { ModelState.AddModelError("QuantityTotal", $"You cannot define the quantity as less then ${dishSold}, as they was already sold."); } else { avail.Quantity = avail.QuantityTotal - dishSold; } if ((dishSold > 0) && ((dbAvail.StartDate.CompareTo(avail.StartDate) != 0) || (dbAvail.StartDate.CompareTo(avail.StartDate) != 0))) { ModelState.AddModelError("StartDate", "You cannot change the Available from or Expire date when this dish was was already sold."); } } else { avail.Quantity = avail.QuantityTotal; } // Validate all the fields for both new and edit var interval = avail.EndDate.Subtract(avail.StartDate).Hours; if (avail.StartDate.CompareTo(avail.EndDate) >= 0) { ModelState.AddModelError("StartDate", $"The Available from must be less than Expire date field."); } else if (interval < 2) { ModelState.AddModelError("StartDate", $"The Dish Availability should have at least two hours of interval."); } else if (interval >= 20) { ModelState.AddModelError("StartDate", $"The Dish Availability cannot exceed twenty hours of interval."); } if (avail.StartDate.CompareTo(DateTime.Now) < 0) { ModelState.AddModelError("StartDate", $"The available from field must be greater than the current date."); } if ((avail.StartDate.Hour < 6) || (avail.StartDate.Hour >= 22)) { ModelState.AddModelError("StartDate", $"The Start Date must be between 6:00AM and 21:59PM."); } if ((avail.EndDate.Hour > 2) && (avail.EndDate.Hour <= 7)) { ModelState.AddModelError("EndDate", $"The End Date must be between 8:00AM and 2:59AM."); } // Validate if we have at least if (ModelState.IsValid) { _availRepo.Save(avail); TempData["StatusMessage"] = $"The Dish Availability information was saved."; return(RedirectToAction(nameof(IndexDishAvail), new { dishId = dishId })); } ViewData["availDish"] = dish; return(View(avail)); }