From caa0bedc93d2dbbd3a8ed2c5218fda672a4051f5 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Sat, 5 Jul 2025 14:14:07 +1000 Subject: [PATCH] Update #9: by default, hide decommissioned devices from search --- Disco.Services/Searching/Search.cs | 33 ++++++++------ Disco.Web/Controllers/SearchController.cs | 6 +-- .../T4MVC/SearchController.generated.cs | 8 ++-- Disco.Web/Views/Shared/_SearchDialog.cshtml | 12 +++-- .../Views/Shared/_SearchDialog.generated.cs | 45 ++++++++++++++++--- 5 files changed, 74 insertions(+), 30 deletions(-) diff --git a/Disco.Services/Searching/Search.cs b/Disco.Services/Searching/Search.cs index 3ae2adef..79e11904 100644 --- a/Disco.Services/Searching/Search.cs +++ b/Disco.Services/Searching/Search.cs @@ -261,7 +261,7 @@ namespace Disco.Services.Searching #endregion #region Devices - public static List SearchDevices(DiscoDataContext Database, string Term, int? LimitCount = ActiveDirectory.DefaultSearchResultLimit, bool SearchDetails = false) + public static List SearchDevices(DiscoDataContext Database, string Term, int? LimitCount = ActiveDirectory.DefaultSearchResultLimit, bool SearchDetails = false, bool includeDecommissioned = false) { IQueryable query; @@ -269,23 +269,28 @@ namespace Disco.Services.Searching if (SearchDetails) { - query = Database.Devices.Where(d => - d.AssetNumber.Contains(Term) || - d.DeviceDomainId.Contains(Term) || - d.SerialNumber.Contains(Term) || - d.Location.Contains(Term) || - Term.Contains(d.SerialNumber) || - d.DeviceDetails.Any(dd => dd.Value.Contains(Term)) + query = Database.Devices + .Where(d => includeDecommissioned || d.DecommissionedDate == null) + .Where(d => + d.AssetNumber.Contains(Term) || + d.DeviceDomainId.Contains(Term) || + d.SerialNumber.Contains(Term) || + d.Location.Contains(Term) || + Term.Contains(d.SerialNumber) || + d.DeviceDetails.Any(dd => dd.Value.Contains(Term)) ); } else { - query = Database.Devices.Where(d => - d.AssetNumber.Contains(Term) || - d.DeviceDomainId.Contains(Term) || - d.SerialNumber.Contains(Term) || - d.Location.Contains(Term) || - Term.Contains(d.SerialNumber)); + query = Database.Devices + .Where(d => includeDecommissioned || d.DecommissionedDate == null) + .Where(d => + d.AssetNumber.Contains(Term) || + d.DeviceDomainId.Contains(Term) || + d.SerialNumber.Contains(Term) || + d.Location.Contains(Term) || + Term.Contains(d.SerialNumber) + ); } return query diff --git a/Disco.Web/Controllers/SearchController.cs b/Disco.Web/Controllers/SearchController.cs index d5127870..0dca8d6d 100644 --- a/Disco.Web/Controllers/SearchController.cs +++ b/Disco.Web/Controllers/SearchController.cs @@ -14,7 +14,7 @@ namespace Disco.Web.Controllers { #region Query [DiscoAuthorizeAny(Claims.Job.Search, Claims.Device.Search, Claims.User.Search)] - public virtual ActionResult Query(string term, string limit = null, bool searchDetails = false) + public virtual ActionResult Query(string term, string limit = null, bool searchDetails = false, bool includeDecommissioned = false) { term = term.Trim(); int termInt; @@ -66,7 +66,7 @@ namespace Disco.Web.Controllers m.Jobs = Services.Searching.Search.SearchJobsTable(Database, term, LimitCount: null, IncludeJobStatus: true, SearchDetails: searchDetails); if (Authorization.Has(Claims.Device.Search)) - m.Devices = Services.Searching.Search.SearchDevices(Database, term, LimitCount: null, SearchDetails: searchDetails); + m.Devices = Services.Searching.Search.SearchDevices(Database, term, LimitCount: null, SearchDetails: searchDetails, includeDecommissioned: includeDecommissioned); if (Authorization.Has(Claims.User.Search)) m.Users = Services.Searching.Search.SearchUsers(Database, term, true, LimitCount: null); @@ -134,7 +134,7 @@ namespace Disco.Web.Controllers m.ErrorMessage = "A search term of at least two characters is required"; return View(m); } - m.Devices = Services.Searching.Search.SearchDevices(Database, term, null, searchDetails); + m.Devices = Services.Searching.Search.SearchDevices(Database, term, null, searchDetails, includeDecommissioned); if (m.Devices.Count == 1) { return RedirectToAction(MVC.Device.Show(m.Devices[0].Id)); diff --git a/Disco.Web/Extensions/T4MVC/SearchController.generated.cs b/Disco.Web/Extensions/T4MVC/SearchController.generated.cs index 1d3ea264..e68cad63 100644 --- a/Disco.Web/Extensions/T4MVC/SearchController.generated.cs +++ b/Disco.Web/Extensions/T4MVC/SearchController.generated.cs @@ -100,6 +100,7 @@ namespace Disco.Web.Controllers public readonly string term = "term"; public readonly string limit = "limit"; public readonly string searchDetails = "searchDetails"; + public readonly string includeDecommissioned = "includeDecommissioned"; } static readonly ViewsClass s_views = new ViewsClass(); [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] @@ -123,16 +124,17 @@ namespace Disco.Web.Controllers public T4MVC_SearchController() : base(Dummy.Instance) { } [NonAction] - partial void QueryOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string term, string limit, bool searchDetails); + partial void QueryOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string term, string limit, bool searchDetails, bool includeDecommissioned); [NonAction] - public override System.Web.Mvc.ActionResult Query(string term, string limit, bool searchDetails) + public override System.Web.Mvc.ActionResult Query(string term, string limit, bool searchDetails, bool includeDecommissioned) { var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Query); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "term", term); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "limit", limit); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "searchDetails", searchDetails); - QueryOverride(callInfo, term, limit, searchDetails); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "includeDecommissioned", includeDecommissioned); + QueryOverride(callInfo, term, limit, searchDetails, includeDecommissioned); return callInfo; } diff --git a/Disco.Web/Views/Shared/_SearchDialog.cshtml b/Disco.Web/Views/Shared/_SearchDialog.cshtml index 475d1a87..d144b9ac 100644 --- a/Disco.Web/Views/Shared/_SearchDialog.cshtml +++ b/Disco.Web/Views/Shared/_SearchDialog.cshtml @@ -14,10 +14,14 @@ { @Html.Hidden("limit", Model) if (Model == "jobs" || Model == "devices") - { -
- + { +
+ + } + if (Model == "devices") + { +
+ } } diff --git a/Disco.Web/Views/Shared/_SearchDialog.generated.cs b/Disco.Web/Views/Shared/_SearchDialog.generated.cs index d2426dee..895c997b 100644 --- a/Disco.Web/Views/Shared/_SearchDialog.generated.cs +++ b/Disco.Web/Views/Shared/_SearchDialog.generated.cs @@ -112,14 +112,14 @@ WriteLiteral("\r\n"); #line 15 "..\..\Views\Shared\_SearchDialog.cshtml" if (Model == "jobs" || Model == "devices") - { + { #line default #line hidden -WriteLiteral("
\r\n"); +WriteLiteral("
\r\n"); -WriteLiteral(" "); -WriteLiteral("Search Details\r\n"); +WriteLiteral("Search Details\r\n"); - #line 21 "..\..\Views\Shared\_SearchDialog.cshtml" + #line 20 "..\..\Views\Shared\_SearchDialog.cshtml" + } + if (Model == "devices") + { + + + #line default + #line hidden +WriteLiteral("
\r\n"); + +WriteLiteral(" "); + +WriteLiteral("Include Decommissioned\r\n"); + + + #line 25 "..\..\Views\Shared\_SearchDialog.cshtml" } } @@ -161,7 +194,7 @@ WriteLiteral(">\r\n $(function () {\r\n $(\'#searchDia "watermark(\'Search\').focus();\r\n });\r\n \r\n \r\n"); - #line 35 "..\..\Views\Shared\_SearchDialog.cshtml" + #line 39 "..\..\Views\Shared\_SearchDialog.cshtml" } #line default