diff --git a/Disco.Models/UI/Config/DeviceModel/ConfigDeviceModelShowModel.cs b/Disco.Models/UI/Config/DeviceModel/ConfigDeviceModelShowModel.cs index 80e1249a..79afdfdf 100644 --- a/Disco.Models/UI/Config/DeviceModel/ConfigDeviceModelShowModel.cs +++ b/Disco.Models/UI/Config/DeviceModel/ConfigDeviceModelShowModel.cs @@ -12,5 +12,6 @@ namespace Disco.Models.UI.Config.DeviceModel int DeviceDecommissionedCount { get; set; } bool CanDelete { get; set; } + bool CanDecommission { get; set; } } } diff --git a/Disco.Models/UI/Config/DeviceProfile/ConfigDeviceProfileShowModel.cs b/Disco.Models/UI/Config/DeviceProfile/ConfigDeviceProfileShowModel.cs index 5a338217..a50d9efb 100644 --- a/Disco.Models/UI/Config/DeviceProfile/ConfigDeviceProfileShowModel.cs +++ b/Disco.Models/UI/Config/DeviceProfile/ConfigDeviceProfileShowModel.cs @@ -17,5 +17,6 @@ namespace Disco.Models.UI.Config.DeviceProfile int DeviceDecommissionedCount { get; set; } bool CanDelete { get; set; } + bool CanDecommission { get; set; } } } diff --git a/Disco.Services/Devices/DeviceBatchExtensions.cs b/Disco.Services/Devices/DeviceBatchExtensions.cs index 563cfcab..6e88c6c0 100644 --- a/Disco.Services/Devices/DeviceBatchExtensions.cs +++ b/Disco.Services/Devices/DeviceBatchExtensions.cs @@ -48,12 +48,5 @@ namespace Disco.Services return true; } - public static void Decommission(this DeviceBatch db, DiscoDataContext database, DecommissionReasons Reason, bool unassignUsers) - { - if (!db.CanDecommission(database)) - throw new InvalidOperationException("Decommission of Device Batch is Denied"); - - - } } } diff --git a/Disco.Services/Devices/DeviceModelExtensions.cs b/Disco.Services/Devices/DeviceModelExtensions.cs index 2e741c4a..93f9b8b2 100644 --- a/Disco.Services/Devices/DeviceModelExtensions.cs +++ b/Disco.Services/Devices/DeviceModelExtensions.cs @@ -48,6 +48,17 @@ namespace Disco.Services Database.DeviceModels.Remove(dm); } + public static bool CanDecommission(this DeviceModel dm, DiscoDataContext database) + { + if (!UserService.CurrentAuthorization.Has(Claims.Device.Actions.Import)) + return false; + + if (!database.Devices.Any(d => d.DeviceModelId == dm.Id && d.DecommissionedDate == null)) + return false; + + return true; + } + public static Tuple GetOrCreateDeviceModel(this DbSet DeviceModelsSet, string Manufacturer, string Model, string ModelType) { if (string.IsNullOrWhiteSpace(Manufacturer)) diff --git a/Disco.Services/Devices/DeviceProfileExtensions.cs b/Disco.Services/Devices/DeviceProfileExtensions.cs index 9cbdda62..d13ff6a7 100644 --- a/Disco.Services/Devices/DeviceProfileExtensions.cs +++ b/Disco.Services/Devices/DeviceProfileExtensions.cs @@ -70,7 +70,18 @@ namespace Disco.Services // Delete Profile Database.DeviceProfiles.Remove(dp); } - + + public static bool CanDecommission(this DeviceProfile dp, DiscoDataContext database) + { + if (!UserService.CurrentAuthorization.Has(Claims.Device.Actions.Import)) + return false; + + if (!database.Devices.Any(d => d.DeviceProfileId == dp.Id && d.DecommissionedDate == null)) + return false; + + return true; + } + public static IEnumerable GetCertificateProviders(this DeviceProfile dp) { if (!string.IsNullOrEmpty(dp.CertificateProviders)) diff --git a/Disco.Services/Devices/Importing/DeviceDecommissionImportContext.cs b/Disco.Services/Devices/Importing/DeviceDecommissionImportContext.cs index 7dff455d..0061199f 100644 --- a/Disco.Services/Devices/Importing/DeviceDecommissionImportContext.cs +++ b/Disco.Services/Devices/Importing/DeviceDecommissionImportContext.cs @@ -93,6 +93,26 @@ namespace Disco.Services.Devices.Importing return new DeviceDecommissionImportContext($"Batch: {deviceBatch.Name} ({deviceBatch.Id})", devices, decommissionReason, unassignUsers); } + public static DeviceDecommissionImportContext Create(DiscoDataContext database, DeviceProfile deviceProfile, DecommissionReasons decommissionReason, bool unassignUsers) + { + var devices = database.Devices + .Include(d => d.Jobs) + .Include(d => d.AssignedUser) + .Where(d => d.DeviceProfileId == deviceProfile.Id && d.DecommissionedDate == null) + .ToList(); + return new DeviceDecommissionImportContext($"Profile: {deviceProfile.Name} ({deviceProfile.Id})", devices, decommissionReason, unassignUsers); + } + + public static DeviceDecommissionImportContext Create(DiscoDataContext database, DeviceModel deviceModel, DecommissionReasons decommissionReason, bool unassignUsers) + { + var devices = database.Devices + .Include(d => d.Jobs) + .Include(d => d.AssignedUser) + .Where(d => d.DeviceModelId == deviceModel.Id && d.DecommissionedDate == null) + .ToList(); + return new DeviceDecommissionImportContext($"Model: {deviceModel.Description} ({deviceModel.Id})", devices, decommissionReason, unassignUsers); + } + public IDeviceImportColumn GetColumn(int Index) => throw new NotImplementedException(); diff --git a/Disco.Services/Devices/Importing/DeviceImport.cs b/Disco.Services/Devices/Importing/DeviceImport.cs index a27e8b53..440d6f35 100644 --- a/Disco.Services/Devices/Importing/DeviceImport.cs +++ b/Disco.Services/Devices/Importing/DeviceImport.cs @@ -43,6 +43,12 @@ namespace Disco.Services.Devices.Importing public static IDeviceImportContext BeginDecommissionImport(DiscoDataContext database, DeviceBatch deviceBatch, DecommissionReasons decommissionReason, bool unassignUsers) => DeviceDecommissionImportContext.Create(database, deviceBatch, decommissionReason, unassignUsers); + public static IDeviceImportContext BeginDecommissionImport(DiscoDataContext database, DeviceProfile deviceProfile, DecommissionReasons decommissionReason, bool unassignUsers) + => DeviceDecommissionImportContext.Create(database, deviceProfile, decommissionReason, unassignUsers); + + public static IDeviceImportContext BeginDecommissionImport(DiscoDataContext database, DeviceModel deviceModel, DecommissionReasons decommissionReason, bool unassignUsers) + => DeviceDecommissionImportContext.Create(database, deviceModel, decommissionReason, unassignUsers); + private static void GuessHeaderTypes(this IDeviceImportContext Context, DiscoDataContext Database) { using (var dataReader = Context.GetDataReader()) diff --git a/Disco.Web/Areas/API/Controllers/DeviceController.cs b/Disco.Web/Areas/API/Controllers/DeviceController.cs index 620c06dc..c4030c0d 100644 --- a/Disco.Web/Areas/API/Controllers/DeviceController.cs +++ b/Disco.Web/Areas/API/Controllers/DeviceController.cs @@ -730,6 +730,32 @@ namespace Disco.Web.Areas.API.Controllers return RedirectToAction(MVC.Device.ImportReview(context.SessionId)); } + [DiscoAuthorize(Claims.Device.Actions.Import)] + [HttpPost, ValidateAntiForgeryToken] + public virtual ActionResult DeviceProfileDecommission(int id, DecommissionReasons? decommissionReason = null, bool? unassignUsers = null) + { + var deviceProfile = Database.DeviceProfiles.Find(id) + ?? throw new ArgumentException("Invalid Device Profile Id", nameof(id)); + if (decommissionReason == null) + throw new ArgumentNullException(nameof(decommissionReason), "Decommission Reason is required"); + var context = DeviceImport.BeginDecommissionImport(Database, deviceProfile, decommissionReason.Value, unassignUsers.GetValueOrDefault()); + Import_StoreContext(context); + return RedirectToAction(MVC.Device.ImportReview(context.SessionId)); + } + + [DiscoAuthorize(Claims.Device.Actions.Import)] + [HttpPost, ValidateAntiForgeryToken] + public virtual ActionResult DeviceModelDecommission(int id, DecommissionReasons? decommissionReason = null, bool? unassignUsers = null) + { + var deviceModel = Database.DeviceModels.Find(id) + ?? throw new ArgumentException("Invalid Device Model Id", nameof(id)); + if (decommissionReason == null) + throw new ArgumentNullException(nameof(decommissionReason), "Decommission Reason is required"); + var context = DeviceImport.BeginDecommissionImport(Database, deviceModel, decommissionReason.Value, unassignUsers.GetValueOrDefault()); + Import_StoreContext(context); + return RedirectToAction(MVC.Device.ImportReview(context.SessionId)); + } + #endregion #region Exporting diff --git a/Disco.Web/Areas/Config/Controllers/DeviceModelController.cs b/Disco.Web/Areas/Config/Controllers/DeviceModelController.cs index cc2191e3..e4b9edea 100644 --- a/Disco.Web/Areas/Config/Controllers/DeviceModelController.cs +++ b/Disco.Web/Areas/Config/Controllers/DeviceModelController.cs @@ -40,6 +40,7 @@ namespace Disco.Web.Areas.Config.Controllers }; m.CanDelete = m.DeviceModel.CanDelete(Database); + m.CanDecommission = m.DeviceModel.CanDecommission(Database); if (m.DeviceCount - m.DeviceDecommissionedCount > 0) m.BulkGenerateDocumentTemplates = Database.DocumentTemplates.Where(t => !t.IsHidden).ToList(); diff --git a/Disco.Web/Areas/Config/Controllers/DeviceProfileController.cs b/Disco.Web/Areas/Config/Controllers/DeviceProfileController.cs index 7e7aa5d1..44a33e49 100644 --- a/Disco.Web/Areas/Config/Controllers/DeviceProfileController.cs +++ b/Disco.Web/Areas/Config/Controllers/DeviceProfileController.cs @@ -85,6 +85,7 @@ namespace Disco.Web.Areas.Config.Controllers }); } m.CanDelete = m.DeviceProfile.CanDelete(Database); + m.CanDecommission = m.DeviceProfile.CanDecommission(Database); if (m.DeviceCount - m.DeviceDecommissionedCount > 0) m.BulkGenerateDocumentTemplates = Database.DocumentTemplates.Where(t => !t.IsHidden).ToList(); diff --git a/Disco.Web/Areas/Config/Models/DeviceModel/ShowModel.cs b/Disco.Web/Areas/Config/Models/DeviceModel/ShowModel.cs index ec1cfffd..7edfa93a 100644 --- a/Disco.Web/Areas/Config/Models/DeviceModel/ShowModel.cs +++ b/Disco.Web/Areas/Config/Models/DeviceModel/ShowModel.cs @@ -18,6 +18,7 @@ namespace Disco.Web.Areas.Config.Models.DeviceModel public int DeviceDecommissionedCount { get; set; } public bool CanDelete { get; set; } + public bool CanDecommission { get; set; } public override int DeviceGroupId => DeviceModel.Id; } diff --git a/Disco.Web/Areas/Config/Models/DeviceProfile/ShowModel.cs b/Disco.Web/Areas/Config/Models/DeviceProfile/ShowModel.cs index 540a4fc1..cbc7ecba 100644 --- a/Disco.Web/Areas/Config/Models/DeviceProfile/ShowModel.cs +++ b/Disco.Web/Areas/Config/Models/DeviceProfile/ShowModel.cs @@ -44,6 +44,7 @@ namespace Disco.Web.Areas.Config.Models.DeviceProfile public int DeviceDecommissionedCount { get; set; } public bool CanDelete { get; set; } + public bool CanDecommission { get; set; } public override int DeviceGroupId => DeviceProfile.Id; } diff --git a/Disco.Web/Areas/Config/Views/DeviceModel/Show.cshtml b/Disco.Web/Areas/Config/Views/DeviceModel/Show.cshtml index 974ce0be..2c97a39b 100644 --- a/Disco.Web/Areas/Config/Views/DeviceModel/Show.cshtml +++ b/Disco.Web/Areas/Config/Views/DeviceModel/Show.cshtml @@ -247,6 +247,65 @@ @Html.Partial(MVC.Config.DeviceModel.Views._DeviceComponentsTable, Model.DeviceComponentsModel) @Html.Partial(MVC.Config.Shared.Views._DeviceGroupDocumentBulkGenerate, Model)
+ @if (Model.CanDecommission) + { + +
+ @using (Html.BeginForm(MVC.API.Device.DeviceModelDecommission(Model.DeviceModel.Id), FormMethod.Post)) + { + @Html.AntiForgeryToken() +
+  Why are these devices to be decommissioned? +
+
+
    + @foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) + { +
  • + + +
  • + } +
+
+ +
+ } +
+ + } @if (Model.CanDelete) { @Html.ActionLinkButton("Delete", MVC.API.DeviceModel.Delete(Model.DeviceModel.Id, true), "buttonDelete") diff --git a/Disco.Web/Areas/Config/Views/DeviceModel/Show.generated.cs b/Disco.Web/Areas/Config/Views/DeviceModel/Show.generated.cs index 87d7e05f..7ca6a8cf 100644 --- a/Disco.Web/Areas/Config/Views/DeviceModel/Show.generated.cs +++ b/Disco.Web/Areas/Config/Views/DeviceModel/Show.generated.cs @@ -824,6 +824,224 @@ WriteLiteral(">\r\n"); #line hidden #line 250 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + if (Model.CanDecommission) + { + + + #line default + #line hidden +WriteLiteral(" Decommission All Devices\r\n"); + +WriteLiteral(" \r\n"); + + + #line 254 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + + + #line default + #line hidden + + #line 254 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + using (Html.BeginForm(MVC.API.Device.DeviceModelDecommission(Model.DeviceModel.Id), FormMethod.Post)) + { + + + #line default + #line hidden + + #line 256 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + Write(Html.AntiForgeryToken()); + + + #line default + #line hidden + + #line 256 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" \r\n  Why are these devices to be decommissioned?\r\n
\r\n"); + +WriteLiteral("
\r\n \r\n"); + + + #line 262 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + + + #line default + #line hidden + + #line 262 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) + { + + + #line default + #line hidden +WriteLiteral("
  • \r\n ((int)decommissionReason + + #line default + #line hidden +, 9847), false) +); + +WriteLiteral("\r\n name=\"decommissionReason\""); + +WriteAttribute("value", Tuple.Create(" value=\"", 9940), Tuple.Create("\"", 9974) + + #line 266 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" +, Tuple.Create(Tuple.Create("", 9948), Tuple.Create((int)decommissionReason + + #line default + #line hidden +, 9948), false) +); + +WriteLiteral(" "); + + + #line 266 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + Write((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty); + + + #line default + #line hidden +WriteLiteral(" />\r\n ((int)decommissionReason + + #line default + #line hidden +, 10159), false) +); + +WriteLiteral(">"); + + + #line 267 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + Write(decommissionReason.ReasonMessage()); + + + #line default + #line hidden +WriteLiteral("\r\n
  • \r\n"); + + + #line 269 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n
    \r\n \r\n \r\n Unassign devices users\r\n " + +"\r\n
    \r\n"); + + + #line 277 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + +WriteLiteral(" + $(function () { + let buttonDialog = null; + $('#DeviceModel_Decommission').click(function () { + if (!buttonDialog) { + buttonDialog = $('#DeviceModel_Decommission_Dialog') + .dialog({ + resizable: false, + modal: true, + autoOpen: false, + buttons: { + ""Decommission"": function () { + const $this = $(this); + $this.find('form').trigger('submit'); + $this.dialog(""disable""); + $this.dialog(""option"", ""buttons"", null); + }, + Cancel: function () { + $(this).dialog(""close""); + } + } + }); + } + buttonDialog.dialog('open'); + return false; + }); + + }); + +"); + + + #line 308 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 309 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" if (Model.CanDelete) { @@ -831,14 +1049,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 252 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 311 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" Write(Html.ActionLinkButton("Delete", MVC.API.DeviceModel.Delete(Model.DeviceModel.Id, true), "buttonDelete")); #line default #line hidden - #line 252 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 311 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" } @@ -848,7 +1066,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 254 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 313 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" if (Model.DeviceCount > 0) { if (Authorization.Has(Claims.Device.Actions.Export)) @@ -858,14 +1076,14 @@ WriteLiteral(" "); #line default #line hidden - #line 258 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 317 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.DeviceExportTypes.Model, Model.DeviceModel.Id))); #line default #line hidden - #line 258 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 317 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" } if (Authorization.Has(Claims.Device.Search) && Model.DeviceCount > 0) @@ -875,14 +1093,14 @@ WriteLiteral(" "); #line default #line hidden - #line 262 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 321 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" Write(Html.ActionLinkButton(string.Format("View {0} Device{1}", Model.DeviceCount, (Model.DeviceCount != 1 ? "s" : null)), MVC.Search.Query(Model.DeviceModel.Id.ToString(), "DeviceModel"))); #line default #line hidden - #line 262 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" + #line 321 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml" } } diff --git a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml index 48f00b2f..039bd690 100644 --- a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml +++ b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml @@ -1006,6 +1006,65 @@ } @Html.Partial(MVC.Config.Shared.Views._DeviceGroupDocumentBulkGenerate, Model)
    + @if (Model.CanDecommission) + { + +
    + @using (Html.BeginForm(MVC.API.Device.DeviceProfileDecommission(Model.DeviceProfile.Id), FormMethod.Post)) + { + @Html.AntiForgeryToken() +
    +  Why are these devices to be decommissioned? +
    +
    +
      + @foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) + { +
    • + + +
    • + } +
    +
    + +
    + } +
    + + } @if (canDelete) { @Html.ActionLinkButton("Delete", MVC.API.DeviceProfile.Delete(Model.DeviceProfile.Id, true), "buttonDelete") diff --git a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs index 4d9e0e52..e2dc5092 100644 --- a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs +++ b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs @@ -2989,6 +2989,224 @@ WriteLiteral(">\r\n"); #line hidden #line 1009 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + if (Model.CanDecommission) + { + + + #line default + #line hidden +WriteLiteral(" Decommission All Devices\r\n"); + +WriteLiteral(" \r\n"); + + + #line 1013 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + + + #line default + #line hidden + + #line 1013 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + using (Html.BeginForm(MVC.API.Device.DeviceProfileDecommission(Model.DeviceProfile.Id), FormMethod.Post)) + { + + + #line default + #line hidden + + #line 1015 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + Write(Html.AntiForgeryToken()); + + + #line default + #line hidden + + #line 1015 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" \r\n  Why are these devices to be decommissioned?\r\n
    \r\n"); + +WriteLiteral("
    \r\n \r\n"); + + + #line 1021 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + + + #line default + #line hidden + + #line 1021 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) + { + + + #line default + #line hidden +WriteLiteral("
  • \r\n ((int)decommissionReason + + #line default + #line hidden +, 57023), false) +); + +WriteLiteral("\r\n name=\"decommissionReason\""); + +WriteAttribute("value", Tuple.Create(" value=\"", 57116), Tuple.Create("\"", 57150) + + #line 1025 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" +, Tuple.Create(Tuple.Create("", 57124), Tuple.Create((int)decommissionReason + + #line default + #line hidden +, 57124), false) +); + +WriteLiteral(" "); + + + #line 1025 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + Write((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty); + + + #line default + #line hidden +WriteLiteral(" />\r\n ((int)decommissionReason + + #line default + #line hidden +, 57337), false) +); + +WriteLiteral(">"); + + + #line 1026 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + Write(decommissionReason.ReasonMessage()); + + + #line default + #line hidden +WriteLiteral("\r\n
  • \r\n"); + + + #line 1028 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n
    \r\n \r\n \r\n Unassign devices users\r\n " + +"\r\n
    \r\n"); + + + #line 1036 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + +WriteLiteral(" + $(function () { + let buttonDialog = null; + $('#DeviceProfile_Decommission').click(function () { + if (!buttonDialog) { + buttonDialog = $('#DeviceProfile_Decommission_Dialog') + .dialog({ + resizable: false, + modal: true, + autoOpen: false, + buttons: { + ""Decommission"": function () { + const $this = $(this); + $this.find('form').trigger('submit'); + $this.dialog(""disable""); + $this.dialog(""option"", ""buttons"", null); + }, + Cancel: function () { + $(this).dialog(""close""); + } + } + }); + } + buttonDialog.dialog('open'); + return false; + }); + + }); + +"); + + + #line 1067 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 1068 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canDelete) { @@ -2996,14 +3214,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 1011 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1070 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.ActionLinkButton("Delete", MVC.API.DeviceProfile.Delete(Model.DeviceProfile.Id, true), "buttonDelete")); #line default #line hidden - #line 1011 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1070 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3013,7 +3231,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 1013 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1072 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (Authorization.Has(Claims.Device.Actions.Export)) { @@ -3021,14 +3239,14 @@ WriteLiteral(" "); #line default #line hidden - #line 1015 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1074 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.DeviceExportTypes.Profile, Model.DeviceProfile.Id))); #line default #line hidden - #line 1015 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1074 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3038,7 +3256,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 1017 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1076 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (Authorization.Has(Claims.Device.Search) && Model.DeviceCount > 0) { @@ -3046,14 +3264,14 @@ WriteLiteral(" "); #line default #line hidden - #line 1019 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1078 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.ActionLinkButton(string.Format("View {0} Device{1}", Model.DeviceCount, (Model.DeviceCount != 1 ? "s" : null)), MVC.Search.Query(Model.DeviceProfile.Id.ToString(), "DeviceProfile"))); #line default #line hidden - #line 1019 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1078 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } diff --git a/Disco.Web/Extensions/T4MVC/API.DeviceController.generated.cs b/Disco.Web/Extensions/T4MVC/API.DeviceController.generated.cs index 0cc05bd3..0c5a54e5 100644 --- a/Disco.Web/Extensions/T4MVC/API.DeviceController.generated.cs +++ b/Disco.Web/Extensions/T4MVC/API.DeviceController.generated.cs @@ -224,6 +224,18 @@ namespace Disco.Web.Areas.API.Controllers } [NonAction] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult DeviceProfileDecommission() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DeviceProfileDecommission); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult DeviceModelDecommission() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DeviceModelDecommission); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public virtual System.Web.Mvc.ActionResult Export() { return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export); @@ -283,6 +295,8 @@ namespace Disco.Web.Areas.API.Controllers public readonly string ImportParse = "ImportParse"; public readonly string ImportApply = "ImportApply"; public readonly string DeviceBatchDecommission = "DeviceBatchDecommission"; + public readonly string DeviceProfileDecommission = "DeviceProfileDecommission"; + public readonly string DeviceModelDecommission = "DeviceModelDecommission"; public readonly string Export = "Export"; public readonly string ExportRetrieve = "ExportRetrieve"; public readonly string SaveExport = "SaveExport"; @@ -319,6 +333,8 @@ namespace Disco.Web.Areas.API.Controllers public const string ImportParse = "ImportParse"; public const string ImportApply = "ImportApply"; public const string DeviceBatchDecommission = "DeviceBatchDecommission"; + public const string DeviceProfileDecommission = "DeviceProfileDecommission"; + public const string DeviceModelDecommission = "DeviceModelDecommission"; public const string Export = "Export"; public const string ExportRetrieve = "ExportRetrieve"; public const string SaveExport = "SaveExport"; @@ -575,6 +591,26 @@ namespace Disco.Web.Areas.API.Controllers public readonly string decommissionReason = "decommissionReason"; public readonly string unassignUsers = "unassignUsers"; } + static readonly ActionParamsClass_DeviceProfileDecommission s_params_DeviceProfileDecommission = new ActionParamsClass_DeviceProfileDecommission(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_DeviceProfileDecommission DeviceProfileDecommissionParams { get { return s_params_DeviceProfileDecommission; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_DeviceProfileDecommission + { + public readonly string id = "id"; + public readonly string decommissionReason = "decommissionReason"; + public readonly string unassignUsers = "unassignUsers"; + } + static readonly ActionParamsClass_DeviceModelDecommission s_params_DeviceModelDecommission = new ActionParamsClass_DeviceModelDecommission(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_DeviceModelDecommission DeviceModelDecommissionParams { get { return s_params_DeviceModelDecommission; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_DeviceModelDecommission + { + public readonly string id = "id"; + public readonly string decommissionReason = "decommissionReason"; + public readonly string unassignUsers = "unassignUsers"; + } static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export(); [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public ActionParamsClass_Export ExportParams { get { return s_params_Export; } } @@ -975,6 +1011,34 @@ namespace Disco.Web.Areas.API.Controllers return callInfo; } + [NonAction] + partial void DeviceProfileDecommissionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, Disco.Models.Repository.DecommissionReasons? decommissionReason, bool? unassignUsers); + + [NonAction] + public override System.Web.Mvc.ActionResult DeviceProfileDecommission(int id, Disco.Models.Repository.DecommissionReasons? decommissionReason, bool? unassignUsers) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DeviceProfileDecommission); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "decommissionReason", decommissionReason); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "unassignUsers", unassignUsers); + DeviceProfileDecommissionOverride(callInfo, id, decommissionReason, unassignUsers); + return callInfo; + } + + [NonAction] + partial void DeviceModelDecommissionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, Disco.Models.Repository.DecommissionReasons? decommissionReason, bool? unassignUsers); + + [NonAction] + public override System.Web.Mvc.ActionResult DeviceModelDecommission(int id, Disco.Models.Repository.DecommissionReasons? decommissionReason, bool? unassignUsers) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DeviceModelDecommission); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "decommissionReason", decommissionReason); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "unassignUsers", unassignUsers); + DeviceModelDecommissionOverride(callInfo, id, decommissionReason, unassignUsers); + return callInfo; + } + [NonAction] partial void ExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, Disco.Web.Models.Device.ExportModel model);