From 47a60965fe77c0df5d0732a1ef62f53defb3469f Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Tue, 5 Mar 2013 13:22:00 -0500 Subject: [PATCH] Editing Purpose from LogController works --- Web/Controllers/ControllerBase.cs | 6 ++++ Web/Controllers/CreateLogController.cs | 6 ---- Web/Controllers/LogController.cs | 39 ++++++++++++++++++++----- Web/ViewModels/Log/LogIndexViewModel.cs | 2 +- Web/ViewModels/Log/LogPartialDetails.cs | 3 ++ Web/ViewModels/Log/LogViewModel.cs | 19 +++++++++--- 6 files changed, 56 insertions(+), 19 deletions(-) diff --git a/Web/Controllers/ControllerBase.cs b/Web/Controllers/ControllerBase.cs index 376fb2e..9f12841 100644 --- a/Web/Controllers/ControllerBase.cs +++ b/Web/Controllers/ControllerBase.cs @@ -75,5 +75,11 @@ namespace MileageTraker.Web.Controllers DataService.UpdateUser(user); return url; } + + protected SelectList GetPurposeTypesSelectList() + { + var selectList = new SelectList(DataService.GetPurposeTypes(), "PurposeTypeId", "Purpose"); + return selectList; + } } } \ No newline at end of file diff --git a/Web/Controllers/CreateLogController.cs b/Web/Controllers/CreateLogController.cs index b66c7d3..438b7fd 100644 --- a/Web/Controllers/CreateLogController.cs +++ b/Web/Controllers/CreateLogController.cs @@ -109,11 +109,5 @@ namespace MileageTraker.Web.Controllers } }; } - - private SelectList GetPurposeTypesSelectList() - { - var selectList = new SelectList(DataService.GetPurposeTypes(), "PurposeTypeId", "Purpose"); - return selectList; - } } } \ No newline at end of file diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs index 239123f..70a6a14 100644 --- a/Web/Controllers/LogController.cs +++ b/Web/Controllers/LogController.cs @@ -89,7 +89,10 @@ namespace MileageTraker.Web.Controllers public ViewResult Details(int id) { var log = DataService.GetLog(id); - var viewModel = new LogViewModel(log); + var viewModel = new LogViewModel(log) + { + Purpose = {Available = GetPurposeTypesSelectList()} + }; return View(viewModel); } @@ -130,8 +133,9 @@ namespace MileageTraker.Web.Controllers { var viewModel = new LogViewModel { - Date = DateTime.Today, - VehicleId = vehicleId + Date = DateTime.Today, + VehicleId = vehicleId, + Purpose = {Available = GetPurposeTypesSelectList()}, }; return View(viewModel); @@ -149,20 +153,29 @@ namespace MileageTraker.Web.Controllers log.UserHostAddress = HttpContext.Request.UserHostAddress; log.UserAgent = HttpContext.Request.UserAgent; + if (viewModel.Purpose != null) + log.Purpose = + DataService.GetPurposeTypes() + .First(pt => pt.PurposeTypeId == viewModel.Purpose.Selected); + DataService.AddLog(log); TempData["StatusMessage"] = "Log created"; return RedirectToAction("Index"); } + viewModel.Purpose.Available = GetPurposeTypesSelectList(); return View(viewModel); } public ActionResult Edit(int id) { var log = DataService.GetLog(id); - var logViewModel = new LogViewModel(log); - return View(logViewModel); + var viewModel = new LogViewModel(log) + { + Purpose = {Available = GetPurposeTypesSelectList()} + }; + return View(viewModel); } [HttpPost] @@ -175,18 +188,28 @@ namespace MileageTraker.Web.Controllers viewModel.SetProperties(log); log.User = DataService.FindUserByFullName(viewModel.UserFullName); - DataService.UpdateLog(log); + if (viewModel.Purpose != null) + log.Purpose = + DataService.GetPurposeTypes() + .First(pt => pt.PurposeTypeId == viewModel.Purpose.Selected); + + DataService.UpdateLog(log); TempData["StatusMessage"] = "Log updated"; return RedirectToAction("Details", new{id = log.LogId}); } - return View(viewModel); + + viewModel.Purpose.Available = GetPurposeTypesSelectList(); + return View(viewModel); } public ActionResult Delete(int id) { var log = DataService.GetLog(id); - var viewModel = new LogViewModel(log); + var viewModel = new LogViewModel(log) + { + Purpose = {Available = GetPurposeTypesSelectList()} + }; return View(viewModel); } diff --git a/Web/ViewModels/Log/LogIndexViewModel.cs b/Web/ViewModels/Log/LogIndexViewModel.cs index 677b457..fdbe292 100644 --- a/Web/ViewModels/Log/LogIndexViewModel.cs +++ b/Web/ViewModels/Log/LogIndexViewModel.cs @@ -26,7 +26,7 @@ namespace MileageTraker.Web.ViewModels.Log [Display(Name = "City Name")] public string CityName { get; set; } - [Display(Name = "Trip Purpose")] + [Display(Name = "Purpose")] public string PurposePurpose { get; set; } [Display(Name = "Driver Name")] diff --git a/Web/ViewModels/Log/LogPartialDetails.cs b/Web/ViewModels/Log/LogPartialDetails.cs index c7b4236..6b83f8d 100644 --- a/Web/ViewModels/Log/LogPartialDetails.cs +++ b/Web/ViewModels/Log/LogPartialDetails.cs @@ -24,6 +24,9 @@ namespace MileageTraker.Web.ViewModels.Log [Display(Name = "Driver")] public string UserFullName { get; set; } + + [Display(Name = "Purpose")] + public string PurposePurpose { get; set; } [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] public double GasPurchased { get; set; } diff --git a/Web/ViewModels/Log/LogViewModel.cs b/Web/ViewModels/Log/LogViewModel.cs index ebf50d1..c2bb9af 100644 --- a/Web/ViewModels/Log/LogViewModel.cs +++ b/Web/ViewModels/Log/LogViewModel.cs @@ -42,13 +42,19 @@ namespace MileageTraker.Web.ViewModels.Log [Display(Name = "Driver Name")] [InputSize("medium")] public string UserFullName { get; set; } - + [Required(ErrorMessage = "Required")] [Display(Name = "City Name")] [InputSize("medium")] [StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")] public string CityName { get; set; } + [Display(Name = "Purpose")] + public SelectListViewModel Purpose { get; set; } + + [InputSize("large")] + public string Notes { get; set; } + [Display(Name = "Gas Purchased")] [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] [Units("Gallons")] @@ -74,20 +80,25 @@ namespace MileageTraker.Web.ViewModels.Log Mapper.CreateMap().ConvertUsing(Convert.ToInt32); Mapper.CreateMap().ConvertUsing(Convert.ToDouble); Mapper.CreateMap().ConvertUsing(new DateTimeTypeConverter()); - Mapper.CreateMap(); + Mapper.CreateMap() + .ForMember(u => u.Purpose, opt => opt.Ignore()); Mapper.CreateMap() - .ForMember(vm => vm.Date, opt => opt.MapFrom(m => m.Date.ToString("d"))); + .ForMember(vm => vm.Date, opt => opt.MapFrom(m => m.Date.ToString("d"))) + .ForMember(u => u.Purpose, opt => opt.Ignore()); } public LogViewModel() { // view will crash if this isn't instantiated LogType = new MileageLogTypeWrapper(); + Purpose = new SelectListViewModel(); } - public LogViewModel(Models.Log log) + public LogViewModel(Models.Log log) : this() { Mapper.Map(log, this); + if (log.Purpose != null) + Purpose.Selected = log.Purpose.PurposeTypeId; } public Models.Log GetLog()