From b56e82d5c4505fcc8ba111414f790cb624404126 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Fri, 11 Jul 2025 13:25:45 +1000 Subject: [PATCH] resolves #151: `BYOD` sub type added to `User - Management` jobs --- Disco.Data/Repository/DiscoDataSeeder.cs | 9 ++ Disco.Models/Repository/Job/Job.cs | 4 - Disco.Models/Repository/Job/JobSubType.cs | 1 + Disco.Services/Jobs/JobFlagExtensions.cs | 59 ++++++------ Disco.Web/Views/Job/JobParts/Flags.cshtml | 9 +- .../Views/Job/JobParts/Flags.generated.cs | 89 ++++++++++--------- 6 files changed, 93 insertions(+), 78 deletions(-) diff --git a/Disco.Data/Repository/DiscoDataSeeder.cs b/Disco.Data/Repository/DiscoDataSeeder.cs index 3b86389e..7447eca8 100644 --- a/Disco.Data/Repository/DiscoDataSeeder.cs +++ b/Disco.Data/Repository/DiscoDataSeeder.cs @@ -208,6 +208,15 @@ namespace Disco.Data.Repository #endregion // End + // 2025-07-11 + #region "User Management - BYOD" Added + if (Database.JobSubTypes.Count(jst => jst.JobTypeId == JobType.JobTypeIds.UMgmt && jst.Id == JobSubType.UserManagementJobSubTypes.BYOD) == 0) + { + Database.JobSubTypes.Add(new JobSubType { Id = JobSubType.UserManagementJobSubTypes.BYOD, JobTypeId = JobType.JobTypeIds.UMgmt, Description = JobSubType.UserManagementJobSubTypes.BYOD }); + } + #endregion + // End + // 2012-05-29 - Audits #region "Audit" Added if (Database.JobSubTypes.Count(jst => jst.JobTypeId == JobType.JobTypeIds.HMisc && jst.Id == "Audit") == 0) diff --git a/Disco.Models/Repository/Job/Job.cs b/Disco.Models/Repository/Job/Job.cs index 0d3df33f..87a9ce61 100644 --- a/Disco.Models/Repository/Job/Job.cs +++ b/Disco.Models/Repository/Job/Job.cs @@ -60,10 +60,6 @@ namespace Disco.Models.Repository [ForeignKey("DeviceReturnedTechUserId")] public virtual User DeviceReturnedTechUser { get; set; } - //// Added 2012-10-23 G# - DBv5 Migration - //public virtual IList JobAssignments { get; set; } - //// End Added 2012-10-23 G# - DBv5 Migration - public virtual IList JobAttachments { get; set; } public virtual IList JobComponents { get; set; } public virtual IList JobLogs { get; set; } diff --git a/Disco.Models/Repository/Job/JobSubType.cs b/Disco.Models/Repository/Job/JobSubType.cs index 80dc137a..25e71ee9 100644 --- a/Disco.Models/Repository/Job/JobSubType.cs +++ b/Disco.Models/Repository/Job/JobSubType.cs @@ -25,6 +25,7 @@ namespace Disco.Models.Repository { public const string Infringement = "Infringement"; public const string Contact = "Contact"; + public const string BYOD = "BYOD"; } public override string ToString() diff --git a/Disco.Services/Jobs/JobFlagExtensions.cs b/Disco.Services/Jobs/JobFlagExtensions.cs index 8542d845..54c4c89e 100644 --- a/Disco.Services/Jobs/JobFlagExtensions.cs +++ b/Disco.Services/Jobs/JobFlagExtensions.cs @@ -8,11 +8,11 @@ namespace Disco.Services { public static class JobFlagExtensions { + private static Dictionary> cache; - private static Dictionary> allFlags; - private static void CacheAllFlags() + private static Dictionary> GetAllFlags() { - if (allFlags == null) + if (cache == null) { var fType = typeof(Job.UserManagementFlags); var fMembers = fType.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); @@ -20,57 +20,52 @@ namespace Disco.Services var flags = new Dictionary>(); foreach (var f in fMembers) { - DisplayAttribute display = (DisplayAttribute)(f.GetCustomAttributes(typeof(DisplayAttribute), false)[0]); - string gn = display.GroupName; - Dictionary g; - if (!flags.TryGetValue(gn, out g)) + var display = (DisplayAttribute)f.GetCustomAttributes(typeof(DisplayAttribute), false)[0]; + + if (!flags.TryGetValue(display.GroupName, out var group)) { - g = new Dictionary(); - flags.Add(gn, g); + group = new Dictionary(); + flags.Add(display.GroupName, group); } - g[(long)f.GetRawConstantValue()] = display.Name; + group[(long)f.GetRawConstantValue()] = display.Name; } - allFlags = flags; + cache = flags; } + return cache; } - public static Dictionary>> ValidFlagsGrouped(this Job j) + public static Dictionary>> ValidFlagsGrouped(this Job job) { - Dictionary>> validFlags = new Dictionary>>(); + var validFlags = new Dictionary>>(); - CacheAllFlags(); + var allFlags = GetAllFlags(); - var currentFlags = (long)(j.Flags ?? 0); + var currentFlags = (long)(job.Flags ?? 0); - foreach (var jt in j.JobSubTypes) + foreach (var jobSubType in job.JobSubTypes) { - Dictionary g; - if (allFlags.TryGetValue(jt.Id, out g)) + if (allFlags.TryGetValue(jobSubType.Id, out var group)) { - validFlags[jt.Id] = g.Select(f => new Tuple(f.Key, f.Value, ((currentFlags & f.Key) == f.Key))).ToList(); - } - else - { - validFlags[jt.Id] = null; + validFlags[jobSubType.Id] = group.Select(o => Tuple.Create(o.Key, o.Value, (currentFlags & o.Key) == o.Key)).ToList(); } } return validFlags; } - public static Dictionary> ValidFlags(this Job j) + + public static Dictionary> ValidFlags(this Job job) { - Dictionary> validFlags = new Dictionary>(); + var validFlags = new Dictionary>(); - CacheAllFlags(); + var allFlags = GetAllFlags(); - var currentFlags = (long)(j.Flags ?? 0); + var currentFlags = (long)(job.Flags ?? 0); - foreach (var jt in j.JobSubTypes) + foreach (var jobSubType in job.JobSubTypes) { - Dictionary g; - if (allFlags.TryGetValue(jt.Id, out g)) + if (allFlags.TryGetValue(jobSubType.Id, out var group)) { - foreach (var f in g) - validFlags[f.Key] = new Tuple(string.Format("{0}: {1}", jt.Description, f.Value), ((currentFlags & f.Key) == f.Key)); + foreach (var option in group) + validFlags[option.Key] = Tuple.Create($"{jobSubType.Description}: {option.Value}", (currentFlags & option.Key) == option.Key); } } return validFlags; diff --git a/Disco.Web/Views/Job/JobParts/Flags.cshtml b/Disco.Web/Views/Job/JobParts/Flags.cshtml index 51d354d5..73081476 100644 --- a/Disco.Web/Views/Job/JobParts/Flags.cshtml +++ b/Disco.Web/Views/Job/JobParts/Flags.cshtml @@ -3,6 +3,12 @@ Authorization.Require(Claims.Job.ShowFlags); var validFlags = Model.Job.ValidFlagsGrouped(); + + if (validFlags.Count == 0) + { + return; + } + var canEdit = Authorization.Has(Claims.Job.Properties.Flags); }
@@ -92,7 +98,8 @@ $flagCheckboxes.click(updateFlags); }); - }else + } + else { \r\n"); - #line 100 "..\..\Views\Job\JobParts\Flags.cshtml" + #line 107 "..\..\Views\Job\JobParts\Flags.cshtml" }