From e911dfced7044fa778e4736074aacd9ee42ceab6 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Sat, 2 Mar 2013 14:24:41 -0500 Subject: [PATCH] Ability to enter purpose on createlog form --- Web/Controllers/CreateLogController.cs | 20 ++++++++++++++++++- Web/DAL/DataService.cs | 12 +++++++++++ ...01303020124385_AddPurposeType.Designer.cs} | 2 +- ...e.cs => 201303020124385_AddPurposeType.cs} | 19 +++++++++--------- .../CreateLog/CreateLogViewModel.cs | 7 +++++++ Web/ViewModels/SelectListViewModel.cs | 10 ++++++++++ Web/Views/CreateLog/Confirm.cshtml | 3 +++ .../SelectListViewModel.cshtml | 7 +++++++ .../SelectListViewModel.cshtml | 6 ++++++ Web/Web.csproj | 9 ++++++--- 10 files changed, 81 insertions(+), 14 deletions(-) rename Web/Migrations/{201303010157481_AddPurposeType.Designer.cs => 201303020124385_AddPurposeType.Designer.cs} (98%) rename Web/Migrations/{201303010157481_AddPurposeType.cs => 201303020124385_AddPurposeType.cs} (81%) create mode 100644 Web/ViewModels/SelectListViewModel.cs create mode 100644 Web/Views/Shared/DisplayTemplates/SelectListViewModel.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/SelectListViewModel.cshtml diff --git a/Web/Controllers/CreateLogController.cs b/Web/Controllers/CreateLogController.cs index e9a57c7..4f47cfc 100644 --- a/Web/Controllers/CreateLogController.cs +++ b/Web/Controllers/CreateLogController.cs @@ -1,7 +1,9 @@ using System; +using System.Linq; using System.Web.Mvc; using MileageTraker.Web.Attributes; using MileageTraker.Web.Models; +using MileageTraker.Web.ViewModels; using MileageTraker.Web.ViewModels.CreateLog; namespace MileageTraker.Web.Controllers @@ -25,9 +27,11 @@ namespace MileageTraker.Web.Controllers if (ModelState.IsValid) { var confirmCreateLogViewModel = new ConfirmCreateLogViewModel(model); + confirmCreateLogViewModel.Purpose.Available = GetPurposeTypesSelectList(); return View("Confirm", confirmCreateLogViewModel); } + model.Purpose.Available = GetPurposeTypesSelectList(); return View(model); } @@ -35,6 +39,7 @@ namespace MileageTraker.Web.Controllers [HttpPost] public ViewResult Edit(CreateLogViewModel model) { + model.Purpose.Available = GetPurposeTypesSelectList(); return View("Index", model); } @@ -66,6 +71,7 @@ namespace MileageTraker.Web.Controllers return RedirectToAction("Index"); } + model.Purpose.Available = GetPurposeTypesSelectList(); return View("Index", model); } @@ -88,8 +94,20 @@ namespace MileageTraker.Web.Controllers { LogType = logType, VehicleId = vehicleId, - Date = DateTime.Today + Date = DateTime.Today, + Purpose = + new SelectListViewModel + { + Available = + GetPurposeTypesSelectList() + } }; } + + private SelectList GetPurposeTypesSelectList() + { + var selectList = new SelectList(DataService.GetPurposeTypesWithBlank(), "PurposeTypeId", "Purpose"); + return selectList; + } } } \ No newline at end of file diff --git a/Web/DAL/DataService.cs b/Web/DAL/DataService.cs index b7738ca..514b277 100644 --- a/Web/DAL/DataService.cs +++ b/Web/DAL/DataService.cs @@ -323,6 +323,18 @@ namespace MileageTraker.Web.DAL .FirstOrDefault(l => !excludeLogId.HasValue || l.LogId != excludeLogId.Value); } + public IEnumerable GetPurposeTypes() + { + return + (from pt in _db.PurposeTypes + select pt).OrderBy(pt => pt.SortOrder).ToList(); + } + + public IEnumerable GetPurposeTypesWithBlank() + { + return (new[] { new PurposeType() }).Concat(GetPurposeTypes()); + } + #endregion #region Vehicle diff --git a/Web/Migrations/201303010157481_AddPurposeType.Designer.cs b/Web/Migrations/201303020124385_AddPurposeType.Designer.cs similarity index 98% rename from Web/Migrations/201303010157481_AddPurposeType.Designer.cs rename to Web/Migrations/201303020124385_AddPurposeType.Designer.cs index bb2e8e5..c7cf1d3 100644 --- a/Web/Migrations/201303010157481_AddPurposeType.Designer.cs +++ b/Web/Migrations/201303020124385_AddPurposeType.Designer.cs @@ -8,7 +8,7 @@ namespace MileageTraker.Web.Migrations { string IMigrationMetadata.Id { - get { return "201303010157481_AddPurposeType"; } + get { return "201303020124385_AddPurposeType"; } } string IMigrationMetadata.Source diff --git a/Web/Migrations/201303010157481_AddPurposeType.cs b/Web/Migrations/201303020124385_AddPurposeType.cs similarity index 81% rename from Web/Migrations/201303010157481_AddPurposeType.cs rename to Web/Migrations/201303020124385_AddPurposeType.cs index 2258d26..8b63008 100644 --- a/Web/Migrations/201303010157481_AddPurposeType.cs +++ b/Web/Migrations/201303020124385_AddPurposeType.cs @@ -19,6 +19,7 @@ namespace MileageTraker.Web.Migrations purpose.Purpose, purpose.SortOrder); } + public override void Up() { CreateTable( @@ -30,13 +31,13 @@ namespace MileageTraker.Web.Migrations SortOrder = c.Int(nullable: false), }) .PrimaryKey(t => t.PurposeTypeId); - - AddColumn("Log", "PurposeTypeId", c => c.Int()); - AddForeignKey("Log", "PurposeTypeId", "PurposeType", "PurposeTypeId"); - CreateIndex("Log", "PurposeTypeId"); - + + AddColumn("Log", "Purpose_PurposeTypeId", c => c.Int()); + AddForeignKey("Log", "Purpose_PurposeTypeId", "PurposeType", "PurposeTypeId"); + CreateIndex("Log", "Purpose_PurposeTypeId"); + var purposeTypes = - new[] + new[] { new PurposeType {Purpose = "Audit/Assessment", SortOrder = 1}, new PurposeType {Purpose = "Client Assessment/Home Visit", SortOrder = 3}, @@ -58,9 +59,9 @@ namespace MileageTraker.Web.Migrations public override void Down() { - DropIndex("Log", new[] { "PurposeTypeId" }); - DropForeignKey("Log", "PurposeTypeId", "PurposeType"); - DropColumn("Log", "PurposeTypeId"); + DropIndex("Log", new[] { "Purpose_PurposeTypeId" }); + DropForeignKey("Log", "Purpose_PurposeTypeId", "PurposeType"); + DropColumn("Log", "Purpose_PurposeTypeId"); DropTable("PurposeType"); } } diff --git a/Web/ViewModels/CreateLog/CreateLogViewModel.cs b/Web/ViewModels/CreateLog/CreateLogViewModel.cs index a069931..85b1f3a 100644 --- a/Web/ViewModels/CreateLog/CreateLogViewModel.cs +++ b/Web/ViewModels/CreateLog/CreateLogViewModel.cs @@ -39,6 +39,13 @@ namespace MileageTraker.Web.ViewModels.CreateLog [StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")] public string CityName { get; set; } + [Required(ErrorMessage = "Required")] + [Display(Name = "Trip Purpose")] + public SelectListViewModel Purpose { get; set; } + + [InputSize("large")] + public string Notes { get; set; } + [RegularExpression(@"\d+\.\d{3}", ErrorMessage = "Enter all 3 decimal places")] [Display(Name = "Gas Purchased")] [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] diff --git a/Web/ViewModels/SelectListViewModel.cs b/Web/ViewModels/SelectListViewModel.cs new file mode 100644 index 0000000..d720cbf --- /dev/null +++ b/Web/ViewModels/SelectListViewModel.cs @@ -0,0 +1,10 @@ +using System.Web.Mvc; + +namespace MileageTraker.Web.ViewModels +{ + public class SelectListViewModel + { + public SelectList Available { get; set; } + public int Selected { get; set; } + } +} \ No newline at end of file diff --git a/Web/Views/CreateLog/Confirm.cshtml b/Web/Views/CreateLog/Confirm.cshtml index 506005f..e127c97 100644 --- a/Web/Views/CreateLog/Confirm.cshtml +++ b/Web/Views/CreateLog/Confirm.cshtml @@ -68,6 +68,9 @@ @* // Html.HiddenFor(model => model.CityName) is losing capitalization *@ + @Html.DisplayFor(model => model.Purpose) + @Html.HiddenFor(model => model.Purpose.Selected) +
@Html.DisplayNameFor(m => m.GasPurchased) diff --git a/Web/Views/Shared/DisplayTemplates/SelectListViewModel.cshtml b/Web/Views/Shared/DisplayTemplates/SelectListViewModel.cshtml new file mode 100644 index 0000000..adb295f --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/SelectListViewModel.cshtml @@ -0,0 +1,7 @@ +@model MileageTraker.Web.ViewModels.SelectListViewModel +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; + ViewData.ModelMetadata.DisplayName = "Purpose"; +} + +@Model.Available.FirstOrDefault(i => i.Value == Model.Selected.ToString()).Text \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/SelectListViewModel.cshtml b/Web/Views/Shared/EditorTemplates/SelectListViewModel.cshtml new file mode 100644 index 0000000..7c24168 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/SelectListViewModel.cshtml @@ -0,0 +1,6 @@ +@model MileageTraker.Web.ViewModels.SelectListViewModel +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; + ViewData.ModelMetadata.DisplayName = "Purpose"; +} +@Html.DropDownListFor(m => m.Selected, Model.Available) \ No newline at end of file diff --git a/Web/Web.csproj b/Web/Web.csproj index 266c1fe..1a5e1cd 100644 --- a/Web/Web.csproj +++ b/Web/Web.csproj @@ -156,9 +156,9 @@ 201302130049004_PasswordNullForUninitialized.cs - - - 201303010157481_AddPurposeType.cs + + + 201303020124385_AddPurposeType.cs @@ -176,6 +176,7 @@ + @@ -313,6 +314,8 @@ + +