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
@@ -1,11 +1,14 @@
using System.ComponentModel.DataAnnotations;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using AutoMapper;
using MileageTraker.Web.Attributes;
using MileageTraker.Web.DAL;
namespace MileageTraker.Web.ViewModels.ServiceReminder
{
public class ServiceReminderViewModel
public class ServiceReminderViewModel : IComparable<ServiceReminderViewModel>, IValidatableObject
{
[HiddenInput(DisplayValue = false)]
public int? ServiceReminderId { get; set; }
@@ -19,17 +22,28 @@ namespace MileageTraker.Web.ViewModels.ServiceReminder
[InputSize("mini")]
public string VehicleId { get; set; }
[HiddenInput(DisplayValue = false)]
public int? CurrentOdometer { get; set; }
[InputSize("small")]
public int TargetOdometer { get; set; }
[Range(1, 500000, ErrorMessage = "Between 1 and 500k")]
public int TargetOdometer { get; set; }
[StringLength(64)]
public string Description { get; set; }
[HiddenInput(DisplayValue = false)]
public bool IsServiceOverdue { get { return ServiceDueInMiles <= 0; } }
[HiddenInput(DisplayValue = false)]
public int ServiceDueInMiles { get { return CurrentOdometer.HasValue ? TargetOdometer - CurrentOdometer.Value : int.MaxValue; } }
static ServiceReminderViewModel()
{
Mapper.CreateMap<ServiceReminderViewModel, Models.ServiceReminder>();
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));
}
public ServiceReminderViewModel(Models.ServiceReminder serviceReminder)
@@ -47,5 +61,32 @@ namespace MileageTraker.Web.ViewModels.ServiceReminder
Mapper.Map(this, serviceReminder);
return serviceReminder;
}
public int CompareTo(ServiceReminderViewModel other)
{
return ServiceDueInMiles - other.ServiceDueInMiles;
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
using (var dataService = new DataService())
{
var duplicateServiceReminder = dataService.FindDuplicateServiceReminder(VehicleId, TargetOdometer, 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"});
}
}
}
}