Add and delete service reminders

This commit is contained in:
2015-10-17 23:24:10 -04:00
parent a6fb9d54c6
commit e42fcd16fa
17 changed files with 275 additions and 5 deletions
@@ -0,0 +1,67 @@
using System;
using System.Linq;
using System.Web.Mvc;
using MileageTraker.Web.Attributes;
using MileageTraker.Web.ViewModels.ServiceReminder;
namespace MileageTraker.Web.Controllers
{
[Authorize(Roles = "Administrator, Developer")]
public class ServiceReminderController : ControllerBase
{
[RequireRequestValue("vehicleId")]
public ActionResult Index(string vehicleId)
{
var serviceReminders = DataService.GetServiceReminders(vehicleId).ToList();
var viewModel = new ServiceReminderResultsViewModel
{
ServiceReminderItems = serviceReminders.Select(sr => new ServiceReminderViewModel(sr)),
VehicleId = vehicleId
};
return View(viewModel);
}
[HttpGet]
[RequireRequestValue("vehicleId")]
public ActionResult Create(string vehicleId)
{
var viewModel = new ServiceReminderViewModel
{
VehicleId = vehicleId,
};
var vehicle = DataService.GetVehicle(vehicleId);
if (vehicle.CurrentOdometer.HasValue)
viewModel.TargetOdometer = (int) (Math.Ceiling((decimal) ((vehicle.CurrentOdometer.Value + 3000)/1000))*1000);
return View(viewModel);
}
public ActionResult Delete(int id)
{
var serviceReminder = DataService.GetServiceReminder(id);
var vehicleId = serviceReminder.Vehicle.VehicleId;
DataService.DeleteServiceReminder(id);
return RedirectToAction("Index", new { vehicleId });
}
[HttpPost]
[ActionLog]
public ActionResult Create(ServiceReminderViewModel viewModel)
{
if (ModelState.IsValid)
{
var serviceReminder = viewModel.GetServiceReminder();
serviceReminder.Vehicle = DataService.GetVehicle(viewModel.VehicleId);
DataService.AddServiceReminder(serviceReminder);
SetStatusMessage(
string.Format("Service Reminder at {0} miles created", viewModel.TargetOdometer), StatusType.Success);
return RedirectToAction("Index", new {vehicleId = viewModel.VehicleId});
}
return View(viewModel);
}
}
}
@@ -63,6 +63,7 @@ namespace MileageTraker.Web.Controllers
return View(); return View();
} }
[HttpGet]
[RequireRequestValue("vehicleId")] [RequireRequestValue("vehicleId")]
public ActionResult Create(string vehicleId) public ActionResult Create(string vehicleId)
{ {
+33
View File
@@ -877,5 +877,38 @@ namespace MileageTraker.Web.DAL
#endregion #endregion
#region Service Reminder
public void AddServiceReminder(ServiceReminder serviceReminder)
{
_db.ServiceReminders.Add(serviceReminder);
_db.SaveChanges();
}
public void UpdateServiceReminder(ServiceReminder serviceReminder)
{
_db.Entry(serviceReminder).State = EntityState.Modified;
_db.SaveChanges();
}
public IQueryable<ServiceReminder> GetServiceReminders(string vehicleId)
{
var serviceReminders = _db.ServiceReminders.Where(sr => sr.Vehicle.VehicleId == vehicleId);
return serviceReminders;
}
public ServiceReminder GetServiceReminder(int id)
{
return _db.ServiceReminders.Find(id);
}
public void DeleteServiceReminder(int id)
{
var serviceReminder = _db.ServiceReminders.Find(id);
_db.ServiceReminders.Remove(serviceReminder);
_db.SaveChanges();
}
#endregion
} }
} }
+1 -1
View File
@@ -50,7 +50,7 @@ namespace MileageTraker.Web.Models
[Required] [Required]
[InputSize("small")] [InputSize("small")]
[Units("$")] [Currency]
public decimal Price { get; set; } public decimal Price { get; set; }
[Required] [Required]
@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace MileageTraker.Web.ViewModels.ServiceReminder
{
public class ServiceReminderResultsViewModel
{
public IEnumerable<ServiceReminderViewModel> ServiceReminderItems { get; set; }
public string VehicleId { get; set; }
}
}
@@ -0,0 +1,51 @@
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using AutoMapper;
using MileageTraker.Web.Attributes;
namespace MileageTraker.Web.ViewModels.ServiceReminder
{
public class ServiceReminderViewModel
{
[HiddenInput(DisplayValue = false)]
public int? ServiceReminderId { get; set; }
[HiddenInput(DisplayValue = false)]
[Required]
[Remote("Exists", "Vehicle", ErrorMessage = "ID not found")]
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")]
[Display(Name = "Vehicle ID")]
[RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")]
[InputSize("mini")]
public string VehicleId { get; set; }
[InputSize("small")]
public int TargetOdometer { get; set; }
[StringLength(64)]
public string Description { get; set; }
static ServiceReminderViewModel()
{
Mapper.CreateMap<ServiceReminderViewModel, Models.ServiceReminder>();
Mapper.CreateMap<Models.ServiceReminder, ServiceReminderViewModel>()
.ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId));
}
public ServiceReminderViewModel(Models.ServiceReminder serviceReminder)
{
Mapper.Map(serviceReminder, this);
}
public ServiceReminderViewModel()
{
}
public Models.ServiceReminder GetServiceReminder()
{
var serviceReminder = new Models.ServiceReminder();
Mapper.Map(this, serviceReminder);
return serviceReminder;
}
}
}
+19
View File
@@ -0,0 +1,19 @@
@model MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderViewModel
@{
ViewBag.Title = "Create Vehicle Service Reminder";
}
<h2 class="center-content"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2>
@using (Html.BeginForm("Create", "ServiceReminder", FormMethod.Post, new { @class = "form-horizontal well center-content" }))
{
@Html.Partial("_ValidationSummary")
<fieldset>
<legend></legend>
@Html.EditorForModel()
<div class="form-actions">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</fieldset>
}
+16
View File
@@ -0,0 +1,16 @@
@model MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderViewModel
@{
ViewBag.Title = "Vehicle Service Reminder Details" ;
}
@Html.Partial("_StatusMessage")
<h2 class="center-content"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2>
<div class="center-content well">
@Html.DisplayForModel()
</div>
<div class="center-content btn-toolbar">
@Html.ActionLink("Edit", "Edit", new { id = Model.ServiceReminderId }, new { @class = "btn" })
</div>
+21
View File
@@ -0,0 +1,21 @@
@model MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderViewModel
@{
ViewBag.Title = "Edit Vehicle Service Reminder";
}
@Html.Partial("_StatusMessage")
<h2 class="center-content"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2>
@using (Html.BeginForm("Edit", "ServiceREminder", FormMethod.Post, new { @class = "form-horizontal well center-content" }))
{
@Html.Partial("_ValidationSummary")
<fieldset>
<legend></legend>
@Html.EditorForModel()
<div class="form-actions">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</fieldset>
}
+21
View File
@@ -0,0 +1,21 @@
@model MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderResultsViewModel
@{
ViewBag.Title = "Vehicle Service Reminders for Vehicle Id " + Model.VehicleId;
}
@Html.Partial("_StatusMessage")
<h2 id="vehicle-title"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2>
<div class="center-content">
@foreach (var item in Model.ServiceReminderItems)
{
Html.RenderPartial("ServiceReminderViewModel", item);
}
</div>
<div class="btn-toolbar center-content well">
@Html.ActionLink("Add Service Reminder", "Create", new { vehicleId = Model.VehicleId }, new{@class="btn"})
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new{@class="btn"})
</div>
@@ -0,0 +1,10 @@
@model MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderViewModel
<div class="well">
<h3>Service Reminder</h3>
@Html.DisplayForModel()
<div class='btn-toolbar'>
@Html.ActionLink("Edit", "Edit", new { id = Model.ServiceReminderId }, new { @class = "btn" })
@Html.ActionLink("Delete", "Delete", new { id = Model.ServiceReminderId }, new { @class = "btn" })
</div>
</div>
+1 -1
View File
@@ -62,7 +62,7 @@
grid.Column(format: grid.Column(format:
@<div class='btn-group'> @<div class='btn-group'>
@*Html.ActionLink("Edit", "Edit", new { id = item.UserId }, new { @class = "btn btn-mini" })*@ @*Html.ActionLink("Edit", "Edit", new { id = item.UserId }, new { @class = "btn btn-mini" })*@
@Html.ActionLink("Details / Edit", "Details", new { id = item.UserId }, new { @class = "btn btn-mini" }) @Html.ActionLink("Details", "Details", new { id = item.UserId }, new { @class = "btn btn-mini" })
</div>) </div>)
), ),
htmlAttributes: new { @class = "table table-striped table-bordered table-hover table-condensed"}, htmlAttributes: new { @class = "table table-striped table-bordered table-hover table-condensed"},
+13 -1
View File
@@ -28,6 +28,18 @@
{ {
@Html.ActionLink("Reactivate", "SetActive", new {id = Model.VehicleId}, new {@class = "btn"}) @Html.ActionLink("Reactivate", "SetActive", new {id = Model.VehicleId}, new {@class = "btn"})
} }
@Html.ActionLink("Add Completed Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId }, new { @class = "btn" }) <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
Services <span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
@Html.ActionLink("View Service Reminders", "Index", "ServiceReminder", new { VehicleId = Model.VehicleId }, null)
</li>
<li>
@Html.ActionLink("Add Completed Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId }, null)
</li>
</ul>
</div>
@Html.ActionLink("Logs", "Index", "Log", new { Model.VehicleId}, new { @class = "btn" }) @Html.ActionLink("Logs", "Index", "Log", new { Model.VehicleId}, new { @class = "btn" })
</div> </div>
+1 -1
View File
@@ -90,8 +90,8 @@
</td> </td>
<td> <td>
<div class='btn-group'> <div class='btn-group'>
@Html.ActionLink("Edit", "Edit", new { id = item.VehicleId }, new { @class = "btn btn-mini" })
@Html.ActionLink("Details", "Details", new { id = item.VehicleId }, new { @class = "btn btn-mini" }) @Html.ActionLink("Details", "Details", new { id = item.VehicleId }, new { @class = "btn btn-mini" })
@Html.ActionLink("Svc Reminder", "Index", "ServiceReminder", new { vehicleId = item.VehicleId }, new { @class = "btn btn-mini" })
</div> </div>
</td> </td>
</tr> </tr>
+1
View File
@@ -13,4 +13,5 @@
<div class="center-content btn-toolbar"> <div class="center-content btn-toolbar">
@Html.ActionLink("Edit", "Edit", new { id = Model.VehicleServiceId }, new { @class = "btn" }) @Html.ActionLink("Edit", "Edit", new { id = Model.VehicleServiceId }, new { @class = "btn" })
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new{@class="btn"})
</div> </div>
+1 -1
View File
@@ -42,7 +42,7 @@
grid.Column("Description", "Description"), grid.Column("Description", "Description"),
grid.Column(format: grid.Column(format:
@<div class='btn-group'> @<div class='btn-group'>
@Html.ActionLink("Details / Edit", "Details", new { id = item.VehicleServiceId }, new { @class = "btn btn-mini" }) @Html.ActionLink("Details", "Details", new { id = item.VehicleServiceId }, new { @class = "btn btn-mini" })
</div>) </div>)
), ),
htmlAttributes: new { @class = "table table-striped table-bordered table-hover table-condensed"}, htmlAttributes: new { @class = "table table-striped table-bordered table-hover table-condensed"},
+8
View File
@@ -147,6 +147,7 @@
<Compile Include="Controllers\CityController.cs" /> <Compile Include="Controllers\CityController.cs" />
<Compile Include="Controllers\ControllerBase.cs" /> <Compile Include="Controllers\ControllerBase.cs" />
<Compile Include="Controllers\FuelLogController.cs" /> <Compile Include="Controllers\FuelLogController.cs" />
<Compile Include="Controllers\ServiceReminderController.cs" />
<Compile Include="Controllers\VehicleServiceController.cs" /> <Compile Include="Controllers\VehicleServiceController.cs" />
<Compile Include="Controllers\PurposeController.cs" /> <Compile Include="Controllers\PurposeController.cs" />
<Compile Include="Controllers\UserController.cs" /> <Compile Include="Controllers\UserController.cs" />
@@ -262,6 +263,8 @@
<Compile Include="ViewModels\Log\LogPartialDetails.cs" /> <Compile Include="ViewModels\Log\LogPartialDetails.cs" />
<Compile Include="Models\VehicleService.cs" /> <Compile Include="Models\VehicleService.cs" />
<Compile Include="ViewModels\DateQueryViewModel.cs" /> <Compile Include="ViewModels\DateQueryViewModel.cs" />
<Compile Include="ViewModels\ServiceReminder\ServiceReminderViewModel.cs" />
<Compile Include="ViewModels\ServiceReminder\ServiceReminderResultsViewModel.cs" />
<Compile Include="ViewModels\VehicleService\VehicleServiceQueryViewModel.cs" /> <Compile Include="ViewModels\VehicleService\VehicleServiceQueryViewModel.cs" />
<Compile Include="ViewModels\VehicleService\VehicleServiceResultsViewModel.cs" /> <Compile Include="ViewModels\VehicleService\VehicleServiceResultsViewModel.cs" />
<Compile Include="ViewModels\VehicleService\VehicleServiceViewModel.cs" /> <Compile Include="ViewModels\VehicleService\VehicleServiceViewModel.cs" />
@@ -342,6 +345,11 @@
<Content Include="Views\VehicleService\Details.cshtml" /> <Content Include="Views\VehicleService\Details.cshtml" />
<Content Include="Views\Shared\EditorTemplates\VehicleServiceResultsViewModel.cshtml" /> <Content Include="Views\Shared\EditorTemplates\VehicleServiceResultsViewModel.cshtml" />
<Content Include="Views\VehicleService\Empty.cshtml" /> <Content Include="Views\VehicleService\Empty.cshtml" />
<Content Include="Views\ServiceReminder\Create.cshtml" />
<Content Include="Views\ServiceReminder\Details.cshtml" />
<Content Include="Views\ServiceReminder\Edit.cshtml" />
<Content Include="Views\ServiceReminder\Index.cshtml" />
<Content Include="Views\ServiceReminder\ServiceReminderViewModel.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Content\Account.Login.css" /> <Content Include="Content\Account.Login.css" />