Update #9: by default, hide decommissioned devices from search

This commit is contained in:
Gary Sharp
2025-07-05 14:14:07 +10:00
parent 6e99b4503b
commit caa0bedc93
5 changed files with 74 additions and 30 deletions
+9 -4
View File
@@ -261,7 +261,7 @@ namespace Disco.Services.Searching
#endregion #endregion
#region Devices #region Devices
public static List<DeviceSearchResultItem> SearchDevices(DiscoDataContext Database, string Term, int? LimitCount = ActiveDirectory.DefaultSearchResultLimit, bool SearchDetails = false) public static List<DeviceSearchResultItem> SearchDevices(DiscoDataContext Database, string Term, int? LimitCount = ActiveDirectory.DefaultSearchResultLimit, bool SearchDetails = false, bool includeDecommissioned = false)
{ {
IQueryable<Device> query; IQueryable<Device> query;
@@ -269,7 +269,9 @@ namespace Disco.Services.Searching
if (SearchDetails) if (SearchDetails)
{ {
query = Database.Devices.Where(d => query = Database.Devices
.Where(d => includeDecommissioned || d.DecommissionedDate == null)
.Where(d =>
d.AssetNumber.Contains(Term) || d.AssetNumber.Contains(Term) ||
d.DeviceDomainId.Contains(Term) || d.DeviceDomainId.Contains(Term) ||
d.SerialNumber.Contains(Term) || d.SerialNumber.Contains(Term) ||
@@ -280,12 +282,15 @@ namespace Disco.Services.Searching
} }
else else
{ {
query = Database.Devices.Where(d => query = Database.Devices
.Where(d => includeDecommissioned || d.DecommissionedDate == null)
.Where(d =>
d.AssetNumber.Contains(Term) || d.AssetNumber.Contains(Term) ||
d.DeviceDomainId.Contains(Term) || d.DeviceDomainId.Contains(Term) ||
d.SerialNumber.Contains(Term) || d.SerialNumber.Contains(Term) ||
d.Location.Contains(Term) || d.Location.Contains(Term) ||
Term.Contains(d.SerialNumber)); Term.Contains(d.SerialNumber)
);
} }
return query return query
+3 -3
View File
@@ -14,7 +14,7 @@ namespace Disco.Web.Controllers
{ {
#region Query #region Query
[DiscoAuthorizeAny(Claims.Job.Search, Claims.Device.Search, Claims.User.Search)] [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(); term = term.Trim();
int termInt; int termInt;
@@ -66,7 +66,7 @@ namespace Disco.Web.Controllers
m.Jobs = Services.Searching.Search.SearchJobsTable(Database, term, LimitCount: null, IncludeJobStatus: true, SearchDetails: searchDetails); m.Jobs = Services.Searching.Search.SearchJobsTable(Database, term, LimitCount: null, IncludeJobStatus: true, SearchDetails: searchDetails);
if (Authorization.Has(Claims.Device.Search)) 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)) if (Authorization.Has(Claims.User.Search))
m.Users = Services.Searching.Search.SearchUsers(Database, term, true, LimitCount: null); 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"; m.ErrorMessage = "A search term of at least two characters is required";
return View(m); 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) if (m.Devices.Count == 1)
{ {
return RedirectToAction(MVC.Device.Show(m.Devices[0].Id)); return RedirectToAction(MVC.Device.Show(m.Devices[0].Id));
@@ -100,6 +100,7 @@ namespace Disco.Web.Controllers
public readonly string term = "term"; public readonly string term = "term";
public readonly string limit = "limit"; public readonly string limit = "limit";
public readonly string searchDetails = "searchDetails"; public readonly string searchDetails = "searchDetails";
public readonly string includeDecommissioned = "includeDecommissioned";
} }
static readonly ViewsClass s_views = new ViewsClass(); static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -123,16 +124,17 @@ namespace Disco.Web.Controllers
public T4MVC_SearchController() : base(Dummy.Instance) { } public T4MVC_SearchController() : base(Dummy.Instance) { }
[NonAction] [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] [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); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Query);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "term", term); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "term", term);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "limit", limit); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "limit", limit);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "searchDetails", searchDetails); 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; return callInfo;
} }
+6 -2
View File
@@ -16,8 +16,12 @@
if (Model == "jobs" || Model == "devices") if (Model == "jobs" || Model == "devices")
{ {
<br /> <br />
<input type="checkbox" name="searchDetails" id="searchDetails" value="true" /><label <input type="checkbox" name="searchDetails" id="searchDetails" value="true" /><label for="searchDetails">Search Details</label>
for="searchDetails">Search Details</label> }
if (Model == "devices")
{
<br />
<input type="checkbox" name="includeDecommissioned" id="includeDecommissioned" value="true" /><label for="includeDecommissioned">Include Decommissioned</label>
} }
} }
</td> </td>
@@ -131,10 +131,43 @@ WriteLiteral(" value=\"true\"");
WriteLiteral(" />"); WriteLiteral(" />");
WriteLiteral("<label\r\n for=\"searchDetails\">Search Details</label>\r\n"); WriteLiteral("<label");
WriteLiteral(" for=\"searchDetails\"");
WriteLiteral(">Search Details</label>\r\n");
#line 21 "..\..\Views\Shared\_SearchDialog.cshtml" #line 20 "..\..\Views\Shared\_SearchDialog.cshtml"
}
if (Model == "devices")
{
#line default
#line hidden
WriteLiteral(" <br />\r\n");
WriteLiteral(" <input");
WriteLiteral(" type=\"checkbox\"");
WriteLiteral(" name=\"includeDecommissioned\"");
WriteLiteral(" id=\"includeDecommissioned\"");
WriteLiteral(" value=\"true\"");
WriteLiteral(" />");
WriteLiteral("<label");
WriteLiteral(" for=\"includeDecommissioned\"");
WriteLiteral(">Include Decommissioned</label>\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 </script>\r\n </div>\r\n"); "watermark(\'Search\').focus();\r\n });\r\n </script>\r\n </div>\r\n");
#line 35 "..\..\Views\Shared\_SearchDialog.cshtml" #line 39 "..\..\Views\Shared\_SearchDialog.cshtml"
} }
#line default #line default