odometer to trips improvement.
This commit is contained in:
@@ -27,6 +27,7 @@ namespace CarCareTracker.Controllers
|
|||||||
private readonly IReminderHelper _reminderHelper;
|
private readonly IReminderHelper _reminderHelper;
|
||||||
private readonly IGasHelper _gasHelper;
|
private readonly IGasHelper _gasHelper;
|
||||||
private readonly IUserLogic _userLogic;
|
private readonly IUserLogic _userLogic;
|
||||||
|
private readonly IOdometerLogic _odometerLogic;
|
||||||
private readonly IFileHelper _fileHelper;
|
private readonly IFileHelper _fileHelper;
|
||||||
private readonly IMailHelper _mailHelper;
|
private readonly IMailHelper _mailHelper;
|
||||||
private readonly IConfigHelper _config;
|
private readonly IConfigHelper _config;
|
||||||
@@ -46,7 +47,8 @@ namespace CarCareTracker.Controllers
|
|||||||
IMailHelper mailHelper,
|
IMailHelper mailHelper,
|
||||||
IFileHelper fileHelper,
|
IFileHelper fileHelper,
|
||||||
IConfigHelper config,
|
IConfigHelper config,
|
||||||
IUserLogic userLogic)
|
IUserLogic userLogic,
|
||||||
|
IOdometerLogic odometerLogic)
|
||||||
{
|
{
|
||||||
_dataAccess = dataAccess;
|
_dataAccess = dataAccess;
|
||||||
_noteDataAccess = noteDataAccess;
|
_noteDataAccess = noteDataAccess;
|
||||||
@@ -63,6 +65,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_gasHelper = gasHelper;
|
_gasHelper = gasHelper;
|
||||||
_reminderHelper = reminderHelper;
|
_reminderHelper = reminderHelper;
|
||||||
_userLogic = userLogic;
|
_userLogic = userLogic;
|
||||||
|
_odometerLogic = odometerLogic;
|
||||||
_fileHelper = fileHelper;
|
_fileHelper = fileHelper;
|
||||||
_config = config;
|
_config = config;
|
||||||
}
|
}
|
||||||
@@ -138,7 +141,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Mileage = int.Parse(input.Odometer)
|
Mileage = int.Parse(input.Odometer)
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerLogic.AutoInsertOdometerRecord(odometerRecord);
|
||||||
}
|
}
|
||||||
response.Success = true;
|
response.Success = true;
|
||||||
response.Message = "Service Record Added";
|
response.Message = "Service Record Added";
|
||||||
@@ -205,7 +208,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Mileage = int.Parse(input.Odometer)
|
Mileage = int.Parse(input.Odometer)
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerLogic.AutoInsertOdometerRecord(odometerRecord);
|
||||||
}
|
}
|
||||||
response.Success = true;
|
response.Success = true;
|
||||||
response.Message = "Repair Record Added";
|
response.Message = "Repair Record Added";
|
||||||
@@ -272,7 +275,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Mileage = int.Parse(input.Odometer)
|
Mileage = int.Parse(input.Odometer)
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerLogic.AutoInsertOdometerRecord(odometerRecord);
|
||||||
}
|
}
|
||||||
response.Success = true;
|
response.Success = true;
|
||||||
response.Message = "Upgrade Record Added";
|
response.Message = "Upgrade Record Added";
|
||||||
@@ -353,7 +356,12 @@ namespace CarCareTracker.Controllers
|
|||||||
public IActionResult OdometerRecords(int vehicleId)
|
public IActionResult OdometerRecords(int vehicleId)
|
||||||
{
|
{
|
||||||
var vehicleRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Date = x.Date.ToShortDateString(), Odometer = x.Mileage.ToString(), Notes = x.Notes });
|
//determine if conversion is needed.
|
||||||
|
if (vehicleRecords.All(x => x.InitialMileage == default))
|
||||||
|
{
|
||||||
|
vehicleRecords = _odometerLogic.AutoConvertOdometerRecord(vehicleRecords);
|
||||||
|
}
|
||||||
|
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Date = x.Date.ToShortDateString(), InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Notes = x.Notes });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@@ -384,6 +392,7 @@ namespace CarCareTracker.Controllers
|
|||||||
VehicleId = vehicleId,
|
VehicleId = vehicleId,
|
||||||
Date = DateTime.Parse(input.Date),
|
Date = DateTime.Parse(input.Date),
|
||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
|
InitialMileage = (string.IsNullOrWhiteSpace(input.InitialOdometer) || int.Parse(input.InitialOdometer) == default) ? _odometerLogic.GetLastOdometerRecordMileage(vehicleId, new List<OdometerRecord>()) : int.Parse(input.InitialOdometer),
|
||||||
Mileage = int.Parse(input.Odometer)
|
Mileage = int.Parse(input.Odometer)
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
||||||
@@ -466,7 +475,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Mileage = int.Parse(input.Odometer)
|
Mileage = int.Parse(input.Odometer)
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerLogic.AutoInsertOdometerRecord(odometerRecord);
|
||||||
}
|
}
|
||||||
response.Success = true;
|
response.Success = true;
|
||||||
response.Message = "Gas Record Added";
|
response.Message = "Gas Record Added";
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace CarCareTracker.Controllers
|
|||||||
private readonly IReminderHelper _reminderHelper;
|
private readonly IReminderHelper _reminderHelper;
|
||||||
private readonly IReportHelper _reportHelper;
|
private readonly IReportHelper _reportHelper;
|
||||||
private readonly IUserLogic _userLogic;
|
private readonly IUserLogic _userLogic;
|
||||||
|
private readonly IOdometerLogic _odometerLogic;
|
||||||
private readonly IExtraFieldDataAccess _extraFieldDataAccess;
|
private readonly IExtraFieldDataAccess _extraFieldDataAccess;
|
||||||
|
|
||||||
public VehicleController(ILogger<VehicleController> logger,
|
public VehicleController(ILogger<VehicleController> logger,
|
||||||
@@ -57,6 +58,7 @@ namespace CarCareTracker.Controllers
|
|||||||
IOdometerRecordDataAccess odometerRecordDataAccess,
|
IOdometerRecordDataAccess odometerRecordDataAccess,
|
||||||
IExtraFieldDataAccess extraFieldDataAccess,
|
IExtraFieldDataAccess extraFieldDataAccess,
|
||||||
IUserLogic userLogic,
|
IUserLogic userLogic,
|
||||||
|
IOdometerLogic odometerLogic,
|
||||||
IWebHostEnvironment webEnv,
|
IWebHostEnvironment webEnv,
|
||||||
IConfigHelper config)
|
IConfigHelper config)
|
||||||
{
|
{
|
||||||
@@ -79,6 +81,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_odometerRecordDataAccess = odometerRecordDataAccess;
|
_odometerRecordDataAccess = odometerRecordDataAccess;
|
||||||
_extraFieldDataAccess = extraFieldDataAccess;
|
_extraFieldDataAccess = extraFieldDataAccess;
|
||||||
_userLogic = userLogic;
|
_userLogic = userLogic;
|
||||||
|
_odometerLogic = odometerLogic;
|
||||||
_webEnv = webEnv;
|
_webEnv = webEnv;
|
||||||
_config = config;
|
_config = config;
|
||||||
}
|
}
|
||||||
@@ -265,7 +268,7 @@ namespace CarCareTracker.Controllers
|
|||||||
var vehicleRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
||||||
if (vehicleRecords.Any())
|
if (vehicleRecords.Any())
|
||||||
{
|
{
|
||||||
var exportData = vehicleRecords.Select(x => new OdometerRecordExportModel { Date = x.Date.ToShortDateString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), Tags = string.Join(" ", x.Tags) });
|
var exportData = vehicleRecords.Select(x => new OdometerRecordExportModel { Date = x.Date.ToShortDateString(), Notes = x.Notes, InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Tags = string.Join(" ", x.Tags) });
|
||||||
using (var writer = new StreamWriter(fullExportFilePath))
|
using (var writer = new StreamWriter(fullExportFilePath))
|
||||||
{
|
{
|
||||||
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
|
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
|
||||||
@@ -460,7 +463,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_gasRecordDataAccess.SaveGasRecordToVehicle(convertedRecord);
|
_gasRecordDataAccess.SaveGasRecordToVehicle(convertedRecord);
|
||||||
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = convertedRecord.Date,
|
Date = convertedRecord.Date,
|
||||||
VehicleId = convertedRecord.VehicleId,
|
VehicleId = convertedRecord.VehicleId,
|
||||||
@@ -485,7 +488,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_serviceRecordDataAccess.SaveServiceRecordToVehicle(convertedRecord);
|
_serviceRecordDataAccess.SaveServiceRecordToVehicle(convertedRecord);
|
||||||
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = convertedRecord.Date,
|
Date = convertedRecord.Date,
|
||||||
VehicleId = convertedRecord.VehicleId,
|
VehicleId = convertedRecord.VehicleId,
|
||||||
@@ -500,6 +503,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
VehicleId = vehicleId,
|
VehicleId = vehicleId,
|
||||||
Date = DateTime.Parse(importModel.Date),
|
Date = DateTime.Parse(importModel.Date),
|
||||||
|
InitialMileage = decimal.ToInt32(decimal.Parse(importModel.InitialOdometer, NumberStyles.Any)),
|
||||||
Mileage = decimal.ToInt32(decimal.Parse(importModel.Odometer, NumberStyles.Any)),
|
Mileage = decimal.ToInt32(decimal.Parse(importModel.Odometer, NumberStyles.Any)),
|
||||||
Notes = string.IsNullOrWhiteSpace(importModel.Notes) ? "" : importModel.Notes,
|
Notes = string.IsNullOrWhiteSpace(importModel.Notes) ? "" : importModel.Notes,
|
||||||
Tags = string.IsNullOrWhiteSpace(importModel.Tags) ? [] : importModel.Tags.Split(" ").ToList()
|
Tags = string.IsNullOrWhiteSpace(importModel.Tags) ? [] : importModel.Tags.Split(" ").ToList()
|
||||||
@@ -540,7 +544,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(convertedRecord);
|
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(convertedRecord);
|
||||||
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = convertedRecord.Date,
|
Date = convertedRecord.Date,
|
||||||
VehicleId = convertedRecord.VehicleId,
|
VehicleId = convertedRecord.VehicleId,
|
||||||
@@ -564,7 +568,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(convertedRecord);
|
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(convertedRecord);
|
||||||
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = convertedRecord.Date,
|
Date = convertedRecord.Date,
|
||||||
VehicleId = convertedRecord.VehicleId,
|
VehicleId = convertedRecord.VehicleId,
|
||||||
@@ -646,7 +650,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
if (gasRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (gasRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = DateTime.Parse(gasRecord.Date),
|
Date = DateTime.Parse(gasRecord.Date),
|
||||||
VehicleId = gasRecord.VehicleId,
|
VehicleId = gasRecord.VehicleId,
|
||||||
@@ -734,7 +738,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
if (serviceRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (serviceRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = DateTime.Parse(serviceRecord.Date),
|
Date = DateTime.Parse(serviceRecord.Date),
|
||||||
VehicleId = serviceRecord.VehicleId,
|
VehicleId = serviceRecord.VehicleId,
|
||||||
@@ -811,7 +815,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
if (collisionRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (collisionRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = DateTime.Parse(collisionRecord.Date),
|
Date = DateTime.Parse(collisionRecord.Date),
|
||||||
VehicleId = collisionRecord.VehicleId,
|
VehicleId = collisionRecord.VehicleId,
|
||||||
@@ -1004,7 +1008,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
MonthName = x.Key.MonthName,
|
MonthName = x.Key.MonthName,
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost),
|
||||||
DistanceTraveled = x.Any(y => y.MinMileage != default) ? x.Max(y => y.MaxMileage) - x.Where(y => y.MinMileage != default).Min(y => y.MinMileage) : 0
|
DistanceTraveled = 0
|
||||||
}).ToList();
|
}).ToList();
|
||||||
//get reminders
|
//get reminders
|
||||||
var reminders = GetRemindersAndUrgency(vehicleId, DateTime.Now);
|
var reminders = GetRemindersAndUrgency(vehicleId, DateTime.Now);
|
||||||
@@ -1376,7 +1380,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
MonthName = x.Key.MonthName,
|
MonthName = x.Key.MonthName,
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost),
|
||||||
DistanceTraveled = x.Any(y => y.MinMileage != default) ? x.Max(y => y.MaxMileage) - x.Where(y => y.MinMileage != default).Min(y => y.MinMileage) : 0
|
DistanceTraveled = 0
|
||||||
}).ToList();
|
}).ToList();
|
||||||
return PartialView("_GasCostByMonthReport", groupedRecord);
|
return PartialView("_GasCostByMonthReport", groupedRecord);
|
||||||
}
|
}
|
||||||
@@ -1603,7 +1607,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
if (upgradeRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (upgradeRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = DateTime.Parse(upgradeRecord.Date),
|
Date = DateTime.Parse(upgradeRecord.Date),
|
||||||
VehicleId = upgradeRecord.VehicleId,
|
VehicleId = upgradeRecord.VehicleId,
|
||||||
@@ -1968,7 +1972,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
if (_config.GetUserConfig(User).EnableAutoOdometerInsert)
|
||||||
{
|
{
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(new OdometerRecord
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
||||||
{
|
{
|
||||||
Date = DateTime.Now,
|
Date = DateTime.Now,
|
||||||
VehicleId = existingRecord.VehicleId,
|
VehicleId = existingRecord.VehicleId,
|
||||||
@@ -2071,6 +2075,11 @@ namespace CarCareTracker.Controllers
|
|||||||
public IActionResult GetOdometerRecordsByVehicleId(int vehicleId)
|
public IActionResult GetOdometerRecordsByVehicleId(int vehicleId)
|
||||||
{
|
{
|
||||||
var result = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
var result = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
||||||
|
//determine if conversion is needed.
|
||||||
|
if (result.All(x=>x.InitialMileage == default))
|
||||||
|
{
|
||||||
|
result = _odometerLogic.AutoConvertOdometerRecord(result);
|
||||||
|
}
|
||||||
bool _useDescending = _config.GetUserConfig(User).UseDescending;
|
bool _useDescending = _config.GetUserConfig(User).UseDescending;
|
||||||
if (_useDescending)
|
if (_useDescending)
|
||||||
{
|
{
|
||||||
@@ -2087,13 +2096,17 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
//move files from temp.
|
//move files from temp.
|
||||||
odometerRecord.Files = odometerRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList();
|
odometerRecord.Files = odometerRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList();
|
||||||
|
if (odometerRecord.InitialMileage == default)
|
||||||
|
{
|
||||||
|
odometerRecord.InitialMileage = _odometerLogic.GetLastOdometerRecordMileage(odometerRecord.VehicleId, new List<OdometerRecord>());
|
||||||
|
}
|
||||||
var result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord.ToOdometerRecord());
|
var result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord.ToOdometerRecord());
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult GetAddOdometerRecordPartialView()
|
public IActionResult GetAddOdometerRecordPartialView(int vehicleId)
|
||||||
{
|
{
|
||||||
return PartialView("_OdometerRecordModal", new OdometerRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields });
|
return PartialView("_OdometerRecordModal", new OdometerRecordInput() { InitialMileage = _odometerLogic.GetLastOdometerRecordMileage(vehicleId, new List<OdometerRecord>()), ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields });
|
||||||
}
|
}
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult GetOdometerRecordForEditById(int odometerRecordId)
|
public IActionResult GetOdometerRecordForEditById(int odometerRecordId)
|
||||||
@@ -2104,6 +2117,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
Id = result.Id,
|
Id = result.Id,
|
||||||
Date = result.Date.ToShortDateString(),
|
Date = result.Date.ToShortDateString(),
|
||||||
|
InitialMileage = result.InitialMileage,
|
||||||
Mileage = result.Mileage,
|
Mileage = result.Mileage,
|
||||||
Notes = result.Notes,
|
Notes = result.Notes,
|
||||||
VehicleId = result.VehicleId,
|
VehicleId = result.VehicleId,
|
||||||
|
|||||||
@@ -24,9 +24,7 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
MonthId = x.Key,
|
MonthId = x.Key,
|
||||||
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
||||||
Cost = 0,
|
Cost = 0
|
||||||
MaxMileage = x.Max(y => y.Mileage),
|
|
||||||
MinMileage = x.Min(y => y.Mileage)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public IEnumerable<CostForVehicleByMonth> GetServiceRecordSum(List<ServiceRecord> serviceRecords, int year = 0)
|
public IEnumerable<CostForVehicleByMonth> GetServiceRecordSum(List<ServiceRecord> serviceRecords, int year = 0)
|
||||||
@@ -39,9 +37,7 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
MonthId = x.Key,
|
MonthId = x.Key,
|
||||||
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost)
|
||||||
MaxMileage = x.Max(y=>y.Mileage),
|
|
||||||
MinMileage = x.Min(y=>y.Mileage)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public IEnumerable<CostForVehicleByMonth> GetRepairRecordSum(List<CollisionRecord> repairRecords, int year = 0)
|
public IEnumerable<CostForVehicleByMonth> GetRepairRecordSum(List<CollisionRecord> repairRecords, int year = 0)
|
||||||
@@ -54,9 +50,7 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
MonthId = x.Key,
|
MonthId = x.Key,
|
||||||
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost)
|
||||||
MaxMileage = x.Max(y => y.Mileage),
|
|
||||||
MinMileage = x.Min(y => y.Mileage)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public IEnumerable<CostForVehicleByMonth> GetUpgradeRecordSum(List<UpgradeRecord> upgradeRecords, int year = 0)
|
public IEnumerable<CostForVehicleByMonth> GetUpgradeRecordSum(List<UpgradeRecord> upgradeRecords, int year = 0)
|
||||||
@@ -69,9 +63,7 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
MonthId = x.Key,
|
MonthId = x.Key,
|
||||||
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost)
|
||||||
MaxMileage = x.Max(y => y.Mileage),
|
|
||||||
MinMileage = x.Min(y => y.Mileage)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public IEnumerable<CostForVehicleByMonth> GetGasRecordSum(List<GasRecord> gasRecords, int year = 0)
|
public IEnumerable<CostForVehicleByMonth> GetGasRecordSum(List<GasRecord> gasRecords, int year = 0)
|
||||||
@@ -84,9 +76,7 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
MonthId = x.Key,
|
MonthId = x.Key,
|
||||||
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key),
|
||||||
Cost = x.Sum(y => y.Cost),
|
Cost = x.Sum(y => y.Cost)
|
||||||
MaxMileage = x.Max(y => y.Mileage),
|
|
||||||
MinMileage = x.Min(y => y.Mileage)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public IEnumerable<CostForVehicleByMonth> GetTaxRecordSum(List<TaxRecord> taxRecords, int year = 0)
|
public IEnumerable<CostForVehicleByMonth> GetTaxRecordSum(List<TaxRecord> taxRecords, int year = 0)
|
||||||
|
|||||||
67
Logic/OdometerLogic.cs
Normal file
67
Logic/OdometerLogic.cs
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
using CarCareTracker.External.Interfaces;
|
||||||
|
using CarCareTracker.Models;
|
||||||
|
|
||||||
|
namespace CarCareTracker.Logic
|
||||||
|
{
|
||||||
|
public interface IOdometerLogic
|
||||||
|
{
|
||||||
|
int GetLastOdometerRecordMileage(int vehicleId, List<OdometerRecord> odometerRecords);
|
||||||
|
bool AutoInsertOdometerRecord(OdometerRecord odometer);
|
||||||
|
List<OdometerRecord> AutoConvertOdometerRecord(List<OdometerRecord> odometerRecords);
|
||||||
|
}
|
||||||
|
public class OdometerLogic: IOdometerLogic
|
||||||
|
{
|
||||||
|
private readonly IOdometerRecordDataAccess _odometerRecordDataAccess;
|
||||||
|
private readonly ILogger<IOdometerLogic> _logger;
|
||||||
|
public OdometerLogic(IOdometerRecordDataAccess odometerRecordDataAccess, ILogger<IOdometerLogic> logger)
|
||||||
|
{
|
||||||
|
_odometerRecordDataAccess = odometerRecordDataAccess;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
public int GetLastOdometerRecordMileage(int vehicleId, List<OdometerRecord> odometerRecords)
|
||||||
|
{
|
||||||
|
if (!odometerRecords.Any())
|
||||||
|
{
|
||||||
|
odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
||||||
|
}
|
||||||
|
if (!odometerRecords.Any())
|
||||||
|
{
|
||||||
|
//no existing odometer records for this vehicle.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return odometerRecords.Max(x => x.Mileage);
|
||||||
|
}
|
||||||
|
public bool AutoInsertOdometerRecord(OdometerRecord odometer)
|
||||||
|
{
|
||||||
|
var lastReportedMileage = GetLastOdometerRecordMileage(odometer.VehicleId, new List<OdometerRecord>());
|
||||||
|
odometer.InitialMileage = lastReportedMileage != default ? lastReportedMileage : odometer.Mileage;
|
||||||
|
|
||||||
|
var result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public List<OdometerRecord> AutoConvertOdometerRecord(List<OdometerRecord> odometerRecords)
|
||||||
|
{
|
||||||
|
//perform ordering
|
||||||
|
odometerRecords = odometerRecords.OrderBy(x => x.Date).ThenBy(x => x.Mileage).ToList();
|
||||||
|
int previousMileage = 0;
|
||||||
|
for (int i = 0; i < odometerRecords.Count; i++)
|
||||||
|
{
|
||||||
|
var currentObject = odometerRecords[i];
|
||||||
|
if (previousMileage == default)
|
||||||
|
{
|
||||||
|
//first record
|
||||||
|
currentObject.InitialMileage = currentObject.Mileage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//subsequent records
|
||||||
|
currentObject.InitialMileage = previousMileage;
|
||||||
|
}
|
||||||
|
//save to db.
|
||||||
|
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(currentObject);
|
||||||
|
previousMileage = currentObject.Mileage;
|
||||||
|
}
|
||||||
|
return odometerRecords;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ namespace CarCareTracker.MapProfile
|
|||||||
Map(m => m.Date).Name(["date", "fuelup_date"]);
|
Map(m => m.Date).Name(["date", "fuelup_date"]);
|
||||||
Map(m => m.DateCreated).Name(["datecreated"]);
|
Map(m => m.DateCreated).Name(["datecreated"]);
|
||||||
Map(m => m.DateModified).Name(["datemodified"]);
|
Map(m => m.DateModified).Name(["datemodified"]);
|
||||||
|
Map(m => m.InitialOdometer).Name(["initialodometer"]);
|
||||||
Map(m => m.Odometer).Name(["odometer"]);
|
Map(m => m.Odometer).Name(["odometer"]);
|
||||||
Map(m => m.FuelConsumed).Name(["gallons", "liters", "litres", "consumption", "quantity", "fuelconsumed"]);
|
Map(m => m.FuelConsumed).Name(["gallons", "liters", "litres", "consumption", "quantity", "fuelconsumed"]);
|
||||||
Map(m => m.Cost).Name(["cost", "total cost", "totalcost", "total price"]);
|
Map(m => m.Cost).Name(["cost", "total cost", "totalcost", "total price"]);
|
||||||
|
|||||||
@@ -5,7 +5,9 @@
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int VehicleId { get; set; }
|
public int VehicleId { get; set; }
|
||||||
public DateTime Date { get; set; }
|
public DateTime Date { get; set; }
|
||||||
|
public int InitialMileage { get; set; }
|
||||||
public int Mileage { get; set; }
|
public int Mileage { get; set; }
|
||||||
|
public int DistanceTraveled { get { return Mileage - InitialMileage; } }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public List<string> Tags { get; set; } = new List<string>();
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int VehicleId { get; set; }
|
public int VehicleId { get; set; }
|
||||||
public string Date { get; set; } = DateTime.Now.ToShortDateString();
|
public string Date { get; set; } = DateTime.Now.ToShortDateString();
|
||||||
|
public int InitialMileage { get; set; }
|
||||||
public int Mileage { get; set; }
|
public int Mileage { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
public List<string> Tags { get; set; } = new List<string>();
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
public OdometerRecord ToOdometerRecord() { return new OdometerRecord { Id = Id, VehicleId = VehicleId, Date = DateTime.Parse(Date), Mileage = Mileage, Notes = Notes, Files = Files, Tags = Tags, ExtraFields = ExtraFields }; }
|
public OdometerRecord ToOdometerRecord() { return new OdometerRecord { Id = Id, VehicleId = VehicleId, Date = DateTime.Parse(Date), Mileage = Mileage, Notes = Notes, Files = Files, Tags = Tags, ExtraFields = ExtraFields, InitialMileage = InitialMileage }; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
public int MonthId { get; set; }
|
public int MonthId { get; set; }
|
||||||
public string MonthName { get; set; }
|
public string MonthName { get; set; }
|
||||||
public decimal Cost { get; set; }
|
public decimal Cost { get; set; }
|
||||||
public int MaxMileage { get; set; }
|
|
||||||
public int MinMileage { get; set; }
|
|
||||||
public int DistanceTraveled { get; set; }
|
public int DistanceTraveled { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
public string Priority { get; set; }
|
public string Priority { get; set; }
|
||||||
public string Progress { get; set; }
|
public string Progress { get; set; }
|
||||||
|
public string InitialOdometer { get; set; }
|
||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
public class OdometerRecordExportModel
|
public class OdometerRecordExportModel
|
||||||
{
|
{
|
||||||
public string Date { get; set; }
|
public string Date { get; set; }
|
||||||
|
public string InitialOdometer { get; set; }
|
||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ builder.Services.AddSingleton<ITranslationHelper, TranslationHelper>();
|
|||||||
//configure logic
|
//configure logic
|
||||||
builder.Services.AddSingleton<ILoginLogic, LoginLogic>();
|
builder.Services.AddSingleton<ILoginLogic, LoginLogic>();
|
||||||
builder.Services.AddSingleton<IUserLogic, UserLogic>();
|
builder.Services.AddSingleton<IUserLogic, UserLogic>();
|
||||||
|
builder.Services.AddSingleton<IOdometerLogic, OdometerLogic>();
|
||||||
|
|
||||||
if (!Directory.Exists("data"))
|
if (!Directory.Exists("data"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -314,6 +314,7 @@
|
|||||||
<br />
|
<br />
|
||||||
Body(form-data): {<br />
|
Body(form-data): {<br />
|
||||||
date - Date to be entered<br />
|
date - Date to be entered<br />
|
||||||
|
initialOdometer - Initial Odometer reading(optional)<br />
|
||||||
odometer - Odometer reading<br />
|
odometer - Odometer reading<br />
|
||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
<input type="text" id="odometerRecordDate" class="form-control" placeholder="@translator.Translate(userLanguage,"Date recorded")" value="@Model.Date">
|
<input type="text" id="odometerRecordDate" class="form-control" placeholder="@translator.Translate(userLanguage,"Date recorded")" value="@Model.Date">
|
||||||
<span class="input-group-text"><i class="bi bi-calendar-event"></i></span>
|
<span class="input-group-text"><i class="bi bi-calendar-event"></i></span>
|
||||||
</div>
|
</div>
|
||||||
|
<label for="initialOdometerRecordMileage">@translator.Translate(userLanguage, "Initial Odometer")</label>
|
||||||
|
<input type="number" inputmode="numeric" id="initialOdometerRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Initial Odometer reading")" value="@(Model.InitialMileage)">
|
||||||
<label for="odometerRecordMileage">@translator.Translate(userLanguage,"Odometer")</label>
|
<label for="odometerRecordMileage">@translator.Translate(userLanguage,"Odometer")</label>
|
||||||
<input type="number" inputmode="numeric" id="odometerRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading")" value="@(isNew ? "" : Model.Mileage)">
|
<input type="number" inputmode="numeric" id="odometerRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading")" value="@(isNew ? "" : Model.Mileage)">
|
||||||
<label for="odometerRecordTag">@translator.Translate(userLanguage,"Tags(optional)")</label>
|
<label for="odometerRecordTag">@translator.Translate(userLanguage,"Tags(optional)")</label>
|
||||||
|
|||||||
@@ -52,12 +52,24 @@
|
|||||||
<label class="form-check-label stretched-link" for="chkCol_Date">@translator.Translate(userLanguage, "Date")</label>
|
<label class="form-check-label stretched-link" for="chkCol_Date">@translator.Translate(userLanguage, "Date")</label>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="dropdown-item">
|
||||||
|
<div class="list-group-item">
|
||||||
|
<input class="form-check-input col-visible-toggle" data-column-toggle='initialodometer' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_InitialOdometer" checked>
|
||||||
|
<label class="form-check-label stretched-link" for="chkCol_InitialOdometer">@translator.Translate(userLanguage, "Initial Odometer")</label>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
<li class="dropdown-item">
|
<li class="dropdown-item">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<input class="form-check-input col-visible-toggle" data-column-toggle='odometer' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_Odometer" checked>
|
<input class="form-check-input col-visible-toggle" data-column-toggle='odometer' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_Odometer" checked>
|
||||||
<label class="form-check-label stretched-link" for="chkCol_Odometer">@translator.Translate(userLanguage, "Odometer")</label>
|
<label class="form-check-label stretched-link" for="chkCol_Odometer">@translator.Translate(userLanguage, "Odometer")</label>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="dropdown-item">
|
||||||
|
<div class="list-group-item">
|
||||||
|
<input class="form-check-input col-visible-toggle" data-column-toggle='distance' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_Distance" checked>
|
||||||
|
<label class="form-check-label stretched-link" for="chkCol_Distance">@translator.Translate(userLanguage, "Distance")</label>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
<li class="dropdown-item">
|
<li class="dropdown-item">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<input class="form-check-input col-visible-toggle" data-column-toggle='notes' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_Notes" checked>
|
<input class="form-check-input col-visible-toggle" data-column-toggle='notes' onChange="showTableColumns(this, 'OdometerRecord')" type="checkbox" id="chkCol_Notes" checked>
|
||||||
@@ -95,8 +107,10 @@
|
|||||||
<thead class="sticky-top">
|
<thead class="sticky-top">
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<th scope="col" class="col-2 col-xl-1 flex-grow-1" data-column="date">@translator.Translate(userLanguage, "Date")</th>
|
<th scope="col" class="col-2 col-xl-1 flex-grow-1" data-column="date">@translator.Translate(userLanguage, "Date")</th>
|
||||||
|
<th scope="col" class="col-3 flex-grow-1 flex-shrink-1" data-column="initialodometer">@translator.Translate(userLanguage, "Initial Odometer")</th>
|
||||||
<th scope="col" class="col-3 flex-grow-1 flex-shrink-1" data-column="odometer">@translator.Translate(userLanguage, "Odometer")</th>
|
<th scope="col" class="col-3 flex-grow-1 flex-shrink-1" data-column="odometer">@translator.Translate(userLanguage, "Odometer")</th>
|
||||||
<th scope="col" class="col-7 col-xl-8 flex-grow-1 flex-shrink-1" data-column="notes">@translator.Translate(userLanguage, "Notes")</th>
|
<th scope="col" class="col-2 flex-grow-1 flex-shrink-1" data-column="distance">@translator.Translate(userLanguage, "Distance")</th>
|
||||||
|
<th scope="col" class="col-2 col-xl-3 flex-grow-1 flex-shrink-1" data-column="notes">@translator.Translate(userLanguage, "Notes")</th>
|
||||||
@foreach (string extraFieldColumn in extraFields)
|
@foreach (string extraFieldColumn in extraFields)
|
||||||
{
|
{
|
||||||
<th scope="col" style='display:none;' class="col-2 flex-grow-1 flex-shrink-1" data-column="@extraFieldColumn">@extraFieldColumn</th>
|
<th scope="col" style='display:none;' class="col-2 flex-grow-1 flex-shrink-1" data-column="@extraFieldColumn">@extraFieldColumn</th>
|
||||||
@@ -108,8 +122,10 @@
|
|||||||
{
|
{
|
||||||
<tr class="d-flex user-select-none" style="cursor:pointer;" onmouseup="stopEvent()" ontouchstart="detectRowLongTouch(this)" ontouchend="detectRowTouchEndPremature(this)" data-rowId="@odometerRecord.Id" oncontextmenu="showTableContextMenu(this)" onmousemove="rangeMouseMove(this)" onclick="handleTableRowClick(this, showEditOdometerRecordModal,@odometerRecord.Id)" data-tags='@string.Join(" ", odometerRecord.Tags)'>
|
<tr class="d-flex user-select-none" style="cursor:pointer;" onmouseup="stopEvent()" ontouchstart="detectRowLongTouch(this)" ontouchend="detectRowTouchEndPremature(this)" data-rowId="@odometerRecord.Id" oncontextmenu="showTableContextMenu(this)" onmousemove="rangeMouseMove(this)" onclick="handleTableRowClick(this, showEditOdometerRecordModal,@odometerRecord.Id)" data-tags='@string.Join(" ", odometerRecord.Tags)'>
|
||||||
<td class="col-2 col-xl-1 flex-grow-1" data-column="date">@odometerRecord.Date.ToShortDateString()</td>
|
<td class="col-2 col-xl-1 flex-grow-1" data-column="date">@odometerRecord.Date.ToShortDateString()</td>
|
||||||
|
<td class="col-3 flex-grow-1 flex-shrink-1" data-column="initialodometer" data-record-type="cost">@odometerRecord.InitialMileage</td>
|
||||||
<td class="col-3 flex-grow-1 flex-shrink-1" data-column="odometer" data-record-type="cost">@odometerRecord.Mileage</td>
|
<td class="col-3 flex-grow-1 flex-shrink-1" data-column="odometer" data-record-type="cost">@odometerRecord.Mileage</td>
|
||||||
<td class="col-7 col-xl-8 flex-grow-1 flex-shrink-1 text-truncate" data-column="notes">@CarCareTracker.Helper.StaticHelper.TruncateStrings(odometerRecord.Notes, 75)</td>
|
<td class="col-2 flex-grow-1 flex-shrink-1" data-column="distance" data-record-type="cost">@(odometerRecord.DistanceTraveled == default ? "---" : odometerRecord.DistanceTraveled)</td>
|
||||||
|
<td class="col-2 col-xl-3 flex-grow-1 flex-shrink-1 text-truncate" data-column="notes">@CarCareTracker.Helper.StaticHelper.TruncateStrings(odometerRecord.Notes, 75)</td>
|
||||||
@foreach (string extraFieldColumn in extraFields)
|
@foreach (string extraFieldColumn in extraFields)
|
||||||
{
|
{
|
||||||
<td class="col-2 flex-grow-1 flex-shrink-1 text-truncate" style='display:none;' data-column="@extraFieldColumn">@(odometerRecord.ExtraFields.Where(x => x.Name == extraFieldColumn)?.FirstOrDefault()?.Value ?? "")</td>
|
<td class="col-2 flex-grow-1 flex-shrink-1 text-truncate" style='display:none;' data-column="@extraFieldColumn">@(odometerRecord.ExtraFields.Where(x => x.Name == extraFieldColumn)?.FirstOrDefault()?.Value ?? "")</td>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
function showAddOdometerRecordModal() {
|
function showAddOdometerRecordModal() {
|
||||||
$.get('/Vehicle/GetAddOdometerRecordPartialView', function (data) {
|
$.get(`/Vehicle/GetAddOdometerRecordPartialView?vehicleId=${GetVehicleId().vehicleId}`, function (data) {
|
||||||
if (data) {
|
if (data) {
|
||||||
$("#odometerRecordModalContent").html(data);
|
$("#odometerRecordModalContent").html(data);
|
||||||
//initiate datepicker
|
//initiate datepicker
|
||||||
@@ -78,6 +78,7 @@ function saveOdometerRecordToVehicle(isEdit) {
|
|||||||
}
|
}
|
||||||
function getAndValidateOdometerRecordValues() {
|
function getAndValidateOdometerRecordValues() {
|
||||||
var serviceDate = $("#odometerRecordDate").val();
|
var serviceDate = $("#odometerRecordDate").val();
|
||||||
|
var initialOdometerMileage = parseInt(globalParseFloat($("#initialOdometerRecordMileage").val())).toString();
|
||||||
var serviceMileage = parseInt(globalParseFloat($("#odometerRecordMileage").val())).toString();
|
var serviceMileage = parseInt(globalParseFloat($("#odometerRecordMileage").val())).toString();
|
||||||
var serviceNotes = $("#odometerRecordNotes").val();
|
var serviceNotes = $("#odometerRecordNotes").val();
|
||||||
var serviceTags = $("#odometerRecordTag").val();
|
var serviceTags = $("#odometerRecordTag").val();
|
||||||
@@ -101,11 +102,18 @@ function getAndValidateOdometerRecordValues() {
|
|||||||
} else {
|
} else {
|
||||||
$("#odometerRecordMileage").removeClass("is-invalid");
|
$("#odometerRecordMileage").removeClass("is-invalid");
|
||||||
}
|
}
|
||||||
|
if (isNaN(initialOdometerMileage) || parseInt(initialOdometerMileage) < 0) {
|
||||||
|
hasError = true;
|
||||||
|
$("#initialOdometerRecordMileage").addClass("is-invalid");
|
||||||
|
} else {
|
||||||
|
$("#initialOdometerRecordMileage").removeClass("is-invalid");
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
id: odometerRecordId,
|
id: odometerRecordId,
|
||||||
hasError: hasError,
|
hasError: hasError,
|
||||||
vehicleId: vehicleId,
|
vehicleId: vehicleId,
|
||||||
date: serviceDate,
|
date: serviceDate,
|
||||||
|
initialMileage: initialOdometerMileage,
|
||||||
mileage: serviceMileage,
|
mileage: serviceMileage,
|
||||||
notes: serviceNotes,
|
notes: serviceNotes,
|
||||||
tags: serviceTags,
|
tags: serviceTags,
|
||||||
|
|||||||
Reference in New Issue
Block a user