diff --git a/Controllers/Vehicle/GasController.cs b/Controllers/Vehicle/GasController.cs index a9daeef..64e8ba2 100644 --- a/Controllers/Vehicle/GasController.cs +++ b/Controllers/Vehicle/GasController.cs @@ -91,10 +91,21 @@ namespace CarCareTracker.Controllers }; return PartialView("_GasModal", viewModel); } + private bool DeleteGasRecordWithChecks(int gasRecordId) + { + var existingRecord = _gasRecordDataAccess.GetGasRecordById(gasRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _gasRecordDataAccess.DeleteGasRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteGasRecordById(int gasRecordId) { - var result = _gasRecordDataAccess.DeleteGasRecordById(gasRecordId); + var result = DeleteGasRecordWithChecks(gasRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Gas Record - Id: {gasRecordId}"); diff --git a/Controllers/Vehicle/NoteController.cs b/Controllers/Vehicle/NoteController.cs index 5d3bf80..b591295 100644 --- a/Controllers/Vehicle/NoteController.cs +++ b/Controllers/Vehicle/NoteController.cs @@ -45,10 +45,21 @@ namespace CarCareTracker.Controllers var result = _noteDataAccess.GetNoteById(noteId); return PartialView("_NoteModal", result); } + private bool DeleteNoteWithChecks(int noteId) + { + var existingRecord = _noteDataAccess.GetNoteById(noteId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _noteDataAccess.DeleteNoteById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteNoteById(int noteId) { - var result = _noteDataAccess.DeleteNoteById(noteId); + var result = DeleteNoteWithChecks(noteId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Note - Id: {noteId}"); diff --git a/Controllers/Vehicle/OdometerController.cs b/Controllers/Vehicle/OdometerController.cs index 794475d..9ece5d3 100644 --- a/Controllers/Vehicle/OdometerController.cs +++ b/Controllers/Vehicle/OdometerController.cs @@ -140,10 +140,21 @@ namespace CarCareTracker.Controllers }; return PartialView("_OdometerRecordModal", convertedResult); } + private bool DeleteOdometerRecordWithChecks(int odometerRecordId) + { + var existingRecord = _odometerRecordDataAccess.GetOdometerRecordById(odometerRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _odometerRecordDataAccess.DeleteOdometerRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteOdometerRecordById(int odometerRecordId) { - var result = _odometerRecordDataAccess.DeleteOdometerRecordById(odometerRecordId); + var result = DeleteOdometerRecordWithChecks(odometerRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Odometer Record - Id: {odometerRecordId}"); diff --git a/Controllers/Vehicle/PlanController.cs b/Controllers/Vehicle/PlanController.cs index 3fb3e67..9800da5 100644 --- a/Controllers/Vehicle/PlanController.cs +++ b/Controllers/Vehicle/PlanController.cs @@ -27,12 +27,16 @@ namespace CarCareTracker.Controllers planRecord.Files = planRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList(); if (planRecord.Supplies.Any()) { - planRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(planRecord.Supplies, DateTime.Parse(planRecord.DateCreated), planRecord.Description); + planRecord.RequisitionHistory.AddRange(RequisitionSupplyRecordsByUsage(planRecord.Supplies, DateTime.Parse(planRecord.DateCreated), planRecord.Description)); if (planRecord.CopySuppliesAttachment) { planRecord.Files.AddRange(GetSuppliesAttachments(planRecord.Supplies)); } } + if (planRecord.DeletedRequisitionHistory.Any()) + { + RestoreSupplyRecordsByUsage(planRecord.DeletedRequisitionHistory, planRecord.Description); + } var result = _planRecordDataAccess.SavePlanRecordToVehicle(planRecord.ToPlanRecord()); if (result) { @@ -254,7 +258,18 @@ namespace CarCareTracker.Controllers [HttpPost] public IActionResult DeletePlanRecordById(int planRecordId) { - var result = _planRecordDataAccess.DeletePlanRecordById(planRecordId); + var existingRecord = _planRecordDataAccess.GetPlanRecordById(planRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return Json(false); + } + //restore any requisitioned supplies if it has not been converted to other record types. + if (existingRecord.RequisitionHistory.Any() && existingRecord.Progress != PlanProgress.Done) + { + RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); + } + var result = _planRecordDataAccess.DeletePlanRecordById(existingRecord.Id); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Plan Record - Id: {planRecordId}"); diff --git a/Controllers/Vehicle/ReminderController.cs b/Controllers/Vehicle/ReminderController.cs index b5a372f..dfd561e 100644 --- a/Controllers/Vehicle/ReminderController.cs +++ b/Controllers/Vehicle/ReminderController.cs @@ -149,10 +149,21 @@ namespace CarCareTracker.Controllers }; return PartialView("_ReminderRecordModal", convertedResult); } + private bool DeleteReminderRecordWithChecks(int reminderRecordId) + { + var existingRecord = _reminderRecordDataAccess.GetReminderRecordById(reminderRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _reminderRecordDataAccess.DeleteReminderRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteReminderRecordById(int reminderRecordId) { - var result = _reminderRecordDataAccess.DeleteReminderRecordById(reminderRecordId); + var result = DeleteReminderRecordWithChecks(reminderRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Reminder - Id: {reminderRecordId}"); diff --git a/Controllers/Vehicle/RepairController.cs b/Controllers/Vehicle/RepairController.cs index 3a300b5..5c4f81f 100644 --- a/Controllers/Vehicle/RepairController.cs +++ b/Controllers/Vehicle/RepairController.cs @@ -40,12 +40,16 @@ namespace CarCareTracker.Controllers 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 = RequisitionSupplyRecordsByUsage(collisionRecord.Supplies, DateTime.Parse(collisionRecord.Date), collisionRecord.Description); + 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()) + { + RestoreSupplyRecordsByUsage(collisionRecord.DeletedRequisitionHistory, collisionRecord.Description); + } //push back any reminders if (collisionRecord.ReminderRecordId.Any()) { @@ -87,10 +91,26 @@ namespace CarCareTracker.Controllers }; 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()) + { + RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); + } + var result = _collisionRecordDataAccess.DeleteCollisionRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteCollisionRecordById(int collisionRecordId) { - var result = _collisionRecordDataAccess.DeleteCollisionRecordById(collisionRecordId); + var result = DeleteCollisionRecordWithChecks(collisionRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Repair Record - Id: {collisionRecordId}"); diff --git a/Controllers/Vehicle/ServiceController.cs b/Controllers/Vehicle/ServiceController.cs index 242ca95..d8d8a16 100644 --- a/Controllers/Vehicle/ServiceController.cs +++ b/Controllers/Vehicle/ServiceController.cs @@ -40,12 +40,16 @@ namespace CarCareTracker.Controllers serviceRecord.Files = serviceRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList(); if (serviceRecord.Supplies.Any()) { - serviceRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(serviceRecord.Supplies, DateTime.Parse(serviceRecord.Date), serviceRecord.Description); + serviceRecord.RequisitionHistory.AddRange(RequisitionSupplyRecordsByUsage(serviceRecord.Supplies, DateTime.Parse(serviceRecord.Date), serviceRecord.Description)); if (serviceRecord.CopySuppliesAttachment) { serviceRecord.Files.AddRange(GetSuppliesAttachments(serviceRecord.Supplies)); } } + if (serviceRecord.DeletedRequisitionHistory.Any()) + { + RestoreSupplyRecordsByUsage(serviceRecord.DeletedRequisitionHistory, serviceRecord.Description); + } //push back any reminders if (serviceRecord.ReminderRecordId.Any()) { @@ -87,10 +91,26 @@ namespace CarCareTracker.Controllers }; return PartialView("_ServiceRecordModal", convertedResult); } + private bool DeleteServiceRecordWithChecks(int serviceRecordId) + { + var existingRecord = _serviceRecordDataAccess.GetServiceRecordById(serviceRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + //restore any requisitioned supplies. + if (existingRecord.RequisitionHistory.Any()) + { + RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); + } + var result = _serviceRecordDataAccess.DeleteServiceRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteServiceRecordById(int serviceRecordId) { - var result = _serviceRecordDataAccess.DeleteServiceRecordById(serviceRecordId); + var result = DeleteServiceRecordWithChecks(serviceRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Service Record - Id: {serviceRecordId}"); diff --git a/Controllers/Vehicle/SupplyController.cs b/Controllers/Vehicle/SupplyController.cs index b65641b..b7cfa53 100644 --- a/Controllers/Vehicle/SupplyController.cs +++ b/Controllers/Vehicle/SupplyController.cs @@ -58,6 +58,7 @@ namespace CarCareTracker.Controllers //create new requisitionrrecord var requisitionRecord = new SupplyUsageHistory { + Id = supply.SupplyId, Date = dateRequisitioned, Description = usageDescription, Quantity = supply.Quantity, @@ -72,6 +73,44 @@ namespace CarCareTracker.Controllers } return results; } + private void RestoreSupplyRecordsByUsage(List supplyUsage, string usageDescription) + { + foreach (SupplyUsageHistory supply in supplyUsage) + { + try + { + if (supply.Id == default) + { + continue; //no id, skip current supply. + } + var result = _supplyRecordDataAccess.GetSupplyRecordById(supply.Id); + if (result != null && result.Id != default) + { + //supply exists, re-add the quantity and cost + result.Quantity += supply.Quantity; + result.Cost += supply.Cost; + var requisitionRecord = new SupplyUsageHistory + { + Id = supply.Id, + Date = DateTime.Now.Date, + Description = $"Restored from {usageDescription}", + Quantity = supply.Quantity, + Cost = supply.Cost + }; + result.RequisitionHistory.Add(requisitionRecord); + //save + _supplyRecordDataAccess.SaveSupplyRecordToVehicle(result); + } + else + { + _logger.LogError($"Unable to find supply with id {supply.Id}"); + } + } catch (Exception ex) + { + _logger.LogError($"Error restoring supply with id {supply.Id} : {ex.Message}"); + } + } + } [TypeFilter(typeof(CollaboratorFilter))] [HttpGet] public IActionResult GetSupplyRecordsByVehicleId(int vehicleId) @@ -161,6 +200,11 @@ namespace CarCareTracker.Controllers public IActionResult GetSupplyRecordForEditById(int supplyRecordId) { var result = _supplyRecordDataAccess.GetSupplyRecordById(supplyRecordId); + if (result.RequisitionHistory.Any()) + { + //requisition history when viewed through the supply is always immutable. + result.RequisitionHistory = result.RequisitionHistory.Select(x => new SupplyUsageHistory { Id = default, Cost = x.Cost, Description = x.Description, Date = x.Date, PartNumber = x.PartNumber, Quantity = x.Quantity }).ToList(); + } //convert to Input object. var convertedResult = new SupplyRecordInput { @@ -180,10 +224,21 @@ namespace CarCareTracker.Controllers }; return PartialView("_SupplyRecordModal", convertedResult); } + private bool DeleteSupplyRecordWithChecks(int supplyRecordId) + { + var existingRecord = _supplyRecordDataAccess.GetSupplyRecordById(supplyRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _supplyRecordDataAccess.DeleteSupplyRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteSupplyRecordById(int supplyRecordId) { - var result = _supplyRecordDataAccess.DeleteSupplyRecordById(supplyRecordId); + var result = DeleteSupplyRecordWithChecks(supplyRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Supply Record - Id: {supplyRecordId}"); diff --git a/Controllers/Vehicle/TaxController.cs b/Controllers/Vehicle/TaxController.cs index 0405d3b..d4dcbd1 100644 --- a/Controllers/Vehicle/TaxController.cs +++ b/Controllers/Vehicle/TaxController.cs @@ -110,10 +110,21 @@ namespace CarCareTracker.Controllers }; return PartialView("_TaxRecordModal", convertedResult); } + private bool DeleteTaxRecordWithChecks(int taxRecordId) + { + var existingRecord = _taxRecordDataAccess.GetTaxRecordById(taxRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + var result = _taxRecordDataAccess.DeleteTaxRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteTaxRecordById(int taxRecordId) { - var result = _taxRecordDataAccess.DeleteTaxRecordById(taxRecordId); + var result = DeleteTaxRecordWithChecks(taxRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Tax Record - Id: {taxRecordId}"); diff --git a/Controllers/Vehicle/UpgradeController.cs b/Controllers/Vehicle/UpgradeController.cs index 4d384d1..77a15c3 100644 --- a/Controllers/Vehicle/UpgradeController.cs +++ b/Controllers/Vehicle/UpgradeController.cs @@ -40,12 +40,16 @@ namespace CarCareTracker.Controllers upgradeRecord.Files = upgradeRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList(); if (upgradeRecord.Supplies.Any()) { - upgradeRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(upgradeRecord.Supplies, DateTime.Parse(upgradeRecord.Date), upgradeRecord.Description); + upgradeRecord.RequisitionHistory.AddRange(RequisitionSupplyRecordsByUsage(upgradeRecord.Supplies, DateTime.Parse(upgradeRecord.Date), upgradeRecord.Description)); if (upgradeRecord.CopySuppliesAttachment) { upgradeRecord.Files.AddRange(GetSuppliesAttachments(upgradeRecord.Supplies)); } } + if (upgradeRecord.DeletedRequisitionHistory.Any()) + { + RestoreSupplyRecordsByUsage(upgradeRecord.DeletedRequisitionHistory, upgradeRecord.Description); + } //push back any reminders if (upgradeRecord.ReminderRecordId.Any()) { @@ -87,10 +91,26 @@ namespace CarCareTracker.Controllers }; return PartialView("_UpgradeRecordModal", convertedResult); } + private bool DeleteUpgradeRecordWithChecks(int upgradeRecordId) + { + var existingRecord = _upgradeRecordDataAccess.GetUpgradeRecordById(upgradeRecordId); + //security check. + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + return false; + } + //restore any requisitioned supplies. + if (existingRecord.RequisitionHistory.Any()) + { + RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); + } + var result = _upgradeRecordDataAccess.DeleteUpgradeRecordById(existingRecord.Id); + return result; + } [HttpPost] public IActionResult DeleteUpgradeRecordById(int upgradeRecordId) { - var result = _upgradeRecordDataAccess.DeleteUpgradeRecordById(upgradeRecordId); + var result = DeleteUpgradeRecordWithChecks(upgradeRecordId); if (result) { StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Upgrade Record - Id: {upgradeRecordId}"); diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 0d33007..ef9fbeb 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -401,31 +401,31 @@ namespace CarCareTracker.Controllers switch (importMode) { case ImportMode.ServiceRecord: - result = _serviceRecordDataAccess.DeleteServiceRecordById(recordId); + result = DeleteServiceRecordWithChecks(recordId); break; case ImportMode.RepairRecord: - result = _collisionRecordDataAccess.DeleteCollisionRecordById(recordId); + result = DeleteCollisionRecordWithChecks(recordId); break; case ImportMode.UpgradeRecord: - result = _upgradeRecordDataAccess.DeleteUpgradeRecordById(recordId); + result = DeleteUpgradeRecordWithChecks(recordId); break; case ImportMode.GasRecord: - result = _gasRecordDataAccess.DeleteGasRecordById(recordId); + result = DeleteGasRecordWithChecks(recordId); break; case ImportMode.TaxRecord: - result = _taxRecordDataAccess.DeleteTaxRecordById(recordId); + result = DeleteTaxRecordWithChecks(recordId); break; case ImportMode.SupplyRecord: - result = _supplyRecordDataAccess.DeleteSupplyRecordById(recordId); + result = DeleteSupplyRecordWithChecks(recordId); break; case ImportMode.NoteRecord: - result = _noteDataAccess.DeleteNoteById(recordId); + result = DeleteNoteWithChecks(recordId); break; case ImportMode.OdometerRecord: - result = _odometerRecordDataAccess.DeleteOdometerRecordById(recordId); + result = DeleteOdometerRecordWithChecks(recordId); break; case ImportMode.ReminderRecord: - result = _reminderRecordDataAccess.DeleteReminderRecordById(recordId); + result = DeleteReminderRecordWithChecks(recordId); break; } } diff --git a/Models/Collision/CollisionRecordInput.cs b/Models/Collision/CollisionRecordInput.cs index 9364cc5..1aebcca 100644 --- a/Models/Collision/CollisionRecordInput.cs +++ b/Models/Collision/CollisionRecordInput.cs @@ -15,6 +15,7 @@ public List Tags { get; set; } = new List(); public List ExtraFields { get; set; } = new List(); public List RequisitionHistory { get; set; } = new List(); + public List DeletedRequisitionHistory { get; set; } = new List(); public bool CopySuppliesAttachment { get; set; } = false; public CollisionRecord ToCollisionRecord() { return new CollisionRecord { Id = Id, diff --git a/Models/PlanRecord/PlanRecordInput.cs b/Models/PlanRecord/PlanRecordInput.cs index 22e059f..0a70820 100644 --- a/Models/PlanRecord/PlanRecordInput.cs +++ b/Models/PlanRecord/PlanRecordInput.cs @@ -17,6 +17,7 @@ public decimal Cost { get; set; } public List ExtraFields { get; set; } = new List(); public List RequisitionHistory { get; set; } = new List(); + public List DeletedRequisitionHistory { get; set; } = new List(); public bool CopySuppliesAttachment { get; set; } = false; public PlanRecord ToPlanRecord() { return new PlanRecord { Id = Id, diff --git a/Models/ServiceRecord/ServiceRecordInput.cs b/Models/ServiceRecord/ServiceRecordInput.cs index 6cbe8f8..251c736 100644 --- a/Models/ServiceRecord/ServiceRecordInput.cs +++ b/Models/ServiceRecord/ServiceRecordInput.cs @@ -15,6 +15,7 @@ public List Tags { get; set; } = new List(); public List ExtraFields { get; set; } = new List(); public List RequisitionHistory { get; set; } = new List(); + public List DeletedRequisitionHistory { get; set; } = new List(); public bool CopySuppliesAttachment { get; set; } = false; public ServiceRecord ToServiceRecord() { return new ServiceRecord { Id = Id, diff --git a/Models/Supply/SupplyUsageHistory.cs b/Models/Supply/SupplyUsageHistory.cs index e944de8..37eb153 100644 --- a/Models/Supply/SupplyUsageHistory.cs +++ b/Models/Supply/SupplyUsageHistory.cs @@ -1,6 +1,7 @@ namespace CarCareTracker.Models { public class SupplyUsageHistory { + public int Id { get; set; } public DateTime Date { get; set; } public string PartNumber { get; set; } public string Description { get; set; } diff --git a/Models/UpgradeRecord/UpgradeReportInput.cs b/Models/UpgradeRecord/UpgradeReportInput.cs index ea1b7ff..55027ef 100644 --- a/Models/UpgradeRecord/UpgradeReportInput.cs +++ b/Models/UpgradeRecord/UpgradeReportInput.cs @@ -15,6 +15,7 @@ public List Tags { get; set; } = new List(); public List ExtraFields { get; set; } = new List(); public List RequisitionHistory { get; set; } = new List(); + public List DeletedRequisitionHistory { get; set; } = new List(); public bool CopySuppliesAttachment { get; set; } = false; public UpgradeRecord ToUpgradeRecord() { return new UpgradeRecord { Id = Id, diff --git a/Views/Vehicle/_SupplyRequisitionHistory.cshtml b/Views/Vehicle/_SupplyRequisitionHistory.cshtml index f044966..1850942 100644 --- a/Views/Vehicle/_SupplyRequisitionHistory.cshtml +++ b/Views/Vehicle/_SupplyRequisitionHistory.cshtml @@ -1,13 +1,25 @@ @using CarCareTracker.Helper @inject IConfigHelper config @inject ITranslationHelper translator +@model List @{ var userConfig = config.GetUserConfig(User); var userLanguage = userConfig.UserLanguage; + var showDelete = Model.All(x => x.Id != default); + var showPartNumber = Model.Any(x => !string.IsNullOrWhiteSpace(x.PartNumber)); } -@model List