From 4575cf338fc3a1892eda212066df00d4964f0164 Mon Sep 17 00:00:00 2001 From: "DESKTOP-T0O5CDB\\DESK-555BD" Date: Mon, 8 Jan 2024 17:47:11 -0700 Subject: [PATCH 1/3] Added upgrades section backend. --- Controllers/VehicleController.cs | 56 ++++++++++++++++++ .../UpgradeRecordDataAccess.cs | 57 +++++++++++++++++++ .../Interfaces/IUpgradeRecordDataAccess.cs | 13 +++++ Models/Upgrades/UpgradeRecord.cs | 14 +++++ Models/Upgrades/UpgradeReportInput.cs | 15 +++++ Program.cs | 1 + 6 files changed, 156 insertions(+) create mode 100644 External/Implementations/UpgradeRecordDataAccess.cs create mode 100644 External/Interfaces/IUpgradeRecordDataAccess.cs create mode 100644 Models/Upgrades/UpgradeRecord.cs create mode 100644 Models/Upgrades/UpgradeReportInput.cs diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 6833f12..ed503c2 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)]); @@ -739,5 +742,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/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")) From 0ae28d436bf0a17749fe3f459a694b910ffb3eb4 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Mon, 8 Jan 2024 18:33:21 -0700 Subject: [PATCH 2/3] added upgrade tab functionality. --- Controllers/VehicleController.cs | 11 +- Models/Report/CostMakeUpForVehicle.cs | 1 + Views/Vehicle/Index.cshtml | 5 + Views/Vehicle/_CostMakeUpReport.cshtml | 12 ++- Views/Vehicle/_UpgradeRecordModal.cshtml | 84 +++++++++++++++ Views/Vehicle/_UpgradeRecords.cshtml | 66 ++++++++++++ wwwroot/js/upgraderecord.js | 124 +++++++++++++++++++++++ wwwroot/js/vehicle.js | 16 ++- 8 files changed, 312 insertions(+), 7 deletions(-) create mode 100644 Views/Vehicle/_UpgradeRecordModal.cshtml create mode 100644 Views/Vehicle/_UpgradeRecords.cshtml create mode 100644 wwwroot/js/upgraderecord.js diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index ed503c2..a02e82f 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -99,6 +99,7 @@ namespace CarCareTracker.Controllers _taxRecordDataAccess.DeleteAllTaxRecordsByVehicleId(vehicleId) && _noteDataAccess.DeleteNoteByVehicleId(vehicleId) && _reminderRecordDataAccess.DeleteAllReminderRecordsByVehicleId(vehicleId) && + _upgradeRecordDataAccess.DeleteAllUpgradeRecordsByVehicleId(vehicleId) && _dataAccess.DeleteVehicle(vehicleId); return Json(result); } @@ -544,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); } @@ -594,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) 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/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 @@
+