Initial
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace MileageTraker.Web.Models
|
||||
{
|
||||
public class City
|
||||
{
|
||||
[Key]
|
||||
public int CityId { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string County { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Web.Mvc;
|
||||
using MileageTraker.Web.DAL;
|
||||
using MileageTraker.Web.Utility;
|
||||
|
||||
namespace MileageTraker.Web.Models
|
||||
{
|
||||
public class Log : IValidatableObject
|
||||
{
|
||||
[Key]
|
||||
[HiddenInput(DisplayValue = false)]
|
||||
public int LogId { get; set; }
|
||||
|
||||
[Required]
|
||||
[Remote("Exists", "Vehicle", ErrorMessage = "ID not found")]
|
||||
[StringLength(6, MinimumLength = 4, ErrorMessage = "Enter 4 digit number")]
|
||||
[Display(Name = "Vehicle ID")]
|
||||
[RegularExpression(@"\d+", ErrorMessage = "Enter only numbers")]
|
||||
public string VehicleId { get; set; }
|
||||
|
||||
[Required]
|
||||
[Range(1, 500000, ErrorMessage = "Between 1 and 500k")]
|
||||
[Display(Name = "End Odometer")]
|
||||
[Units("Miles")]
|
||||
public int EndOdometer { get; set; }
|
||||
|
||||
[Required]
|
||||
[Display(Name = "Type")]
|
||||
[NoEditLabel]
|
||||
public MileageLogTypeWrapper LogType { get; set; }
|
||||
|
||||
[Required]
|
||||
[StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")]
|
||||
public string CityName { get; set; }
|
||||
|
||||
[Required]
|
||||
[Display(Name = "Employee / Driver")]
|
||||
[RegularExpression(@"[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Need complete name")]
|
||||
public string EmployeeName { get; set; }
|
||||
|
||||
[Range(0, 50)]
|
||||
[DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)]
|
||||
[Units("Gallons")]
|
||||
[FormatHint("n.nnnn")]
|
||||
public double GasPurchased { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataType(DataType.Date)]
|
||||
[DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
|
||||
[DenyFutureDate(ErrorMessage = "Future date")]
|
||||
[FormatHint("mm/dd/yyyy")]
|
||||
public DateTime Date { get; set; }
|
||||
|
||||
[Display(Name = "Time Created")]
|
||||
[DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy h:mm tt}")]
|
||||
[HiddenInput]
|
||||
public DateTime Created { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// url route that was used to create this instance, ie 'CreateLog\Confirm' or 'Logs\Create'
|
||||
/// </summary>
|
||||
[HiddenInput]
|
||||
public string Source { get; set; }
|
||||
|
||||
[HiddenInput]
|
||||
public string UserHostAddress { get; set; }
|
||||
|
||||
[HiddenInput]
|
||||
public string UserAgent { get; set; }
|
||||
|
||||
public Log()
|
||||
{
|
||||
LogType = new MileageLogTypeWrapper();
|
||||
}
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||
{
|
||||
if (LogType == MileageLogType.GasPurchase && (GasPurchased.Equals(0)))
|
||||
yield return new ValidationResult("Enter amount of gas purchased", new[] { "GasPurchased" });
|
||||
|
||||
if (LogType.Value == 0)
|
||||
yield return new ValidationResult("Required", new[] { "LogType" });
|
||||
|
||||
ValidationResult result = null;
|
||||
try
|
||||
{
|
||||
var dataService = new DataService();
|
||||
dataService.ValidateOdometerChronology(VehicleId, EndOdometer, Date);
|
||||
}
|
||||
catch (ChronologicalOrderException ex)
|
||||
{
|
||||
result = new ValidationResult(ex.Message, new[] { "EndOdometer" });
|
||||
}
|
||||
if (result != null)
|
||||
yield return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace MileageTraker.Web.Models
|
||||
{
|
||||
public enum MileageLogType
|
||||
{
|
||||
[Display(Name = "Non-Commuting",ShortName = "Non-Comm")]
|
||||
NonCommuting = 1,
|
||||
[Display(Name = "Commuting", ShortName = "Comm")]
|
||||
Commuting = 2,
|
||||
[Display(Name = "Gas Purchase", ShortName = "Gas")]
|
||||
GasPurchase = 3
|
||||
}
|
||||
|
||||
[ComplexType]
|
||||
public class MileageLogTypeWrapper
|
||||
{
|
||||
[NotMapped]
|
||||
public MileageLogType Enum { get; set; }
|
||||
|
||||
public int Value
|
||||
{
|
||||
get { return (int)Enum; }
|
||||
set { Enum = (MileageLogType)value; }
|
||||
}
|
||||
|
||||
public static implicit operator MileageLogType(MileageLogTypeWrapper w)
|
||||
{
|
||||
return w == null ? default(MileageLogType) : w.Enum;
|
||||
}
|
||||
|
||||
public static implicit operator MileageLogTypeWrapper(MileageLogType c)
|
||||
{
|
||||
return new MileageLogTypeWrapper { Enum = c };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using System.Data.Entity;
|
||||
using System.Data.Entity.ModelConfiguration.Conventions;
|
||||
|
||||
namespace MileageTraker.Web.Models
|
||||
{
|
||||
public class MileageTrakerContext : DbContext
|
||||
{
|
||||
public DbSet<Log> Logs { get; set; }
|
||||
public DbSet<Vehicle> Vehicles { get; set; }
|
||||
public DbSet<City> Cities { get; set; }
|
||||
|
||||
protected override void OnModelCreating(DbModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Web.Mvc;
|
||||
using MileageTraker.Web.Utility;
|
||||
|
||||
namespace MileageTraker.Web.Models
|
||||
{
|
||||
public class Vehicle
|
||||
{
|
||||
[Required]
|
||||
public int Key { get; set; }
|
||||
|
||||
[Key]
|
||||
[Required]
|
||||
[StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")]
|
||||
[Display(Name = "EHTRA ID")]
|
||||
[RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")]
|
||||
public string VehicleId { get; set; }
|
||||
|
||||
[Required]
|
||||
[RegularExpression(@"\d{4}", ErrorMessage = "Must be 4 numbers")]
|
||||
public string ModelYear { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Make { get; set; }
|
||||
|
||||
[Display(Name = "Model")]
|
||||
[Required]
|
||||
public string CarModel { get; set; }
|
||||
|
||||
public string Color { get; set; }
|
||||
|
||||
[Required]
|
||||
[RegularExpression(@"Car|Truck|SUV|Van", ErrorMessage = "Must be Car, Truck, SUV, or Van")]
|
||||
[FormatHint("Car, Truck, SUV or Van")]
|
||||
public string Type { get; set; }
|
||||
|
||||
[Required]
|
||||
[Display(Name = "VIN")]
|
||||
[RegularExpression(@"[0-9A-HJ-NPR-Z]{17}", ErrorMessage = "VIN must be 17-characters, not including letters I, O or Q")]
|
||||
public string Vin { get; set; }
|
||||
|
||||
[Required]
|
||||
public decimal Price { get; set; }
|
||||
|
||||
[Required]
|
||||
[RegularExpression(@"\d{1,2}/\d{2}", ErrorMessage = "PurDate must be in mm/yy format")]
|
||||
public string PurDate { get; set; }
|
||||
|
||||
[Required]
|
||||
[Display(Name = "Tag#")]
|
||||
public string TagNumber { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Prog { get; set; }
|
||||
|
||||
[RegularExpression(@"Unassigned|[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Please enter the full name")]
|
||||
[DisplayFormat(NullDisplayText = "Unassigned")]
|
||||
public string Assigned { get; set; }
|
||||
|
||||
public string Notes { get; set; }
|
||||
|
||||
[Display(Name = "Current Odometer", ShortName= "ODO")]
|
||||
[DisplayFormat(NullDisplayText = "?")]
|
||||
public int? CurrentOdometer { get; set; }
|
||||
|
||||
public virtual ICollection<Log> Logs { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user