diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 6833f12..a02e82f 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -22,6 +22,7 @@ namespace CarCareTracker.Controllers private readonly ICollisionRecordDataAccess _collisionRecordDataAccess; private readonly ITaxRecordDataAccess _taxRecordDataAccess; private readonly IReminderRecordDataAccess _reminderRecordDataAccess; + private readonly IUpgradeRecordDataAccess _upgradeRecordDataAccess; private readonly IWebHostEnvironment _webEnv; private readonly bool _useDescending; private readonly IConfiguration _config; @@ -36,6 +37,7 @@ namespace CarCareTracker.Controllers ICollisionRecordDataAccess collisionRecordDataAccess, ITaxRecordDataAccess taxRecordDataAccess, IReminderRecordDataAccess reminderRecordDataAccess, + IUpgradeRecordDataAccess upgradeRecordDataAccess, IWebHostEnvironment webEnv, IConfiguration config) { @@ -48,6 +50,7 @@ namespace CarCareTracker.Controllers _collisionRecordDataAccess = collisionRecordDataAccess; _taxRecordDataAccess = taxRecordDataAccess; _reminderRecordDataAccess = reminderRecordDataAccess; + _upgradeRecordDataAccess = upgradeRecordDataAccess; _webEnv = webEnv; _config = config; _useDescending = bool.Parse(config[nameof(UserConfig.UseDescending)]); @@ -96,6 +99,7 @@ namespace CarCareTracker.Controllers _taxRecordDataAccess.DeleteAllTaxRecordsByVehicleId(vehicleId) && _noteDataAccess.DeleteNoteByVehicleId(vehicleId) && _reminderRecordDataAccess.DeleteAllReminderRecordsByVehicleId(vehicleId) && + _upgradeRecordDataAccess.DeleteAllUpgradeRecordsByVehicleId(vehicleId) && _dataAccess.DeleteVehicle(vehicleId); return Json(result); } @@ -541,19 +545,22 @@ namespace CarCareTracker.Controllers var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); + var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); if (year != default) { 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); + upgradeRecords.RemoveAll(x => x.Date.Year != year); } var viewModel = new CostMakeUpForVehicle { ServiceRecordSum = serviceRecords.Sum(x => x.Cost), GasRecordSum = gasRecords.Sum(x => x.Cost), CollisionRecordSum = collisionRecords.Sum(x => x.Cost), - TaxRecordSum = taxRecords.Sum(x => x.Cost) + TaxRecordSum = taxRecords.Sum(x => x.Cost), + UpgradeRecordSum = upgradeRecords.Sum(x=>x.Cost) }; return PartialView("_CostMakeUpReport", viewModel); } @@ -591,6 +598,11 @@ namespace CarCareTracker.Controllers { numbersArray.Add(gasRecords.Max(x => x.Mileage)); } + var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); + if (upgradeRecords.Any()) + { + numbersArray.Add(upgradeRecords.Max(x => x.Mileage)); + } return numbersArray.Any() ? numbersArray.Max() : 0; } private List GetRemindersAndUrgency(int vehicleId) @@ -739,5 +751,58 @@ namespace CarCareTracker.Controllers return Json(result); } #endregion + #region "Upgrade Records" + [HttpGet] + public IActionResult GetUpgradeRecordsByVehicleId(int vehicleId) + { + var result = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(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("_UpgradeRecords", result); + } + [HttpPost] + public IActionResult SaveUpgradeRecordToVehicleId(UpgradeRecordInput upgradeRecord) + { + //move files from temp. + upgradeRecord.Files = upgradeRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList(); + var result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord.ToUpgradeRecord()); + return Json(result); + } + [HttpGet] + public IActionResult GetAddUpgradeRecordPartialView() + { + return PartialView("_UpgradeRecordModal", new UpgradeRecordInput()); + } + [HttpGet] + public IActionResult GetUpgradeRecordForEditById(int upgradeRecordId) + { + var result = _upgradeRecordDataAccess.GetUpgradeRecordById(upgradeRecordId); + //convert to Input object. + var convertedResult = new UpgradeRecordInput + { + Id = result.Id, + Cost = result.Cost, + Date = result.Date.ToShortDateString(), + Description = result.Description, + Mileage = result.Mileage, + Notes = result.Notes, + VehicleId = result.VehicleId, + Files = result.Files + }; + return PartialView("_UpgradeRecordModal", convertedResult); + } + [HttpPost] + public IActionResult DeleteUpgradeRecordById(int upgradeRecordId) + { + var result = _upgradeRecordDataAccess.DeleteUpgradeRecordById(upgradeRecordId); + return Json(result); + } + #endregion } } diff --git a/External/Implementations/UpgradeRecordDataAccess.cs b/External/Implementations/UpgradeRecordDataAccess.cs new file mode 100644 index 0000000..4b02d3f --- /dev/null +++ b/External/Implementations/UpgradeRecordDataAccess.cs @@ -0,0 +1,57 @@ +using CarCareTracker.External.Interfaces; +using CarCareTracker.Helper; +using CarCareTracker.Models; +using LiteDB; + +namespace CarCareTracker.External.Implementations +{ + public class UpgradeRecordDataAccess : IUpgradeRecordDataAccess + { + private static string dbName = StaticHelper.DbName; + private static string tableName = "upgraderecords"; + public List GetUpgradeRecordsByVehicleId(int vehicleId) + { + using (var db = new LiteDatabase(dbName)) + { + var table = db.GetCollection(tableName); + var upgradeRecords = table.Find(Query.EQ(nameof(UpgradeRecord.VehicleId), vehicleId)); + return upgradeRecords.ToList() ?? new List(); + }; + } + public UpgradeRecord GetUpgradeRecordById(int upgradeRecordId) + { + using (var db = new LiteDatabase(dbName)) + { + var table = db.GetCollection(tableName); + return table.FindById(upgradeRecordId); + }; + } + public bool DeleteUpgradeRecordById(int upgradeRecordId) + { + using (var db = new LiteDatabase(dbName)) + { + var table = db.GetCollection(tableName); + table.Delete(upgradeRecordId); + return true; + }; + } + public bool SaveUpgradeRecordToVehicle(UpgradeRecord upgradeRecord) + { + using (var db = new LiteDatabase(dbName)) + { + var table = db.GetCollection(tableName); + table.Upsert(upgradeRecord); + return true; + }; + } + public bool DeleteAllUpgradeRecordsByVehicleId(int vehicleId) + { + using (var db = new LiteDatabase(dbName)) + { + var table = db.GetCollection(tableName); + var upgradeRecords = table.DeleteMany(Query.EQ(nameof(UpgradeRecord.VehicleId), vehicleId)); + return true; + }; + } + } +} diff --git a/External/Interfaces/IUpgradeRecordDataAccess.cs b/External/Interfaces/IUpgradeRecordDataAccess.cs new file mode 100644 index 0000000..2b4e0a8 --- /dev/null +++ b/External/Interfaces/IUpgradeRecordDataAccess.cs @@ -0,0 +1,13 @@ +using CarCareTracker.Models; + +namespace CarCareTracker.External.Interfaces +{ + public interface IUpgradeRecordDataAccess + { + public List GetUpgradeRecordsByVehicleId(int vehicleId); + public UpgradeRecord GetUpgradeRecordById(int upgradeRecordId); + public bool DeleteUpgradeRecordById(int upgradeRecordId); + public bool SaveUpgradeRecordToVehicle(UpgradeRecord upgradeRecord); + public bool DeleteAllUpgradeRecordsByVehicleId(int vehicleId); + } +} diff --git a/Models/Report/CostMakeUpForVehicle.cs b/Models/Report/CostMakeUpForVehicle.cs index 898bfc2..a7846f0 100644 --- a/Models/Report/CostMakeUpForVehicle.cs +++ b/Models/Report/CostMakeUpForVehicle.cs @@ -6,5 +6,6 @@ public decimal GasRecordSum { get; set; } public decimal TaxRecordSum { get; set; } public decimal CollisionRecordSum { get; set; } + public decimal UpgradeRecordSum { get; set; } } } diff --git a/Models/Upgrades/UpgradeRecord.cs b/Models/Upgrades/UpgradeRecord.cs new file mode 100644 index 0000000..ef9ffe3 --- /dev/null +++ b/Models/Upgrades/UpgradeRecord.cs @@ -0,0 +1,14 @@ +namespace CarCareTracker.Models +{ + public class UpgradeRecord + { + public int Id { get; set; } + public int VehicleId { get; set; } + public DateTime Date { get; set; } + public int Mileage { get; set; } + public string Description { get; set; } + public decimal Cost { get; set; } + public string Notes { get; set; } + public List Files { get; set; } = new List(); + } +} diff --git a/Models/Upgrades/UpgradeReportInput.cs b/Models/Upgrades/UpgradeReportInput.cs new file mode 100644 index 0000000..a59abc6 --- /dev/null +++ b/Models/Upgrades/UpgradeReportInput.cs @@ -0,0 +1,15 @@ +namespace CarCareTracker.Models +{ + public class UpgradeRecordInput + { + public int Id { get; set; } + public int VehicleId { get; set; } + public string Date { get; set; } + public int Mileage { get; set; } + public string Description { get; set; } + public decimal Cost { get; set; } + public string Notes { get; set; } + public List Files { get; set; } = new List(); + public UpgradeRecord ToUpgradeRecord() { return new UpgradeRecord { Id = Id, VehicleId = VehicleId, Date = DateTime.Parse(Date), Cost = Cost, Mileage = Mileage, Description = Description, Notes = Notes, Files = Files }; } + } +} diff --git a/Program.cs b/Program.cs index 307c0e8..c18eb22 100644 --- a/Program.cs +++ b/Program.cs @@ -16,6 +16,7 @@ builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); if (!Directory.Exists("data")) diff --git a/Views/Vehicle/Index.cshtml b/Views/Vehicle/Index.cshtml index d298908..cb81220 100644 --- a/Views/Vehicle/Index.cshtml +++ b/Views/Vehicle/Index.cshtml @@ -9,6 +9,7 @@ + }
@@ -27,6 +28,9 @@ + @@ -71,6 +75,7 @@
+