public virtual ActionResult ClientDetails(DateTime pickupDate, DateTime returnDate, int carGroupId) { var client = new Client(); var carGroup = context.CarGroups.Include(c => c.CarGroupDetails).First(c => c.Id == carGroupId); var viewModel = new RentClientDetailsViewModel() { Client = client, RentDetailsViewModel = new RentDetailsViewModel { PickupDate = pickupDate, ReturnDate = returnDate, CarGroupId = carGroupId, CarGroup = carGroup, Price = PriceHelper.Calculate(pickupDate, returnDate, carGroup.DayPrice), }, }; return(View(MVC.Rentals.Views.ClientDetails, viewModel)); }
public virtual ActionResult New(RentClientDetailsViewModel viewModel) { var carGroupId = viewModel.RentDetailsViewModel.CarGroupId; var pickupDate = viewModel.RentDetailsViewModel.PickupDate; var returnDate = viewModel.RentDetailsViewModel.ReturnDate; var client = viewModel.Client; var carsFromGroup = context.Cars.Where(c => c.CarGroupId == carGroupId); var rentalsFromGroup = context.Rentals.Where(r => carsFromGroup.Select(c => c.Id).Contains(r.CarId)); var availableCars = carsFromGroup; foreach (var rental in rentalsFromGroup) { if (rental.PickupDate <= returnDate && pickupDate <= rental.ReturnDate) { availableCars = availableCars.Where(c => c.Id != rental.CarId); } } var car = availableCars.First(); var newRental = new Rental() { Car = car, PickupDate = pickupDate, ReturnDate = returnDate, Client = client, }; context.Rentals.Add(newRental); context.SaveChanges(); // Call function to send confirmation email to email address. // Commented out // MailHelper.SendConfirmationMail(client); return(View(MVC.Rentals.Views.Successful, client)); }