mirror of
https://github.com/hargata/lubelog.git
synced 2025-12-10 18:36:38 -06:00
Allow users to select any extra field as vehicle identifier.
This commit is contained in:
parent
e3dccf0182
commit
23f97ebd46
@ -75,7 +75,8 @@ namespace CarCareTracker.Controllers
|
|||||||
OdometerOptional = x.OdometerOptional,
|
OdometerOptional = x.OdometerOptional,
|
||||||
ExtraFields = x.ExtraFields,
|
ExtraFields = x.ExtraFields,
|
||||||
Tags = x.Tags,
|
Tags = x.Tags,
|
||||||
DashboardMetrics = x.DashboardMetrics
|
DashboardMetrics = x.DashboardMetrics,
|
||||||
|
VehicleIdentifier = x.VehicleIdentifier
|
||||||
};
|
};
|
||||||
//dashboard metrics
|
//dashboard metrics
|
||||||
if (x.DashboardMetrics.Any())
|
if (x.DashboardMetrics.Any())
|
||||||
@ -122,7 +123,7 @@ namespace CarCareTracker.Controllers
|
|||||||
if (vehicleReminders.Any())
|
if (vehicleReminders.Any())
|
||||||
{
|
{
|
||||||
var reminderUrgency = _reminderHelper.GetReminderRecordViewModels(vehicleReminders, 0, DateTime.Now);
|
var reminderUrgency = _reminderHelper.GetReminderRecordViewModels(vehicleReminders, 0, DateTime.Now);
|
||||||
reminderUrgency = reminderUrgency.Select(x => new ReminderRecordViewModel { Id = x.Id, Date = x.Date, Urgency = x.Urgency, Description = $"{vehicle.Year} {vehicle.Make} {vehicle.Model} #{vehicle.LicensePlate} - {x.Description}" }).ToList();
|
reminderUrgency = reminderUrgency.Select(x => new ReminderRecordViewModel { Id = x.Id, Date = x.Date, Urgency = x.Urgency, Description = $"{vehicle.Year} {vehicle.Make} {vehicle.Model} #{StaticHelper.GetVehicleIdentifier(vehicle)} - {x.Description}" }).ToList();
|
||||||
reminders.AddRange(reminderUrgency);
|
reminders.AddRange(reminderUrgency);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@ namespace CarCareTracker.Helper
|
|||||||
string emailSubject = $"Vehicle Reminders From LubeLogger - {DateTime.Now.ToShortDateString()}";
|
string emailSubject = $"Vehicle Reminders From LubeLogger - {DateTime.Now.ToShortDateString()}";
|
||||||
//construct html table.
|
//construct html table.
|
||||||
string emailBody = File.ReadAllText(emailTemplatePath);
|
string emailBody = File.ReadAllText(emailTemplatePath);
|
||||||
emailBody = emailBody.Replace("{VehicleInformation}", $"{vehicle.Year} {vehicle.Make} {vehicle.Model} #{vehicle.LicensePlate}");
|
emailBody = emailBody.Replace("{VehicleInformation}", $"{vehicle.Year} {vehicle.Make} {vehicle.Model} #{StaticHelper.GetVehicleIdentifier(vehicle)}");
|
||||||
string tableBody = "";
|
string tableBody = "";
|
||||||
foreach(ReminderRecordViewModel reminder in reminders)
|
foreach(ReminderRecordViewModel reminder in reminders)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -298,6 +298,40 @@ namespace CarCareTracker.Helper
|
|||||||
return "bi-file-bar-graph";
|
return "bi-file-bar-graph";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static string GetVehicleIdentifier(Vehicle vehicle)
|
||||||
|
{
|
||||||
|
if (vehicle.VehicleIdentifier == "LicensePlate")
|
||||||
|
{
|
||||||
|
return vehicle.LicensePlate;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (vehicle.ExtraFields.Any(x=>x.Name == vehicle.VehicleIdentifier))
|
||||||
|
{
|
||||||
|
return vehicle.ExtraFields?.FirstOrDefault(x=>x.Name == vehicle.VehicleIdentifier)?.Value;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static string GetVehicleIdentifier(VehicleViewModel vehicle)
|
||||||
|
{
|
||||||
|
if (vehicle.VehicleIdentifier == "LicensePlate")
|
||||||
|
{
|
||||||
|
return vehicle.LicensePlate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vehicle.ExtraFields.Any(x => x.Name == vehicle.VehicleIdentifier))
|
||||||
|
{
|
||||||
|
return vehicle.ExtraFields?.FirstOrDefault(x => x.Name == vehicle.VehicleIdentifier)?.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//CSV Write Methods
|
//CSV Write Methods
|
||||||
public static void WriteGenericRecordExportModel(CsvWriter _csv, IEnumerable<GenericRecordExportModel> genericRecords)
|
public static void WriteGenericRecordExportModel(CsvWriter _csv, IEnumerable<GenericRecordExportModel> genericRecords)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -28,5 +28,9 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string OdometerDifference { get; set; } = "0";
|
public string OdometerDifference { get; set; } = "0";
|
||||||
public List<DashboardMetric> DashboardMetrics { get; set; } = new List<DashboardMetric>();
|
public List<DashboardMetric> DashboardMetrics { get; set; } = new List<DashboardMetric>();
|
||||||
|
/// <summary>
|
||||||
|
/// Determines what is displayed in place of the license plate.
|
||||||
|
/// </summary>
|
||||||
|
public string VehicleIdentifier { get; set; } = "LicensePlate";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
public bool OdometerOptional { get; set; } = false;
|
public bool OdometerOptional { get; set; } = false;
|
||||||
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
public List<string> Tags { get; set; } = new List<string>();
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
|
public string VehicleIdentifier { get; set; } = "LicensePlate";
|
||||||
//Dashboard Metric Attributes
|
//Dashboard Metric Attributes
|
||||||
public List<DashboardMetric> DashboardMetrics { get; set; } = new List<DashboardMetric>();
|
public List<DashboardMetric> DashboardMetrics { get; set; } = new List<DashboardMetric>();
|
||||||
public int LastReportedMileage { get; set; }
|
public int LastReportedMileage { get; set; }
|
||||||
|
|||||||
@ -76,7 +76,7 @@
|
|||||||
<h5 class="card-title text-truncate garage-item-year" data-unit="@vehicle.Year">@($"{vehicle.Year}")</h5>
|
<h5 class="card-title text-truncate garage-item-year" data-unit="@vehicle.Year">@($"{vehicle.Year}")</h5>
|
||||||
<h5 class="card-title text-truncate">@($"{vehicle.Make}")</h5>
|
<h5 class="card-title text-truncate">@($"{vehicle.Make}")</h5>
|
||||||
<h5 class="card-title text-truncate">@($"{vehicle.Model}")</h5>
|
<h5 class="card-title text-truncate">@($"{vehicle.Model}")</h5>
|
||||||
<p class="card-text text-truncate">@vehicle.LicensePlate</p>
|
<p class="card-text text-truncate">@StaticHelper.GetVehicleIdentifier(vehicle)</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
}
|
}
|
||||||
@model Vehicle
|
@model Vehicle
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = $"{Model.Year} {Model.Make} {Model.Model} ({Model.LicensePlate})";
|
ViewData["Title"] = $"{Model.Year} {Model.Make} {Model.Model} ({StaticHelper.GetVehicleIdentifier(Model)})";
|
||||||
}
|
}
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<script src="~/js/vehicle.js?v=@StaticHelper.VersionNumber"></script>
|
<script src="~/js/vehicle.js?v=@StaticHelper.VersionNumber"></script>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
<button onclick="returnToGarage()" class="lubelogger-tab btn btn-secondary btn-md mt-1 mb-1"><i class="bi bi-arrow-left-square"></i></button>
|
<button onclick="returnToGarage()" class="lubelogger-tab btn btn-secondary btn-md mt-1 mb-1"><i class="bi bi-arrow-left-square"></i></button>
|
||||||
<h1 class="text-truncate display-4">@($"{Model.Year} {Model.Make} {Model.Model}")<small class="text-body-secondary">@($"(#{Model.LicensePlate})")</small></h1>
|
<h1 class="text-truncate display-4">@($"{Model.Year} {Model.Make} {Model.Model}")<small class="text-body-secondary">@($"(#{StaticHelper.GetVehicleIdentifier(Model)})")</small></h1>
|
||||||
<button onclick="editVehicle(@Model.Id)" class="lubelogger-tab btn btn-warning btn-md mt-1 mb-1"><i class="bi bi-pencil-square"></i></button>
|
<button onclick="editVehicle(@Model.Id)" class="lubelogger-tab btn btn-warning btn-md mt-1 mb-1"><i class="bi bi-pencil-square"></i></button>
|
||||||
<div class="lubelogger-navbar-button">
|
<div class="lubelogger-navbar-button">
|
||||||
<button type="button" class="btn btn-adaptive" onclick="showMobileNav()"><i class="bi bi-list lubelogger-menu-icon"></i></button>
|
<button type="button" class="btn btn-adaptive" onclick="showMobileNav()"><i class="bi bi-list lubelogger-menu-icon"></i></button>
|
||||||
|
|||||||
@ -21,9 +21,21 @@
|
|||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<span class="display-6">@($"{Model.VehicleData.Year} {Model.VehicleData.Make} {Model.VehicleData.Model}")</span>
|
<span class="display-6">@($"{Model.VehicleData.Year} {Model.VehicleData.Make} {Model.VehicleData.Model}")</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
@if (!string.IsNullOrWhiteSpace(Model.VehicleData.LicensePlate))
|
||||||
<span class="lead">@Model.VehicleData.LicensePlate</span>
|
{
|
||||||
</li>
|
<li class="list-group-item">
|
||||||
|
<span class="lead">@Model.VehicleData.LicensePlate</span>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
@foreach(ExtraField extraField in Model.VehicleData.ExtraFields)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(extraField.Value))
|
||||||
|
{
|
||||||
|
<li class="list-group-item">
|
||||||
|
<span class="lead">@($"{extraField.Name}: {extraField.Value}")</span>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
|
|||||||
@ -44,10 +44,18 @@
|
|||||||
<input type="text" id="@elementId" class="form-control @(field.IsRequired ? "extra-field-required" : "")" placeholder="@field.Name" value="@field.Value">
|
<input type="text" id="@elementId" class="form-control @(field.IsRequired ? "extra-field-required" : "")" placeholder="@field.Name" value="@field.Value">
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
<label for="inputIdentifier">@translator.Translate(userLanguage, "Identifier")</label>
|
||||||
|
<select class="form-select" id="inputIdentifier" )>
|
||||||
|
<!option value="LicensePlate" @(Model.VehicleIdentifier == "LicensePlate" ? "selected" : "")>@translator.Translate(userLanguage, "License Plate")</!option>
|
||||||
|
@foreach(ExtraField field in Model.ExtraFields)
|
||||||
|
{
|
||||||
|
<!option value="@field.Name" @(Model.VehicleIdentifier == field.Name ? "selected" : "")>@field.Name</!option>
|
||||||
|
}
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
<label for="inputFuelType">@translator.Translate(userLanguage, "Fuel Type")</label>
|
<label for="inputFuelType">@translator.Translate(userLanguage, "Fuel Type")</label>
|
||||||
<select class="form-select" onchange="checkCustomMonthInterval()" id="inputFuelType")>
|
<select class="form-select" id="inputFuelType")>
|
||||||
<!option value="Gasoline" @(!Model.IsDiesel && !Model.IsElectric ? "selected" : "")>@translator.Translate(userLanguage, "Gasoline")</!option>
|
<!option value="Gasoline" @(!Model.IsDiesel && !Model.IsElectric ? "selected" : "")>@translator.Translate(userLanguage, "Gasoline")</!option>
|
||||||
<!option value="Diesel" @(Model.IsDiesel ? "selected" : "")>@translator.Translate(userLanguage, "Diesel")</!option>
|
<!option value="Diesel" @(Model.IsDiesel ? "selected" : "")>@translator.Translate(userLanguage, "Diesel")</!option>
|
||||||
<!option value="Electric" @(Model.IsElectric ? "selected" : "")>@translator.Translate(userLanguage, "Electric")</!option>
|
<!option value="Electric" @(Model.IsElectric ? "selected" : "")>@translator.Translate(userLanguage, "Electric")</!option>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -49,6 +49,7 @@ function saveVehicle(isEdit) {
|
|||||||
var vehicleOdometerDifference = parseInt(globalParseFloat($("#inputOdometerDifference").val())).toString();
|
var vehicleOdometerDifference = parseInt(globalParseFloat($("#inputOdometerDifference").val())).toString();
|
||||||
var vehiclePurchasePrice = $("#inputPurchasePrice").val();
|
var vehiclePurchasePrice = $("#inputPurchasePrice").val();
|
||||||
var vehicleSoldPrice = $("#inputSoldPrice").val();
|
var vehicleSoldPrice = $("#inputSoldPrice").val();
|
||||||
|
var vehicleIdentifier = $("#inputIdentifier").val();
|
||||||
var vehicleDashboardMetrics = $("#collapseMetricInfo :checked").map(function () {
|
var vehicleDashboardMetrics = $("#collapseMetricInfo :checked").map(function () {
|
||||||
return this.value;
|
return this.value;
|
||||||
}).toArray();
|
}).toArray();
|
||||||
@ -76,12 +77,26 @@ function saveVehicle(isEdit) {
|
|||||||
} else {
|
} else {
|
||||||
$("#inputModel").removeClass("is-invalid");
|
$("#inputModel").removeClass("is-invalid");
|
||||||
}
|
}
|
||||||
if (vehicleLicensePlate.trim() == '') {
|
if (vehicleIdentifier == "LicensePlate") {
|
||||||
hasError = true;
|
if (vehicleLicensePlate.trim() == '') {
|
||||||
$("#inputLicensePlate").addClass("is-invalid");
|
hasError = true;
|
||||||
|
$("#inputLicensePlate").addClass("is-invalid");
|
||||||
|
} else {
|
||||||
|
$("#inputLicensePlate").removeClass("is-invalid");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$("#inputLicensePlate").removeClass("is-invalid");
|
$("#inputLicensePlate").removeClass("is-invalid");
|
||||||
|
//check if extra fields have value.
|
||||||
|
var vehicleIdentifierExtraField = extraFields.extraFields.filter(x => x.name == vehicleIdentifier);
|
||||||
|
//check if extra field exists.
|
||||||
|
if (vehicleIdentifierExtraField.length == 0) {
|
||||||
|
$(".modal.fade.show").find(`.extra-field [placeholder='${vehicleIdentifier}']`).addClass("is-invalid");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
$(".modal.fade.show").find(`.extra-field [placeholder='${vehicleIdentifier}']`).removeClass("is-invalid");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleHasOdometerAdjustment) {
|
if (vehicleHasOdometerAdjustment) {
|
||||||
//validate odometer adjustments
|
//validate odometer adjustments
|
||||||
//validate multiplier
|
//validate multiplier
|
||||||
@ -136,7 +151,8 @@ function saveVehicle(isEdit) {
|
|||||||
odometerDifference: vehicleOdometerDifference,
|
odometerDifference: vehicleOdometerDifference,
|
||||||
purchasePrice: vehiclePurchasePrice,
|
purchasePrice: vehiclePurchasePrice,
|
||||||
soldPrice: vehicleSoldPrice,
|
soldPrice: vehicleSoldPrice,
|
||||||
dashboardMetrics: vehicleDashboardMetrics
|
dashboardMetrics: vehicleDashboardMetrics,
|
||||||
|
vehicleIdentifier: vehicleIdentifier
|
||||||
}, function (data) {
|
}, function (data) {
|
||||||
if (data) {
|
if (data) {
|
||||||
if (!isEdit) {
|
if (!isEdit) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user