using System.Linq; using System.Web.Mvc; using MileageTraker.Web.Attributes; using MileageTraker.Web.Models; using MileageTraker.Web.ViewModels.VehicleRecall; namespace MileageTraker.Web.Controllers { [Authorize(Roles = "Administrator, Developer")] public class VehicleRecallController : ControllerBase { public ActionResult Index(bool completed = false) { var vehicleRecalls = DataService.GetVehicleRecalls() .Where(vr => completed ? vr.CompletedService != null : vr.CompletedService == null).ToList(); if (vehicleRecalls.Count == 0) return View("Empty"); var recalls = vehicleRecalls.Select(vr => new VehicleRecallViewModel(vr)); var viewModel = new VehicleRecallResultsViewModel(recalls, completed); return View(viewModel); } public ViewResult Details(int id) { var vehicleRecall = DataService.GetVehicleRecall(id); var viewModel = new VehicleRecallViewModel(vehicleRecall); return View(viewModel); } public ActionResult Create() { return View(); } [HttpGet] [RequireRequestValue("vehicleId")] public ActionResult Create(string vehicleId) { return View(new VehicleRecallViewModel{VehicleId = vehicleId}); } [HttpPost] [ActionLog] public ActionResult Create(VehicleRecallViewModel viewModel) { if (ModelState.IsValid) { var vehicleRecall = viewModel.GetVehicleRecall(); var vehicle = DataService.GetVehicle(viewModel.VehicleId); vehicleRecall.Vehicle = vehicle; DataService.AddVehicleRecall(vehicleRecall); var serviceReminder = new ServiceReminder { Vehicle = vehicle, TargetOdometer = vehicle.CurrentOdometer ?? 0, Description = $"Recall: {vehicleRecall.Identifier}, {vehicleRecall.Description}" }; DataService.AddServiceReminder(serviceReminder); SetStatusMessage($"Vehicle Recall for vehicle {viewModel.VehicleId} created, Service Reminder also created", StatusType.Success); return RedirectToAction("Index"); } return View(viewModel); } public ActionResult Edit(int id) { var vehicleRecall = DataService.GetVehicleRecall(id); var viewModel = new VehicleRecallViewModel(vehicleRecall); return View(viewModel); } public ActionResult Delete(int id) { var vehicleRecall = DataService.GetVehicleRecall(id); var viewModel = new VehicleRecallViewModel(vehicleRecall); return View(viewModel); } [HttpPost, ActionName("Delete")] [ActionLog] public ActionResult DeleteConfirmed(int id) { var vehicleRecall = DataService.GetVehicleRecall(id); var vehicleVehicleId = vehicleRecall.Vehicle.VehicleId; DataService.DeleteVehicleRecall(id); SetStatusMessage($"Vehicle Recall \"{vehicleRecall.Identifier}\" for Vehicle ID {vehicleVehicleId} deleted"); return RedirectToAction("Index"); } [HttpPost] [ActionLog] public ActionResult Edit(VehicleRecallViewModel viewModel) { if (ModelState.IsValid) { var vehicleRecall = viewModel.GetVehicleRecall(); vehicleRecall.Vehicle = DataService.GetVehicle(viewModel.VehicleId); DataService.UpdateVehicleRecall(vehicleRecall); SetStatusMessage("Changes saved for vehicle recall " + vehicleRecall.Vehicle.VehicleId); return RedirectToAction("Details", new { id = vehicleRecall.VehicleRecallId }); } return View(viewModel); } } }