diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 429e8d2..1199e35 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -20,6 +20,8 @@ namespace CarCareTracker.Controllers private readonly ICollisionRecordDataAccess _collisionRecordDataAccess; private readonly ITaxRecordDataAccess _taxRecordDataAccess; private readonly IWebHostEnvironment _webEnv; + private readonly bool _useDescending; + private readonly IConfiguration _config; private readonly IFileHelper _fileHelper; public VehicleController(ILogger logger, @@ -30,7 +32,8 @@ namespace CarCareTracker.Controllers IGasRecordDataAccess gasRecordDataAccess, ICollisionRecordDataAccess collisionRecordDataAccess, ITaxRecordDataAccess taxRecordDataAccess, - IWebHostEnvironment webEnv) + IWebHostEnvironment webEnv, + IConfiguration config) { _logger = logger; _dataAccess = dataAccess; @@ -41,6 +44,8 @@ namespace CarCareTracker.Controllers _collisionRecordDataAccess = collisionRecordDataAccess; _taxRecordDataAccess = taxRecordDataAccess; _webEnv = webEnv; + _config = config; + _useDescending = bool.Parse(config[nameof(UserConfig.UseDescending)]); } [HttpGet] public IActionResult Index(int vehicleId) @@ -168,6 +173,10 @@ namespace CarCareTracker.Controllers public IActionResult GetGasRecordsByVehicleId(int vehicleId) { var result = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); + //need it in ascending order to perform computation. + result = result.OrderBy(x => x.Date).ThenBy(x => x.Mileage).ToList(); + //check if the user uses MPG or Liters per 100km. + bool useMPG = bool.Parse(_config[nameof(UserConfig.UseMPG)]); var computedResults = new List(); int previousMileage = 0; //perform computation. @@ -186,7 +195,7 @@ namespace CarCareTracker.Controllers Gallons = currentObject.Gallons, Cost = currentObject.Cost, DeltaMileage = deltaMileage, - MilesPerGallon = deltaMileage / currentObject.Gallons, + MilesPerGallon = useMPG ? (deltaMileage / currentObject.Gallons) : 100 / (deltaMileage / currentObject.Gallons), CostPerGallon = (currentObject.Cost / currentObject.Gallons) }); } else @@ -206,6 +215,10 @@ namespace CarCareTracker.Controllers } previousMileage = result[i].Mileage; } + if (_useDescending) + { + computedResults = computedResults.OrderByDescending(x => DateTime.Parse(x.Date)).ThenByDescending(x => x.Mileage).ToList(); + } return PartialView("_Gas", computedResults); } [HttpPost] @@ -248,6 +261,14 @@ namespace CarCareTracker.Controllers public IActionResult GetServiceRecordsByVehicleId(int vehicleId) { var result = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); + if (_useDescending) + { + result = result.OrderByDescending(x => x.Date).ThenByDescending(x => x.Mileage).ToList(); + } + else + { + result = result.OrderBy(x => x.Date).ThenBy(x => x.Mileage).ToList(); + } return PartialView("_ServiceRecords", result); } [HttpPost] @@ -291,6 +312,14 @@ namespace CarCareTracker.Controllers public IActionResult GetCollisionRecordsByVehicleId(int vehicleId) { var result = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); + if (_useDescending) + { + result = result.OrderByDescending(x => x.Date).ThenByDescending(x => x.Mileage).ToList(); + } + else + { + result = result.OrderBy(x => x.Date).ThenBy(x => x.Mileage).ToList(); + } return PartialView("_CollisionRecords", result); } [HttpPost] @@ -336,6 +365,14 @@ namespace CarCareTracker.Controllers public IActionResult GetTaxRecordsByVehicleId(int vehicleId) { var result = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); + if (_useDescending) + { + result = result.OrderByDescending(x => x.Date).ToList(); + } + else + { + result = result.OrderBy(x => x.Date).ToList(); + } return PartialView("_TaxRecords", result); } [HttpPost] @@ -382,24 +419,18 @@ namespace CarCareTracker.Controllers return PartialView("_Report"); } [HttpGet] - public IActionResult GetCostMakeUpForVehicle(int vehicleId, string startDate = "", string endDate = "") + public IActionResult GetCostMakeUpForVehicle(int vehicleId, int year = 0) { var serviceRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); - if (!string.IsNullOrWhiteSpace(startDate) && - !string.IsNullOrWhiteSpace(endDate) && - DateTime.TryParse(startDate, out DateTime parsedStartDate) && - DateTime.TryParse(endDate, out DateTime parsedEndDate) - ) + if (year != default) { - parsedEndDate = parsedEndDate.AddDays(1).AddSeconds(-1); - //if start and end dates are provided then we need to filter the data down. - serviceRecords.RemoveAll(x => x.Date < parsedStartDate || x.Date > parsedEndDate); - gasRecords.RemoveAll(x => x.Date < parsedStartDate || x.Date > parsedEndDate); - collisionRecords.RemoveAll(x => x.Date < parsedStartDate || x.Date > parsedEndDate); - taxRecords.RemoveAll(x => x.Date < parsedStartDate || x.Date > parsedEndDate); + serviceRecords.RemoveAll(x => x.Date.Year != year); + gasRecords.RemoveAll(x => x.Date.Year != year); + collisionRecords.RemoveAll(x => x.Date.Year != year); + taxRecords.RemoveAll(x => x.Date.Year != year); } var viewModel = new CostMakeUpForVehicle { diff --git a/External/Implementations/CollisionRecordDataAccess.cs b/External/Implementations/CollisionRecordDataAccess.cs index 385c3aa..eb4366f 100644 --- a/External/Implementations/CollisionRecordDataAccess.cs +++ b/External/Implementations/CollisionRecordDataAccess.cs @@ -13,7 +13,7 @@ namespace CarCareTracker.External.Implementations using (var db = new LiteDatabase(dbName)) { var table = db.GetCollection(tableName); - var collisionRecords = table.Find(Query.EQ(nameof(CollisionRecord.VehicleId), vehicleId)).OrderBy(x => x.Date).ThenBy(x=>x.Mileage); + var collisionRecords = table.Find(Query.EQ(nameof(CollisionRecord.VehicleId), vehicleId)); return collisionRecords.ToList() ?? new List(); }; } diff --git a/External/Implementations/GasRecordDataAccess.cs b/External/Implementations/GasRecordDataAccess.cs index 4a815f5..dc1e3ac 100644 --- a/External/Implementations/GasRecordDataAccess.cs +++ b/External/Implementations/GasRecordDataAccess.cs @@ -13,7 +13,7 @@ namespace CarCareTracker.External.Implementations using (var db = new LiteDatabase(dbName)) { var table = db.GetCollection(tableName); - var gasRecords = table.Find(Query.EQ(nameof(GasRecord.VehicleId), vehicleId)).OrderBy(x => x.Date).ThenBy(x=>x.Mileage); + var gasRecords = table.Find(Query.EQ(nameof(GasRecord.VehicleId), vehicleId)); return gasRecords.ToList() ?? new List(); }; } diff --git a/External/Implementations/ServiceRecordDataAccess.cs b/External/Implementations/ServiceRecordDataAccess.cs index bc979e0..146c3fe 100644 --- a/External/Implementations/ServiceRecordDataAccess.cs +++ b/External/Implementations/ServiceRecordDataAccess.cs @@ -13,7 +13,7 @@ namespace CarCareTracker.External.Implementations using (var db = new LiteDatabase(dbName)) { var table = db.GetCollection(tableName); - var serviceRecords = table.Find(Query.EQ(nameof(ServiceRecord.VehicleId), vehicleId)).OrderBy(x => x.Date).ThenBy(x => x.Mileage); + var serviceRecords = table.Find(Query.EQ(nameof(ServiceRecord.VehicleId), vehicleId)); return serviceRecords.ToList() ?? new List(); }; } diff --git a/External/Implementations/TaxRecordDataAccess.cs b/External/Implementations/TaxRecordDataAccess.cs index e791140..90db232 100644 --- a/External/Implementations/TaxRecordDataAccess.cs +++ b/External/Implementations/TaxRecordDataAccess.cs @@ -13,7 +13,7 @@ namespace CarCareTracker.External.Implementations using (var db = new LiteDatabase(dbName)) { var table = db.GetCollection(tableName); - var taxRecords = table.Find(Query.EQ(nameof(TaxRecord.VehicleId), vehicleId)).OrderBy(x => x.Date); + var taxRecords = table.Find(Query.EQ(nameof(TaxRecord.VehicleId), vehicleId)); return taxRecords.ToList() ?? new List(); }; } diff --git a/Middleware/Authen.cs b/Middleware/Authen.cs index eb9d10d..d4bc263 100644 --- a/Middleware/Authen.cs +++ b/Middleware/Authen.cs @@ -36,8 +36,14 @@ namespace CarCareTracker.Middleware return AuthenticateResult.Success(ticket); } else { + //auth is enabled by user, we will have to authenticate the user via a ticket. return AuthenticateResult.Fail("Invalid credentials"); } } + protected override Task HandleChallengeAsync(AuthenticationProperties properties) + { + Response.Redirect("/Login/Index"); + return Task.CompletedTask; + } } } diff --git a/Views/Vehicle/_Gas.cshtml b/Views/Vehicle/_Gas.cshtml index e27af1e..2029875 100644 --- a/Views/Vehicle/_Gas.cshtml +++ b/Views/Vehicle/_Gas.cshtml @@ -1,6 +1,7 @@ @inject IConfiguration Configuration @{ - var enableCsvImports = bool.Parse(Configuration["EnableCsvImports"]); + var enableCsvImports = bool.Parse(Configuration[nameof(UserConfig.EnableCsvImports)]); + var useMPG = bool.Parse(Configuration[nameof(UserConfig.UseMPG)]); } @model List
@@ -38,9 +39,9 @@ Date Refueled - Odometer - Consumption - Fuel Economy + Odometer(@(useMPG ? "mi." : "km")) + Consumption(@(useMPG ? "gal" : "l")) + Fuel Economy(@(useMPG ? "mpg" : "l/100km")) Cost Unit Cost @@ -54,7 +55,7 @@ @gasRecord.Gallons.ToString("F") @gasRecord.MilesPerGallon.ToString("F") @gasRecord.Cost.ToString("C") - @gasRecord.CostPerGallon.ToString("F") + @gasRecord.CostPerGallon.ToString("C") } diff --git a/Views/Vehicle/_GasModal.cshtml b/Views/Vehicle/_GasModal.cshtml index e68b7bc..6904c00 100644 --- a/Views/Vehicle/_GasModal.cshtml +++ b/Views/Vehicle/_GasModal.cshtml @@ -1,4 +1,8 @@ -@model GasRecordInput +@inject IConfiguration Configuration +@{ + var useMPG = bool.Parse(Configuration[nameof(UserConfig.UseMPG)]); +} +@model GasRecordInput - + - +