Service reminder implemented.

This commit is contained in:
2015-10-21 20:32:37 -04:00
parent e42fcd16fa
commit 93065de77f
26 changed files with 652 additions and 89 deletions
@@ -0,0 +1,84 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using AutoMapper;
using MileageTraker.Web.Attributes;
using MileageTraker.Web.DAL;
using MileageTraker.Web.ViewModels.ServiceReminder;
namespace MileageTraker.Web.ViewModels.VehicleService
{
public class UpdateServiceRemindersViewModel : IValidatableObject
{
[Display(Name = "Existing Reminders")]
public CheckBoxViewModel DeleteServiceReminders { get; set; }
[HiddenInput(DisplayValue = false)]
public int? ServiceReminderId { get; set; }
[HiddenInput(DisplayValue = false)]
[Required]
[Remote("Exists", "Vehicle", ErrorMessage = "ID not found")]
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")]
[Display(Name = "Vehicle ID")]
[RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")]
[InputSize("mini")]
public string VehicleId { get; set; }
[HiddenInput(DisplayValue = false)]
public int? CurrentOdometer { get; set; }
[InputSize("small")]
[Range(1, 500000, ErrorMessage = "Between 1 and 500k")]
public int? TargetOdometer { get; set; }
[StringLength(64)]
public string Description { get; set; }
static UpdateServiceRemindersViewModel()
{
Mapper.CreateMap<UpdateServiceRemindersViewModel, Models.ServiceReminder>();
}
public Models.ServiceReminder GetServiceReminder()
{
if (!TargetOdometer.HasValue || TargetOdometer.Value == 0)
return null;
var serviceReminder = new Models.ServiceReminder();
Mapper.Map(this, serviceReminder);
return serviceReminder;
}
public static string FormatServiceReminder(Models.ServiceReminder serviceReminder)
{
var s = "Target ODO: " + serviceReminder.TargetOdometer;
if (!string.IsNullOrEmpty(serviceReminder.Description))
s += " Description: " + serviceReminder.Description;
return s;
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!TargetOdometer.HasValue) yield break;
using (var dataService = new DataService())
{
var duplicateServiceReminder = dataService.FindDuplicateServiceReminder(VehicleId, TargetOdometer.Value, Description);
if (duplicateServiceReminder != null)
yield return new ValidationResult("Exact duplicate of this reminder already exists");
var vehicle = dataService.GetVehicle(VehicleId);
if (vehicle.InactiveDate.HasValue)
yield return new ValidationResult("Vehicle is inactive, no service reminder permitted");
// no reminders for mileage less than the current odometer
if (vehicle.CurrentOdometer.HasValue && TargetOdometer <= vehicle.CurrentOdometer)
yield return new ValidationResult(
string.Format("Target odometer {0} must be greater than current odometer {1}",
TargetOdometer, vehicle.CurrentOdometer.Value), new[] {"TargetOdometer"});
}
}
}
}
@@ -1,11 +1,13 @@
using System.Collections.Generic;
using System.Globalization;
using MileageTraker.Web.ViewModels.ServiceReminder;
namespace MileageTraker.Web.ViewModels.VehicleService
{
public class VehicleServiceResultsViewModel
{
public IEnumerable<VehicleServiceViewModel> ServiceItems { get; set; }
public IList<ServiceReminderViewModel> UpcomingServiceReminders { get; set; }
public Dictionary<string, List<string>> AvailableYearMonths { get; set; }
public IEnumerable<string> SelectedYearMonths
{
@@ -24,10 +26,12 @@ namespace MileageTraker.Web.ViewModels.VehicleService
public VehicleServiceResultsViewModel(
IEnumerable<VehicleServiceViewModel> serviceItems,
IList<ServiceReminderViewModel> upcomingServiceReminders,
VehicleServiceQueryViewModel query,
Dictionary<string, List<string>> availableYearMonths)
{
ServiceItems = serviceItems;
UpcomingServiceReminders = upcomingServiceReminders;
AvailableYearMonths = availableYearMonths;
Year = query.Year.HasValue ? query.Year.Value.ToString(CultureInfo.InvariantCulture) : string.Empty;
Month = query.Month.HasValue ? query.Month.Value.ToString(CultureInfo.InvariantCulture) : string.Empty;
@@ -21,8 +21,10 @@ namespace MileageTraker.Web.ViewModels.VehicleService
[DataType(DataType.DateTime)]
[DisplayFormatAttribute(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
[DenyFutureDate(ErrorMessage = "Future date")]
[FormatHint("mm/dd/yyyy")]
[InputSize("small")]
[Required]
public DateTime? InvoiceDate { get; set; }
[Required]