mirror of
https://github.com/hargata/lubelog.git
synced 2025-12-10 00:46:08 -06:00
132 lines
6.0 KiB
C#
132 lines
6.0 KiB
C#
using CarCareTracker.Filter;
|
|
using CarCareTracker.Helper;
|
|
using CarCareTracker.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace CarCareTracker.Controllers
|
|
{
|
|
public partial class VehicleController
|
|
{
|
|
[TypeFilter(typeof(CollaboratorFilter))]
|
|
[HttpGet]
|
|
public IActionResult GetCollisionRecordsByVehicleId(int vehicleId)
|
|
{
|
|
var result = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
|
bool _useDescending = _config.GetUserConfig(User).UseDescending;
|
|
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("_CollisionRecords", result);
|
|
}
|
|
[HttpPost]
|
|
public IActionResult SaveCollisionRecordToVehicleId(CollisionRecordInput collisionRecord)
|
|
{
|
|
//security check.
|
|
if (!_userLogic.UserCanEditVehicle(GetUserID(), collisionRecord.VehicleId))
|
|
{
|
|
return Json(false);
|
|
}
|
|
if (collisionRecord.Id == default && _config.GetUserConfig(User).EnableAutoOdometerInsert)
|
|
{
|
|
_odometerLogic.AutoInsertOdometerRecord(new OdometerRecord
|
|
{
|
|
Date = DateTime.Parse(collisionRecord.Date),
|
|
VehicleId = collisionRecord.VehicleId,
|
|
Mileage = collisionRecord.Mileage,
|
|
Notes = $"Auto Insert From Repair Record: {collisionRecord.Description}"
|
|
});
|
|
}
|
|
//move files from temp.
|
|
collisionRecord.Files = collisionRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList();
|
|
if (collisionRecord.Supplies.Any())
|
|
{
|
|
collisionRecord.RequisitionHistory.AddRange(RequisitionSupplyRecordsByUsage(collisionRecord.Supplies, DateTime.Parse(collisionRecord.Date), collisionRecord.Description));
|
|
if (collisionRecord.CopySuppliesAttachment)
|
|
{
|
|
collisionRecord.Files.AddRange(GetSuppliesAttachments(collisionRecord.Supplies));
|
|
}
|
|
}
|
|
if (collisionRecord.DeletedRequisitionHistory.Any())
|
|
{
|
|
_vehicleLogic.RestoreSupplyRecordsByUsage(collisionRecord.DeletedRequisitionHistory, collisionRecord.Description);
|
|
}
|
|
//push back any reminders
|
|
if (collisionRecord.ReminderRecordId.Any())
|
|
{
|
|
foreach (int reminderRecordId in collisionRecord.ReminderRecordId)
|
|
{
|
|
PushbackRecurringReminderRecordWithChecks(reminderRecordId, DateTime.Parse(collisionRecord.Date), collisionRecord.Mileage);
|
|
}
|
|
}
|
|
var result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(collisionRecord.ToCollisionRecord());
|
|
if (result)
|
|
{
|
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(collisionRecord.ToCollisionRecord(), collisionRecord.Id == default ? "repairrecord.add" : "repairrecord.update", User.Identity.Name));
|
|
}
|
|
return Json(result);
|
|
}
|
|
[HttpGet]
|
|
public IActionResult GetAddCollisionRecordPartialView()
|
|
{
|
|
return PartialView("_CollisionRecordModal", new CollisionRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields });
|
|
}
|
|
[HttpGet]
|
|
public IActionResult GetCollisionRecordForEditById(int collisionRecordId)
|
|
{
|
|
var result = _collisionRecordDataAccess.GetCollisionRecordById(collisionRecordId);
|
|
//security check.
|
|
if (!_userLogic.UserCanEditVehicle(GetUserID(), result.VehicleId))
|
|
{
|
|
return Redirect("/Error/Unauthorized");
|
|
}
|
|
//convert to Input object.
|
|
var convertedResult = new CollisionRecordInput
|
|
{
|
|
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,
|
|
Tags = result.Tags,
|
|
RequisitionHistory = result.RequisitionHistory,
|
|
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields)
|
|
};
|
|
return PartialView("_CollisionRecordModal", convertedResult);
|
|
}
|
|
private bool DeleteCollisionRecordWithChecks(int collisionRecordId)
|
|
{
|
|
var existingRecord = _collisionRecordDataAccess.GetCollisionRecordById(collisionRecordId);
|
|
//security check.
|
|
if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId))
|
|
{
|
|
return false;
|
|
}
|
|
//restore any requisitioned supplies.
|
|
if (existingRecord.RequisitionHistory.Any())
|
|
{
|
|
_vehicleLogic.RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description);
|
|
}
|
|
var result = _collisionRecordDataAccess.DeleteCollisionRecordById(existingRecord.Id);
|
|
if (result)
|
|
{
|
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "repairrecord.delete", User.Identity.Name));
|
|
}
|
|
return result;
|
|
}
|
|
[HttpPost]
|
|
public IActionResult DeleteCollisionRecordById(int collisionRecordId)
|
|
{
|
|
var result = DeleteCollisionRecordWithChecks(collisionRecordId);
|
|
return Json(result);
|
|
}
|
|
}
|
|
}
|