Compare commits
10
Commits
3a115b5b2b
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
273be34c98 | ||
|
|
6a5b37eda9 | ||
|
|
4b44128d62 | ||
|
|
6f031c5cb6 | ||
|
|
b5589103ec | ||
|
|
c58cc951d8 | ||
|
|
1acee219a9 | ||
|
|
6fcaaf8657 | ||
|
|
45e461df36 | ||
|
|
a662e822e7 |
@@ -1,2 +1,3 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassWithVirtualMembersNeverInherited_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String></wpf:ResourceDictionary>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassWithVirtualMembersNeverInherited_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Traker/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.Attributes
|
||||||
|
{
|
||||||
|
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
|
||||||
|
public class OptionLabelAttribute : Attribute
|
||||||
|
{
|
||||||
|
public string Text { get; private set; }
|
||||||
|
|
||||||
|
public OptionLabelAttribute(string text)
|
||||||
|
{
|
||||||
|
Text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ namespace MileageTraker.Web.Context
|
|||||||
public DbSet<Role> Roles { get; set; }
|
public DbSet<Role> Roles { get; set; }
|
||||||
public DbSet<PurposeType> PurposeTypes { get; set; }
|
public DbSet<PurposeType> PurposeTypes { get; set; }
|
||||||
public DbSet<FuelLog> FuelLogs { get; set; }
|
public DbSet<FuelLog> FuelLogs { get; set; }
|
||||||
|
public DbSet<VehicleRecall> VehicleRecalls { get; set; }
|
||||||
public DbSet<VehicleService> VehicleServices { get; set; }
|
public DbSet<VehicleService> VehicleServices { get; set; }
|
||||||
public DbSet<ServiceReminder> ServiceReminders { get; set; }
|
public DbSet<ServiceReminder> ServiceReminders { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -15,15 +15,18 @@ namespace MileageTraker.Web.Controllers
|
|||||||
[Authorize(Roles = "Administrator, Developer")]
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
public class UserController : ControllerBase
|
public class UserController : ControllerBase
|
||||||
{
|
{
|
||||||
public ActionResult Index()
|
public ActionResult Index(bool disabled = false)
|
||||||
{
|
{
|
||||||
var users =
|
var users =
|
||||||
DataService
|
from u in DataService.GetUsers()
|
||||||
.GetUsers()
|
where u.IsApproved == !disabled
|
||||||
.ToList()
|
orderby u.Username
|
||||||
.OrderBy(u => u.Username);
|
select u;
|
||||||
|
|
||||||
return View(users);
|
var userResultsViewModel = new UserResultsViewModel(users.ToList(), disabled);
|
||||||
|
|
||||||
|
|
||||||
|
return View(userResultsViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
[ActionLog]
|
[ActionLog]
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using MileageTraker.Web.Attributes;
|
using MileageTraker.Web.Attributes;
|
||||||
using MileageTraker.Web.DAL;
|
using MileageTraker.Web.DAL;
|
||||||
using MileageTraker.Web.Models;
|
using MileageTraker.Web.Models;
|
||||||
using MileageTraker.Web.Utility;
|
using MileageTraker.Web.Utility;
|
||||||
using MileageTraker.Web.ViewModels.Vehicle;
|
using MileageTraker.Web.ViewModels.Vehicle;
|
||||||
using MileageTraker.Web.ViewModels.VehicleService;
|
|
||||||
|
|
||||||
namespace MileageTraker.Web.Controllers
|
namespace MileageTraker.Web.Controllers
|
||||||
{
|
{
|
||||||
@@ -33,8 +33,17 @@ namespace MileageTraker.Web.Controllers
|
|||||||
public PartialViewResult DetailsPartial(string id)
|
public PartialViewResult DetailsPartial(string id)
|
||||||
{
|
{
|
||||||
var vehicle = DataService.GetVehicle(id);
|
var vehicle = DataService.GetVehicle(id);
|
||||||
|
if (vehicle == null)
|
||||||
|
Response.StatusCode = 404;
|
||||||
return PartialView(new VehiclePartialDetails(vehicle));
|
return PartialView(new VehiclePartialDetails(vehicle));
|
||||||
}
|
}
|
||||||
|
public PartialViewResult DetailsQuickPartial(string id)
|
||||||
|
{
|
||||||
|
var vehicle = DataService.GetVehicle(id);
|
||||||
|
if (vehicle == null)
|
||||||
|
Response.StatusCode = 404;
|
||||||
|
return PartialView(new VehiclePartialDetailsQuick(vehicle));
|
||||||
|
}
|
||||||
|
|
||||||
public ActionResult Create()
|
public ActionResult Create()
|
||||||
{
|
{
|
||||||
@@ -75,9 +84,12 @@ namespace MileageTraker.Web.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public JsonResult Exists(string vehicleId)
|
public JsonResult Exists(string vehicleId, string serviceVehicleId)
|
||||||
{
|
{
|
||||||
var vehicle = DataService.GetVehicle(vehicleId);
|
var vehicle =
|
||||||
|
vehicleId != null
|
||||||
|
? DataService.GetVehicle(vehicleId)
|
||||||
|
: DataService.GetVehicle(serviceVehicleId);
|
||||||
return Json(vehicle != null, JsonRequestBehavior.AllowGet);
|
return Json(vehicle != null, JsonRequestBehavior.AllowGet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using MileageTraker.Web.Attributes;
|
using MileageTraker.Web.Attributes;
|
||||||
@@ -12,9 +13,10 @@ using MileageTraker.Web.ViewModels.VehicleService;
|
|||||||
|
|
||||||
namespace MileageTraker.Web.Controllers
|
namespace MileageTraker.Web.Controllers
|
||||||
{
|
{
|
||||||
[Authorize(Roles = "Administrator, Developer")]
|
[Authorize(Roles = "Administrator, Developer, Driver")]
|
||||||
public class VehicleServiceController : ControllerBase
|
public class VehicleServiceController : ControllerBase
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
public ActionResult Index(VehicleServiceQueryViewModel query)
|
public ActionResult Index(VehicleServiceQueryViewModel query)
|
||||||
{
|
{
|
||||||
var validVehicleServiceYearMonths = DataService.GetValidVehicleServiceMonths();
|
var validVehicleServiceYearMonths = DataService.GetValidVehicleServiceMonths();
|
||||||
@@ -25,7 +27,10 @@ namespace MileageTraker.Web.Controllers
|
|||||||
// default parameter processing
|
// default parameter processing
|
||||||
query.SetDefaultParameters(validVehicleServiceYearMonths);
|
query.SetDefaultParameters(validVehicleServiceYearMonths);
|
||||||
|
|
||||||
var vehicleServices = DataService.FilterVehicleServices(DataService.GetVehicleServices(), query).ToList();
|
var vehicleServices =
|
||||||
|
DataService
|
||||||
|
.FilterVehicleServices(DataService.GetVehicleServices(), query)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
var upcomingServiceReminders =
|
var upcomingServiceReminders =
|
||||||
DataService.GetUpcomingServiceReminders().ToList()
|
DataService.GetUpcomingServiceReminders().ToList()
|
||||||
@@ -33,7 +38,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
upcomingServiceReminders.Sort();
|
upcomingServiceReminders.Sort();
|
||||||
|
|
||||||
var viewModel = new VehicleServiceResultsViewModel(
|
var viewModel = new VehicleServiceResultsViewModel(
|
||||||
vehicleServices.Select(s => new VehicleServiceViewModel(s)),
|
vehicleServices.Select(s => HydrateViewModel(new VehicleServiceViewModel(s), s.VehicleServiceId)),
|
||||||
upcomingServiceReminders,
|
upcomingServiceReminders,
|
||||||
query,
|
query,
|
||||||
CustomExtensions.YearMonthList(validVehicleServiceYearMonths));
|
CustomExtensions.YearMonthList(validVehicleServiceYearMonths));
|
||||||
@@ -41,6 +46,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
return View(viewModel);
|
return View(viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
[ActionLog]
|
[ActionLog]
|
||||||
public ActionResult Export(VehicleServiceQueryViewModel query)
|
public ActionResult Export(VehicleServiceQueryViewModel query)
|
||||||
{
|
{
|
||||||
@@ -53,7 +59,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
query.SetDefaultParameters(validVehicleServiceYearMonths);
|
query.SetDefaultParameters(validVehicleServiceYearMonths);
|
||||||
|
|
||||||
var vehicleServices = DataService.FilterVehicleServices(DataService.GetVehicleServices(), query).ToList();
|
var vehicleServices = DataService.FilterVehicleServices(DataService.GetVehicleServices(), query).ToList();
|
||||||
var filteredServices = vehicleServices.Select(vs => new VehicleServiceViewModel(vs));
|
var filteredServices = vehicleServices.Select(vs => HydrateViewModel(new VehicleServiceViewModel(vs), vs.VehicleServiceId));
|
||||||
|
|
||||||
var name = string.Format("VehicleServices_{0}", query);
|
var name = string.Format("VehicleServices_{0}", query);
|
||||||
|
|
||||||
@@ -61,23 +67,85 @@ namespace MileageTraker.Web.Controllers
|
|||||||
return File(export, "application/ms-excel", name + ".xls");
|
return File(export, "application/ms-excel", name + ".xls");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
public ViewResult Details(int id)
|
public ViewResult Details(int id)
|
||||||
{
|
{
|
||||||
var vehicleService = DataService.GetVehicleService(id);
|
var vehicleService = DataService.GetVehicleService(id);
|
||||||
var viewModel = new VehicleServiceViewModel(vehicleService);
|
var viewModel = new VehicleServiceViewModel(vehicleService);
|
||||||
return View(viewModel);
|
return View(HydrateViewModel(viewModel, vehicleServiceId : vehicleService.VehicleServiceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Create()
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
|
public ActionResult SelectVehicle()
|
||||||
{
|
{
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[RequireRequestValue("vehicleId")]
|
[RequireRequestValue("vehicleId")]
|
||||||
public ActionResult Create(string vehicleId)
|
public ActionResult Create(string vehicleId, string vehicleRecallId)
|
||||||
{
|
{
|
||||||
return View(new VehicleServiceViewModel{VehicleId = vehicleId});
|
var viewModel = HydrateViewModel(new VehicleServiceViewModel(), vehicleId: vehicleId);
|
||||||
|
|
||||||
|
var recall = viewModel.VehicleRecall.Available.FirstOrDefault(r => r.Value == vehicleRecallId);
|
||||||
|
if (recall != null)
|
||||||
|
{
|
||||||
|
foreach (var selectListItem in viewModel.VehicleRecall.Available)
|
||||||
|
{
|
||||||
|
selectListItem.Selected = false;
|
||||||
|
}
|
||||||
|
recall.Selected = true;
|
||||||
|
viewModel.VehicleRecall.Selected = int.Parse(recall.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(viewModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[RequireRequestValue("serviceVehicleId")]
|
||||||
|
public ActionResult CreateDriver(string serviceVehicleId)
|
||||||
|
{
|
||||||
|
return View ("Create", HydrateViewModel(new VehicleServiceViewModel(), vehicleId: serviceVehicleId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private VehicleServiceViewModel HydrateViewModel(VehicleServiceViewModel viewModel,
|
||||||
|
int vehicleServiceId = Int32.MinValue, string vehicleId = null)
|
||||||
|
{
|
||||||
|
if (vehicleId != null)
|
||||||
|
viewModel.VehicleId = vehicleId;
|
||||||
|
|
||||||
|
viewModel.VehicleRecall
|
||||||
|
= GetVehicleRecallSelectList(viewModel.VehicleId, vehicleServiceId);
|
||||||
|
|
||||||
|
return viewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SelectListViewModel GetVehicleRecallSelectList(string vehicleId = null, int vehicleServiceId = Int32.MinValue)
|
||||||
|
{
|
||||||
|
var availableRecalls =
|
||||||
|
DataService.GetOpenVehicleRecalls(vehicleId).Union(DataService.GetVehicleRecallByServiceId(vehicleServiceId))
|
||||||
|
.Select(vr =>
|
||||||
|
new SelectListItem
|
||||||
|
{
|
||||||
|
Text = vr.Identifier,
|
||||||
|
Value = vr.VehicleRecallId.ToString(),
|
||||||
|
Selected = vr.CompletedService.VehicleServiceId == vehicleServiceId
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
var selectedValue = availableRecalls.FirstOrDefault(vr => vr.Selected)?.Value ?? "0";
|
||||||
|
|
||||||
|
var selectList = new SelectList(availableRecalls, "Value", "Text", selectedValue);
|
||||||
|
|
||||||
|
var slvm = new SelectListViewModel
|
||||||
|
{
|
||||||
|
Available = selectList,
|
||||||
|
Selected =
|
||||||
|
selectList.SelectedValue != null
|
||||||
|
? (int?)int.Parse((string)selectList.SelectedValue)
|
||||||
|
: null
|
||||||
|
};
|
||||||
|
return slvm;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
@@ -91,12 +159,14 @@ namespace MileageTraker.Web.Controllers
|
|||||||
vehicleService.Vehicle = DataService.GetVehicle(viewModel.VehicleId);
|
vehicleService.Vehicle = DataService.GetVehicle(viewModel.VehicleId);
|
||||||
DataService.AddVehicleService(vehicleService);
|
DataService.AddVehicleService(vehicleService);
|
||||||
|
|
||||||
SetStatusMessage(
|
// update any recalls
|
||||||
string.Format("Vehicle Service for vehicle {0} created", viewModel.VehicleId), StatusType.Success);
|
DataService.UpdateVehicleRecallService(viewModel.VehicleRecall?.Selected ?? int.MinValue, vehicleService);
|
||||||
|
|
||||||
|
SetStatusMessage($"Vehicle Service for vehicle {viewModel.VehicleId} created", StatusType.Success);
|
||||||
return RedirectToAction("UpdateServiceReminders", new {vehicleId = viewModel.VehicleId});
|
return RedirectToAction("UpdateServiceReminders", new {vehicleId = viewModel.VehicleId});
|
||||||
}
|
}
|
||||||
|
|
||||||
return View(viewModel);
|
return View(HydrateViewModel(viewModel));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
@@ -104,7 +174,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
{
|
{
|
||||||
var vehicle = DataService.GetVehicle(vehicleId);
|
var vehicle = DataService.GetVehicle(vehicleId);
|
||||||
|
|
||||||
var viewModel = new UpdateServiceRemindersViewModel { VehicleId = vehicleId };
|
var viewModel = new UpdateServiceRemindersViewModel { VehicleId = vehicleId};
|
||||||
|
|
||||||
RefreshServiceReminderViewModel(viewModel, vehicle, true);
|
RefreshServiceReminderViewModel(viewModel, vehicle, true);
|
||||||
|
|
||||||
@@ -134,7 +204,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
serviceReminder.Vehicle = vehicle;
|
serviceReminder.Vehicle = vehicle;
|
||||||
|
|
||||||
DataService.AddServiceReminder(serviceReminder);
|
DataService.AddServiceReminder(serviceReminder);
|
||||||
status.Add(string.Format("Service Reminder at {0} miles created", viewModel.TargetOdometer));
|
status.Add($"Service Reminder at {viewModel.TargetOdometer} miles created");
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle any deletion
|
// handle any deletion
|
||||||
@@ -151,19 +221,28 @@ namespace MileageTraker.Web.Controllers
|
|||||||
{
|
{
|
||||||
DataService.DeleteServiceReminder(serviceReminders[selected].id);
|
DataService.DeleteServiceReminder(serviceReminders[selected].id);
|
||||||
}
|
}
|
||||||
status.Add(string.Format("Selected {0} service reminders deleted", viewModel.DeleteServiceReminders.Selected.Count()));
|
status.Add(
|
||||||
|
$"Selected {viewModel.DeleteServiceReminders.Selected.Count()} " + $"" +
|
||||||
|
$"service reminder{(viewModel.DeleteServiceReminders.Selected.Count() > 2 ? "s" : "")} deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status.Count > 0)
|
if (status.Count > 0)
|
||||||
{
|
{
|
||||||
SetStatusMessage(string.Join(", ", status), StatusType.Success);
|
SetStatusMessage(string.Join(", ", status), StatusType.Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (User.IsInRole("Administrator") || User.IsInRole("Developer"))
|
||||||
|
{
|
||||||
return RedirectToAction("Index");
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return RedirectToAction("Index", "CreateLog"); // for the drivers
|
||||||
|
}
|
||||||
|
|
||||||
return View(viewModel);
|
return View(viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
private void RefreshServiceReminderViewModel(
|
private void RefreshServiceReminderViewModel(
|
||||||
UpdateServiceRemindersViewModel viewModel, Vehicle vehicle, bool setDefaultSelectedServiceReminders = false)
|
UpdateServiceRemindersViewModel viewModel, Vehicle vehicle, bool setDefaultSelectedServiceReminders = false)
|
||||||
{
|
{
|
||||||
@@ -186,20 +265,23 @@ namespace MileageTraker.Web.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
public ActionResult Edit(int id)
|
public ActionResult Edit(int id)
|
||||||
{
|
{
|
||||||
var vehicleService = DataService.GetVehicleService(id);
|
var vehicleService = DataService.GetVehicleService(id);
|
||||||
var viewModel = new VehicleServiceViewModel(vehicleService);
|
var viewModel = new VehicleServiceViewModel(vehicleService);
|
||||||
return View(viewModel);
|
return View(HydrateViewModel(viewModel, vehicleServiceId: vehicleService.VehicleServiceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
public ActionResult Delete(int id)
|
public ActionResult Delete(int id)
|
||||||
{
|
{
|
||||||
var vehicleService = DataService.GetVehicleService(id);
|
var vehicleService = DataService.GetVehicleService(id);
|
||||||
var viewModel = new VehicleServiceViewModel(vehicleService);
|
var viewModel = new VehicleServiceViewModel(vehicleService);
|
||||||
return View(viewModel);
|
return View(HydrateViewModel(viewModel, vehicleServiceId: vehicleService.VehicleServiceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
[HttpPost, ActionName("Delete")]
|
[HttpPost, ActionName("Delete")]
|
||||||
[ActionLog]
|
[ActionLog]
|
||||||
public ActionResult DeleteConfirmed(int id)
|
public ActionResult DeleteConfirmed(int id)
|
||||||
@@ -210,20 +292,24 @@ namespace MileageTraker.Web.Controllers
|
|||||||
return RedirectToAction("Index");
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Roles = "Administrator, Developer")]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ActionLog]
|
[ActionLog]
|
||||||
public ActionResult Edit(VehicleServiceViewModel viewModel)
|
public ActionResult Edit(VehicleServiceViewModel viewModel)
|
||||||
{
|
{
|
||||||
|
var vehicleService = viewModel.GetVehicleService();
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid)
|
||||||
{
|
{
|
||||||
var vehicleService = viewModel.GetVehicleService();
|
|
||||||
vehicleService.Vehicle = DataService.GetVehicle(viewModel.VehicleId);
|
vehicleService.Vehicle = DataService.GetVehicle(viewModel.VehicleId);
|
||||||
|
|
||||||
DataService.UpdateVehicleService(vehicleService);
|
DataService.UpdateVehicleService(vehicleService);
|
||||||
|
|
||||||
|
DataService.UpdateVehicleRecallService(viewModel.VehicleRecall?.Selected ?? int.MinValue, vehicleService);
|
||||||
|
|
||||||
SetStatusMessage("Changes saved for vehicle service " + vehicleService.Vehicle.VehicleId);
|
SetStatusMessage("Changes saved for vehicle service " + vehicleService.Vehicle.VehicleId);
|
||||||
return RedirectToAction("Details", new { id = vehicleService.VehicleServiceId });
|
return RedirectToAction("Details", new { id = vehicleService.VehicleServiceId });
|
||||||
}
|
}
|
||||||
return View(viewModel);
|
return View(HydrateViewModel(viewModel, vehicleService.VehicleServiceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonResult ServiceCenterNameAutocomplete(string term)
|
public JsonResult ServiceCenterNameAutocomplete(string term)
|
||||||
|
|||||||
@@ -820,6 +820,11 @@ namespace MileageTraker.Web.DAL
|
|||||||
var vehicleService = _db.VehicleServices.Find(id);
|
var vehicleService = _db.VehicleServices.Find(id);
|
||||||
|
|
||||||
_db.VehicleServices.Remove(vehicleService);
|
_db.VehicleServices.Remove(vehicleService);
|
||||||
|
foreach (var recall in _db.VehicleRecalls.Where(vr => vr.CompletedService.VehicleServiceId == id))
|
||||||
|
{
|
||||||
|
recall.CompletedService = null;
|
||||||
|
_db.Entry(recall).State = EntityState.Modified;
|
||||||
|
}
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -992,5 +997,77 @@ namespace MileageTraker.Web.DAL
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Vehicle Recall
|
||||||
|
|
||||||
|
public void AddVehicleRecall(VehicleRecall vehicleRecall)
|
||||||
|
{
|
||||||
|
_db.VehicleRecalls.Add(vehicleRecall);
|
||||||
|
_db.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateVehicleRecall(VehicleRecall vehicleRecall)
|
||||||
|
{
|
||||||
|
_db.Entry(vehicleRecall).State = EntityState.Modified;
|
||||||
|
_db.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateVehicleRecallService(int vehicleRecallId, VehicleService vehicleService)
|
||||||
|
{
|
||||||
|
if (vehicleRecallId > 0)
|
||||||
|
{
|
||||||
|
var recall = GetVehicleRecall(vehicleRecallId);
|
||||||
|
recall.CompletedService = vehicleService;
|
||||||
|
UpdateVehicleRecall(recall);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var recall = GetVehicleRecalls().FirstOrDefault(vr => vr.CompletedService.VehicleServiceId == vehicleService.VehicleServiceId);
|
||||||
|
if (recall != null)
|
||||||
|
{
|
||||||
|
recall.CompletedService = null;
|
||||||
|
UpdateVehicleRecall(recall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<VehicleRecall> GetVehicleRecalls(string vehicleId)
|
||||||
|
{
|
||||||
|
return GetVehicleRecalls().Where(vr => vr.Vehicle.VehicleId == vehicleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<VehicleRecall> GetOpenVehicleRecalls()
|
||||||
|
{
|
||||||
|
return GetVehicleRecalls().Where(vr => vr.CompletedService == null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<VehicleRecall> GetOpenVehicleRecalls(string vehicleId)
|
||||||
|
{
|
||||||
|
return GetOpenVehicleRecalls().Where(vr => vr.Vehicle.VehicleId == vehicleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<VehicleRecall> GetVehicleRecallByServiceId(int vehicleServiceId)
|
||||||
|
{
|
||||||
|
return GetVehicleRecalls().Where(vr => vr.CompletedService.VehicleServiceId == vehicleServiceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<VehicleRecall> GetVehicleRecalls()
|
||||||
|
{
|
||||||
|
return _db.VehicleRecalls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public VehicleRecall GetVehicleRecall(int id)
|
||||||
|
{
|
||||||
|
return _db.VehicleRecalls.Find(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteVehicleRecall(int id)
|
||||||
|
{
|
||||||
|
var vehicleRecall = _db.VehicleRecalls.Find(id);
|
||||||
|
|
||||||
|
_db.VehicleRecalls.Remove(vehicleRecall);
|
||||||
|
_db.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,8 @@ namespace MileageTraker.Web.Email
|
|||||||
}
|
}
|
||||||
catch (SmtpException ex)
|
catch (SmtpException ex)
|
||||||
{
|
{
|
||||||
Logger.Error(ex, "Failed to send mail");
|
|
||||||
|
Logger.Error(ex, $"Failed to send mail. Status Code: {ex.StatusCode}. Message: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-4
@@ -68,20 +68,23 @@ namespace MileageTraker.Web
|
|||||||
metadata.DisplayName = propertyName.Wordify();
|
metadata.DisplayName = propertyName.Wordify();
|
||||||
|
|
||||||
var formatHint = attributes.OfType<FormatHintAttribute>().FirstOrDefault();
|
var formatHint = attributes.OfType<FormatHintAttribute>().FirstOrDefault();
|
||||||
metadata.AdditionalValues.Add("FormatHint", formatHint != null ? formatHint.Text : null);
|
metadata.AdditionalValues.Add("FormatHint", formatHint?.Text);
|
||||||
|
|
||||||
var unitsAttribute = attributes.OfType<UnitsAttribute>().FirstOrDefault();
|
var unitsAttribute = attributes.OfType<UnitsAttribute>().FirstOrDefault();
|
||||||
metadata.AdditionalValues.Add("Units", unitsAttribute != null ? unitsAttribute.Text : null);
|
metadata.AdditionalValues.Add("Units", unitsAttribute?.Text);
|
||||||
|
|
||||||
var currencyAttribute = attributes.OfType<CurrencyAttribute>().FirstOrDefault();
|
var currencyAttribute = attributes.OfType<CurrencyAttribute>().FirstOrDefault();
|
||||||
metadata.AdditionalValues.Add("Currency", currencyAttribute != null ? currencyAttribute.Symbol : null);
|
metadata.AdditionalValues.Add("Currency", currencyAttribute?.Symbol);
|
||||||
|
|
||||||
var inputSizeAttribute = attributes.OfType<InputSizeAttribute>().FirstOrDefault();
|
var inputSizeAttribute = attributes.OfType<InputSizeAttribute>().FirstOrDefault();
|
||||||
metadata.AdditionalValues.Add("InputSize", inputSizeAttribute != null ? inputSizeAttribute.ClassName : null);
|
metadata.AdditionalValues.Add("InputSize", inputSizeAttribute?.ClassName);
|
||||||
|
|
||||||
var editLabelAttribute = attributes.OfType<NoEditLabelAttribute>().FirstOrDefault();
|
var editLabelAttribute = attributes.OfType<NoEditLabelAttribute>().FirstOrDefault();
|
||||||
metadata.AdditionalValues.Add("EditLabel", editLabelAttribute == null);
|
metadata.AdditionalValues.Add("EditLabel", editLabelAttribute == null);
|
||||||
|
|
||||||
|
var optionLabelAttribute = attributes.OfType<OptionLabelAttribute>().FirstOrDefault();
|
||||||
|
metadata.AdditionalValues.Add("OptionLabel", optionLabelAttribute?.Text);
|
||||||
|
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
namespace MileageTraker.Web.Migrations
|
||||||
|
{
|
||||||
|
using System.CodeDom.Compiler;
|
||||||
|
using System.Data.Entity.Migrations;
|
||||||
|
using System.Data.Entity.Migrations.Infrastructure;
|
||||||
|
using System.Resources;
|
||||||
|
|
||||||
|
[GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")]
|
||||||
|
public sealed partial class VehicleRecall : IMigrationMetadata
|
||||||
|
{
|
||||||
|
private readonly ResourceManager Resources = new ResourceManager(typeof(VehicleRecall));
|
||||||
|
|
||||||
|
string IMigrationMetadata.Id
|
||||||
|
{
|
||||||
|
get { return "202008300135173_VehicleRecall"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
string IMigrationMetadata.Source
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
string IMigrationMetadata.Target
|
||||||
|
{
|
||||||
|
get { return Resources.GetString("Target"); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
namespace MileageTraker.Web.Migrations
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using System.Data.Entity.Migrations;
|
||||||
|
|
||||||
|
public partial class VehicleRecall : DbMigration
|
||||||
|
{
|
||||||
|
public override void Up()
|
||||||
|
{
|
||||||
|
CreateTable(
|
||||||
|
"dbo.VehicleRecall",
|
||||||
|
c => new
|
||||||
|
{
|
||||||
|
VehicleRecallId = c.Int(nullable: false, identity: true),
|
||||||
|
Identifier = c.String(nullable: false, maxLength: 128),
|
||||||
|
Description = c.String(nullable: false, maxLength: 128),
|
||||||
|
CompletedService_VehicleServiceId = c.Int(),
|
||||||
|
Vehicle_VehicleId = c.String(nullable: false, maxLength: 6),
|
||||||
|
})
|
||||||
|
.PrimaryKey(t => t.VehicleRecallId)
|
||||||
|
.ForeignKey("dbo.VehicleService", t => t.CompletedService_VehicleServiceId)
|
||||||
|
.ForeignKey("dbo.Vehicle", t => t.Vehicle_VehicleId, cascadeDelete: true)
|
||||||
|
.Index(t => t.CompletedService_VehicleServiceId)
|
||||||
|
.Index(t => t.Vehicle_VehicleId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Down()
|
||||||
|
{
|
||||||
|
DropForeignKey("dbo.VehicleRecall", "Vehicle_VehicleId", "dbo.Vehicle");
|
||||||
|
DropForeignKey("dbo.VehicleRecall", "CompletedService_VehicleServiceId", "dbo.VehicleService");
|
||||||
|
DropIndex("dbo.VehicleRecall", new[] { "Vehicle_VehicleId" });
|
||||||
|
DropIndex("dbo.VehicleRecall", new[] { "CompletedService_VehicleServiceId" });
|
||||||
|
DropTable("dbo.VehicleRecall");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -14,7 +14,7 @@ namespace MileageTraker.Web.Models
|
|||||||
[Key]
|
[Key]
|
||||||
[Required]
|
[Required]
|
||||||
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")]
|
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")]
|
||||||
[Display(Name = "EHTRA ID")]
|
[Display(Name = "ETHRA ID")]
|
||||||
[RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")]
|
[RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")]
|
||||||
[InputSize("mini")]
|
[InputSize("mini")]
|
||||||
public string VehicleId { get; set; }
|
public string VehicleId { get; set; }
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.Models
|
||||||
|
{
|
||||||
|
public class VehicleRecall
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int VehicleRecallId { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public virtual Vehicle Vehicle { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[StringLength(128, MinimumLength = 3)]
|
||||||
|
public string Identifier { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[StringLength(128, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")]
|
||||||
|
public string Description { get; set; }
|
||||||
|
public virtual VehicleService CompletedService { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace MileageTraker.Web.Models
|
namespace MileageTraker.Web.Models
|
||||||
{
|
{
|
||||||
@@ -24,6 +25,7 @@ namespace MileageTraker.Web.Models
|
|||||||
[StringLength(32)]
|
[StringLength(32)]
|
||||||
public string InvoiceNumber { get; set; }
|
public string InvoiceNumber { get; set; }
|
||||||
|
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public decimal Price { get; set; }
|
public decimal Price { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ by editing this MSBuild file. In order to learn more about this please visit htt
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<WebPublishMethod>Package</WebPublishMethod>
|
<WebPublishMethod>Package</WebPublishMethod>
|
||||||
<SiteUrlToLaunchAfterPublish />
|
<SiteUrlToLaunchAfterPublish />
|
||||||
<DesktopBuildPackageLocation>C:\Users\poprhythm\Documents\code\PublishPackages\MileageTraker.zip</DesktopBuildPackageLocation>
|
<DesktopBuildPackageLocation>C:\Users\james\source\PublishPackages\MileageTraker.zip</DesktopBuildPackageLocation>
|
||||||
<PackageAsSingleFile>true</PackageAsSingleFile>
|
<PackageAsSingleFile>true</PackageAsSingleFile>
|
||||||
<DeployIisAppPath>Default Web Site</DeployIisAppPath>
|
<DeployIisAppPath>Default Web Site</DeployIisAppPath>
|
||||||
<PublishDatabaseSettings>
|
<PublishDatabaseSettings>
|
||||||
|
|||||||
@@ -213,12 +213,14 @@ function addButtonIcons () {
|
|||||||
'Vehicle Mileage': 'car',
|
'Vehicle Mileage': 'car',
|
||||||
'Show Active': 'check-circle',
|
'Show Active': 'check-circle',
|
||||||
'Show Inactive': 'ban',
|
'Show Inactive': 'ban',
|
||||||
|
'Show Disabled Accts': 'ban',
|
||||||
'Set Inactive' : 'ban',
|
'Set Inactive' : 'ban',
|
||||||
'Reactivate': 'check-circle',
|
'Reactivate': 'check-circle',
|
||||||
'Config': 'cog',
|
'Config': 'cog',
|
||||||
'Cities': 'map',
|
'Cities': 'map',
|
||||||
'Purposes': 'arrow-right',
|
'Purposes': 'arrow-right',
|
||||||
'Vehicle Service': 'wrench',
|
'Vehicle Service': 'wrench',
|
||||||
|
'Vehicle Recall': 'refresh',
|
||||||
'Vehicle': 'car',
|
'Vehicle': 'car',
|
||||||
'Cost': 'money',
|
'Cost': 'money',
|
||||||
'Reminder': 'clock-o',
|
'Reminder': 'clock-o',
|
||||||
@@ -384,5 +386,27 @@ $(function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function VehicleInput_ShowDetails() {
|
||||||
|
$(".control-group.vehicleId").append('<div id="VehicleDetails"</div>');
|
||||||
|
|
||||||
|
var getDetails = function () {
|
||||||
|
var vehicleId = $("#VehicleId");
|
||||||
|
var vehicleDetails = $("#VehicleDetails");
|
||||||
|
if (vehicleId.val().length >= 4 && vehicleId.valid() === true) {
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "/Vehicle/DetailsQuickPartial",
|
||||||
|
data: { id: vehicleId.val() },
|
||||||
|
success: function (html) { vehicleDetails.html(html); },
|
||||||
|
error: function () { vehicleDetails.empty(); }
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
vehicleDetails.empty();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$("#VehicleId").keyup(getDetails);
|
||||||
|
}
|
||||||
|
|
||||||
/* End Form Validation */
|
/* End Form Validation */
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using ExcelLibrary.SpreadSheet;
|
using ExcelLibrary.SpreadSheet;
|
||||||
using MileageTraker.Web.Models;
|
using MileageTraker.Web.Models;
|
||||||
|
using MileageTraker.Web.ViewModels;
|
||||||
|
|
||||||
namespace MileageTraker.Web.Utility
|
namespace MileageTraker.Web.Utility
|
||||||
{
|
{
|
||||||
@@ -108,21 +109,25 @@ namespace MileageTraker.Web.Utility
|
|||||||
if (p.Name == "GasPurchased") // format to the .000 place
|
if (p.Name == "GasPurchased") // format to the .000 place
|
||||||
formatString = "#,##0.000";
|
formatString = "#,##0.000";
|
||||||
|
|
||||||
int intValue; // write int-looking values as numbers
|
if (value is string valInt && int.TryParse(valInt, out var intValue))
|
||||||
if (value is string && int.TryParse((string) value, out intValue))
|
|
||||||
value = intValue;
|
value = intValue;
|
||||||
|
|
||||||
double doubleValue; // write double-looking values as numbers
|
if (value is string valDbl && double.TryParse(valDbl, out var doubleValue))
|
||||||
if (value is string && double.TryParse((string) value, out doubleValue))
|
|
||||||
value = doubleValue;
|
value = doubleValue;
|
||||||
|
|
||||||
if (value is MileageLogTypeWrapper)
|
if (value is MileageLogTypeWrapper valMt)
|
||||||
value = ((MileageLogTypeWrapper) value).Enum.GetDisplayName();
|
value = valMt.Enum.GetDisplayName();
|
||||||
|
|
||||||
|
if (value is SelectListViewModel valSelList)
|
||||||
|
value = valSelList.ToString();
|
||||||
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
value = p.GetNullDisplayText(item);
|
value = p.GetNullDisplayText(item);
|
||||||
|
|
||||||
var cell = formatString != null ? new Cell(value, formatString) : new Cell(value);
|
var cell =
|
||||||
|
formatString != null
|
||||||
|
? new Cell(value, formatString)
|
||||||
|
: new Cell(value);
|
||||||
worksheet.Cells[r, c] = cell;
|
worksheet.Cells[r, c] = cell;
|
||||||
|
|
||||||
return (string) null;
|
return (string) null;
|
||||||
|
|||||||
@@ -1,15 +1,28 @@
|
|||||||
using System.Web.Mvc;
|
using System.Linq;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
|
||||||
namespace MileageTraker.Web.ViewModels
|
namespace MileageTraker.Web.ViewModels
|
||||||
{
|
{
|
||||||
public class SelectListViewModel
|
public class SelectListViewModel
|
||||||
{
|
{
|
||||||
public SelectList Available { get; set; }
|
public SelectList Available { get; set; }
|
||||||
public int Selected { get; set; }
|
public int? Selected { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
{
|
||||||
|
if (Selected.HasValue && Selected.Value > 0 && Available != null)
|
||||||
|
{
|
||||||
|
var selected = Available.FirstOrDefault(i => i.Value == Selected.ToString());
|
||||||
|
if (selected != null)
|
||||||
|
{
|
||||||
|
return selected.Text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Selected.HasValue)
|
||||||
{
|
{
|
||||||
return Selected.ToString();
|
return Selected.ToString();
|
||||||
}
|
}
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.ViewModels.User
|
||||||
|
{
|
||||||
|
public class UserResultsViewModel
|
||||||
|
{
|
||||||
|
public IEnumerable<Models.User> Users { get; set; }
|
||||||
|
public bool Disabled { get; }
|
||||||
|
|
||||||
|
public UserResultsViewModel(IEnumerable<Models.User> users, bool disabled)
|
||||||
|
{
|
||||||
|
Users = users;
|
||||||
|
Disabled = disabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using AutoMapper;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.ViewModels.Vehicle
|
||||||
|
{
|
||||||
|
public class VehiclePartialDetailsQuick
|
||||||
|
{
|
||||||
|
[Display(Name = "Year")]
|
||||||
|
public string ModelYear { get; set; }
|
||||||
|
|
||||||
|
public string Make { get; set; }
|
||||||
|
|
||||||
|
[Display(Name = "Model")]
|
||||||
|
public string CarModel { get; set; }
|
||||||
|
|
||||||
|
public string Color { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
[Display(Name = "VIN")]
|
||||||
|
public string Vin { get; set; }
|
||||||
|
|
||||||
|
[Display(Name = "Tag#")]
|
||||||
|
public string TagNumber { get; set; }
|
||||||
|
|
||||||
|
[DisplayFormat(NullDisplayText = "Unassigned")]
|
||||||
|
public string Assigned { get; set; }
|
||||||
|
|
||||||
|
static VehiclePartialDetailsQuick()
|
||||||
|
{
|
||||||
|
Mapper.CreateMap<Models.Vehicle, VehiclePartialDetailsQuick>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public VehiclePartialDetailsQuick()
|
||||||
|
{}
|
||||||
|
|
||||||
|
public VehiclePartialDetailsQuick(Models.Vehicle vehicle)
|
||||||
|
{
|
||||||
|
Mapper.Map(vehicle, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.ViewModels.VehicleRecall
|
||||||
|
{
|
||||||
|
public class VehicleRecallResultsViewModel
|
||||||
|
{
|
||||||
|
public IEnumerable<VehicleRecallViewModel> Recalls { get; set; }
|
||||||
|
public bool Completed { get; set; }
|
||||||
|
|
||||||
|
public VehicleRecallResultsViewModel(IEnumerable<VehicleRecallViewModel> vehicles, bool completed)
|
||||||
|
{
|
||||||
|
Recalls = vehicles;
|
||||||
|
Completed = completed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using AutoMapper;
|
||||||
|
using MileageTraker.Web.Attributes;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.ViewModels.VehicleRecall
|
||||||
|
{
|
||||||
|
public class VehicleRecallViewModel
|
||||||
|
{
|
||||||
|
[HiddenInput(DisplayValue = false)]
|
||||||
|
public int? VehicleRecallId { get; set; }
|
||||||
|
|
||||||
|
[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; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[Display(Name = "Recall Identifier")]
|
||||||
|
[StringLength(128, MinimumLength = 3)]
|
||||||
|
[InputSize("small")]
|
||||||
|
public string Identifier { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[StringLength(128, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")]
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
[ScaffoldColumn(false)]
|
||||||
|
[Display(Name = "Vehicle Service")]
|
||||||
|
[UIHint("VehicleServiceLink")]
|
||||||
|
public int CompletedService_VehicleServiceId { get; set; }
|
||||||
|
|
||||||
|
[ScaffoldColumn(false)]
|
||||||
|
[Display(Name = "Completed Date")]
|
||||||
|
public DateTime CompletedService_InvoiceDate { get; set; }
|
||||||
|
|
||||||
|
static VehicleRecallViewModel()
|
||||||
|
{
|
||||||
|
Mapper.CreateMap<VehicleRecallViewModel, Models.VehicleRecall>();
|
||||||
|
Mapper.CreateMap<Models.VehicleRecall, VehicleRecallViewModel>()
|
||||||
|
.ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public VehicleRecallViewModel(Models.VehicleRecall vehicleRecall)
|
||||||
|
{
|
||||||
|
Mapper.Map(vehicleRecall, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public VehicleRecallViewModel()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Models.VehicleRecall GetVehicleRecall()
|
||||||
|
{
|
||||||
|
var vehicleRecall = new Models.VehicleRecall();
|
||||||
|
Mapper.Map(this, vehicleRecall);
|
||||||
|
return vehicleRecall;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ using System.Web.Mvc;
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using MileageTraker.Web.Attributes;
|
using MileageTraker.Web.Attributes;
|
||||||
using MileageTraker.Web.DAL;
|
using MileageTraker.Web.DAL;
|
||||||
using MileageTraker.Web.ViewModels.ServiceReminder;
|
|
||||||
|
|
||||||
namespace MileageTraker.Web.ViewModels.VehicleService
|
namespace MileageTraker.Web.ViewModels.VehicleService
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using MileageTraker.Web.Attributes;
|
||||||
|
using MileageTraker.Web.DAL;
|
||||||
|
|
||||||
|
namespace MileageTraker.Web.ViewModels.VehicleService
|
||||||
|
{
|
||||||
|
public class VehicleSelectViewModel : IValidatableObject
|
||||||
|
{
|
||||||
|
[Required(ErrorMessage = "Required")]
|
||||||
|
[Remote("Exists", "Vehicle", ErrorMessage = "ID not found")]
|
||||||
|
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be a 4 digit number")]
|
||||||
|
[Display(Name = "Vehicle ID")]
|
||||||
|
[InputSize("mini")]
|
||||||
|
[RegularExpression(@"\d+", ErrorMessage = "Must be all numbers")]
|
||||||
|
public string ServiceVehicleId { get; set; }
|
||||||
|
|
||||||
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||||
|
{
|
||||||
|
using (var dataService = new DataService())
|
||||||
|
{
|
||||||
|
var inactiveDate = dataService.GetVehicle(ServiceVehicleId).InactiveDate;
|
||||||
|
if (inactiveDate.HasValue)
|
||||||
|
{
|
||||||
|
yield return new ValidationResult(
|
||||||
|
string.Format("Vehicle was set inactive on {0:MM/dd/yyyy}", inactiveDate.Value),
|
||||||
|
new[] { "VehicleId" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return string.Format("vehicle: {0}", ServiceVehicleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,20 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using MileageTraker.Web.Attributes;
|
using MileageTraker.Web.Attributes;
|
||||||
|
using MileageTraker.Web.DAL;
|
||||||
|
|
||||||
namespace MileageTraker.Web.ViewModels.VehicleService
|
namespace MileageTraker.Web.ViewModels.VehicleService
|
||||||
{
|
{
|
||||||
public class VehicleServiceViewModel
|
public class VehicleServiceViewModel : IValidatableObject
|
||||||
{
|
{
|
||||||
[HiddenInput(DisplayValue = false)]
|
[HiddenInput(DisplayValue = false)]
|
||||||
public int? VehicleServiceId { get; set; }
|
public int? VehicleServiceId { get; set; }
|
||||||
|
|
||||||
[Required]
|
[HiddenInput(DisplayValue = true)]
|
||||||
[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; }
|
public string VehicleId { get; set; }
|
||||||
|
|
||||||
[DataType(DataType.DateTime)]
|
[DataType(DataType.DateTime)]
|
||||||
@@ -44,6 +42,11 @@ namespace MileageTraker.Web.ViewModels.VehicleService
|
|||||||
[StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")]
|
[StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")]
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
[Display(Name = "Vehicle Recall")]
|
||||||
|
[OptionLabel("Not a recall")]
|
||||||
|
[UIHint("VehicleRecallSelectListViewModel")]
|
||||||
|
public SelectListViewModel VehicleRecall { get; set; }
|
||||||
|
|
||||||
static VehicleServiceViewModel()
|
static VehicleServiceViewModel()
|
||||||
{
|
{
|
||||||
Mapper.CreateMap<VehicleServiceViewModel, Models.VehicleService>();
|
Mapper.CreateMap<VehicleServiceViewModel, Models.VehicleService>();
|
||||||
@@ -51,13 +54,15 @@ namespace MileageTraker.Web.ViewModels.VehicleService
|
|||||||
.ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId));
|
.ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public VehicleServiceViewModel(Models.VehicleService vehicleService)
|
public VehicleServiceViewModel(Models.VehicleService vehicleService) : this()
|
||||||
{
|
{
|
||||||
Mapper.Map(vehicleService, this);
|
Mapper.Map(vehicleService, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VehicleServiceViewModel()
|
public VehicleServiceViewModel()
|
||||||
{
|
{
|
||||||
|
//var enumerable = new string[]{};
|
||||||
|
//VehicleRecallId = new SelectListViewModel { Available = new SelectList(enumerable, "VehicleRecallId", "RecallId") };
|
||||||
}
|
}
|
||||||
|
|
||||||
public Models.VehicleService GetVehicleService()
|
public Models.VehicleService GetVehicleService()
|
||||||
@@ -66,5 +71,19 @@ namespace MileageTraker.Web.ViewModels.VehicleService
|
|||||||
Mapper.Map(this, vehicleService);
|
Mapper.Map(this, vehicleService);
|
||||||
return vehicleService;
|
return vehicleService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||||
|
{
|
||||||
|
using (var dataService = new DataService())
|
||||||
|
{
|
||||||
|
var recallId = VehicleRecall?.Selected ?? int.MinValue;
|
||||||
|
// if there's a recall, verify it's for this vehicle
|
||||||
|
if (recallId >= 0 && dataService.GetVehicleRecall(recallId).Vehicle.VehicleId != VehicleId)
|
||||||
|
{
|
||||||
|
yield return new ValidationResult("This recall is not for the given vehicle",
|
||||||
|
new[] {"VehicleRecall"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
@model MileageTraker.Web.ViewModels.CreateLog.CreateLogViewModel
|
@using MileageTraker.Web.ViewModels.VehicleService
|
||||||
|
@model MileageTraker.Web.ViewModels.CreateLog.CreateLogViewModel
|
||||||
@{
|
@{
|
||||||
|
|
||||||
ViewBag.Title = "Enter Mileage Log";
|
ViewBag.Title = "Enter Mileage Log";
|
||||||
@@ -24,6 +25,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@Html.Partial("EditorTemplates/VehicleSelect", new VehicleSelectViewModel())
|
||||||
|
|
||||||
<div class="center-content" style="text-align: center">
|
<div class="center-content" style="text-align: center">
|
||||||
@Html.ActionLink("Import", "ImportUpload", new {}, new { @class = "btn"})
|
@Html.ActionLink("Import", "ImportUpload", new {}, new { @class = "btn"})
|
||||||
</div>
|
</div>
|
||||||
@@ -17,7 +17,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="btn-toolbar center-content well">
|
<div class="btn-toolbar center-content well">
|
||||||
@Html.ActionLink("Add Reminder", "Create", new { vehicleId = Model.VehicleId }, new{@class="btn"})
|
<div class="btn-group">
|
||||||
|
@Html.ActionLink("Add Reminder", "Create", new { vehicleId = Model.VehicleId }, new { @class = "btn" })
|
||||||
@Html.ActionLink("Add Service", "Create", "VehicleService", new { vehicleId = Model.VehicleId }, new { @class = "btn" })
|
@Html.ActionLink("Add Service", "Create", "VehicleService", new { vehicleId = Model.VehicleId }, new { @class = "btn" })
|
||||||
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new{@class="btn"})
|
@Html.ActionLink("Add Recall", "Create", "VehicleRecall", new { vehicleId = Model.VehicleId }, new { @class = "btn" })
|
||||||
|
</div>
|
||||||
|
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new { @class = "btn" })
|
||||||
</div>
|
</div>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Vehicle Recall Details" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
<div class="center-content well">
|
||||||
|
@Html.DisplayForModel()
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="center-content btn-toolbar">
|
||||||
|
@Html.ActionLink("Edit", "Edit", "VehicleRecall", new { id = Model.VehicleRecallId }, new { @class = "btn" })
|
||||||
|
@Html.ActionLink("Delete", "Delete", "VehicleRecall", new { id = Model.VehicleId }, new { @class = "btn" })
|
||||||
|
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new{@class="btn"})
|
||||||
|
@Html.ActionLink("Add Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId }, new{@class="btn"})
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.SelectListViewModel
|
||||||
|
@{
|
||||||
|
Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml";
|
||||||
|
if (Model.Selected > 0)
|
||||||
|
{
|
||||||
|
var selected = Model.Available.FirstOrDefault(i => i.Value == Model.Selected.ToString());
|
||||||
|
if (selected != null)
|
||||||
|
{
|
||||||
|
@Html.ActionLink(selected.Text, "Details", "VehicleRecall", new { id = selected.Value }, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<text>Not a recall</text>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@{
|
||||||
|
Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml";
|
||||||
|
}
|
||||||
|
@if (Model != null)
|
||||||
|
{
|
||||||
|
@Html.ActionLink("View Vehicle Service", "Details", "VehicleService", new { id = Model}, null)
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
@model MileageTraker.Web.ViewModels.SelectListViewModel
|
@model MileageTraker.Web.ViewModels.SelectListViewModel
|
||||||
@{
|
@{
|
||||||
Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml";
|
Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml";
|
||||||
|
var values = ViewData.ModelMetadata.AdditionalValues;
|
||||||
|
var optionLabel = values.ContainsKey("OptionLabel") ? (string)values["OptionLabel"] : string.Empty;
|
||||||
}
|
}
|
||||||
@Html.DropDownListFor(m => m.Selected, Model.Available, string.Empty)
|
@Html.DropDownListFor(m => m.Selected, Model.Available, optionLabel)
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleService.VehicleSelectViewModel
|
||||||
|
|
||||||
|
@using (Html.BeginForm("CreateDriver", "VehicleService", FormMethod.Post, new { @class = "form-horizontal well center-content" }))
|
||||||
|
{
|
||||||
|
<h5>Enter Vehicle Service</h5>
|
||||||
|
<div class="control-group serviceVehicleId">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span6">
|
||||||
|
@Html.LabelFor(m => m.ServiceVehicleId, "Vehicle ID")
|
||||||
|
</div>
|
||||||
|
<div class="span4">
|
||||||
|
@Html.TextBoxFor(m => m.ServiceVehicleId, new { @class = "input-mini" })
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="span2">
|
||||||
|
<input type="submit" value="Enter" class="btn btn-small" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="offset6">
|
||||||
|
<span class="help-block">@Html.ValidationMessage("ServiceVehicleId")</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
@@ -41,6 +41,7 @@
|
|||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li>@Html.ActionLink("Vehicles", "Index", "Vehicle")</li>
|
<li>@Html.ActionLink("Vehicles", "Index", "Vehicle")</li>
|
||||||
<li>@Html.ActionLink("Vehicle Service", "Index", "VehicleService")</li>
|
<li>@Html.ActionLink("Vehicle Service", "Index", "VehicleService")</li>
|
||||||
|
<li>@Html.ActionLink("Vehicle Recalls", "Index", "VehicleRecall")</li>
|
||||||
<li>@Html.ActionLink("Fuel Logs", "Index", "FuelLog")</li>
|
<li>@Html.ActionLink("Fuel Logs", "Index", "FuelLog")</li>
|
||||||
<li>@Html.ActionLink("Cost Report", "VehicleCostIndex", "Vehicle")</li>
|
<li>@Html.ActionLink("Cost Report", "VehicleCostIndex", "Vehicle")</li>
|
||||||
@if (User.IsInRole("Developer"))
|
@if (User.IsInRole("Developer"))
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
@using MileageTraker.Web.Models
|
@using MileageTraker.Web.Models
|
||||||
@model IEnumerable<User>
|
@model MileageTraker.Web.ViewModels.User.UserResultsViewModel
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewBag.Title = "Users";
|
ViewBag.Title = "Users";
|
||||||
var grid = new WebGrid(Model, rowsPerPage: 45);
|
var grid = new WebGrid(Model.Users, rowsPerPage: 45);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Html.Partial("_StatusMessage")
|
@Html.Partial("_StatusMessage")
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
<div class="btn-toolbar pull-left">
|
<div class="btn-toolbar pull-left">
|
||||||
@Html.ActionLink("Add new User", "Create", null, new{@class="btn"})
|
@Html.ActionLink("Add new User", "Create", null, new{@class="btn"})
|
||||||
@Html.ActionLink("Export", "Export", null, new{@class="btn"})
|
@Html.ActionLink("Export", "Export", null, new{@class="btn"})
|
||||||
|
@Html.ActionLink(Model.Disabled ? "Show Active" : "Show Disabled Accts", "Index", new {disabled = !Model.Disabled}, new { @class = "btn" })
|
||||||
|
|
||||||
@if (User.IsInRole("Developer"))
|
@if (User.IsInRole("Developer"))
|
||||||
{
|
{
|
||||||
@Html.ActionLink("Invite Uninintialized", "InviteUninitialized", null, new{@class="btn"})
|
@Html.ActionLink("Invite Uninintialized", "InviteUninitialized", null, new{@class="btn"})
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@Html.ActionLink("Add Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId }, null)
|
@Html.ActionLink("Add Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId }, null)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
@Html.ActionLink("Add Recall", "Create", "VehicleRecall", new { VehicleId = Model.VehicleId }, null)
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.Vehicle.VehiclePartialDetailsQuick
|
||||||
|
@{
|
||||||
|
Layout = null;
|
||||||
|
}
|
||||||
|
@Html.DisplayForModel()
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Enter Vehicle Recall";
|
||||||
|
}
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
<script type="text/javascript">
|
||||||
|
VehicleInput_ShowDetails();
|
||||||
|
</script>
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
<h4 class="center-content">Enter an available recall for vehicle</h4>
|
||||||
|
|
||||||
|
@using (Html.BeginForm("Create", "VehicleRecall", 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>
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Delete Vehicle Recall";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
|
||||||
|
<div class="center-content label label-warning">Are you sure you wish to delete this recall?</div>
|
||||||
|
|
||||||
|
<div class="center-content well">
|
||||||
|
|
||||||
|
@Html.DisplayForModel()
|
||||||
|
|
||||||
|
@using (Html.BeginForm("Delete", "VehicleRecall", FormMethod.Post, new { @class = "form-horizontal" }))
|
||||||
|
{
|
||||||
|
<div class="form-actions">
|
||||||
|
<input type="submit" value="Delete" class="btn btn-warning" />
|
||||||
|
@Html.ActionLink("Cancel", "Details", new { id = Model.VehicleRecallId }, new { @class = "btn" })
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@using System.Activities.Expressions
|
||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Vehicle Recall Details" ;
|
||||||
|
var completed = Model.CompletedService_VehicleServiceId > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
<div class="center-content well">
|
||||||
|
@Html.DisplayForModel()
|
||||||
|
@if (completed)
|
||||||
|
{
|
||||||
|
@Html.DisplayFor(v => v.CompletedService_VehicleServiceId)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@if (!completed)
|
||||||
|
{
|
||||||
|
<div class="center-content">Completed? @Html.ActionLink("Add Service", "Create", "VehicleService", new { VehicleId = Model.VehicleId, VehicleRecallId = Model.VehicleRecallId}, new { @class = "btn" })</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="center-content btn-toolbar">
|
||||||
|
@Html.ActionLink("Edit", "Edit", new { id = Model.VehicleRecallId }, new { @class = "btn" })
|
||||||
|
@Html.ActionLink("Delete", "Delete", new { id = Model.VehicleRecallId }, new { @class = "btn" })
|
||||||
|
@Html.ActionLink("Vehicle Details", "Details", "Vehicle", new { id = Model.VehicleId }, new{@class="btn"})
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Edit Vehicle Recall";
|
||||||
|
}
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
<script type="text/javascript">
|
||||||
|
VehicleInput_ShowDetails();
|
||||||
|
</script>
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
|
||||||
|
@using (Html.BeginForm("Edit", "VehicleRecall", 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>
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
@{
|
||||||
|
ViewBag.Title = "No Open Vehicle Recalls";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
|
||||||
|
<div class="center-content well">
|
||||||
|
No open Vehicle Recalls. @Html.ActionLink("Add Recall", "Create", null, new { @class = "btn" })
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.VehicleRecall.VehicleRecallResultsViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = string.Format("Vehicle Recalls ({0})", Model.Completed ? "Completed" : "Open");
|
||||||
|
var grid = new WebGrid(Model.Recalls, rowsPerPage: 45);
|
||||||
|
var columns = grid.Columns(
|
||||||
|
grid.Column("VehicleId", "Vehicle ID", item => Html.ActionLink((string) item.VehicleId, "DetailsPartial", "Vehicle", new {id = item.VehicleId}, new {@class = "qtip-modal"})),
|
||||||
|
grid.Column("Identifier", "Identifier", item => item.Identifier),
|
||||||
|
grid.Column("Description", "Description"),
|
||||||
|
grid.Column(format:
|
||||||
|
@<div class='btn-group'>
|
||||||
|
@Html.ActionLink("Details", "Details", new {id = item.VehicleRecallId}, new {@class = "btn btn-mini"})
|
||||||
|
@Html.ActionLink("Delete", "Delete", new {id = item.VehicleRecallId}, new {@class = "btn btn-mini"})
|
||||||
|
</div>)
|
||||||
|
).ToList();
|
||||||
|
if (Model.Completed)
|
||||||
|
{
|
||||||
|
columns.Insert(3, grid.Column("CompletedService_InvoiceDate", "Completed Date", item => ((DateTime)item.CompletedService_InvoiceDate).ToShortDateString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Partial("_StatusMessage")
|
||||||
|
|
||||||
|
<h2 id="vehicle-title"><i class="fa fa-refresh"></i> @ViewBag.Title</h2>
|
||||||
|
|
||||||
|
<div class="btn-toolbar pull-left">
|
||||||
|
@Html.ActionLink("Add Recall", "Create", null, new { @class = "btn" })
|
||||||
|
@Html.ActionLink(Model.Completed ? "Show Open" : "Show Completed", "Index", new { completed = !Model.Completed }, new { @class = "btn" })
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@grid.GetHtml(columns: columns,
|
||||||
|
htmlAttributes: new { @class = "table table-striped table-bordered table-hover table-condensed"},
|
||||||
|
numericLinksCount: 20
|
||||||
|
)
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
@model MileageTraker.Web.ViewModels.VehicleService.VehicleServiceViewModel
|
@model MileageTraker.Web.ViewModels.VehicleService.VehicleServiceViewModel
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewBag.Title = "Create Vehicle Service";
|
ViewBag.Title = "Record Vehicle Service";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h2 class="center-content"><i class="fa fa-wrench"></i> @ViewBag.Title</h2>
|
<h2 class="center-content"><i class="fa fa-wrench"></i> @ViewBag.Title</h2>
|
||||||
@@ -12,6 +11,14 @@
|
|||||||
@Html.Partial("_ValidationSummary")
|
@Html.Partial("_ValidationSummary")
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend></legend>
|
<legend></legend>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="control-label">
|
||||||
|
<label>Vehicle ID</label>
|
||||||
|
</div>
|
||||||
|
<div class="controls">
|
||||||
|
<b>@Model.VehicleId</b>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@Html.EditorForModel()
|
@Html.EditorForModel()
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<input type="submit" value="Create" class="btn btn-primary" />
|
<input type="submit" value="Create" class="btn btn-primary" />
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
@model MileageTraker.Web.ViewModels.VehicleService.VehicleServiceResultsViewModel
|
@using MileageTraker.Web.ViewModels
|
||||||
|
@model MileageTraker.Web.ViewModels.VehicleService.VehicleServiceResultsViewModel
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewBag.Title = "Vehicle Service";
|
ViewBag.Title = "Vehicle Service";
|
||||||
@@ -30,7 +31,7 @@
|
|||||||
<h2 id="vehicle-title"><i class="fa fa-wrench"></i> @ViewBag.Title</h2>
|
<h2 id="vehicle-title"><i class="fa fa-wrench"></i> @ViewBag.Title</h2>
|
||||||
|
|
||||||
<div class="btn-toolbar pull-left">
|
<div class="btn-toolbar pull-left">
|
||||||
@Html.ActionLink("Add Service", "Create", null, new { @class = "btn" })
|
@Html.ActionLink("Add Service", "SelectVehicle", null, new { @class = "btn" })
|
||||||
@Html.ActionLink("Export", "Export", queryParams, new { @class = "btn" })
|
@Html.ActionLink("Export", "Export", queryParams, new { @class = "btn" })
|
||||||
<a class="qtip-show-next-div btn">Upcoming Services <span class="badge @serviceOverdueBadge">@Model.UpcomingServiceReminders.Count</span></a>
|
<a class="qtip-show-next-div btn">Upcoming Services <span class="badge @serviceOverdueBadge">@Model.UpcomingServiceReminders.Count</span></a>
|
||||||
<div class="hidden">
|
<div class="hidden">
|
||||||
@@ -38,7 +39,8 @@
|
|||||||
{
|
{
|
||||||
@Html.Partial("UpcomingServiceReminders", Model.UpcomingServiceReminders)
|
@Html.Partial("UpcomingServiceReminders", Model.UpcomingServiceReminders)
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
<h5>No upcoming services currently scheduled</h5>
|
<h5>No upcoming services currently scheduled</h5>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -51,12 +53,30 @@
|
|||||||
grid.Column("ServiceCenterName", "Service Center Name"),
|
grid.Column("ServiceCenterName", "Service Center Name"),
|
||||||
grid.Column("Price", "Price", @<text>@String.Format("{0:C}", item.Price)</text>),
|
grid.Column("Price", "Price", @<text>@String.Format("{0:C}", item.Price)</text>),
|
||||||
grid.Column("Description", "Description"),
|
grid.Column("Description", "Description"),
|
||||||
|
grid.Column("VehicleRecall", "Vehicle Recall", item => Recall(item.VehicleRecall)),
|
||||||
grid.Column(format:
|
grid.Column(format:
|
||||||
@<div class='btn-group'>
|
@<div class='btn-group'>
|
||||||
@Html.ActionLink("Details", "Details", new { id = item.VehicleServiceId }, new { @class = "btn btn-mini" })
|
@Html.ActionLink("Details", "Details", new { id = item.VehicleServiceId }, new { @class = "btn btn-mini" })
|
||||||
@Html.ActionLink("Delete", "Delete", new { id = item.VehicleServiceId }, new { @class = "btn btn-mini" })
|
@Html.ActionLink("Delete", "Delete", 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" },
|
||||||
numericLinksCount: 20
|
numericLinksCount: 20
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@helper Recall(SelectListViewModel selectList)
|
||||||
|
{
|
||||||
|
if (selectList != null && selectList.Selected > 0)
|
||||||
|
{
|
||||||
|
var selected = selectList.Available.FirstOrDefault(i => i.Value == selectList.Selected.ToString());
|
||||||
|
if (selected != null)
|
||||||
|
{
|
||||||
|
@Html.ActionLink(selected.Text, "Details", "VehicleRecall", new { id = selected.Value }, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span class="muted">(Not a recall)</span>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
@using MileageTraker.Web.ViewModels.VehicleService
|
||||||
|
@model MileageTraker.Web.ViewModels.VehicleService.VehicleServiceViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Record Vehicle Service";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2 class="center-content"><i class="fa fa-wrench"></i> @ViewBag.Title</h2>
|
||||||
|
<h4 class="center-content">Track completed service for a vehicle</h4>
|
||||||
|
|
||||||
|
@Html.Partial("EditorTemplates/VehicleSelect", new VehicleSelectViewModel())
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
@model MileageTraker.Web.ViewModels.SelectListViewModel
|
||||||
|
@Html.EditorForModel()
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<system.net>
|
<system.net>
|
||||||
<mailSettings>
|
<mailSettings>
|
||||||
<smtp>
|
<smtp>
|
||||||
<network xdt:Transform="SetAttributes" host="Exchange2010.ethra.org" />
|
<network xdt:Transform="SetAttributes" enableSsl="true" host="smtp.office365.com" port="587" userName="donotreply@ethra.org" password="**ENTER PASSWORD***" />
|
||||||
</smtp>
|
</smtp>
|
||||||
</mailSettings>
|
</mailSettings>
|
||||||
</system.net>
|
</system.net>
|
||||||
|
|||||||
+5
-5
@@ -2,8 +2,8 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
<configSections>
|
||||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
|
||||||
</configSections>
|
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
|
||||||
<connectionStrings>
|
<connectionStrings>
|
||||||
<add name="MileageTrakerContext" connectionString="Data Source=LOCALHOST\SQLEXPRESS;Initial Catalog=MileageTraker;Integrated Security=True;Connect Timeout=60" providerName="System.Data.SqlClient" />
|
<add name="MileageTrakerContext" connectionString="Data Source=LOCALHOST\SQLEXPRESS;Initial Catalog=MileageTraker;Integrated Security=True;Connect Timeout=60" providerName="System.Data.SqlClient" />
|
||||||
</connectionStrings>
|
</connectionStrings>
|
||||||
@@ -14,17 +14,17 @@
|
|||||||
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
|
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
|
||||||
<add key="enableSimpleMembership" value="false" />
|
<add key="enableSimpleMembership" value="false" />
|
||||||
<add key="AgencyName" value="" />
|
<add key="AgencyName" value="" />
|
||||||
<add key="EmailFromAddress" value="Mileage Traker <noreply@ethra.org>" />
|
<add key="EmailFromAddress" value="Mileage Traker <donotreply@ethra.org>" />
|
||||||
<add key="ResetPasswordSubject" value="New Mileage Traker Password Request" />
|
<add key="ResetPasswordSubject" value="New Mileage Traker Password Request" />
|
||||||
<add key="ResetPasswordBody" value="Hello {1}, please open this link to set a new password for your Mileage Traker account: {0}" />
|
<add key="ResetPasswordBody" value="Hello {1}, please open this link to set a new password for your Mileage Traker account: {0}" />
|
||||||
<add key="InitializePasswordSubject" value="Initialize Mileage Traker Account" />
|
<add key="InitializePasswordSubject" value="Initialize Mileage Traker Account" />
|
||||||
<add key="InitializetPasswordBody" value="Hello {1}, welcome to Mileage Traker. Your username is {2}. Please open this link to initialize your password: {0}" />
|
<add key="InitializetPasswordBody" value="Hello {1}, welcome to Mileage Traker. Your username is {2}. Please open this link to initialize your password: {0}" />
|
||||||
<add key="ServiceReminderSubject" value="Vehicle Serivce Reminder for {0}" />
|
<add key="ServiceReminderSubject" value="Vehicle Service Reminder for {0}" />
|
||||||
<add key="ServiceReminderBody" value="Hello {0}, please note the following vehicles due for service: {1}" />
|
<add key="ServiceReminderBody" value="Hello {0}, please note the following vehicles due for service: {1}" />
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<system.net>
|
<system.net>
|
||||||
<mailSettings>
|
<mailSettings>
|
||||||
<smtp deliveryMethod="Network" from="Mileage Traker <roreply@ethra.org>">
|
<smtp deliveryMethod="Network" from="Mileage Traker <donotreply@ethra.org>">
|
||||||
<network host="localhost" />
|
<network host="localhost" />
|
||||||
</smtp>
|
</smtp>
|
||||||
</mailSettings>
|
</mailSettings>
|
||||||
|
|||||||
+34
-10
@@ -63,23 +63,19 @@
|
|||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
|
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
|
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ExcelLibrary, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ExcelLibrary, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll</HintPath>
|
<HintPath>..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Hangfire.Core, Version=1.5.2.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Hangfire.Core, Version=1.6.20.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Hangfire.Core.1.5.2\lib\net45\Hangfire.Core.dll</HintPath>
|
<HintPath>..\packages\Hangfire.Core.1.6.20\lib\net45\Hangfire.Core.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Hangfire.SqlServer, Version=1.5.2.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Hangfire.SqlServer, Version=1.6.20.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Hangfire.SqlServer.1.5.2\lib\net45\Hangfire.SqlServer.dll</HintPath>
|
<HintPath>..\packages\Hangfire.SqlServer.1.6.20\lib\net45\Hangfire.SqlServer.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="Microsoft.Owin, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Owin, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
@@ -160,16 +156,27 @@
|
|||||||
<Compile Include="Attributes\MileageLogTypeValid.cs" />
|
<Compile Include="Attributes\MileageLogTypeValid.cs" />
|
||||||
<Compile Include="Attributes\LogOwnerAuthorizeAttribute.cs" />
|
<Compile Include="Attributes\LogOwnerAuthorizeAttribute.cs" />
|
||||||
<Compile Include="Attributes\NoEditLabelAttribute.cs" />
|
<Compile Include="Attributes\NoEditLabelAttribute.cs" />
|
||||||
|
<Compile Include="Attributes\OptionLabelAttribute.cs" />
|
||||||
<Compile Include="Attributes\UnitsAttribute.cs" />
|
<Compile Include="Attributes\UnitsAttribute.cs" />
|
||||||
<Compile Include="Attributes\UserActivityAttribute.cs" />
|
<Compile Include="Attributes\UserActivityAttribute.cs" />
|
||||||
<Compile Include="Context\MileageTrakerContext.cs" />
|
<Compile Include="Context\MileageTrakerContext.cs" />
|
||||||
<Compile Include="Controllers\AccountController.cs" />
|
<Compile Include="Controllers\AccountController.cs" />
|
||||||
<Compile Include="Controllers\CityController.cs" />
|
<Compile Include="Controllers\CityController.cs" />
|
||||||
<Compile Include="Controllers\ControllerBase.cs" />
|
<Compile Include="Controllers\ControllerBase.cs" />
|
||||||
|
<Compile Include="Controllers\VehicleRecallController.cs" />
|
||||||
<Compile Include="Email\ServiceReminderEmail.cs" />
|
<Compile Include="Email\ServiceReminderEmail.cs" />
|
||||||
<Compile Include="Email\ServiceReminderEmailService.cs" />
|
<Compile Include="Email\ServiceReminderEmailService.cs" />
|
||||||
|
<Compile Include="Migrations\202008300135173_VehicleRecall.cs" />
|
||||||
|
<Compile Include="Migrations\202008300135173_VehicleRecall.Designer.cs">
|
||||||
|
<DependentUpon>202008300135173_VehicleRecall.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Models\VehicleRecall.cs" />
|
||||||
<Compile Include="Startup.cs" />
|
<Compile Include="Startup.cs" />
|
||||||
<Compile Include="ViewModels\DriverMileageFlattenedViewModel.cs" />
|
<Compile Include="ViewModels\DriverMileageFlattenedViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\User\UserResultsViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\VehicleRecall\VehicleRecallViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\VehicleRecall\VehicleRecallResultsViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\VehicleService\VehicleSelectViewModel.cs" />
|
||||||
<Compile Include="ViewModels\VehicleService\UpdateServiceRemindersViewModel.cs" />
|
<Compile Include="ViewModels\VehicleService\UpdateServiceRemindersViewModel.cs" />
|
||||||
<Compile Include="Controllers\FuelLogController.cs" />
|
<Compile Include="Controllers\FuelLogController.cs" />
|
||||||
<Compile Include="Controllers\ServiceReminderController.cs" />
|
<Compile Include="Controllers\ServiceReminderController.cs" />
|
||||||
@@ -295,6 +302,7 @@
|
|||||||
<Compile Include="ViewModels\VehicleService\VehicleServiceViewModel.cs" />
|
<Compile Include="ViewModels\VehicleService\VehicleServiceViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Vehicle\VehicleCostItem.cs" />
|
<Compile Include="ViewModels\Vehicle\VehicleCostItem.cs" />
|
||||||
<Compile Include="ViewModels\Vehicle\VehicleCostReport.cs" />
|
<Compile Include="ViewModels\Vehicle\VehicleCostReport.cs" />
|
||||||
|
<Compile Include="ViewModels\Vehicle\VehiclePartialDetailsQuick.cs" />
|
||||||
<Compile Include="ViewModels\Vehicle\VehicleViewModel.cs" />
|
<Compile Include="ViewModels\Vehicle\VehicleViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Vehicle\VehicleResultsViewModel.cs" />
|
<Compile Include="ViewModels\Vehicle\VehicleResultsViewModel.cs" />
|
||||||
<Compile Include="ViewModels\SelectListViewModel.cs" />
|
<Compile Include="ViewModels\SelectListViewModel.cs" />
|
||||||
@@ -391,6 +399,19 @@
|
|||||||
<Content Include="Views\Shared\PageTitle.cshtml" />
|
<Content Include="Views\Shared\PageTitle.cshtml" />
|
||||||
<Content Include="Views\VehicleService\Delete.cshtml" />
|
<Content Include="Views\VehicleService\Delete.cshtml" />
|
||||||
<Content Include="Views\ServiceReminder\Delete.cshtml" />
|
<Content Include="Views\ServiceReminder\Delete.cshtml" />
|
||||||
|
<Content Include="Views\Shared\EditorTemplates\VehicleSelect.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Index.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Empty.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Create.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Details.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Delete.cshtml" />
|
||||||
|
<Content Include="Views\Vehicle\DetailsQuickPartial.cshtml" />
|
||||||
|
<Content Include="Views\VehicleRecall\Edit.cshtml" />
|
||||||
|
<Content Include="Views\Shared\DisplayTemplates\Details.cshtml" />
|
||||||
|
<Content Include="Views\Shared\DisplayTemplates\VehicleRecallSelectListViewModel.cshtml" />
|
||||||
|
<Content Include="Views\Shared\DisplayTemplates\VehicleServiceLink.cshtml" />
|
||||||
|
<Content Include="Views\VehicleService\VehicleRecallSelect.cshtml" />
|
||||||
|
<Content Include="Views\VehicleService\SelectVehicle.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Content\Account.Login.css" />
|
<Content Include="Content\Account.Login.css" />
|
||||||
@@ -629,6 +650,9 @@
|
|||||||
<EmbeddedResource Include="Migrations\201510150220550_ServiceReminder.resx">
|
<EmbeddedResource Include="Migrations\201510150220550_ServiceReminder.resx">
|
||||||
<DependentUpon>201510150220550_ServiceReminder.cs</DependentUpon>
|
<DependentUpon>201510150220550_ServiceReminder.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Migrations\202008300135173_VehicleRecall.resx">
|
||||||
|
<DependentUpon>202008300135173_VehicleRecall.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
|
|||||||
+4
-4
@@ -2,12 +2,12 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
||||||
<package id="CsvHelper" version="2.13.2.0" targetFramework="net45" />
|
<package id="CsvHelper" version="2.13.2.0" targetFramework="net45" />
|
||||||
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
|
<package id="EntityFramework" version="6.2.0" targetFramework="net45" />
|
||||||
<package id="ExcelLibrary" version="1.2011.7.30" />
|
<package id="ExcelLibrary" version="1.2011.7.30" />
|
||||||
<package id="FontAwesome" version="4.4.0" targetFramework="net45" />
|
<package id="FontAwesome" version="4.4.0" targetFramework="net45" />
|
||||||
<package id="Hangfire" version="1.5.2" targetFramework="net45" />
|
<package id="Hangfire" version="1.6.20" targetFramework="net45" />
|
||||||
<package id="Hangfire.Core" version="1.5.2" targetFramework="net45" />
|
<package id="Hangfire.Core" version="1.6.20" targetFramework="net45" />
|
||||||
<package id="Hangfire.SqlServer" version="1.5.2" targetFramework="net45" />
|
<package id="Hangfire.SqlServer" version="1.6.20" targetFramework="net45" />
|
||||||
<package id="JonSkeet.MiscUtil" version="0.1" targetFramework="net40" />
|
<package id="JonSkeet.MiscUtil" version="0.1" targetFramework="net40" />
|
||||||
<package id="jQuery" version="2.1.4" targetFramework="net45" />
|
<package id="jQuery" version="2.1.4" targetFramework="net45" />
|
||||||
<package id="jQuery.Migrate" version="1.2.1" targetFramework="net40" />
|
<package id="jQuery.Migrate" version="1.2.1" targetFramework="net40" />
|
||||||
|
|||||||
Reference in New Issue
Block a user