public async Task <IActionResult> Create(Lease lease) { ViewBag.CarId = new SelectList(contex.Cars.OrderBy(x => x.Id), "Id", "Id"); ViewBag.UserId = new SelectList(contex.Users.OrderBy(x => x.Id), "Id", "UserName"); if (ModelState.IsValid) { var user = await contex.Users.FirstOrDefaultAsync(x => x.Id == lease.UserUserName); var car = await contex.Cars.FirstOrDefaultAsync(x => x.Id == lease.CarId); if (lease.StartDate > lease.EndDate) { ModelState.AddModelError("", "The lease End Date has to be larger than Start date"); return(View(lease)); } lease.CarBrand = car.Brand; lease.CarColor = car.Color; lease.CarRentPrice = car.RentPrice; lease.UserId = user.Id; lease.UserUserName = user.UserName; lease.UserName = user.Name; lease.Payment = "Pending"; contex.Add(lease); await contex.SaveChangesAsync(); TempData["Success"] = "The lease has been created!"; return(RedirectToAction("Index")); } return(View(lease)); }
[ValidateAntiForgeryToken] //protect against CSRF attacks public async Task <IActionResult> Create(Car car) { if (ModelState.IsValid) { var carId = await contex.Cars.FirstOrDefaultAsync(x => x.Id == car.Id); if (carId != null) { ModelState.AddModelError("", "The Car already exists."); return(View(car)); } string imageName = "noimagecar.png"; if (car.ImageUpload != null) { string uploadsDir = Path.Combine(webHostEnvironment.WebRootPath, "media/cars"); imageName = Guid.NewGuid().ToString() + "_" + car.ImageUpload.FileName; string filePath = Path.Combine(uploadsDir, imageName); FileStream fs = new FileStream(filePath, FileMode.Create); await car.ImageUpload.CopyToAsync(fs); fs.Close(); } car.Image = imageName; contex.Add(car); await contex.SaveChangesAsync(); TempData["Success"] = "The car has been added!"; return(RedirectToAction("Index")); } return(View(car)); }
public async Task <IActionResult> Create(Lease lease) { ViewBag.CarId = new SelectList(contex.Cars.OrderBy(x => x.Id), "Id", "Id"); ViewBag.UserId = new SelectList(contex.Users.OrderBy(x => x.Id), "Id", "UserName"); if (ModelState.IsValid) { var user = await contex.Users.FirstOrDefaultAsync(x => x.Id == lease.UserUserName); var car = await contex.Cars.FirstOrDefaultAsync(x => x.Id == lease.CarId); if (lease.StartDate > lease.EndDate) { ModelState.AddModelError("", "The lease End Date has to be larger than Start date"); return(View(lease)); } if (lease.StartDate == lease.EndDate) { ModelState.AddModelError("", "Minimum lease time is 1 day"); return(View(lease)); } var leasesCount = contex.Leases.Where(x => x.CarId == lease.CarId && x.EndDate >= lease.StartDate && x.StartDate <= lease.EndDate); if (leasesCount.Count() > 0) { var leaseLast = await contex.Leases.Where(x => x.CarId == lease.CarId).MaxAsync(x => x.EndDate); ModelState.AddModelError("", $"{car.Brand} is already booked in that period. Next free booking slot is avaiable on: {leaseLast.Date.AddDays(1):dd-MM-yyyy}"); return(View(lease)); } lease.CarBrand = car.Brand; lease.CarColor = car.Color; lease.CarRentPrice = car.RentPrice; lease.UserId = user.Id; lease.UserUserName = user.UserName; lease.UserName = user.Name; lease.Payment = "Pending"; contex.Add(lease); await contex.SaveChangesAsync(); TempData["Success"] = "The lease has been created!"; return(RedirectToAction("Index")); } return(View(lease)); }