From 0a90d48f2de2c51103faf6772392443231962715 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 2 Oct 2015 10:45:25 -0400 Subject: [PATCH] Get to compile --- .../CreateLog/CreateLogViewModelTests.cs | 2 +- Web.Tests/ViewModels/Log/LogViewModelTests.cs | 4 -- Web/Controllers/CreateLogController.cs | 3 +- Web/Controllers/FuelLogController.cs | 4 +- Web/Controllers/LogController.cs | 3 +- Web/DAL/DataService.cs | 42 +++++++++---------- Web/Models/Log.cs | 8 ++-- 7 files changed, 30 insertions(+), 36 deletions(-) diff --git a/Web.Tests/ViewModels/CreateLog/CreateLogViewModelTests.cs b/Web.Tests/ViewModels/CreateLog/CreateLogViewModelTests.cs index dcef98f..8b05f46 100644 --- a/Web.Tests/ViewModels/CreateLog/CreateLogViewModelTests.cs +++ b/Web.Tests/ViewModels/CreateLog/CreateLogViewModelTests.cs @@ -34,7 +34,7 @@ namespace Web.Tests.ViewModels Assert.That(log.CityName, Is.EqualTo(cityName)); Assert.That(log.Date, Is.EqualTo(date)); Assert.That(log.EndOdometer.ToString(), Is.EqualTo(endOdometer)); - Assert.That(log.VehicleId, Is.EqualTo(ethraId)); + Assert.That(log.Vehicle, Is.EqualTo(ethraId)); Assert.That(log.GasPurchased.ToString(), Is.EqualTo(gasPurchased)); Assert.That(log.LogType.Enum, Is.EqualTo(mileageLogType.Enum)); } diff --git a/Web.Tests/ViewModels/Log/LogViewModelTests.cs b/Web.Tests/ViewModels/Log/LogViewModelTests.cs index c9270ac..27f6562 100644 --- a/Web.Tests/ViewModels/Log/LogViewModelTests.cs +++ b/Web.Tests/ViewModels/Log/LogViewModelTests.cs @@ -39,7 +39,6 @@ namespace Web.Tests.ViewModels.Log Assert.That(log.CityName, Is.EqualTo(cityName)); Assert.That(log.Date, Is.EqualTo(date)); Assert.That(log.EndOdometer.ToString(), Is.EqualTo(endOdometer)); - Assert.That(log.VehicleId, Is.EqualTo(ethraId)); Assert.That(log.GasPurchased.ToString(), Is.EqualTo(gasPurchased)); Assert.That(log.LogType.Enum, Is.EqualTo(mileageLogType.Enum)); } @@ -78,7 +77,6 @@ namespace Web.Tests.ViewModels.Log CityName = "Different Town", Date = DateTime.MinValue, EndOdometer = 1, - VehicleId = "1", GasPurchased = 1.0, LogType = new MileageLogTypeWrapper { Enum = MileageLogType.GasPurchase }, User = logUser, @@ -91,7 +89,6 @@ namespace Web.Tests.ViewModels.Log Assert.That(log.CityName, Is.EqualTo(viewModelCityName)); Assert.That(log.Date, Is.EqualTo(viewModelDate)); Assert.That(log.EndOdometer.ToString(), Is.EqualTo(viewModelEndOdometer)); - Assert.That(log.VehicleId, Is.EqualTo(viewModelVehicleId)); Assert.That(log.GasPurchased.ToString(), Is.EqualTo(viewModelGasPurchased)); Assert.That(log.LogType.Enum, Is.EqualTo(viewModelLogType.Enum)); @@ -118,7 +115,6 @@ namespace Web.Tests.ViewModels.Log CityName = cityName, Date = date, EndOdometer = endOdometer, - VehicleId = ethraId, GasPurchased = gasPurchased, LogType = mileageLogType }; diff --git a/Web/Controllers/CreateLogController.cs b/Web/Controllers/CreateLogController.cs index a4fe23c..49467d2 100644 --- a/Web/Controllers/CreateLogController.cs +++ b/Web/Controllers/CreateLogController.cs @@ -243,6 +243,7 @@ namespace MileageTraker.Web.Controllers } var log = viewModel.GetLog(); + log.Vehicle = DataService.GetVehicle(viewModel.VehicleId); log.User = DataService.FindUserByUsername(User.Identity.Name); log.Source = HttpContext.Request.Url.AbsolutePath; log.UserHostAddress = HttpContext.Request.UserHostAddress; @@ -266,7 +267,7 @@ namespace MileageTraker.Web.Controllers }, JsonRequestBehavior.AllowGet); } // verify vehicle exists - if (DataService.GetVehicle(log.VehicleId) == null) + if (log.Vehicle == null) { return Json(new { diff --git a/Web/Controllers/FuelLogController.cs b/Web/Controllers/FuelLogController.cs index fdecddc..f151867 100644 --- a/Web/Controllers/FuelLogController.cs +++ b/Web/Controllers/FuelLogController.cs @@ -76,7 +76,7 @@ namespace MileageTraker.Web.Controllers var logs = from l in DataService.GetPossibleMatchingLogs(fuelLog).ToList() where l != fuelLog.Log - let v = DataService.GetVehicle(l.VehicleId) + let v = l.Vehicle let vm = new LogMatchViewModel(l, v, fuelLogViewModel) orderby vm.MismatchCount ascending select vm; @@ -89,7 +89,7 @@ namespace MileageTraker.Web.Controllers }; if (fuelLog.Log != null) - matchViewModel.CurrentlyMatchedLog = new LogMatchViewModel(fuelLog.Log, DataService.GetVehicle(fuelLog.Log.VehicleId), fuelLogViewModel); + matchViewModel.CurrentlyMatchedLog = new LogMatchViewModel(fuelLog.Log, DataService.GetVehicle(fuelLog.Log.Vehicle.VehicleId), fuelLogViewModel); // When creating a new Log to match the fuel log, this holds the ID between actions TempData["FuelLogId"] = id; diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs index 8d4c399..fd77fdc 100644 --- a/Web/Controllers/LogController.cs +++ b/Web/Controllers/LogController.cs @@ -335,6 +335,7 @@ namespace MileageTraker.Web.Controllers } var log = viewModel.GetLog(); + log.Vehicle = DataService.GetVehicle(viewModel.VehicleId); log.User = DataService.FindUserByFullName(userFullName); log.Source = HttpContext.Request.Url.AbsolutePath; log.UserHostAddress = HttpContext.Request.UserHostAddress; @@ -358,7 +359,7 @@ namespace MileageTraker.Web.Controllers }, JsonRequestBehavior.AllowGet); } // verify vehicle exists - if (DataService.GetVehicle(log.VehicleId) == null) + if (log.Vehicle == null) { return Json(new { diff --git a/Web/DAL/DataService.cs b/Web/DAL/DataService.cs index c325b9c..01e4612 100644 --- a/Web/DAL/DataService.cs +++ b/Web/DAL/DataService.cs @@ -45,7 +45,7 @@ namespace MileageTraker.Web.DAL _db.SaveChanges(); - UpdateCurrentOdometer(log.VehicleId); + UpdateCurrentOdometer(log.Vehicle); } public void UpdateLog(Log log) @@ -85,7 +85,7 @@ namespace MileageTraker.Web.DAL _db.Entry(log).State = EntityState.Modified; _db.SaveChanges(); - UpdateCurrentOdometer(log.VehicleId); + UpdateCurrentOdometer(log.Vehicle); } public void DeleteLog(int id) @@ -109,7 +109,7 @@ namespace MileageTraker.Web.DAL _db.Logs.Remove(log); _db.SaveChanges(); - UpdateCurrentOdometer(log.VehicleId); + UpdateCurrentOdometer(log.Vehicle); } public IQueryable GetLogs() @@ -162,9 +162,8 @@ namespace MileageTraker.Web.DAL from log in FilterLogs(_db.Logs, query) let previousLog = log.VehiclePreviousLog select new {log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0)} - group l by l.log.VehicleId + group l by l.log.Vehicle into g - join v in _db.Vehicles on g.Key equals v.VehicleId let miles = g.Sum(l => l.miles) let gasPurchased = g.Sum(l => l.log.GasPurchased) where miles > 0 || gasPurchased > 0 @@ -175,10 +174,10 @@ namespace MileageTraker.Web.DAL select new { - VehicleId = g.Key, + g.Key.VehicleId, GasPurchased = gasPurchased, Miles = miles, - v.Prog, + g.Key.Prog, LogPairs = logPairs }; @@ -203,9 +202,9 @@ namespace MileageTraker.Web.DAL group l by l.log.User into g let vehicleLogs = from i in g - group i by i.log.VehicleId into v + group i by i.log.Vehicle into v from vehicle in _db.Vehicles - where vehicle.VehicleId == v.Key + where vehicle.VehicleId == v.Key.VehicleId let vehicleProg = vehicle.Prog let vehicleMiles = v.Sum(l => l.miles) let vehicleGasPurchased = v.Sum(l => l.log.GasPurchased) @@ -216,7 +215,7 @@ namespace MileageTraker.Web.DAL select new { PreviousLog = i.previousLog, Log = i.log } select new { - VehicleId = v.Key, + v.Key.VehicleId, Prog = vehicleProg, Miles = vehicleMiles, GasPurchased = vehicleGasPurchased, @@ -273,7 +272,7 @@ namespace MileageTraker.Web.DAL // vehicle id if (!String.IsNullOrEmpty(query.VehicleId)) { - logs = logs.Where(l => l.VehicleId == query.VehicleId); + logs = logs.Where(l => l.Vehicle.VehicleId == query.VehicleId); } return logs; @@ -286,7 +285,7 @@ namespace MileageTraker.Web.DAL where dbLog.Date == log.Date && dbLog.EndOdometer == log.EndOdometer && - dbLog.VehicleId == log.VehicleId + dbLog.Vehicle == log.Vehicle select dbLog; } @@ -303,7 +302,7 @@ namespace MileageTraker.Web.DAL public Log SearchPreviousLog(Log current) { - var vehicleId = current.VehicleId; + var vehicleId = current.Vehicle.VehicleId; var date = current.Date; var endOdometer = current.EndOdometer; return SearchPreviousLog(endOdometer, vehicleId, date, current.Created, current.LogId); @@ -312,7 +311,7 @@ namespace MileageTraker.Web.DAL public Log SearchPreviousLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null) { return (from pl in _db.Logs - where pl.VehicleId == vehicleId && + where pl.Vehicle.VehicleId == vehicleId && ((pl.EndOdometer < endOdometer && pl.Date <= date) || (pl.EndOdometer == endOdometer && pl.Date < date) || (pl.EndOdometer == endOdometer && pl.Date == date && pl.Created < created)) @@ -323,7 +322,7 @@ namespace MileageTraker.Web.DAL public Log SearchNextLog(Log current) { - var vehicleId = current.VehicleId; + var vehicleId = current.Vehicle.VehicleId; var date = current.Date; var endOdometer = current.EndOdometer; return SearchNextLog(endOdometer, vehicleId, date, current.Created, current.LogId); @@ -332,7 +331,7 @@ namespace MileageTraker.Web.DAL public Log SearchNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null) { return (from nl in GetLogs() - where nl.VehicleId == vehicleId && + where nl.Vehicle.VehicleId == vehicleId && ((nl.EndOdometer > endOdometer && nl.Date >= date) || (nl.EndOdometer == endOdometer && nl.Date > date) || (nl.EndOdometer == endOdometer && nl.Date >= date && nl.Created > created)) @@ -438,16 +437,15 @@ namespace MileageTraker.Web.DAL return vehicle; } - public void UpdateCurrentOdometer(string vehicleId) + public void UpdateCurrentOdometer(Vehicle vehicle) { var mostRecentOdometerQuery = from log in _db.Logs where - log.VehicleId == vehicleId + log.Vehicle == vehicle orderby log.Date descending, log.EndOdometer descending select log; var mostRecentOdometer = mostRecentOdometerQuery.FirstOrDefault(); - var vehicle = _db.Vehicles.Find(vehicleId); if (mostRecentOdometer != null && mostRecentOdometer.EndOdometer != vehicle.CurrentOdometer) { vehicle.CurrentOdometer = mostRecentOdometer.EndOdometer; @@ -475,7 +473,7 @@ namespace MileageTraker.Web.DAL let existingDate = log.Date let existingOdometer = log.EndOdometer where - log.VehicleId == vehicleId && + log.Vehicle.VehicleId == vehicleId && // this is also in Utility.Algorithms, but doesn't get emitted to DB as SQL if used in method call !(existingDate == date || existingOdometer == odometer @@ -706,7 +704,7 @@ namespace MileageTraker.Web.DAL // matching by Date, Gas Purchased (gallons), and Vehicle var vehicle = GetVehicleByTag(fuelLog.TagNumber); if (vehicle != null) - dateGasVehicleQuery = dateGasVehicleQuery.Where(log => log.VehicleId == vehicle.VehicleId); + dateGasVehicleQuery = dateGasVehicleQuery.Where(log => log.Vehicle.VehicleId == vehicle.VehicleId); dateGasVehicleQuery = dateGasVehicleQuery .Where(log => @@ -738,7 +736,7 @@ namespace MileageTraker.Web.DAL var vehicle = GetVehicleByTag(fuelLog.TagNumber); if (vehicle != null) - gasVehicleQuery = gasVehicleQuery.Where(log => log.VehicleId == vehicle.VehicleId); + gasVehicleQuery = gasVehicleQuery.Where(log => log.Vehicle.VehicleId == vehicle.VehicleId); var futureDate = fuelLog.Date.AddDays(dateRange); var pastDate = fuelLog.Date.AddDays(-dateRange); diff --git a/Web/Models/Log.cs b/Web/Models/Log.cs index 8b9b8ae..9787056 100644 --- a/Web/Models/Log.cs +++ b/Web/Models/Log.cs @@ -12,9 +12,7 @@ namespace MileageTraker.Web.Models public int LogId { get; set; } [Required] - [StringLength(6, MinimumLength = 4, ErrorMessage = "Enter 4 digit number")] - [RegularExpression(@"\d+", ErrorMessage = "Enter only numbers")] - public string VehicleId { get; set; } + public virtual Vehicle Vehicle { get; set; } [Required] [Range(1, 500000, ErrorMessage = "Between 1 and 500k")] @@ -83,7 +81,7 @@ namespace MileageTraker.Web.Models ValidationResult result = null; try { - dataService.ValidateOdometerChronology(VehicleId, EndOdometer, Date); + dataService.ValidateOdometerChronology(Vehicle.VehicleId, EndOdometer, Date); } catch (ChronologicalOrderException ex) { @@ -92,7 +90,7 @@ namespace MileageTraker.Web.Models if (result != null) yield return result; - var inactiveDate = dataService.GetVehicle(VehicleId).InactiveDate; + var inactiveDate = dataService.GetVehicle(Vehicle.VehicleId).InactiveDate; if (inactiveDate.HasValue && Date.Date > inactiveDate) { yield return new ValidationResult(