Upcoming Service Reminders

This commit is contained in:
2015-10-22 09:05:42 -04:00
parent 93065de77f
commit 25fb070701
14 changed files with 88 additions and 53 deletions
+5
View File
@@ -97,6 +97,11 @@ footer {
margin-left: 120px; margin-left: 120px;
} }
.qtip-override {
max-width: 500px;
font-size: 13px;
}
fieldset legend { fieldset legend {
margin: 0; margin: 0;
border: 0; border: 0;
+29 -9
View File
@@ -32,7 +32,7 @@ $(function () {
$("input#ModelYear,input#Price,input#VehicleId,input#EndOdometer,input#GasPurchased").numeric(); $("input#ModelYear,input#Price,input#VehicleId,input#EndOdometer,input#GasPurchased").numeric();
$(".report-miles").append('&nbsp;<span class="muted">&#9652;</span>').each(function () { $(".report-miles").append('&nbsp;<span class="muted"><i class="fa fa-caret-down"></i></span>').each(function () {
var content = $(this).next('.report-calculation'); var content = $(this).next('.report-calculation');
$(this).qtip({ $(this).qtip({
content: content, content: content,
@@ -52,14 +52,14 @@ $(function () {
}); });
// add popup for span titles // add popup for span titles
$('span[title]').append('&nbsp;<span class="muted">&#9652;</span>').qtip({ $('span[title]').append('&nbsp;<span class="muted"><i class="fa fa-caret-down"></i></span>').qtip({
content: { content: {
text: false // Use each elements title attribute text: false // Use each elements title attribute
}, },
style: { classes: "qtip-light" } // Give it some style style: { classes: "qtip-light" } // Give it some style
}); });
$(".miles-unknown").addClass('label label-warning').append('&nbsp;<span class="muted">&#9652;</span>') $(".miles-unknown").addClass('label label-warning').append('&nbsp;<span class="muted"><i class="fa fa-caret-down"></i></span>')
.each(function () { .each(function () {
$(this).qtip({ $(this).qtip({
content: "No previous log for this vehicle", content: "No previous log for this vehicle",
@@ -179,11 +179,11 @@ $(function() {
// Add active class to nav // Add active class to nav
$(function() { $(function() {
var idNavActiveRegex = { var idNavActiveRegex = {
'fuellog-nav': /\/fuellog/i,
'log-nav': /\/log/i, 'log-nav': /\/log/i,
'vehicle-nav': /\/vehicle|\/servicereminder/i, 'vehicle-nav': /\/vehicle|\/servicereminder|\/fuellog/i,
'user-nav': /\/user/i, 'user-nav': /\/user/i,
'config-nav': /\/City|\/Purpose/i 'config-nav': /\/City|\/Purpose/i,
'account-nav': /\/Account/i
}; };
var set = false; var set = false;
$.each(idNavActiveRegex, function (id, regex) { $.each(idNavActiveRegex, function (id, regex) {
@@ -220,11 +220,11 @@ function addButtonIcons () {
'Vehicle': 'car', 'Vehicle': 'car',
'Reminder': 'clock-o', 'Reminder': 'clock-o',
'Fuel Logs': 'tachometer', 'Fuel Logs': 'tachometer',
'Users': 'user', 'Users': 'users',
'Logs': 'road' 'Logs': 'road'
}; };
$.each(textToIcon, function(text, icon) { $.each(textToIcon, function(text, icon) {
$("a:contains('" + text + "'):not(:has(i))") $("a:contains('" + text + "'):not(:has(i:first-child))")
.prepend('<i class="fa fa-'+ icon +'"></i> '); .prepend('<i class="fa fa-'+ icon +'"></i> ');
}); });
@@ -278,7 +278,7 @@ $(function() {
element.click(function() { return false; }); element.click(function() { return false; });
element.append('&nbsp;<span class="muted">&#9652;</span>'); element.append('&nbsp;<span class="muted"><i class="fa fa-caret-down"></i></span>');
element.qtip({ element.qtip({
content: { content: {
@@ -300,6 +300,26 @@ $(function() {
} }
}); });
} }
$('.qtip-show-next-div').each(function () {
$(this).qtip({
content: {
text: $(this).next('div')
},
hide: {
fixed: true,
delay: 500
},
style: {
classes: 'qtip-light qtip-shadow qtip-override',
width: false
},
position: {
my: 'top left', // Position my top left...
at: 'bottom left', // at the bottom right of...
}
});
});
}); });
/* /*
@@ -22,6 +22,10 @@ namespace MileageTraker.Web.ViewModels.ServiceReminder
[InputSize("mini")] [InputSize("mini")]
public string VehicleId { get; set; } public string VehicleId { get; set; }
[HiddenInput(DisplayValue = false)]
[DisplayFormat(NullDisplayText = "Unassigned")]
public string AssignedDriver { get; set; }
[HiddenInput(DisplayValue = false)] [HiddenInput(DisplayValue = false)]
public int? CurrentOdometer { get; set; } public int? CurrentOdometer { get; set; }
@@ -43,7 +47,8 @@ namespace MileageTraker.Web.ViewModels.ServiceReminder
Mapper.CreateMap<ServiceReminderViewModel, Models.ServiceReminder>(); Mapper.CreateMap<ServiceReminderViewModel, Models.ServiceReminder>();
Mapper.CreateMap<Models.ServiceReminder, ServiceReminderViewModel>() Mapper.CreateMap<Models.ServiceReminder, ServiceReminderViewModel>()
.ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId)) .ForMember(dest => dest.VehicleId, opt => opt.MapFrom(src => src.Vehicle.VehicleId))
.ForMember(dest => dest.CurrentOdometer, opt => opt.MapFrom(src => src.Vehicle.CurrentOdometer)); .ForMember(dest => dest.CurrentOdometer, opt => opt.MapFrom(src => src.Vehicle.CurrentOdometer))
.ForMember(dest => dest.AssignedDriver, opt => opt.MapFrom(src => src.Vehicle.Assigned));
} }
public ServiceReminderViewModel(Models.ServiceReminder serviceReminder) public ServiceReminderViewModel(Models.ServiceReminder serviceReminder)
+4 -4
View File
@@ -3,15 +3,15 @@
ViewBag.Title = "Manage Account"; ViewBag.Title = "Manage Account";
} }
<h2 class="center-content">@ViewBag.Title</h2> <h2 class="center-content"><i class="fa fa-user"></i> @ViewBag.Title</h2>
@Html.Partial("_StatusMessage") @Html.Partial("_StatusMessage")
<div class="center-content well"> <div class="center-content well">
<p>You're logged in as <strong>@User.Identity.Name</strong>. <p>You're logged in as <strong>@User.Identity.Name</strong>.<br/>
Your name is <strong>@Model.FullName</strong> and Your name is <strong>@Model.FullName</strong>.<br/>
email is <strong>@Model.Email</strong>. Your email is <strong>@Model.Email</strong>.
</p> </p>
@Html.Partial("_ChangePasswordPartial") @Html.Partial("_ChangePasswordPartial")
+1 -1
View File
@@ -39,7 +39,7 @@
@Html.ActionLink("Export", "Export", queryParams, new { @class = "btn" }) @Html.ActionLink("Export", "Export", queryParams, new { @class = "btn" })
<div class="btn-group"> <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">Report <span class="caret"></span></a> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">Report <i class="fa fa-caret-down"></i></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
@Html.ActionLink("Vehicle Mileage", "MonthlyVehicleMileage", queryParams) @Html.ActionLink("Vehicle Mileage", "MonthlyVehicleMileage", queryParams)
+4 -4
View File
@@ -37,16 +37,16 @@
{ {
<li id="log-nav">@Html.ActionLink("Logs", "Index", "Log")</li> <li id="log-nav">@Html.ActionLink("Logs", "Index", "Log")</li>
<li id="vehicle-nav" class="dropdown"> <li id="vehicle-nav" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Vehicles <span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span>Vehicles</span> <i class="fa fa-caret-down"></i></a>
<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("Fuel Logs", "Index", "FuelLog")</li>
</ul> </ul>
</li> </li>
<li id="fuellog-nav">@Html.ActionLink("Fuel Logs", "Index", "FuelLog")</li>
<li id="user-nav">@Html.ActionLink("Users", "Index", "User")</li> <li id="user-nav">@Html.ActionLink("Users", "Index", "User")</li>
<li id="config-nav" class="dropdown"> <li id="config-nav" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Config <span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span>Config</span> <i class="fa fa-caret-down"></i></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li>@Html.ActionLink("Cities", "Index", "City")</li> <li>@Html.ActionLink("Cities", "Index", "City")</li>
<li>@Html.ActionLink("Purposes", "Index", "Purpose")</li> <li>@Html.ActionLink("Purposes", "Index", "Purpose")</li>
+1 -1
View File
@@ -1,7 +1,7 @@
<ul class="nav pull-right"> <ul class="nav pull-right">
@if (Request.IsAuthenticated) @if (Request.IsAuthenticated)
{ {
<li> <li id="account-nav">
@Html.ActionLink(User.Identity.Name, "Manage", "Account", null, new {@class = "username", title = "Manage"}) @Html.ActionLink(User.Identity.Name, "Manage", "Account", null, new {@class = "username", title = "Manage"})
</li> </li>
<li> <li>
+1 -1
View File
@@ -90,7 +90,7 @@
@Html.ActionLink("Edit", "Edit", new { id = Model.UserId }, new { @class = "btn" }) @Html.ActionLink("Edit", "Edit", new { id = Model.UserId }, new { @class = "btn" })
<div class="btn-group"> <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
Password <span class="caret"></span> Password <i class="fa fa-caret-down"></i>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
+1 -1
View File
@@ -8,7 +8,7 @@
@Html.Partial("_StatusMessage") @Html.Partial("_StatusMessage")
<h2 id="user-title"><i class="fa fa-user"></i> @ViewBag.Title</h2> <h2 id="user-title"><i class="fa fa-users"></i> @ViewBag.Title</h2>
<div class="btn-toolbar pull-right"> <div class="btn-toolbar pull-right">
@using (Html.BeginForm("DetailsFullName", "User", FormMethod.Get, new {@class = "navbar-search form-inline" })) @using (Html.BeginForm("DetailsFullName", "User", FormMethod.Get, new {@class = "navbar-search form-inline" }))
+1 -1
View File
@@ -30,7 +30,7 @@
} }
<div class="btn-group"> <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
Services <span class="caret"></span> Services <i class="fa fa-caret-down"></i>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
+5 -29
View File
@@ -26,45 +26,21 @@
} }
</div> </div>
<div class="pull-right" style="width:400px">
<h4>Upcoming Services</h4>
<table class="table table-striped table-bordered table-hover table-condensed">
<tr>
<th>Vehicle ID</th>
<th>ODO</th>
<th>Next Service</th>
<th>Description</th>
<th></th>
</tr>
@foreach (var sr in Model.UpcomingServiceReminders)
{
<tr>
<td>@Html.DisplayTextFor(m => sr.VehicleId)</td>
<td>@Html.DisplayTextFor(m => sr.CurrentOdometer)</td>
<td>@Html.DisplayTextFor(m => sr.TargetOdometer)
@if (sr.IsServiceOverdue)
{
<span class="badge badge-warning" title="overdue @(-sr.ServiceDueInMiles) miles">!</span>
}
</td>
<td>@Html.DisplayTextFor(m => sr.Description)</td>
<td>@Html.ActionLink("Add Service", "Create", "VehicleService", new { vehicleId = sr.VehicleId }, new { @class = "btn btn-mini" })</td>
</tr>
}
</table>
</div>
<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", "Create", 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">@Model.UpcomingServiceReminders.Count</span></a>
<div class="hidden">
@Html.Partial("UpcomingServiceReminders", Model.UpcomingServiceReminders)
</div>
</div> </div>
@grid.GetHtml(columns: @grid.GetHtml(columns:
grid.Columns( grid.Columns(
grid.Column("InvoiceDate", "Invoice Date", item => item.InvoiceDate.ToString("d")), grid.Column("InvoiceDate", "Invoice Date", item => item.InvoiceDate.ToString("d")),
grid.Column("VehicleID", "Vehicle Id"), grid.Column("VehicleId", "Vehicle ID", item => Html.ActionLink((string)item.VehicleId, "DetailsPartial", "Vehicle", new { id = item.VehicleId }, new { @class = "qtip-modal" })),
grid.Column("ServiceCenterName", "Service Center Name"), grid.Column("ServiceCenterName", "Service Center Name"),
grid.Column("Price", "Price"), grid.Column("Price", "Price"),
grid.Column("Description", "Description"), grid.Column("Description", "Description"),
@@ -0,0 +1,28 @@
@model IList<MileageTraker.Web.ViewModels.ServiceReminder.ServiceReminderViewModel>
<table class="table table-striped table-bordered table-hover table-condensed">
<tr>
<th>Vehicle ID</th>
<th>Driver</th>
<th>ODO</th>
<th>Next Service</th>
<th>Description</th>
<th></th>
</tr>
@foreach (var sr in Model)
{
<tr>
<td>@Html.ActionLink(sr.VehicleId, "DetailsPartial", "Vehicle", new { id = sr.VehicleId }, new { @class = "qtip-modal" })</td>
<td>@Html.DisplayTextFor(m => sr.AssignedDriver)</td>
<td>@Html.DisplayTextFor(m => sr.CurrentOdometer)</td>
<td>@Html.DisplayTextFor(m => sr.TargetOdometer)
@if (sr.IsServiceOverdue)
{
<span class="badge badge-warning" title="overdue @(-sr.ServiceDueInMiles) miles">!</span>
}
</td>
<td>@Html.DisplayTextFor(m => sr.Description)</td>
<td>@Html.ActionLink("Add Service", "Create", "VehicleService", new { vehicleId = sr.VehicleId }, new { @class = "btn btn-mini" })</td>
</tr>
}
</table>
@@ -7,7 +7,7 @@
@Html.Partial("_StatusMessage") @Html.Partial("_StatusMessage")
<h2 class="center-content"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2> <h2 class="center-content"><i class="fa fa-clock-o"></i> @ViewBag.Title</h2>
<h5 class="center-content">Add the next service for this vehicle and remove existing reminders.</h5> <p class="center-content">Add the next service for this vehicle and remove existing reminders.</p>
@using (Html.BeginForm("UpdateServiceReminders", "VehicleService", FormMethod.Post, new { @class = "form-horizontal well center-content" })) @using (Html.BeginForm("UpdateServiceReminders", "VehicleService", FormMethod.Post, new { @class = "form-horizontal well center-content" }))
{ {
+1
View File
@@ -353,6 +353,7 @@
<Content Include="Views\ServiceReminder\Index.cshtml" /> <Content Include="Views\ServiceReminder\Index.cshtml" />
<Content Include="Views\ServiceReminder\ServiceReminderViewModel.cshtml" /> <Content Include="Views\ServiceReminder\ServiceReminderViewModel.cshtml" />
<Content Include="Views\VehicleService\UpdateServiceReminders.cshtml" /> <Content Include="Views\VehicleService\UpdateServiceReminders.cshtml" />
<Content Include="Views\VehicleService\UpcomingServiceReminders.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Content\Account.Login.css" /> <Content Include="Content\Account.Login.css" />