diff --git a/CarCareTracker.csproj b/CarCareTracker.csproj
index 21a556a..29f0700 100644
--- a/CarCareTracker.csproj
+++ b/CarCareTracker.csproj
@@ -6,6 +6,10 @@
enable
+
+
+
+
diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs
index aed9d7c..c26b764 100644
--- a/Controllers/HomeController.cs
+++ b/Controllers/HomeController.cs
@@ -78,7 +78,7 @@ namespace CarCareTracker.Controllers
}
}
//save vehicle.
- var result = _dataAccess.AddVehicle(newVehicle);
+ var result = _dataAccess.SaveVehicle(newVehicle);
RedirectToAction("Index");
}
catch(Exception ex)
diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs
index 5a69b2b..6903f2f 100644
--- a/Controllers/VehicleController.cs
+++ b/Controllers/VehicleController.cs
@@ -7,6 +7,7 @@ using static System.Net.Mime.MediaTypeNames;
using System.Drawing;
using System.Linq.Expressions;
using Microsoft.Extensions.Logging;
+using CarCareTracker.External.Implementations;
namespace CarCareTracker.Controllers
{
@@ -15,13 +16,15 @@ namespace CarCareTracker.Controllers
private readonly ILogger _logger;
private readonly IVehicleDataAccess _dataAccess;
private readonly INoteDataAccess _noteDataAccess;
+ private readonly IServiceRecordDataAccess _serviceRecordDataAccess;
private readonly IWebHostEnvironment _webEnv;
- public VehicleController(ILogger logger, IVehicleDataAccess dataAccess, INoteDataAccess noteDataAccess, IWebHostEnvironment webEnv)
+ public VehicleController(ILogger logger, IVehicleDataAccess dataAccess, INoteDataAccess noteDataAccess, IServiceRecordDataAccess serviceRecordDataAccess, IWebHostEnvironment webEnv)
{
_logger = logger;
_dataAccess = dataAccess;
_noteDataAccess = noteDataAccess;
+ _serviceRecordDataAccess = serviceRecordDataAccess;
_webEnv = webEnv;
}
[HttpGet]
@@ -58,5 +61,17 @@ namespace CarCareTracker.Controllers
}
return Json("");
}
+ [HttpGet]
+ public IActionResult GetServiceRecordsByVehicleId(int vehicleId)
+ {
+ var result = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId);
+ return PartialView("_ServiceRecords", result);
+ }
+ [HttpPost]
+ public IActionResult SaveServiceRecordToVehicleId(ServiceRecordInput serviceRecord)
+ {
+ var result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord.ToServiceRecord());
+ return Json(result);
+ }
}
}
diff --git a/External/Implementations/NoteDataAccess.cs b/External/Implementations/NoteDataAccess.cs
index e6edb33..1383e0d 100644
--- a/External/Implementations/NoteDataAccess.cs
+++ b/External/Implementations/NoteDataAccess.cs
@@ -23,8 +23,8 @@ namespace CarCareTracker.External.Implementations
{
var table = db.GetCollection(tableName);
table.Upsert(note);
+ return true;
};
- return true;
}
}
}
diff --git a/External/Implementations/ServiceRecordDataAccess.cs b/External/Implementations/ServiceRecordDataAccess.cs
new file mode 100644
index 0000000..fbc2339
--- /dev/null
+++ b/External/Implementations/ServiceRecordDataAccess.cs
@@ -0,0 +1,30 @@
+using CarCareTracker.External.Interfaces;
+using CarCareTracker.Models;
+using LiteDB;
+
+namespace CarCareTracker.External.Implementations
+{
+ public class ServiceRecordDataAccess: IServiceRecordDataAccess
+ {
+ private static string dbName = "cartracker.db";
+ private static string tableName = "servicerecords";
+ public List GetServiceRecordsByVehicleId(int vehicleId)
+ {
+ 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);
+ return serviceRecords.ToList() ?? new List();
+ };
+ }
+ public bool SaveServiceRecordToVehicle(ServiceRecord serviceRecord)
+ {
+ using (var db = new LiteDatabase(dbName))
+ {
+ var table = db.GetCollection(tableName);
+ table.Upsert(serviceRecord);
+ return true;
+ };
+ }
+ }
+}
diff --git a/External/Implementations/VehicleDataAccess.cs b/External/Implementations/VehicleDataAccess.cs
index 2416def..9a008f8 100644
--- a/External/Implementations/VehicleDataAccess.cs
+++ b/External/Implementations/VehicleDataAccess.cs
@@ -8,23 +8,22 @@ namespace CarCareTracker.External.Implementations
{
private static string dbName = "cartracker.db";
private static string tableName = "vehicles";
- public bool AddVehicle(Vehicle newVehicle)
+ public bool SaveVehicle(Vehicle vehicle)
{
using (var db = new LiteDatabase(dbName))
{
var table = db.GetCollection(tableName);
- table.Insert(newVehicle);
+ table.Upsert(vehicle);
+ return true;
};
- return true;
}
public bool DeleteVehicle(int vehicleId)
{
using (var db = new LiteDatabase(dbName))
{
var table = db.GetCollection(tableName);
- table.Delete(vehicleId);
+ return table.Delete(vehicleId);
};
- return true;
}
public List GetVehicles()
{
diff --git a/External/Interfaces/IServiceRecordDataAccess.cs b/External/Interfaces/IServiceRecordDataAccess.cs
new file mode 100644
index 0000000..a2770cf
--- /dev/null
+++ b/External/Interfaces/IServiceRecordDataAccess.cs
@@ -0,0 +1,10 @@
+using CarCareTracker.Models;
+
+namespace CarCareTracker.External.Interfaces
+{
+ public interface IServiceRecordDataAccess
+ {
+ public List GetServiceRecordsByVehicleId(int vehicleId);
+ public bool SaveServiceRecordToVehicle(ServiceRecord serviceRecord);
+ }
+}
diff --git a/External/Interfaces/IVehicleDataAccess.cs b/External/Interfaces/IVehicleDataAccess.cs
index e645078..f54118f 100644
--- a/External/Interfaces/IVehicleDataAccess.cs
+++ b/External/Interfaces/IVehicleDataAccess.cs
@@ -4,7 +4,7 @@ namespace CarCareTracker.External.Interfaces
{
public interface IVehicleDataAccess
{
- public bool AddVehicle(Vehicle newVehicle);
+ public bool SaveVehicle(Vehicle vehicle);
public bool DeleteVehicle(int vehicleId);
public List GetVehicles();
public Vehicle GetVehicleById(int vehicleId);
diff --git a/Models/ServiceRecord.cs b/Models/ServiceRecord.cs
new file mode 100644
index 0000000..2a80360
--- /dev/null
+++ b/Models/ServiceRecord.cs
@@ -0,0 +1,14 @@
+namespace CarCareTracker.Models
+{
+ public class ServiceRecordInput
+ {
+ 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 ServiceRecord ToServiceRecord() { return new ServiceRecord { Id = Id, VehicleId = VehicleId, Date = DateTime.Parse(Date), Cost = Cost, Mileage = Mileage, Description = Description, Notes = Notes }; }
+ }
+}
diff --git a/Models/ServiceRecordInput.cs b/Models/ServiceRecordInput.cs
new file mode 100644
index 0000000..732f973
--- /dev/null
+++ b/Models/ServiceRecordInput.cs
@@ -0,0 +1,13 @@
+namespace CarCareTracker.Models
+{
+ public class ServiceRecord
+ {
+ 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; }
+ }
+}
diff --git a/Program.cs b/Program.cs
index b524b87..e95a769 100644
--- a/Program.cs
+++ b/Program.cs
@@ -7,6 +7,7 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
+builder.Services.AddSingleton();
var app = builder.Build();
diff --git a/Views/Home/Index.cshtml b/Views/Home/Index.cshtml
index be5c76a..38e9cea 100644
--- a/Views/Home/Index.cshtml
+++ b/Views/Home/Index.cshtml
@@ -3,7 +3,7 @@
}
@model VehicleInputModel
@section Scripts{
-
+
}
@if (Model is not null && Model.Errors.Any())
{
diff --git a/Views/Shared/_Layout.cshtml b/Views/Shared/_Layout.cshtml
index a846d79..6c78acc 100644
--- a/Views/Shared/_Layout.cshtml
+++ b/Views/Shared/_Layout.cshtml
@@ -6,7 +6,9 @@
@ViewData["Title"] - CarCareTracker
+
+
@@ -22,7 +24,10 @@
+
+
+
@await RenderSectionAsync("Scripts", required: false)