using System; using System.Linq; using System.Web.Mvc; using MileageTraker.Web.Attributes; using MileageTraker.Web.DAL; using MileageTraker.Web.Models; using MileageTraker.Web.ViewModels.Vehicle; namespace MileageTraker.Web.Controllers { [Authorize(Roles = "Administrator, Developer")] public class VehicleController : ControllerBase { public ViewResult Index(bool inactive = false) { var vehicles = DataService.GetVehicles().Where(v => inactive == (v.InactiveDate.HasValue && v.InactiveDate.Value < DateTime.Today.AddDays(1))); var viewModel = new VehicleResultsViewModel(vehicles, inactive); return View(viewModel); } public ViewResult Details(string id) { var vehicle = DataService.GetVehicle(id); return View(vehicle); } public PartialViewResult DetailsPartial(string id) { var vehicle = DataService.GetVehicle(id); return PartialView(new VehiclePartialDetails(vehicle)); } public ActionResult Create() { return View(); } [HttpPost] [ActionLog] public ActionResult Create(Vehicle vehicle) { if (ModelState.IsValid) { DataService.AddVehicle(vehicle); SetStatusMessage(string.Format("Vehicle {0} created", vehicle.VehicleId)); return RedirectToAction("Index"); } return View(vehicle); } public ActionResult Edit(string id) { var vehicle = DataService.GetVehicle(id); return View(vehicle); } [HttpPost] [ActionLog] public ActionResult Edit(Vehicle vehicle) { if (ModelState.IsValid) { DataService.UpdateVehicle(vehicle); SetStatusMessage("Changes saved for vehicle " + vehicle.VehicleId); return RedirectToAction("Details", new { id = vehicle.VehicleId }); } return View(vehicle); } [AllowAnonymous] public JsonResult Exists(string vehicleId) { var vehicle = DataService.GetVehicle(vehicleId); return Json(vehicle != null, JsonRequestBehavior.AllowGet); } [ActionLog] public FileResult Export() { var vehicles = DataService.GetVehicles(); var export = VehicleImporter.Export(vehicles); return File(export, "application/ms-excel", string.Format("ETHRAVehicles{0:yyyy-MM-dd}.xls", DateTime.Today)); } [ActionLog] public ActionResult SetInactive(string id) { var vehicle = DataService.GetVehicle(id); if (vehicle.InactiveDate.HasValue) { SetStatusMessage("Vehicle already inactive"); } else { vehicle.InactiveDate = DateTime.Now; DataService.UpdateVehicle(vehicle); SetStatusMessage(string.Format("Vehicle set inactive on {0:MM/dd/yyyy}", vehicle.InactiveDate.Value)); } return RedirectToAction("Details", new {id}); } [ActionLog] public ActionResult SetActive(string id) { var vehicle = DataService.GetVehicle(id); if (!vehicle.InactiveDate.HasValue) { SetStatusMessage("Vehicle is already active"); } else { vehicle.InactiveDate = null; DataService.UpdateVehicle(vehicle); SetStatusMessage(string.Format("Vehicle reactivated")); } return RedirectToAction("Details", new { id }); } } }