From 6ce6e2cccf65917934dd6811107dc723734d9be9 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Sun, 14 Jan 2024 17:59:30 +1100 Subject: [PATCH] #138 device flags configuration API and UI --- Disco.Models/Disco.Models.csproj | 6 + .../DeviceFlag/ConfigDeviceFlagCreateModel.cs | 7 + .../DeviceFlag/ConfigDeviceFlagExportModel.cs | 17 + .../DeviceFlag/ConfigDeviceFlagIndexModel.cs | 9 + .../DeviceFlag/ConfigDeviceFlagShowModel.cs | 15 + Disco.Services/Disco.Services.csproj | 10 + Disco.Web/App_Start/AppConfig.cs | 3 +- .../DeviceFlagAssignmentController.cs | 123 ++ .../API/Controllers/DeviceFlagController.cs | 454 +++++ .../Controllers/DeviceFlagController.cs | 159 ++ .../Config/Models/DeviceFlag/CreateModel.cs | 9 + .../Config/Models/DeviceFlag/ExportModel.cs | 17 + .../Config/Models/DeviceFlag/IndexModel.cs | 10 + .../Config/Models/DeviceFlag/ShowModel.cs | 20 + .../Areas/Config/Views/Config/Index.cshtml | 11 +- .../Config/Views/Config/Index.generated.cs | 150 +- .../Config/Views/DeviceFlag/Create.cshtml | 36 + .../Views/DeviceFlag/Create.generated.cs | 172 ++ .../Config/Views/DeviceFlag/Export.cshtml | 185 ++ .../Views/DeviceFlag/Export.generated.cs | 707 +++++++ .../Config/Views/DeviceFlag/Index.cshtml | 78 + .../Views/DeviceFlag/Index.generated.cs | 410 +++++ .../Areas/Config/Views/DeviceFlag/Show.cshtml | 590 ++++++ .../Config/Views/DeviceFlag/Show.generated.cs | 1637 +++++++++++++++++ Disco.Web/ClientSource/Style/Config.css | 158 ++ Disco.Web/ClientSource/Style/Config.less | 216 +++ Disco.Web/ClientSource/Style/Config.min.css | 2 +- Disco.Web/Disco.Web.csproj | 52 + ...eviceFlagAssignmentController.generated.cs | 235 +++ .../API.DeviceFlagController.generated.cs | 585 ++++++ .../Config.DeviceFlagController.generated.cs | 210 +++ Disco.Web/Extensions/T4MVC/T4MVC.cs | 3 + 32 files changed, 6242 insertions(+), 54 deletions(-) create mode 100644 Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagCreateModel.cs create mode 100644 Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagExportModel.cs create mode 100644 Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagIndexModel.cs create mode 100644 Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagShowModel.cs create mode 100644 Disco.Web/Areas/API/Controllers/DeviceFlagAssignmentController.cs create mode 100644 Disco.Web/Areas/API/Controllers/DeviceFlagController.cs create mode 100644 Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs create mode 100644 Disco.Web/Areas/Config/Models/DeviceFlag/CreateModel.cs create mode 100644 Disco.Web/Areas/Config/Models/DeviceFlag/ExportModel.cs create mode 100644 Disco.Web/Areas/Config/Models/DeviceFlag/IndexModel.cs create mode 100644 Disco.Web/Areas/Config/Models/DeviceFlag/ShowModel.cs create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Create.cshtml create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Create.generated.cs create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Export.cshtml create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Export.generated.cs create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Index.cshtml create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Index.generated.cs create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Show.cshtml create mode 100644 Disco.Web/Areas/Config/Views/DeviceFlag/Show.generated.cs create mode 100644 Disco.Web/Extensions/T4MVC/API.DeviceFlagAssignmentController.generated.cs create mode 100644 Disco.Web/Extensions/T4MVC/API.DeviceFlagController.generated.cs create mode 100644 Disco.Web/Extensions/T4MVC/Config.DeviceFlagController.generated.cs diff --git a/Disco.Models/Disco.Models.csproj b/Disco.Models/Disco.Models.csproj index 9c513458..79a19d4d 100644 --- a/Disco.Models/Disco.Models.csproj +++ b/Disco.Models/Disco.Models.csproj @@ -54,6 +54,8 @@ + + @@ -200,6 +202,10 @@ + + + + diff --git a/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagCreateModel.cs b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagCreateModel.cs new file mode 100644 index 00000000..cd141612 --- /dev/null +++ b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagCreateModel.cs @@ -0,0 +1,7 @@ +namespace Disco.Models.UI.Config.DeviceFlag +{ + public interface ConfigDeviceFlagCreateModel : BaseUIModel + { + Repository.DeviceFlag DeviceFlag { get; set; } + } +} diff --git a/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagExportModel.cs b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagExportModel.cs new file mode 100644 index 00000000..9b15b0c2 --- /dev/null +++ b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagExportModel.cs @@ -0,0 +1,17 @@ +using Disco.Models.Services.Devices.DeviceFlag; +using Disco.Models.Services.Exporting; +using Disco.Models.UI; +using System.Collections.Generic; + +namespace Disco.Models.Areas.Config.UI.DeviceFlag +{ + public interface ConfigDeviceFlagExportModel : BaseUIModel + { + DeviceFlagExportOptions Options { get; set; } + + string ExportSessionId { get; set; } + ExportResult ExportSessionResult { get; set; } + + List DeviceFlags { get; set; } + } +} diff --git a/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagIndexModel.cs b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagIndexModel.cs new file mode 100644 index 00000000..e03fda99 --- /dev/null +++ b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagIndexModel.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Disco.Models.UI.Config.DeviceFlag +{ + public interface ConfigDeviceFlagIndexModel : BaseUIModel + { + Dictionary DeviceFlags { get; set; } + } +} diff --git a/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagShowModel.cs b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagShowModel.cs new file mode 100644 index 00000000..03aa27d1 --- /dev/null +++ b/Disco.Models/UI/Config/DeviceFlag/ConfigDeviceFlagShowModel.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace Disco.Models.UI.Config.DeviceFlag +{ + public interface ConfigDeviceFlagShowModel : BaseUIModel + { + Repository.DeviceFlag DeviceFlag { get; set; } + + int CurrentAssignmentCount { get; set; } + int TotalAssignmentCount { get; set; } + + IEnumerable> Icons { get; set; } + IEnumerable> ThemeColours { get; set; } + } +} diff --git a/Disco.Services/Disco.Services.csproj b/Disco.Services/Disco.Services.csproj index baf519b5..cb6e5646 100644 --- a/Disco.Services/Disco.Services.csproj +++ b/Disco.Services/Disco.Services.csproj @@ -194,6 +194,7 @@ + @@ -248,6 +249,15 @@ + + + + + + + + + diff --git a/Disco.Web/App_Start/AppConfig.cs b/Disco.Web/App_Start/AppConfig.cs index 54dc5c09..b1dbd6d0 100644 --- a/Disco.Web/App_Start/AppConfig.cs +++ b/Disco.Web/App_Start/AppConfig.cs @@ -59,8 +59,9 @@ namespace Disco.Web // Initialize Job Queues Disco.Services.Jobs.JobQueues.JobQueueService.Initialize(Database); - // Initialize User Flags + // Initialize Flags Disco.Services.Users.UserFlags.UserFlagService.Initialize(Database); + Disco.Services.Devices.DeviceFlags.DeviceFlagService.Initialize(Database); // Initialize Satellite Managed Groups (which don't belong to any other component) Disco.Services.Devices.ManagedGroups.DeviceManagedGroups.Initialize(Database); diff --git a/Disco.Web/Areas/API/Controllers/DeviceFlagAssignmentController.cs b/Disco.Web/Areas/API/Controllers/DeviceFlagAssignmentController.cs new file mode 100644 index 00000000..1aa8f054 --- /dev/null +++ b/Disco.Web/Areas/API/Controllers/DeviceFlagAssignmentController.cs @@ -0,0 +1,123 @@ +using Disco.Models.Repository; +using Disco.Services; +using Disco.Services.Authorization; +using Disco.Services.Web; +using System; +using System.Data.Entity; +using System.Linq; +using System.Web.Mvc; + +namespace Disco.Web.Areas.API.Controllers +{ + public partial class DeviceFlagAssignmentController : AuthorizedDatabaseController + { + const string pComments = "comments"; + + public virtual ActionResult Update(int id, string key, string value = null, bool? redirect = null) + { + try + { + if (id < 0) + throw new ArgumentOutOfRangeException(nameof(id)); + if (string.IsNullOrEmpty(key)) + throw new ArgumentNullException(nameof(key)); + var assignment = Database.DeviceFlagAssignments.FirstOrDefault(a => a.Id == id); + if (assignment != null) + { + switch (key.ToLower()) + { + case pComments: + UpdateComments(assignment, value); + break; + default: + throw new Exception("Invalid Update Key"); + } + } + else + { + throw new Exception("Invalid Device Flag Assignment Id"); + } + if (redirect.HasValue && redirect.Value) + return Redirect($"{Url.Action(MVC.Device.Show(assignment.DeviceSerialNumber))}#DeviceDetailTab-Flags"); + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + if (redirect.HasValue && redirect.Value) + throw; + else + return Json($"Error: {ex.Message}", JsonRequestBehavior.AllowGet); + } + } + + #region Update Shortcut Methods + [DiscoAuthorizeAny(Claims.Device.Actions.EditFlags)] + public virtual ActionResult UpdateComments(int id, string Comments = null, bool? redirect = null) + { + return Update(id, pComments, Comments, redirect); + } + #endregion + + #region Update Properties + private void UpdateComments(DeviceFlagAssignment assignment, string Comments) + { + if (!assignment.CanEditComments()) + throw new InvalidOperationException("Editing comments for device flags is denied"); + + assignment.OnEditComments(Comments); + Database.SaveChanges(); + } + #endregion + + #region Actions + + [DiscoAuthorizeAny(Claims.Device.Actions.AddFlags)] + public virtual ActionResult AddDevice(int id, string DeviceSerialNumber, string Comments) + { + Database.Configuration.LazyLoadingEnabled = true; + + var flag = Database.DeviceFlags.Find(id); + if (flag == null) + throw new ArgumentException("Invalid Device Flag Id", nameof(id)); + + var device = Database.Devices.Include(u => u.DeviceFlagAssignments).FirstOrDefault(d => d.SerialNumber == DeviceSerialNumber); + if (device == null) + throw new ArgumentException("Invalid Device Serial Number", nameof(DeviceSerialNumber)); + + if (!device.CanAddDeviceFlag(flag)) + throw new InvalidOperationException("Adding device flag is denied"); + + var addingUser = Database.Users.Find(CurrentUser.UserId); + + var assignment = device.OnAddDeviceFlag(Database, flag, addingUser, Comments); + + Database.SaveChanges(); + + return Redirect($"{Url.Action(MVC.Device.Show(device.SerialNumber))}#DeviceDetailTab-Flags"); + } + + [DiscoAuthorizeAny(Claims.Device.Actions.RemoveFlags)] + public virtual ActionResult RemoveDevice(int id) + { + Database.Configuration.LazyLoadingEnabled = true; + + var assignment = Database.DeviceFlagAssignments.FirstOrDefault(a => a.Id == id); + if (assignment == null) + throw new ArgumentException("Invalid Device Flag Assignment Id", nameof(id)); + + if (!assignment.CanRemove()) + throw new InvalidOperationException("Removing device flag assignment is denied"); + + var removingUser = Database.Users.Find(CurrentUser.UserId); + + assignment.OnRemove(Database, removingUser); + Database.SaveChanges(); + + return Redirect($"{Url.Action(MVC.Device.Show(assignment.DeviceSerialNumber))}#DeviceDetailTab-Flags"); + } + + #endregion + + } +} \ No newline at end of file diff --git a/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs b/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs new file mode 100644 index 00000000..25b851d2 --- /dev/null +++ b/Disco.Web/Areas/API/Controllers/DeviceFlagController.cs @@ -0,0 +1,454 @@ +using Disco.Models.Repository; +using Disco.Models.Services.Devices.DeviceFlag; +using Disco.Services; +using Disco.Services.Authorization; +using Disco.Services.Devices.DeviceFlags; +using Disco.Services.Exporting; +using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Tasks; +using Disco.Services.Web; +using Disco.Web.Areas.Config.Models.DeviceFlag; +using Disco.Web.Extensions; +using System; +using System.Linq; +using System.Web; +using System.Web.Caching; +using System.Web.Mvc; + +namespace Disco.Web.Areas.API.Controllers +{ + public partial class DeviceFlagController : AuthorizedDatabaseController + { + const string pName = "name"; + const string pDescription = "description"; + const string pIcon = "icon"; + const string pIconColour = "iconcolour"; + const string pOnAssignmentExpression = "onassignmentexpression"; + const string pOnUnassignmentExpression = "onunassignmentexpression"; + + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult Update(int id, string key, string value = null, bool? redirect = null) + { + Authorization.Require(Claims.Config.DeviceFlag.Configure); + + try + { + if (id < 0) + throw new ArgumentOutOfRangeException("id"); + if (string.IsNullOrEmpty(key)) + throw new ArgumentNullException("key"); + var flag = Database.DeviceFlags.Find(id); + if (flag != null) + { + switch (key.ToLower()) + { + case pName: + UpdateName(flag, value); + break; + case pDescription: + UpdateDescription(flag, value); + break; + case pIcon: + UpdateIcon(flag, value); + break; + case pIconColour: + UpdateIconColour(flag, value); + break; + case pOnAssignmentExpression: + UpdateOnAssignmentExpression(flag, value); + break; + case pOnUnassignmentExpression: + UpdateOnUnassignmentExpression(flag, value); + break; + default: + throw new Exception("Invalid Update Key"); + } + } + else + { + throw new Exception("Invalid Device Flag Id"); + } + if (redirect.HasValue && redirect.Value) + return RedirectToAction(MVC.Config.DeviceFlag.Index(flag.Id)); + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + if (redirect.HasValue && redirect.Value) + throw; + else + return Json($"Error: {ex.Message}", JsonRequestBehavior.AllowGet); + } + } + + #region Update Shortcut Methods + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateName(int id, string FlagName = null, bool? redirect = null) + { + return Update(id, pName, FlagName, redirect); + } + + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateDescription(int id, string Description = null, bool? redirect = null) + { + return Update(id, pDescription, Description, redirect); + } + + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateIcon(int id, string Icon = null, bool? redirect = null) + { + return Update(id, pIcon, Icon, redirect); + } + + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateIconColour(int id, string IconColour = null, bool? redirect = null) + { + return Update(id, pIconColour, IconColour, redirect); + } + + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateIconAndColour(int id, string Icon = null, string IconColour = null, bool redirect = false) + { + try + { + if (id < 0) + throw new ArgumentOutOfRangeException("id"); + + var DeviceFlag = Database.DeviceFlags.Find(id); + if (DeviceFlag != null) + { + UpdateIconAndColour(DeviceFlag, Icon, IconColour); + } + else + { + throw new ArgumentException("Invalid Device Flag Id", "id"); + } + if (redirect) + return RedirectToAction(MVC.Config.DeviceFlag.Index(DeviceFlag.Id)); + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + if (redirect) + throw; + else + return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet); + } + } + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateOnAssignmentExpression(int id, string OnAssignmentExpression = null, bool redirect = false) + { + return Update(id, pOnAssignmentExpression, OnAssignmentExpression, redirect); + } + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateOnUnassignmentExpression(int id, string OnUnassignmentExpression = null, bool redirect = false) + { + return Update(id, pOnUnassignmentExpression, OnUnassignmentExpression, redirect); + } + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateDevicesLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false) + { + try + { + if (id < 0) + throw new ArgumentOutOfRangeException("id"); + + var deviceFlag = Database.DeviceFlags.Find(id); + if (deviceFlag == null) + throw new ArgumentException("Invalid Device Flag Id", "id"); + + + var syncTaskStatus = UpdateDevicesLinkedGroup(deviceFlag, GroupId, FilterBeginDate); + if (redirect) + if (syncTaskStatus == null) + return RedirectToAction(MVC.Config.DeviceFlag.Index(deviceFlag.Id)); + else + { + syncTaskStatus.SetFinishedUrl(Url.Action(MVC.Config.DeviceFlag.Index(deviceFlag.Id))); + return RedirectToAction(MVC.Config.Logging.TaskStatus(syncTaskStatus.SessionId)); + } + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + if (redirect) + throw; + else + return Json($"Error: {ex.Message}", JsonRequestBehavior.AllowGet); + } + } + [DiscoAuthorize(Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult UpdateAssignedUserLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false) + { + try + { + if (id < 0) + throw new ArgumentOutOfRangeException("id"); + + var DeviceFlag = Database.DeviceFlags.Find(id); + if (DeviceFlag == null) + throw new ArgumentException("Invalid Device Flag Id", "id"); + + + var syncTaskStatus = UpdateAssignedUserLinkedGroup(DeviceFlag, GroupId, FilterBeginDate); + if (redirect) + if (syncTaskStatus == null) + return RedirectToAction(MVC.Config.DeviceFlag.Index(DeviceFlag.Id)); + else + { + syncTaskStatus.SetFinishedUrl(Url.Action(MVC.Config.DeviceFlag.Index(DeviceFlag.Id))); + return RedirectToAction(MVC.Config.Logging.TaskStatus(syncTaskStatus.SessionId)); + } + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + if (redirect) + throw; + else + return Json($"Error: {ex.Message}", JsonRequestBehavior.AllowGet); + } + } + #endregion + + #region Update Properties + private void UpdateIconAndColour(DeviceFlag deviceFlag, string icon, string iconColour) + { + if (string.IsNullOrWhiteSpace(icon)) + throw new ArgumentNullException("Icon"); + if (string.IsNullOrWhiteSpace(iconColour)) + throw new ArgumentNullException("IconColour"); + + if (deviceFlag.Icon != icon || + deviceFlag.IconColour != iconColour) + { + deviceFlag.Icon = icon; + deviceFlag.IconColour = iconColour; + DeviceFlagService.Update(Database, deviceFlag); + } + } + private void UpdateIcon(DeviceFlag deviceFlag, string icon) + { + if (string.IsNullOrWhiteSpace(icon)) + throw new ArgumentNullException("Icon"); + + if (deviceFlag.Icon != icon) + { + deviceFlag.Icon = icon; + DeviceFlagService.Update(Database, deviceFlag); + } + } + private void UpdateIconColour(DeviceFlag deviceFlag, string iconColour) + { + if (string.IsNullOrWhiteSpace(iconColour)) + throw new ArgumentNullException("IconColour"); + + if (deviceFlag.IconColour != iconColour) + { + deviceFlag.IconColour = iconColour; + DeviceFlagService.Update(Database, deviceFlag); + } + } + + private void UpdateName(DeviceFlag deviceFlag, string name) + { + if (deviceFlag.Name != name) + { + deviceFlag.Name = name; + DeviceFlagService.Update(Database, deviceFlag); + } + } + + private void UpdateDescription(DeviceFlag deviceFlag, string description) + { + if (deviceFlag.Description != description) + { + deviceFlag.Description = description; + DeviceFlagService.Update(Database, deviceFlag); + } + } + + private void UpdateOnAssignmentExpression(DeviceFlag deviceFlag, string onAssignmentExpression) + { + if (string.IsNullOrWhiteSpace(onAssignmentExpression)) + { + deviceFlag.OnAssignmentExpression = null; + } + else + { + deviceFlag.OnAssignmentExpression = onAssignmentExpression.Trim(); + } + // Invalidate Cache + deviceFlag.OnAssignmentExpressionInvalidateCache(); + + DeviceFlagService.Update(Database, deviceFlag); + } + + private void UpdateOnUnassignmentExpression(DeviceFlag deviceFlag, string onUnassignmentExpression) + { + if (string.IsNullOrWhiteSpace(onUnassignmentExpression)) + { + deviceFlag.OnUnassignmentExpression = null; + } + else + { + deviceFlag.OnUnassignmentExpression = onUnassignmentExpression.Trim(); + } + // Invalidate Cache + deviceFlag.OnUnassignmentExpressionInvalidateCache(); + + DeviceFlagService.Update(Database, deviceFlag); + } + + private ScheduledTaskStatus UpdateDevicesLinkedGroup(DeviceFlag deviceFlag, string devicesLinkedGroup, DateTime? filterBeginDate) + { + var configJson = ADManagedGroup.ValidConfigurationToJson(DeviceFlagDevicesManagedGroup.GetKey(deviceFlag), devicesLinkedGroup, filterBeginDate); + + if (deviceFlag.DevicesLinkedGroup != configJson) + { + deviceFlag.DevicesLinkedGroup = configJson; + DeviceFlagService.Update(Database, deviceFlag); + + if (deviceFlag.DevicesLinkedGroup != null && DeviceFlagDevicesManagedGroup.TryGetManagedGroup(deviceFlag, out var managedGroup)) + { + // Sync Group + return ADManagedGroupsSyncTask.ScheduleSync(managedGroup); + } + } + + return null; + } + private ScheduledTaskStatus UpdateAssignedUserLinkedGroup(DeviceFlag deviceFlag, string assignedUserLinkedGroup, DateTime? filterBeginDate) + { + var configJson = ADManagedGroup.ValidConfigurationToJson(DeviceFlagDeviceAssignedUsersManagedGroup.GetKey(deviceFlag), assignedUserLinkedGroup, filterBeginDate); + + if (deviceFlag.DeviceUsersLinkedGroup != configJson) + { + deviceFlag.DeviceUsersLinkedGroup = configJson; + DeviceFlagService.Update(Database, deviceFlag); + + if (deviceFlag.DeviceUsersLinkedGroup != null && DeviceFlagDeviceAssignedUsersManagedGroup.TryGetManagedGroup(deviceFlag, out var managedGroup)) + { + // Sync Group + return ADManagedGroupsSyncTask.ScheduleSync(managedGroup); + } + } + + return null; + } + #endregion + + #region Actions + [DiscoAuthorizeAll(Claims.Config.DeviceFlag.Configure, Claims.Config.DeviceFlag.Delete)] + public virtual ActionResult Delete(int id, bool? redirect = false) + { + try + { + var uf = Database.DeviceFlags.FirstOrDefault(f => f.Id == id); + if (uf != null) + { + var status = DeviceFlagDeleteTask.ScheduleNow(uf.Id); + status.SetFinishedUrl(Url.Action(MVC.Config.DeviceFlag.Index(null))); + + if (redirect.HasValue && redirect.Value) + return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId)); + else + return Json("OK", JsonRequestBehavior.AllowGet); + } + throw new ArgumentException("Invalid Device Flag Id", nameof(id)); + } + catch (Exception ex) + { + if (redirect.HasValue && redirect.Value) + throw; + else + return Json($"Error: {ex.Message}", JsonRequestBehavior.AllowGet); + } + } + + [DiscoAuthorizeAll(Claims.Config.DeviceFlag.Configure, Claims.Device.Actions.AddFlags, Claims.Device.Actions.RemoveFlags, Claims.Device.ShowFlagAssignments)] + public virtual ActionResult BulkAssignDevices(int id, bool Override, string DeviceSerialNumbers = null, string Comments = null) + { + if (id < 0) + throw new ArgumentNullException("id"); + var flag = Database.DeviceFlags.FirstOrDefault(f => f.Id == id); + if (flag == null) + throw new ArgumentException("Invalid Device Flag Id", nameof(id)); + + var serialNumbers = DeviceSerialNumbers.Split(new string[] { Environment.NewLine, ",", ";" }, StringSplitOptions.RemoveEmptyEntries).Select(d => d.Trim()).Where(d => !string.IsNullOrEmpty(d)).ToList(); + + var taskStatus = DeviceFlagBulkAssignTask.ScheduleBulkAssignDevices(flag, CurrentUser, Comments, serialNumbers, Override); + taskStatus.SetFinishedUrl(Url.Action(MVC.Config.DeviceFlag.Index(flag.Id))); + return RedirectToAction(MVC.Config.Logging.TaskStatus(taskStatus.SessionId)); + } + [DiscoAuthorizeAll(Claims.Config.DeviceFlag.Configure, Claims.Device.Actions.AddFlags, Claims.Device.Actions.RemoveFlags, Claims.Device.ShowFlagAssignments)] + public virtual ActionResult AssignedDevices(int id) + { + if (id < 0) + throw new ArgumentNullException(nameof(id)); + var flag = Database.DeviceFlags.FirstOrDefault(f => f.Id == id); + if (flag == null) + throw new ArgumentException("Invalid Device Flag Id", nameof(id)); + + var serialNumbers = Database + .DeviceFlagAssignments + .Where(a => a.DeviceFlagId == flag.Id && !a.RemovedDate.HasValue) + .OrderBy(a => a.DeviceSerialNumber).Select(a => a.DeviceSerialNumber).ToList(); + + return Json(serialNumbers, JsonRequestBehavior.AllowGet); + } + #endregion + + #region Exporting + internal const string ExportSessionCacheKey = "DeviceFlagExportContext_{0}"; + + [DiscoAuthorize(Claims.Config.DeviceFlag.Export)] + public virtual ActionResult Export(ExportModel Model) + { + if (Model == null || Model.Options == null) + throw new ArgumentNullException(nameof(Model)); + + // Start Export + var exportContext = DeviceFlagExportTask.ScheduleNow(Model.Options); + + // Store Export Context in Web Cache + string key = string.Format(ExportSessionCacheKey, exportContext.TaskStatus.SessionId); + HttpRuntime.Cache.Insert(key, exportContext, null, DateTime.Now.AddMinutes(60), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null); + + // Set Task Finished Url + var finishedActionResult = MVC.Config.DeviceFlag.Export(exportContext.TaskStatus.SessionId, null, null); + exportContext.TaskStatus.SetFinishedUrl(Url.Action(finishedActionResult)); + + // Try waiting for completion + if (exportContext.TaskStatus.WaitUntilFinished(TimeSpan.FromSeconds(2))) + return RedirectToAction(finishedActionResult); + else + return RedirectToAction(MVC.Config.Logging.TaskStatus(exportContext.TaskStatus.SessionId)); + } + [DiscoAuthorize(Claims.Config.DeviceFlag.Export)] + public virtual ActionResult ExportRetrieve(string Id) + { + if (string.IsNullOrWhiteSpace(Id)) + throw new ArgumentNullException("Id"); + + string key = string.Format(ExportSessionCacheKey, Id); + var context = HttpRuntime.Cache.Get(key) as ExportTaskContext; + + if (context == null) + throw new ArgumentException("The Id specified is invalid, or the export data expired (60 minutes)", nameof(Id)); + + if (context.Result == null || context.Result.Result == null) + throw new ArgumentException("The export session is still running, or failed to complete successfully", nameof(Id)); + + var fileStream = context.Result.Result; + + return this.File(fileStream.GetBuffer(), 0, (int)fileStream.Length, context.Result.MimeType, context.Result.Filename); + } + + #endregion + } +} \ No newline at end of file diff --git a/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs b/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs new file mode 100644 index 00000000..a63dd9ba --- /dev/null +++ b/Disco.Web/Areas/Config/Controllers/DeviceFlagController.cs @@ -0,0 +1,159 @@ +using Disco.Models.Areas.Config.UI.DeviceFlag; +using Disco.Models.Repository; +using Disco.Models.Services.Devices.DeviceFlag; +using Disco.Models.UI.Config.DeviceFlag; +using Disco.Services.Authorization; +using Disco.Services.Devices.DeviceFlags; +using Disco.Services.Exporting; +using Disco.Services.Extensions; +using Disco.Services.Plugins.Features.UIExtension; +using Disco.Services.Web; +using Disco.Web.Areas.Config.Models.DeviceFlag; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; + +namespace Disco.Web.Areas.Config.Controllers +{ + public partial class DeviceFlagController : AuthorizedDatabaseController + { + [DiscoAuthorize(Claims.Config.DeviceFlag.Show)] + public virtual ActionResult Index(int? id) + { + if (id.HasValue) + { + // Show + var m = Database.DeviceFlags.Where(f => f.Id == id.Value).Select(f => + new ShowModel() + { + DeviceFlag = f, + CurrentAssignmentCount = f.DeviceFlagAssignments.Count(a => !a.RemovedDate.HasValue), + TotalAssignmentCount = f.DeviceFlagAssignments.Count() + }).FirstOrDefault(); + + if (m == null) + throw new ArgumentException("Invalid Device Flag Id"); + + if (DeviceFlagDevicesManagedGroup.TryGetManagedGroup(m.DeviceFlag, out var devicesManagedGroup)) + m.DevicesLinkedGroup = devicesManagedGroup; + if (DeviceFlagDeviceAssignedUsersManagedGroup.TryGetManagedGroup(m.DeviceFlag, out var assignedUsersManagedGroup)) + m.AssignedUserLinkedGroup = assignedUsersManagedGroup; + + if (Authorization.Has(Claims.Config.DeviceFlag.Configure)) + { + m.Icons = UIHelpers.Icons; + m.ThemeColours = UIHelpers.ThemeColours; + } + + // UI Extensions + UIExtensions.ExecuteExtensions(this.ControllerContext, m); + + return View(MVC.Config.DeviceFlag.Views.Show, m); + } + else + { + // List Index + var m = new Models.DeviceFlag.IndexModel() + { + DeviceFlags = Database.DeviceFlags + .Select(uf => new + { + flag = uf, + assignmentCount = uf.DeviceFlagAssignments.Count(fa => !fa.RemovedDate.HasValue) + }) + .ToDictionary( + pair => pair.flag, + pair => pair.assignmentCount) + }; + + // UI Extensions + UIExtensions.ExecuteExtensions(this.ControllerContext, m); + + return View(m); + } + } + + [DiscoAuthorizeAll(Claims.Config.DeviceFlag.Create, Claims.Config.DeviceFlag.Configure)] + public virtual ActionResult Create() + { + // Default Queue + var m = new CreateModel() + { + DeviceFlag = new DeviceFlag() + { + Icon = DeviceFlagService.RandomUnusedIcon(), + IconColour = DeviceFlagService.RandomUnusedThemeColour() + } + }; + + // UI Extensions + UIExtensions.ExecuteExtensions(this.ControllerContext, m); + + return View(m); + } + + [DiscoAuthorizeAll(Claims.Config.DeviceFlag.Create, Claims.Config.DeviceFlag.Configure), HttpPost] + public virtual ActionResult Create(CreateModel model) + { + if (ModelState.IsValid) + { + // Check for Existing + var existing = Database.DeviceFlags.Where(m => m.Name == model.DeviceFlag.Name).FirstOrDefault(); + if (existing == null) + { + var flag = DeviceFlagService.CreateDeviceFlag(Database, model.DeviceFlag); + + return RedirectToAction(MVC.Config.DeviceFlag.Index(flag.Id)); + } + else + { + ModelState.AddModelError("Name", "A Device Flag with this name already exists."); + } + } + + // UI Extensions + UIExtensions.ExecuteExtensions(this.ControllerContext, model); + + return View(model); + } + + #region Export + + [DiscoAuthorizeAny(Claims.Config.DeviceFlag.Export), HttpGet] + public virtual ActionResult Export(string DownloadId, int? DeviceFlagId, bool? CurrentOnly) + { + var m = new ExportModel() + { + Options = DeviceFlagExportOptions.DefaultOptions(), + DeviceFlags = DeviceFlagService.GetDeviceFlags(), + }; + + if (!string.IsNullOrWhiteSpace(DownloadId)) + { + string key = string.Format(API.Controllers.DeviceFlagController.ExportSessionCacheKey, DownloadId); + var context = HttpRuntime.Cache.Get(key) as ExportTaskContext; + + if (context != null) + { + m.ExportSessionResult = context.Result; + m.ExportSessionId = DownloadId; + } + } + + if (DeviceFlagId.HasValue && CurrentOnly.HasValue) + { + m.Options.DeviceFlagIds = new List() { DeviceFlagId.Value }; + m.Options.CurrentOnly = CurrentOnly.Value; + } + + // UI Extensions + UIExtensions.ExecuteExtensions(this.ControllerContext, m); + + return View(m); + } + + #endregion + } +} \ No newline at end of file diff --git a/Disco.Web/Areas/Config/Models/DeviceFlag/CreateModel.cs b/Disco.Web/Areas/Config/Models/DeviceFlag/CreateModel.cs new file mode 100644 index 00000000..c3d447c8 --- /dev/null +++ b/Disco.Web/Areas/Config/Models/DeviceFlag/CreateModel.cs @@ -0,0 +1,9 @@ +using Disco.Models.UI.Config.DeviceFlag; + +namespace Disco.Web.Areas.Config.Models.DeviceFlag +{ + public class CreateModel : ConfigDeviceFlagCreateModel + { + public Disco.Models.Repository.DeviceFlag DeviceFlag { get; set; } + } +} diff --git a/Disco.Web/Areas/Config/Models/DeviceFlag/ExportModel.cs b/Disco.Web/Areas/Config/Models/DeviceFlag/ExportModel.cs new file mode 100644 index 00000000..7efc7e8f --- /dev/null +++ b/Disco.Web/Areas/Config/Models/DeviceFlag/ExportModel.cs @@ -0,0 +1,17 @@ +using Disco.Models.Areas.Config.UI.DeviceFlag; +using Disco.Models.Services.Devices.DeviceFlag; +using Disco.Models.Services.Exporting; +using System.Collections.Generic; + +namespace Disco.Web.Areas.Config.Models.DeviceFlag +{ + public class ExportModel : ConfigDeviceFlagExportModel + { + public DeviceFlagExportOptions Options { get; set; } + + public string ExportSessionId { get; set; } + public ExportResult ExportSessionResult { get; set; } + + public List DeviceFlags { get; set; } + } +} diff --git a/Disco.Web/Areas/Config/Models/DeviceFlag/IndexModel.cs b/Disco.Web/Areas/Config/Models/DeviceFlag/IndexModel.cs new file mode 100644 index 00000000..9a623299 --- /dev/null +++ b/Disco.Web/Areas/Config/Models/DeviceFlag/IndexModel.cs @@ -0,0 +1,10 @@ +using Disco.Models.UI.Config.DeviceFlag; +using System.Collections.Generic; + +namespace Disco.Web.Areas.Config.Models.DeviceFlag +{ + public class IndexModel : ConfigDeviceFlagIndexModel + { + public Dictionary DeviceFlags { get; set; } + } +} diff --git a/Disco.Web/Areas/Config/Models/DeviceFlag/ShowModel.cs b/Disco.Web/Areas/Config/Models/DeviceFlag/ShowModel.cs new file mode 100644 index 00000000..aeadb7b4 --- /dev/null +++ b/Disco.Web/Areas/Config/Models/DeviceFlag/ShowModel.cs @@ -0,0 +1,20 @@ +using Disco.Models.UI.Config.DeviceFlag; +using Disco.Services.Devices.DeviceFlags; +using System.Collections.Generic; + +namespace Disco.Web.Areas.Config.Models.DeviceFlag +{ + public class ShowModel : ConfigDeviceFlagShowModel + { + public Disco.Models.Repository.DeviceFlag DeviceFlag { get; set; } + + public int CurrentAssignmentCount { get; set; } + public int TotalAssignmentCount { get; set; } + + public DeviceFlagDevicesManagedGroup DevicesLinkedGroup { get; set; } + public DeviceFlagDeviceAssignedUsersManagedGroup AssignedUserLinkedGroup { get; set; } + + public IEnumerable> Icons { get; set; } + public IEnumerable> ThemeColours { get; set; } + } +} diff --git a/Disco.Web/Areas/Config/Views/Config/Index.cshtml b/Disco.Web/Areas/Config/Views/Config/Index.cshtml index fa7b2375..67c210bf 100644 --- a/Disco.Web/Areas/Config/Views/Config/Index.cshtml +++ b/Disco.Web/Areas/Config/Views/Config/Index.cshtml @@ -72,7 +72,14 @@ @Html.ActionLinkClass("Profiles", MVC.Config.DeviceProfile.Index(), "config") + } + @if (Authorization.Has(Claims.Config.DeviceFlag.Show)) + { + @Html.ActionLinkClass("Flags", MVC.Config.DeviceFlag.Index(), "config") + } @if (Authorization.Has(Claims.Config.Enrolment.Show)) @@ -114,7 +121,7 @@

Users

@if (Authorization.Has(Claims.Config.UserFlag.Show)) { - @Html.ActionLinkClass("User Flags", MVC.Config.UserFlag.Index(), "config") + @Html.ActionLinkClass("Flags", MVC.Config.UserFlag.Index(), "config") diff --git a/Disco.Web/Areas/Config/Views/Config/Index.generated.cs b/Disco.Web/Areas/Config/Views/Config/Index.generated.cs index fcad79be..0adefcfe 100644 --- a/Disco.Web/Areas/Config/Views/Config/Index.generated.cs +++ b/Disco.Web/Areas/Config/Views/Config/Index.generated.cs @@ -508,8 +508,8 @@ WriteLiteral(" \r\n Configure Device Profiles including computer name " + -"generation, distribution and Active\r\n Directory OU layout.\r\n " + -" \r\n"); +"generation, distribution and Active\r\n Directory OU la" + +"yout.\r\n \r\n"); #line 77 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -522,7 +522,7 @@ WriteLiteral(" "); #line 78 "..\..\Areas\Config\Views\Config\Index.cshtml" - if (Authorization.Has(Claims.Config.Enrolment.Show)) + if (Authorization.Has(Claims.Config.DeviceFlag.Show)) { @@ -542,13 +542,63 @@ WriteLiteral(">"); #line hidden #line 80 "..\..\Areas\Config\Views\Config\Index.cshtml" - Write(Html.ActionLinkClass("Enrolment", MVC.Config.Enrolment.Index(), "config")); + Write(Html.ActionLinkClass("Flags", MVC.Config.DeviceFlag.Index(), "config")); #line default #line hidden #line 80 "..\..\Areas\Config\Views\Config\Index.cshtml" + + + + #line default + #line hidden +WriteLiteral(" \r\n Create and manage device flags.\r\n " + +" \r\n"); + + + #line 84 "..\..\Areas\Config\Views\Config\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 85 "..\..\Areas\Config\Views\Config\Index.cshtml" + if (Authorization.Has(Claims.Config.Enrolment.Show)) + { + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" + + + #line default + #line hidden + + #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" + Write(Html.ActionLinkClass("Enrolment", MVC.Config.Enrolment.Index(), "config")); + + + #line default + #line hidden + + #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -562,7 +612,7 @@ WriteLiteral(">\r\n Configure Enrolment settings incl "entials.\r\n \r\n"); - #line 84 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 91 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -571,7 +621,7 @@ WriteLiteral(">\r\n Configure Enrolment settings incl WriteLiteral(" \r\n \r\n"); - #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 94 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -580,7 +630,7 @@ WriteLiteral(" \r\n \r\n"); WriteLiteral(" "); - #line 88 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 95 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show, Claims.Config.UserFlag.Show, Claims.Config.DocumentTemplate.Show)) { @@ -590,13 +640,13 @@ WriteLiteral(" "); WriteLiteral(" \r\n"); - #line 91 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 98 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 91 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 98 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show)) { @@ -610,13 +660,13 @@ WriteLiteral(" class=\"pageMenuArea noSeperator\""); WriteLiteral(">\r\n

Jobs

\r\n"); - #line 95 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 102 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 95 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 102 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.Has(Claims.Config.JobPreferences.Show)) { @@ -630,20 +680,20 @@ WriteLiteral(" class=\"fa fa-cog\""); WriteLiteral(">"); - #line 97 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 97 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" Write(Html.ActionLinkClass("General Preferences", MVC.Config.JobPreferences.Index(), "config")); #line default #line hidden - #line 97 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -657,7 +707,7 @@ WriteLiteral(">\r\n Configure general preferences "\r\n \r\n"); - #line 101 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 108 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -666,7 +716,7 @@ WriteLiteral(">\r\n Configure general preferences WriteLiteral(" "); - #line 102 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 109 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.Has(Claims.Config.JobQueue.Show)) { @@ -680,20 +730,20 @@ WriteLiteral(" class=\"fa fa-cog\""); WriteLiteral(">"); - #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 111 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 111 "..\..\Areas\Config\Views\Config\Index.cshtml" Write(Html.ActionLinkClass("Job Queues", MVC.Config.JobQueue.Index(), "config")); #line default #line hidden - #line 104 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 111 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -707,7 +757,7 @@ WriteLiteral(">\r\n Create and manage job queues "ies and queue members.\r\n \r\n"); - #line 108 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 115 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -716,7 +766,7 @@ WriteLiteral(">\r\n Create and manage job queues WriteLiteral(" \r\n"); - #line 110 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 117 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -725,7 +775,7 @@ WriteLiteral(" \r\n"); WriteLiteral(" "); - #line 111 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 118 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.HasAny(Claims.Config.UserFlag.Show)) { @@ -739,13 +789,13 @@ WriteLiteral(" class=\"pageMenuArea noSeperator\""); WriteLiteral(">\r\n

Users

\r\n"); - #line 115 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 122 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 115 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 122 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.Has(Claims.Config.UserFlag.Show)) { @@ -759,21 +809,21 @@ WriteLiteral(" class=\"fa fa-cog\""); WriteLiteral(">"); - #line 117 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 124 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 117 "..\..\Areas\Config\Views\Config\Index.cshtml" - Write(Html.ActionLinkClass("User Flags", MVC.Config.UserFlag.Index(), "config")); + #line 124 "..\..\Areas\Config\Views\Config\Index.cshtml" + Write(Html.ActionLinkClass("Flags", MVC.Config.UserFlag.Index(), "config")); #line default #line hidden - #line 117 "..\..\Areas\Config\Views\Config\Index.cshtml" - + #line 124 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line default @@ -786,7 +836,7 @@ WriteLiteral(">\r\n Create and manage user flags. " \r\n"); - #line 121 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 128 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -795,7 +845,7 @@ WriteLiteral(">\r\n Create and manage user flags. WriteLiteral(" \r\n"); - #line 123 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 130 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -804,7 +854,7 @@ WriteLiteral(" \r\n"); WriteLiteral(" "); - #line 124 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 131 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.HasAny(Claims.Config.DocumentTemplate.Show)) { @@ -818,13 +868,13 @@ WriteLiteral(" class=\"pageMenuArea noSeperator\""); WriteLiteral(">\r\n

Features

\r\n"); - #line 128 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 135 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 128 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 135 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Authorization.Has(Claims.Config.DocumentTemplate.Show)) { @@ -838,20 +888,20 @@ WriteLiteral(" class=\"fa fa-cog\""); WriteLiteral(">"); - #line 130 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 137 "..\..\Areas\Config\Views\Config\Index.cshtml" #line default #line hidden - #line 130 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 137 "..\..\Areas\Config\Views\Config\Index.cshtml" Write(Html.ActionLinkClass("Document Templates", MVC.Config.DocumentTemplate.Index(), "config")); #line default #line hidden - #line 130 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 137 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -866,7 +916,7 @@ WriteLiteral(">\r\n Create, Update and Bulk Gener " \r\n"); - #line 135 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 142 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -875,7 +925,7 @@ WriteLiteral(">\r\n Create, Update and Bulk Gener WriteLiteral(" \r\n"); - #line 137 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 144 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -884,7 +934,7 @@ WriteLiteral(" \r\n"); WriteLiteral(" \r\n"); - #line 139 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 146 "..\..\Areas\Config\Views\Config\Index.cshtml" } @@ -893,7 +943,7 @@ WriteLiteral(" \r\n"); WriteLiteral(" \r\n\r\n"); - #line 142 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 149 "..\..\Areas\Config\Views\Config\Index.cshtml" if (Model.UpdateAvailable) { @@ -911,14 +961,14 @@ WriteLiteral(" class=\"fa fa-cloud-download info\""); WriteLiteral(">\r\n
An updated version of Disco is available
\r\n (Model.UpdateResponse.UrlLink + #line 155 "..\..\Areas\Config\Views\Config\Index.cshtml" +, Tuple.Create(Tuple.Create("", 8218), Tuple.Create(Model.UpdateResponse.UrlLink #line default #line hidden -, 7825), false) +, 8218), false) ); WriteLiteral(" class=\"button small alert\""); @@ -928,7 +978,7 @@ WriteLiteral(" target=\"_blank\""); WriteLiteral(">Download v"); - #line 148 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 155 "..\..\Areas\Config\Views\Config\Index.cshtml" Write(Model.UpdateResponse.LatestVersion); @@ -945,13 +995,13 @@ WriteLiteral(@" \r\n"); - #line 167 "..\..\Areas\Config\Views\Config\Index.cshtml" + #line 174 "..\..\Areas\Config\Views\Config\Index.cshtml" } diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Create.cshtml b/Disco.Web/Areas/Config/Views/DeviceFlag/Create.cshtml new file mode 100644 index 00000000..f085dcca --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Create.cshtml @@ -0,0 +1,36 @@ +@model Disco.Web.Areas.Config.Models.DeviceFlag.CreateModel +@{ + Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), "Create"); +} +@using (Html.BeginForm()) +{ + @Html.HiddenFor(m => m.DeviceFlag.Icon) + @Html.HiddenFor(m => m.DeviceFlag.IconColour) +
+ + + + + + + + + +
Name: + + @Html.EditorFor(model => model.DeviceFlag.Name)
@Html.ValidationMessageFor(model => model.DeviceFlag.Name) +
Description: + + @Html.EditorFor(model => model.DeviceFlag.Description)
@Html.ValidationMessageFor(model => model.DeviceFlag.Description) +
+

+ +

+
+ +} diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Create.generated.cs b/Disco.Web/Areas/Config/Views/DeviceFlag/Create.generated.cs new file mode 100644 index 00000000..0a7dba22 --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Create.generated.cs @@ -0,0 +1,172 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Disco.Web.Areas.Config.Views.DeviceFlag +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text; + using System.Web; + using System.Web.Helpers; + using System.Web.Mvc; + using System.Web.Mvc.Ajax; + using System.Web.Mvc.Html; + using System.Web.Routing; + using System.Web.Security; + using System.Web.UI; + using System.Web.WebPages; + using Disco; + using Disco.Models.Repository; + using Disco.Services; + using Disco.Services.Authorization; + using Disco.Services.Web; + using Disco.Web; + using Disco.Web.Extensions; + + [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] + [System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DeviceFlag/Create.cshtml")] + public partial class Create : Disco.Services.Web.WebViewPage + { + public Create() + { + } + public override void Execute() + { + + #line 2 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + + Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), "Create"); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 6 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + using (Html.BeginForm()) +{ + + + #line default + #line hidden + + #line 8 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" +Write(Html.HiddenFor(m => m.DeviceFlag.Icon)); + + + #line default + #line hidden + + #line 8 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + + + + #line default + #line hidden + + #line 9 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" +Write(Html.HiddenFor(m => m.DeviceFlag.IconColour)); + + + #line default + #line hidden + + #line 9 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n \r\n \r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n
Name:\r\n " + +"\r\n"); + +WriteLiteral(" "); + + + #line 16 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.Name)); + + + #line default + #line hidden +WriteLiteral("
"); + + + #line 16 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + Write(Html.ValidationMessageFor(model => model.DeviceFlag.Name)); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n"); + +WriteLiteral(" "); + + + #line 23 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.Description)); + + + #line default + #line hidden +WriteLiteral("
"); + + + #line 23 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" + Write(Html.ValidationMessageFor(model => model.DeviceFlag.Description)); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n \r\n \r\n

\r\n \r\n"); + +WriteLiteral(" \r\n $(function () {\r\n $(\'#DeviceFlag_Name\').focus().select();\r\n" + +" });\r\n \r\n"); + + + #line 36 "..\..\Areas\Config\Views\DeviceFlag\Create.cshtml" +} + + + #line default + #line hidden + } + } +} +#pragma warning restore 1591 diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Export.cshtml b/Disco.Web/Areas/Config/Views/DeviceFlag/Export.cshtml new file mode 100644 index 00000000..21c31831 --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Export.cshtml @@ -0,0 +1,185 @@ +@using Disco.Web.Areas.Config.Models.DeviceFlag; +@model ExportModel +@{ + Authorization.RequireAny(Claims.Config.DeviceFlag.Export); + + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), "Export"); + + var optionsMetadata = ModelMetadata.FromLambdaExpression(m => m.Options, ViewData); + var optionGroups = optionsMetadata.Properties.Where(p => p.ShortDisplayName != null && p.ModelType == typeof(bool) && p.PropertyName != "CurrentOnly") + .GroupBy(m => m.ShortDisplayName); +} +
+ @using (Html.BeginForm(MVC.API.DeviceFlag.Export())) + { +
+

Export Scope

+ + + + + + + + + + + + + +
+ Device Flags: + + @foreach (var flag in Model.DeviceFlags) + { +
+ +
+ } +
@Html.LabelFor(m => m.Options.CurrentOnly) + @Html.CheckBoxFor(m => m.Options.CurrentOnly) +

Uncheck to include all historical device flag assignments.

+
@Html.LabelFor(m => m.Options.Format) + @Html.DropDownListFor(m => m.Options.Format, Enum.GetNames(typeof(Disco.Models.Exporting.ExportFormat)).Select(v => new SelectListItem() { Value = v, Text = v })) +
+
+
+

Export Fields (Defaults)

+ + @foreach (var optionGroup in optionGroups) + { + var optionFields = optionGroup.ToList(); + var itemsPerColumn = (int)Math.Ceiling((double)optionFields.Count / 2); + + + + + } +
+ @optionGroup.Key + @if (optionFields.Count > 2) + { + ALL | NONE + } + +
+ + + + + +
+
    + @foreach (var optionItem in optionFields.Take(itemsPerColumn)) + { +
  • +
  • + } +
+
+
    + @foreach (var optionItem in optionFields.Skip(itemsPerColumn)) + { +
  • +
  • + } +
+
+
+
+
+ + } +
+@if (Model.ExportSessionId != null) +{ +
+

@Model.ExportSessionResult.RecordCount record@(Model.ExportSessionResult.RecordCount != 1 ? "s" : null) were successfully exported.

+ Download Device Flag Export +
+ +} +
+

Exporting device flags...

+
+ diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Export.generated.cs b/Disco.Web/Areas/Config/Views/DeviceFlag/Export.generated.cs new file mode 100644 index 00000000..60f210de --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Export.generated.cs @@ -0,0 +1,707 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Disco.Web.Areas.Config.Views.DeviceFlag +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text; + using System.Web; + using System.Web.Helpers; + using System.Web.Mvc; + using System.Web.Mvc.Ajax; + using System.Web.Mvc.Html; + using System.Web.Routing; + using System.Web.Security; + using System.Web.UI; + using System.Web.WebPages; + using Disco; + using Disco.Models.Repository; + using Disco.Services; + using Disco.Services.Authorization; + using Disco.Services.Web; + using Disco.Web; + + #line 1 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + using Disco.Web.Areas.Config.Models.DeviceFlag; + + #line default + #line hidden + using Disco.Web.Extensions; + + [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] + [System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DeviceFlag/Export.cshtml")] + public partial class Export : Disco.Services.Web.WebViewPage + { + public Export() + { + } + public override void Execute() + { + + #line 3 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + Authorization.RequireAny(Claims.Config.DeviceFlag.Export); + + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), "Export"); + + var optionsMetadata = ModelMetadata.FromLambdaExpression(m => m.Options, ViewData); + var optionGroups = optionsMetadata.Properties.Where(p => p.ShortDisplayName != null && p.ModelType == typeof(bool) && p.PropertyName != "CurrentOnly") + .GroupBy(m => m.ShortDisplayName); + + + #line default + #line hidden +WriteLiteral("\r\n\r\n"); + + + #line 13 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 13 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + using (Html.BeginForm(MVC.API.DeviceFlag.Export())) + { + + + #line default + #line hidden +WriteLiteral(" \r\n

Export Scope

\r\n \r\n \r\n" + +" \r\n Device Flags:\r\n \r\n " + +" \r\n \r\n \r\n " + +" \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n"); + + + #line 23 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 23 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + foreach (var flag in Model.DeviceFlags) + { + + + #line default + #line hidden +WriteLiteral("
\r\n \r\n \r\n"); + + + #line 32 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral("
"); + + + #line 36 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Html.LabelFor(m => m.Options.CurrentOnly)); + + + #line default + #line hidden +WriteLiteral("\r\n"); + +WriteLiteral(" "); + + + #line 38 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Html.CheckBoxFor(m => m.Options.CurrentOnly)); + + + #line default + #line hidden +WriteLiteral("\r\n

Uncheck to include all historical device flag assign" + +"ments.

\r\n
"); + + + #line 43 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Html.LabelFor(m => m.Options.Format)); + + + #line default + #line hidden +WriteLiteral("\r\n"); + +WriteLiteral(" "); + + + #line 45 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Html.DropDownListFor(m => m.Options.Format, Enum.GetNames(typeof(Disco.Models.Exporting.ExportFormat)).Select(v => new SelectListItem() { Value = v, Text = v }))); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n " + +" \r\n"); + +WriteLiteral(" \r\n

Export Fields (Defaults)

\r\n \r\n"); + + + #line 53 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 53 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + foreach (var optionGroup in optionGroups) + { + var optionFields = optionGroup.ToList(); + var itemsPerColumn = (int)Math.Ceiling((double)optionFields.Count / 2); + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + +WriteLiteral(" "); + + + #line 59 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(optionGroup.Key); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 60 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 60 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + if (optionFields.Count > 2) + { + + + #line default + #line hidden +WriteLiteral(" ALL | NONE\r\n"); + + + #line 63 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n " + +" \r\n \r\n"); + + + #line 71 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 71 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + foreach (var optionItem in optionFields.Take(itemsPerColumn)) + { + + + #line default + #line hidden +WriteLiteral(" (optionItem.Description + + #line default + #line hidden +, 3840), false) +); + +WriteLiteral(">\r\n (optionItem.PropertyName + + #line default + #line hidden +, 3958), false) +); + +WriteAttribute("name", Tuple.Create(" name=\"", 3983), Tuple.Create("\"", 4022) +, Tuple.Create(Tuple.Create("", 3990), Tuple.Create("Options.", 3990), true) + + #line 74 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + , Tuple.Create(Tuple.Create("", 3998), Tuple.Create(optionItem.PropertyName + + #line default + #line hidden +, 3998), false) +); + +WriteLiteral(" value=\"true\""); + +WriteLiteral(" "); + + + #line 74 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(((bool)optionItem.Model) ? "checked " : null); + + + #line default + #line hidden +WriteLiteral("/>(optionItem.PropertyName + + #line default + #line hidden +, 4106), false) +); + +WriteLiteral(">"); + + + #line 74 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(optionItem.DisplayName); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 75 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" \r\n \r\n \r\n"); + + + #line 80 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + + + #line default + #line hidden + + #line 80 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + foreach (var optionItem in optionFields.Skip(itemsPerColumn)) + { + + + #line default + #line hidden +WriteLiteral(" (optionItem.Description + + #line default + #line hidden +, 4673), false) +); + +WriteLiteral(">\r\n (optionItem.PropertyName + + #line default + #line hidden +, 4791), false) +); + +WriteAttribute("name", Tuple.Create(" name=\"", 4816), Tuple.Create("\"", 4855) +, Tuple.Create(Tuple.Create("", 4823), Tuple.Create("Options.", 4823), true) + + #line 83 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + , Tuple.Create(Tuple.Create("", 4831), Tuple.Create(optionItem.PropertyName + + #line default + #line hidden +, 4831), false) +); + +WriteLiteral(" value=\"true\""); + +WriteLiteral(" "); + + + #line 83 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(((bool)optionItem.Model) ? "checked " : null); + + + #line default + #line hidden +WriteLiteral("/>(optionItem.PropertyName + + #line default + #line hidden +, 4939), false) +); + +WriteLiteral(">"); + + + #line 83 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(optionItem.DisplayName); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 84 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral(@" + + +
\r\n " + +" \r\n \r\n
+ + + +"); + + + #line 92 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + +WriteLiteral(" \r\n"); + + + #line 159 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + } + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 161 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + if (Model.ExportSessionId != null) +{ + + + #line default + #line hidden +WriteLiteral(" \r\n

"); + + + #line 164 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Model.ExportSessionResult.RecordCount); + + + #line default + #line hidden +WriteLiteral(" record"); + + + #line 164 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" + Write(Model.ExportSessionResult.RecordCount != 1 ? "s" : null); + + + #line default + #line hidden +WriteLiteral(" were successfully exported.

\r\n (Url.Action(MVC.API.DeviceFlag.ExportRetrieve(Model.ExportSessionId)) + + #line default + #line hidden +, 8257), false) +); + +WriteLiteral(" class=\"button\""); + +WriteLiteral(">Download Device Flag Export\r\n \r\n"); + +WriteLiteral(@" +"); + + + #line 179 "..\..\Areas\Config\Views\DeviceFlag\Export.cshtml" +} + + + #line default + #line hidden +WriteLiteral("\r\n

Exporting device flags...

\r\n\r\n\r\n Export Device Flags\r\n\r\n"); + + } + } +} +#pragma warning restore 1591 diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Index.cshtml b/Disco.Web/Areas/Config/Views/DeviceFlag/Index.cshtml new file mode 100644 index 00000000..c85aaf08 --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Index.cshtml @@ -0,0 +1,78 @@ +@model Disco.Web.Areas.Config.Models.DeviceFlag.IndexModel +@{ + Authorization.Require(Claims.Config.DeviceFlag.Show); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags"); + var showTags = Model.DeviceFlags.Keys.Any(i => i.DevicesLinkedGroup != null || i.DeviceUsersLinkedGroup != null || + i.OnAssignmentExpression != null || i.OnUnassignmentExpression != null); +} +
+ @if (Model.DeviceFlags.Count == 0) + { +
+

No device flags are configured

+
+ } + else + { + + + + + + @if (showTags) + { + + } + + @foreach (var pair in Model.DeviceFlags.OrderBy(i => i.Key.Name)) + { + var item = pair.Key; + var assignmentCount = pair.Value; + + + + + @if (showTags) + { + + } + + } +
NameDescriptionCurrent Assignments 
+ + + @item.Name + + + @if (string.IsNullOrWhiteSpace(item.Description)) + { + <none> + } + else + { + @item.Description.ToHtmlComment() + } + + @assignmentCount.ToString("N0") + + @if (item.DevicesLinkedGroup != null || item.DeviceUsersLinkedGroup != null) + { + + } + @if (item.OnAssignmentExpression != null || item.OnUnassignmentExpression != null) + { + + } +
+ } +
+ @if (Authorization.Has(Claims.Config.DeviceFlag.Export) && Model.DeviceFlags.Count > 0) + { + @Html.ActionLinkButton("Export", MVC.Config.DeviceFlag.Export()) + } + @if (Authorization.Has(Claims.Config.DeviceFlag.Create)) + { + @Html.ActionLinkButton("Create Device Flag", MVC.Config.DeviceFlag.Create()) + } +
+
diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Index.generated.cs b/Disco.Web/Areas/Config/Views/DeviceFlag/Index.generated.cs new file mode 100644 index 00000000..fb825bde --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Index.generated.cs @@ -0,0 +1,410 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Disco.Web.Areas.Config.Views.DeviceFlag +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text; + using System.Web; + using System.Web.Helpers; + using System.Web.Mvc; + using System.Web.Mvc.Ajax; + using System.Web.Mvc.Html; + using System.Web.Routing; + using System.Web.Security; + using System.Web.UI; + using System.Web.WebPages; + using Disco; + using Disco.Models.Repository; + using Disco.Services; + using Disco.Services.Authorization; + using Disco.Services.Web; + using Disco.Web; + using Disco.Web.Extensions; + + [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] + [System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DeviceFlag/Index.cshtml")] + public partial class Index : Disco.Services.Web.WebViewPage + { + public Index() + { + } + public override void Execute() + { + + #line 2 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + Authorization.Require(Claims.Config.DeviceFlag.Show); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags"); + var showTags = Model.DeviceFlags.Keys.Any(i => i.DevicesLinkedGroup != null || i.DeviceUsersLinkedGroup != null || + i.OnAssignmentExpression != null || i.OnUnassignmentExpression != null); + + + #line default + #line hidden +WriteLiteral("\r\n\r\n"); + + + #line 9 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 9 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (Model.DeviceFlags.Count == 0) + { + + + #line default + #line hidden +WriteLiteral(" \r\n

No device flags are configured

\r\n \r\n"); + + + #line 14 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + else + { + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n Name\r\n Descripti" + +"on\r\n Current Assignments\r\n"); + + + #line 22 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 22 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (showTags) + { + + + #line default + #line hidden +WriteLiteral("  \r\n"); + + + #line 25 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 27 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 27 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + foreach (var pair in Model.DeviceFlags.OrderBy(i => i.Key.Name)) + { + var item = pair.Key; + var assignmentCount = pair.Value; + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n (Url.Action(MVC.Config.DeviceFlag.Index(item.Id)) + + #line default + #line hidden +, 1236), false) +); + +WriteLiteral(">\r\n (item.Icon + + #line default + #line hidden +, 1333), false) +, Tuple.Create(Tuple.Create(" ", 1345), Tuple.Create("fa-lg", 1346), true) +, Tuple.Create(Tuple.Create(" ", 1351), Tuple.Create("d-", 1352), true) + + #line 34 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" +, Tuple.Create(Tuple.Create("", 1354), Tuple.Create(item.IconColour + + #line default + #line hidden +, 1354), false) +); + +WriteLiteral(">\r\n"); + +WriteLiteral(" "); + + + #line 35 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + Write(item.Name); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n \r\n \r\n"); + + + #line 39 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 39 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (string.IsNullOrWhiteSpace(item.Description)) + { + + + #line default + #line hidden +WriteLiteral(" <none>\r\n"); + + + #line 42 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + else + { + + + #line default + #line hidden + + #line 45 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + Write(item.Description.ToHtmlComment()); + + + #line default + #line hidden + + #line 45 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + +WriteLiteral(" "); + + + #line 49 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + Write(assignmentCount.ToString("N0")); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 51 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 51 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (showTags) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 54 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 54 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (item.DevicesLinkedGroup != null || item.DeviceUsersLinkedGroup != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 57 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 58 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (item.OnAssignmentExpression != null || item.OnUnassignmentExpression != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 61 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 63 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 65 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 67 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + } + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 69 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + + #line default + #line hidden + + #line 69 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (Authorization.Has(Claims.Config.DeviceFlag.Export) && Model.DeviceFlags.Count > 0) + { + + + #line default + #line hidden + + #line 71 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + Write(Html.ActionLinkButton("Export", MVC.Config.DeviceFlag.Export())); + + + #line default + #line hidden + + #line 71 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 73 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + if (Authorization.Has(Claims.Config.DeviceFlag.Create)) + { + + + #line default + #line hidden + + #line 75 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + Write(Html.ActionLinkButton("Create Device Flag", MVC.Config.DeviceFlag.Create())); + + + #line default + #line hidden + + #line 75 "..\..\Areas\Config\Views\DeviceFlag\Index.cshtml" + + } + + + #line default + #line hidden +WriteLiteral("\r\n\r\n"); + + } + } +} +#pragma warning restore 1591 diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Show.cshtml b/Disco.Web/Areas/Config/Views/DeviceFlag/Show.cshtml new file mode 100644 index 00000000..f9348a83 --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Show.cshtml @@ -0,0 +1,590 @@ +@model Disco.Web.Areas.Config.Models.DeviceFlag.ShowModel +@using Disco.Services.Interop.ActiveDirectory; +@using Disco.Services.Devices.DeviceFlags; +@using Disco.Web.Areas.Config.Models.Shared; +@{ + Authorization.Require(Claims.Config.DeviceFlag.Show); + + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), Model.DeviceFlag.ToString()); + + var canConfig = Authorization.Has(Claims.Config.DeviceFlag.Configure); + var canDelete = Authorization.Has(Claims.Config.DeviceFlag.Delete); + var canBulkAssignment = Authorization.HasAll(Claims.Device.Actions.AddFlags, Claims.Device.Actions.RemoveFlags, Claims.Device.ShowFlagAssignments); + var canShowDevices = Model.CurrentAssignmentCount > 0 && Authorization.HasAll(Claims.Device.Search, Claims.Device.ShowFlagAssignments); + var canExportCurrent = Model.CurrentAssignmentCount > 0 && Authorization.Has(Claims.Config.DeviceFlag.Export); + var canExportAll = Model.TotalAssignmentCount > 0 && Authorization.Has(Claims.Config.DeviceFlag.Export); + + var hideAdvanced = + Model.DeviceFlag.DevicesLinkedGroup == null && + Model.DeviceFlag.DeviceUsersLinkedGroup == null && + Model.DeviceFlag.OnAssignmentExpression == null && + Model.DeviceFlag.OnUnassignmentExpression == null; + + Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); +} +
+ + + + + + + + + + + + + + + + + + + + + + @if (hideAdvanced) + { + + + + } + + + + + + + + + + + + + +
+ Id: + + @Html.DisplayFor(model => model.DeviceFlag.Id) +
+ Name: + + @if (canConfig) + {@Html.EditorFor(model => model.DeviceFlag.Name) + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + + } + else + { + @Model.DeviceFlag.Name + } +
+ Description: + + @if (canConfig) + {@Html.EditorFor(model => model.DeviceFlag.Description) + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + + } + else + { +
+                    @if (string.IsNullOrEmpty(Model.DeviceFlag.Description))
+                    {
+                    <None>
+                    }
+                    else
+                    {
+                        @Model.DeviceFlag.Description.ToHtmlComment()
+                    }
+                    
+ } +
+ Statistics: + +
@Model.CurrentAssignmentCount device@(Model.CurrentAssignmentCount != 1 ? "s" : null) currently assigned
+
@Model.TotalAssignmentCount total device historical assignment@(Model.TotalAssignmentCount != 1 ? "s" : null)
+
+ Icon: + + + @if (canConfig) + { +
+ Update +
+
+
+ @foreach (var colour in Model.ThemeColours) + { + + } +
+
+ @foreach (var icon in Model.Icons) + { + + } +
+
+
+ +
+ } +
+ + +
+ On Assignment
Expression: +
+ @if (canConfig) + { + @Html.EditorFor(model => model.DeviceFlag.OnAssignmentExpression) + @AjaxHelpers.AjaxRemove() + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + + } + else + { + if (string.IsNullOrWhiteSpace(Model.DeviceFlag.OnAssignmentExpression)) + { + <None Specified> + } + else + { +
+ @Model.DeviceFlag.OnAssignmentExpression +
+ } + } +
+

+ This expression will be evaluated whenever the flag is assigned to a device. The output of the expression will be shown with the flag assignment. +

+
+
+ On Unassignment
Expression: +
+ @if (canConfig) + { + @Html.EditorFor(model => model.DeviceFlag.OnUnassignmentExpression) + @AjaxHelpers.AjaxRemove() + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + + } + else + { + if (string.IsNullOrWhiteSpace(Model.DeviceFlag.OnUnassignmentExpression)) + { + <None Specified> + } + else + { +
+ @Model.DeviceFlag.OnUnassignmentExpression +
+ } + } +
+

+ This expression will be evaluated whenever the flag is removed from a device. The output of the expression will be shown with the flag assignment. +

+
+
+ Linked Groups: + +
+ @Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() + { + CanConfigure = canConfig, + CategoryDescription = DeviceFlagDevicesManagedGroup.GetCategoryDescription(Model.DeviceFlag), + Description = DeviceFlagDevicesManagedGroup.GetDescription(Model.DeviceFlag), + ManagedGroup = Model.DevicesLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DeviceFlag.UpdateDevicesLinkedGroup(Model.DeviceFlag.Id, redirect: true)) + }) + @Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() + { + CanConfigure = canConfig, + CategoryDescription = DeviceFlagDeviceAssignedUsersManagedGroup.GetCategoryDescription(Model.DeviceFlag), + Description = DeviceFlagDeviceAssignedUsersManagedGroup.GetDescription(Model.DeviceFlag), + ManagedGroup = Model.AssignedUserLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DeviceFlag.UpdateAssignedUserLinkedGroup(Model.DeviceFlag.Id, redirect: true)) + }) + @if (canConfig) + { + @Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared) + } +
+
+
+@if (canBulkAssignment || canDelete || canShowDevices || canExportCurrent || canExportAll) +{ +
+ @if (canExportCurrent) + { + @Html.ActionLinkButton("Export Current Assignments", MVC.Config.DeviceFlag.Export(null, Model.DeviceFlag.Id, true), "Config_DeviceFlags_Actions_ExportCurrent_Button") + } + @if (canExportAll) + { + @Html.ActionLinkButton("Export All Assignments", MVC.Config.DeviceFlag.Export(null, Model.DeviceFlag.Id, false), "Config_DeviceFlags_Actions_ExportAll_Button") + } + @if (canBulkAssignment) + { + Bulk Assign Devices +
+

+ Select the mode used to assign devices: +

+
+
+
Add
+

+ Specified devices will have this flag added. Devices who already have this flag will be skipped. +

+
+
+
Override
+

+ Specified devices will have this flag added. Specified devices which already have this flag will be skipped. + Devices who already have this flag but are not specified will have the flag removed. +

+
+
+
+
+
+
+ Enter multiple Device Serial Numbers separated by <new line>, commas (,) or semicolons (;). +
+
+
+

Loading current assignments...

+
+
+ +

Comments:

+ +
+
+ + } + @if (canDelete) + { + @Html.ActionLinkButton("Delete", MVC.API.DeviceFlag.Delete(Model.DeviceFlag.Id, true), "Config_DeviceFlags_Actions_Delete_Button") +
+

+ + This item will be permanently deleted and cannot be recovered.
+
+ @if (Model.CurrentAssignmentCount > 0) + { + @Model.CurrentAssignmentCount device@(Model.CurrentAssignmentCount != 1 ? "s are" : " is") currently assigned +
+
+ } + Are you sure? +

+
+ + } + @if (canShowDevices) + { + @Html.ActionLinkButton(string.Format("Show {0} device{1}", Model.CurrentAssignmentCount, (Model.CurrentAssignmentCount == 1 ? null : "s")), MVC.Search.Query(Model.DeviceFlag.Id.ToString(), "DeviceFlag"), "Config_DeviceFlags_Actions_ShowDevices_Button") + } +
+} diff --git a/Disco.Web/Areas/Config/Views/DeviceFlag/Show.generated.cs b/Disco.Web/Areas/Config/Views/DeviceFlag/Show.generated.cs new file mode 100644 index 00000000..b8ea9c7c --- /dev/null +++ b/Disco.Web/Areas/Config/Views/DeviceFlag/Show.generated.cs @@ -0,0 +1,1637 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Disco.Web.Areas.Config.Views.DeviceFlag +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text; + using System.Web; + using System.Web.Helpers; + using System.Web.Mvc; + using System.Web.Mvc.Ajax; + using System.Web.Mvc.Html; + using System.Web.Routing; + using System.Web.Security; + using System.Web.UI; + using System.Web.WebPages; + using Disco; + using Disco.Models.Repository; + using Disco.Services; + using Disco.Services.Authorization; + + #line 3 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + using Disco.Services.Devices.DeviceFlags; + + #line default + #line hidden + + #line 2 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + using Disco.Services.Interop.ActiveDirectory; + + #line default + #line hidden + using Disco.Services.Web; + using Disco.Web; + + #line 4 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + using Disco.Web.Areas.Config.Models.Shared; + + #line default + #line hidden + using Disco.Web.Extensions; + + [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] + [System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DeviceFlag/Show.cshtml")] + public partial class Show : Disco.Services.Web.WebViewPage + { + public Show() + { + } + public override void Execute() + { + + #line 5 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + Authorization.Require(Claims.Config.DeviceFlag.Show); + + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Device Flags", MVC.Config.DeviceFlag.Index(null), Model.DeviceFlag.ToString()); + + var canConfig = Authorization.Has(Claims.Config.DeviceFlag.Configure); + var canDelete = Authorization.Has(Claims.Config.DeviceFlag.Delete); + var canBulkAssignment = Authorization.HasAll(Claims.Device.Actions.AddFlags, Claims.Device.Actions.RemoveFlags, Claims.Device.ShowFlagAssignments); + var canShowDevices = Model.CurrentAssignmentCount > 0 && Authorization.HasAll(Claims.Device.Search, Claims.Device.ShowFlagAssignments); + var canExportCurrent = Model.CurrentAssignmentCount > 0 && Authorization.Has(Claims.Config.DeviceFlag.Export); + var canExportAll = Model.TotalAssignmentCount > 0 && Authorization.Has(Claims.Config.DeviceFlag.Export); + + var hideAdvanced = + Model.DeviceFlag.DevicesLinkedGroup == null && + Model.DeviceFlag.DeviceUsersLinkedGroup == null && + Model.DeviceFlag.OnAssignmentExpression == null && + Model.DeviceFlag.OnUnassignmentExpression == null; + + Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); + + + #line default + #line hidden +WriteLiteral("\r\n(hideAdvanced ? " Config_HideAdvanced" : null + + #line default + #line hidden +, 1490), false) +); + +WriteLiteral(" style=\"width: 550px\""); + +WriteLiteral(">\r\n \r\n \r\n \r\n Id:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n"); + + + #line 211 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 211 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (hideAdvanced) + { + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n Show Advanced Options + + + +"); + + + #line 227 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n \r\n \r\n " + +" \r\n \r\n \r\n \r\n\r\n " + +" \r\n \r\n " + +" \r\n \r\n
\r\n"); + +WriteLiteral(" "); + + + #line 32 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.DisplayFor(model => model.DeviceFlag.Id)); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n " + +" Name:\r\n \r\n"); + + + #line 40 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 40 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canConfig) + { + + #line default + #line hidden + + #line 41 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.Name)); + + + #line default + #line hidden + + #line 41 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 42 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxSave()); + + + #line default + #line hidden + + #line 42 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 43 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxLoader()); + + + #line default + #line hidden + + #line 43 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" + $(function () { + document.DiscoFunctions.PropertyChangeHelper( + $('#DeviceFlag_Name'), + 'Invalid Name', + '"); + + + #line 49 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Url.Action(MVC.API.DeviceFlag.UpdateName(Model.DeviceFlag.Id))); + + + #line default + #line hidden +WriteLiteral("\',\r\n \'FlagName\'\r\n );\r\n " + +" });\r\n \r\n"); + + + #line 54 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + + + #line default + #line hidden + + #line 57 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.DeviceFlag.Name); + + + #line default + #line hidden + + #line 57 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + } + + + #line default + #line hidden +WriteLiteral("
\r\n " + +" Description:\r\n \r\n"); + + + #line 66 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 66 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canConfig) + { + + #line default + #line hidden + + #line 67 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.Description)); + + + #line default + #line hidden + + #line 67 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 68 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxSave()); + + + #line default + #line hidden + + #line 68 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 69 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxLoader()); + + + #line default + #line hidden + + #line 69 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" + $(function () { + document.DiscoFunctions.PropertyChangeHelper( + $('#DeviceFlag_Description'), + 'Invalid Description', + '"); + + + #line 75 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Url.Action(MVC.API.DeviceFlag.UpdateDescription(Model.DeviceFlag.Id))); + + + #line default + #line hidden +WriteLiteral("\',\r\n \'Description\'\r\n );" + +"\r\n });\r\n \r\n"); + + + #line 80 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + + + #line default + #line hidden +WriteLiteral("
\r\n");
+
+            
+            #line 84 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml"
+                    
+            
+            #line default
+            #line hidden
+            
+            #line 84 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml"
+                     if (string.IsNullOrEmpty(Model.DeviceFlag.Description))
+                    {
+
+            
+            #line default
+            #line hidden
+WriteLiteral("                    ");
+
+WriteLiteral("<None>");
+
+WriteLiteral("\r\n");
+
+            
+            #line 87 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml"
+                    }
+                    else
+                    {
+                        
+            
+            #line default
+            #line hidden
+            
+            #line 90 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml"
+                   Write(Model.DeviceFlag.Description.ToHtmlComment());
+
+            
+            #line default
+            #line hidden
+            
+            #line 90 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml"
+                                                                     
+                    }
+
+            
+            #line default
+            #line hidden
+WriteLiteral("                    
\r\n"); + + + #line 93 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral("
\r\n " + +" Statistics:\r\n \r\n
" + +""); + + + #line 101 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.CurrentAssignmentCount); + + + #line default + #line hidden +WriteLiteral(" device"); + + + #line 101 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.CurrentAssignmentCount != 1 ? "s" : null); + + + #line default + #line hidden +WriteLiteral(" currently assigned
\r\n
"); + + + #line 102 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.TotalAssignmentCount); + + + #line default + #line hidden +WriteLiteral(" total device historical assignment"); + + + #line 102 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.TotalAssignmentCount != 1 ? "s" : null); + + + #line default + #line hidden +WriteLiteral("
\r\n
\r\n " + +" Icon:\r\n \r\n
\r\n On Assignment
Expression:\r\n " + +"
\r\n"); + + + #line 233 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 233 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 235 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.OnAssignmentExpression)); + + + #line default + #line hidden + + #line 235 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 236 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxRemove()); + + + #line default + #line hidden + + #line 236 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 237 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxSave()); + + + #line default + #line hidden + + #line 237 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 238 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxLoader()); + + + #line default + #line hidden + + #line 238 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" + $(function () { + var field = $('#DeviceFlag_OnAssignmentExpression'); + var fieldRemove = field.next('.ajaxRemove'); + var fieldOriginalWidth, fieldOriginalHeight; + + document.DiscoFunctions.PropertyChangeHelper( + field, + 'None', + '"); + + + #line 248 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Url.Action(MVC.API.DeviceFlag.UpdateOnAssignmentExpression(Model.DeviceFlag.Id))); + + + #line default + #line hidden +WriteLiteral("\',\r\n \'OnAssignmentExpression\'\r\n " + +" );\r\n\r\n field.focus(function () {" + +"\r\n fieldOriginalWidth = field.width();\r\n " + +" fieldOriginalHeight = field.height();\r\n " + +" field.css(\'overflow\', \'visible\').animate({ width: fiel" + +"d.parent().width() - 42, height: 75 }, 200);\r\n })" + +".blur(function () {\r\n field.css(\'overflow\', \'" + +"hidden\').animate({ width: fieldOriginalWidth, height: fieldOriginalHeight }, 200" + +");\r\n }).change(function () {\r\n " + +" if (!!field.val()) {\r\n f" + +"ieldRemove.show();\r\n } else {\r\n " + +" fieldRemove.hide();\r\n " + +" }\r\n }).attr(\'placeholder\', \'None\').attr(\'spell" + +"check\', \'false\');\r\n\r\n fieldRemove.click(function " + +"() {\r\n field.val(\'\').change();\r\n " + +" });\r\n\r\n if (!!field.val()) {\r\n" + +" fieldRemove.show();\r\n " + +" } else {\r\n fieldRemove.hide();\r\n " + +" }\r\n });\r\n " + +" \r\n"); + + + #line 277 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + if (string.IsNullOrWhiteSpace(Model.DeviceFlag.OnAssignmentExpression)) + { + + + #line default + #line hidden +WriteLiteral(" <None Specified>\r\n"); + + + #line 283 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + +WriteLiteral(" "); + + + #line 287 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.DeviceFlag.OnAssignmentExpression); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 289 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n This expression will be evaluated whenever the flag is assigned to a device." + +" The output of the expression will be shown with the flag assignment.\r\n " + +"

\r\n \r\n
\r\n On Unassignment
Expression:\r\n " + +"
\r\n"); + + + #line 303 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 303 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 305 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.EditorFor(model => model.DeviceFlag.OnUnassignmentExpression)); + + + #line default + #line hidden + + #line 305 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 306 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxRemove()); + + + #line default + #line hidden + + #line 306 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 307 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxSave()); + + + #line default + #line hidden + + #line 307 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden + + #line 308 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(AjaxHelpers.AjaxLoader()); + + + #line default + #line hidden + + #line 308 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" + $(function () { + var field = $('#DeviceFlag_OnUnassignmentExpression'); + var fieldRemove = field.next('.ajaxRemove'); + var fieldOriginalWidth, fieldOriginalHeight; + + document.DiscoFunctions.PropertyChangeHelper( + field, + 'None', + '"); + + + #line 318 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Url.Action(MVC.API.DeviceFlag.UpdateOnUnassignmentExpression(Model.DeviceFlag.Id))); + + + #line default + #line hidden +WriteLiteral(@"', + 'OnUnassignmentExpression' + ); + + field.focus(function () { + fieldOriginalWidth = field.width(); + fieldOriginalHeight = field.height(); + field.css('overflow', 'visible').animate({ width: field.parent().width() - 42, height: 75 }, 200); + }).blur(function () { + field.css('overflow', 'hidden').animate({ width: fieldOriginalWidth, height: fieldOriginalHeight }, 200); + }).change(function () { + if (!!field.val()) { + fieldRemove.show(); + } else { + fieldRemove.hide(); + } + }).attr('placeholder', 'None').attr('spellcheck', 'false'); + + fieldRemove.click(function () { + field.val('').change(); + }); + + if (!!field.val()) { + fieldRemove.show(); + } else { + fieldRemove.hide(); + } + }); + +"); + + + #line 347 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + if (string.IsNullOrWhiteSpace(Model.DeviceFlag.OnUnassignmentExpression)) + { + + + #line default + #line hidden +WriteLiteral(" <None Specified>\r\n"); + + + #line 353 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + else + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + +WriteLiteral(" "); + + + #line 357 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.DeviceFlag.OnUnassignmentExpression); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 359 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n This expression will be evaluated whenever the flag is removed from a device" + +". The output of the expression will be shown with the flag assignment.\r\n " + +"

\r\n \r\n
\r\n Linked Groups:\r\n \r\n
\r\n"); + +WriteLiteral(" "); + + + #line 375 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() + { + CanConfigure = canConfig, + CategoryDescription = DeviceFlagDevicesManagedGroup.GetCategoryDescription(Model.DeviceFlag), + Description = DeviceFlagDevicesManagedGroup.GetDescription(Model.DeviceFlag), + ManagedGroup = Model.DevicesLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DeviceFlag.UpdateDevicesLinkedGroup(Model.DeviceFlag.Id, redirect: true)) + })); + + + #line default + #line hidden +WriteLiteral("\r\n"); + +WriteLiteral(" "); + + + #line 384 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() + { + CanConfigure = canConfig, + CategoryDescription = DeviceFlagDeviceAssignedUsersManagedGroup.GetCategoryDescription(Model.DeviceFlag), + Description = DeviceFlagDeviceAssignedUsersManagedGroup.GetDescription(Model.DeviceFlag), + ManagedGroup = Model.AssignedUserLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DeviceFlag.UpdateAssignedUserLinkedGroup(Model.DeviceFlag.Id, redirect: true)) + })); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 393 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 393 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 395 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared)); + + + #line default + #line hidden + + #line 395 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + } + + + #line default + #line hidden +WriteLiteral("
\r\n
\r\n\r\n"); + + + #line 402 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canBulkAssignment || canDelete || canShowDevices || canExportCurrent || canExportAll) +{ + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 405 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 405 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canExportCurrent) + { + + + #line default + #line hidden + + #line 407 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.ActionLinkButton("Export Current Assignments", MVC.Config.DeviceFlag.Export(null, Model.DeviceFlag.Id, true), "Config_DeviceFlags_Actions_ExportCurrent_Button")); + + + #line default + #line hidden + + #line 407 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 409 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canExportAll) + { + + + #line default + #line hidden + + #line 411 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.ActionLinkButton("Export All Assignments", MVC.Config.DeviceFlag.Export(null, Model.DeviceFlag.Id, false), "Config_DeviceFlags_Actions_ExportAll_Button")); + + + #line default + #line hidden + + #line 411 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 413 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canBulkAssignment) + { + + + #line default + #line hidden +WriteLiteral(" Bulk Assign Devices\r\n"); + +WriteLiteral(" \r\n

\r\n Select the mode used to assign device" + +"s:\r\n

\r\n
\r\n \r\n
Add
+

+ Specified devices will have this flag added. Devices who already have this flag will be skipped. +

+
+ \r\n
Override
+

+ Specified devices will have this flag added. Specified devices which already have this flag will be skipped. + Devices who already have this flag but are not specified will have the flag removed. +

+ + + +"); + +WriteLiteral(" \r\n +
+ Enter multiple Device Serial Numbers separated by <new line>, commas (,) or semicolons (;). +
+ + \r\n

Loading current assignments...

\r\n \r\n " + +" \r\n \r\n

Comments:

\r\n \r\n \r\n \r\n"); + +WriteLiteral(" +"); + + + #line 538 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 539 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canDelete) + { + + + #line default + #line hidden + + #line 541 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.ActionLinkButton("Delete", MVC.API.DeviceFlag.Delete(Model.DeviceFlag.Id, true), "Config_DeviceFlags_Actions_Delete_Button")); + + + #line default + #line hidden + + #line 541 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + + #line default + #line hidden +WriteLiteral(" \r\n

\r\n \r\n This item will be permanently deleted and cannot be re" + +"covered.
\r\n
\r\n"); + + + #line 547 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + + #line default + #line hidden + + #line 547 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (Model.CurrentAssignmentCount > 0) + { + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 549 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.CurrentAssignmentCount); + + + #line default + #line hidden +WriteLiteral(" device"); + + + #line 549 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Model.CurrentAssignmentCount != 1 ? "s are" : " is"); + + + #line default + #line hidden +WriteLiteral(" currently assigned\r\n"); + +WriteLiteral("
\r\n"); + +WriteLiteral("
\r\n"); + + + #line 552 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" Are you sure?\r\n

\r\n \r\n"); + +WriteLiteral(" + $(function () { + var button = $('#Config_DeviceFlags_Actions_Delete_Button'); + var buttonDialog = $('#Config_DeviceFlags_Actions_Delete_Dialog'); + var buttonLink = button.attr('href'); + button.attr('href', '#'); + button.click(function () { + buttonDialog.dialog('open'); + return false; + }); + buttonDialog.dialog({ + resizable: false, + modal: true, + autoOpen: false, + buttons: { + ""Delete"": function () { + var $this = $(this); + $this.dialog(""disable""); + $this.dialog(""option"", ""buttons"", null); + window.location.href = buttonLink; + }, + Cancel: function () { + $(this).dialog(""close""); + } + } + }); + }); + +"); + + + #line 584 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 585 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + if (canShowDevices) + { + + + #line default + #line hidden + + #line 587 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + Write(Html.ActionLinkButton(string.Format("Show {0} device{1}", Model.CurrentAssignmentCount, (Model.CurrentAssignmentCount == 1 ? null : "s")), MVC.Search.Query(Model.DeviceFlag.Id.ToString(), "DeviceFlag"), "Config_DeviceFlags_Actions_ShowDevices_Button")); + + + #line default + #line hidden + + #line 587 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 590 "..\..\Areas\Config\Views\DeviceFlag\Show.cshtml" +} + + + #line default + #line hidden + } + } +} +#pragma warning restore 1591 diff --git a/Disco.Web/ClientSource/Style/Config.css b/Disco.Web/ClientSource/Style/Config.css index a436367e..84605015 100644 --- a/Disco.Web/ClientSource/Style/Config.css +++ b/Disco.Web/ClientSource/Style/Config.css @@ -1824,6 +1824,164 @@ h1.Config_DocumentTemplates { margin-right: 10px; color: #1e6dab; } +#Config_DeviceFlags_Show #DeviceFlag_OnAssignmentExpression, +#Config_DeviceFlags_Show #DeviceFlag_OnUnassignmentExpression { + height: 16px; + min-height: 16px; + overflow: hidden; + font-family: Consolas, "Courier New", monospace; +} +#Config_DeviceFlags_Index i { + width: 1.28571429em; + text-align: center; +} +#Config_DeviceFlags_Icon { + display: block; + margin: 0 0 10px 10px; +} +#Config_DeviceFlags_Icon_Update_Dialog { + display: none; +} +#Config_DeviceFlags_Icon_Update_Dialog div.colours { + text-align: center; + font-size: 30px; +} +#Config_DeviceFlags_Icon_Update_Dialog div.colours i { + cursor: pointer; + padding: 1px; + opacity: 0.9; +} +#Config_DeviceFlags_Icon_Update_Dialog div.colours i:hover { + opacity: 1; +} +#Config_DeviceFlags_Icon_Update_Dialog div.colours i.selected { + opacity: 1; +} +#Config_DeviceFlags_Icon_Update_Dialog div.icons { + text-align: center; + font-size: 30px; + background-color: #fff; + border: 1px solid #D1D1D1; + margin: 6px 0 14px 0; +} +#Config_DeviceFlags_Icon_Update_Dialog div.icons i { + width: 1.28571429em; + text-align: center; + cursor: pointer; + padding: 4px 0px; + color: #333; + opacity: 0.6; +} +#Config_DeviceFlags_Icon_Update_Dialog div.icons i:hover { + opacity: 0.9; + color: inherit; +} +#Config_DeviceFlags_Icon_Update_Dialog div.icons i.selected { + opacity: 1; + color: inherit; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div { + margin-top: 6px; + background-color: #fff; + line-height: 1.3em; + border: 1px solid #ddd; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div { + display: block; + padding: 4px; + cursor: pointer; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div:not(:last-child) { + border-bottom: 1px dashed #ddd; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div h5 { + font-size: 1.1em; + padding: 4px 0; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div i { + margin-right: 4px; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div.add:hover { + background-color: #eeffde; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div.add i { + color: #60A917; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div.override:hover { + background-color: #ffe1de; +} +#Config_DeviceFlags_BulkAssign_ModeDialog > div > div.override i { + color: #e51400; +} +#Config_DeviceFlags_BulkAssign_AssignDialog .brief { + margin: 0 0 8px 0; +} +#Config_DeviceFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate { + font-weight: 600; +} +#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples { + margin: 8px auto; + width: 300px; +} +#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div { + margin: 2px 4px 2px 0; + width: 150px; + float: left; +} +#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div.example1 { + width: 100px; +} +#Config_DeviceFlags_BulkAssign_AssignDialog div.loading { + display: none; + padding: 40px 0; + text-align: center; +} +#Config_DeviceFlags_BulkAssign_AssignDialog div.loading i { + margin-right: 10px; + color: #1e6dab; +} +#Config_DeviceFlags_BulkAssign_AssignDialog #Config_DeviceFlags_BulkAssign_AssignDialog_DeviceSerialNumbers { + height: 200px; + margin-bottom: 8px; +} +#Config_DeviceFlags_BulkAssign_AssignDialog textarea { + width: calc(100% - .5em); + margin: 0; +} +#Config_DeviceFlags_BulkAssign_AssignDialog.loading > div.loading { + display: block; +} +#Config_DeviceFlags_BulkAssign_AssignDialog.loading > form { + display: none; +} +#DeviceFlag_Export #DeviceFlag_Export_Fields #DeviceFlag_Export_Fields_Defaults { + font-size: 0.75em; +} +#DeviceFlag_Export #DeviceFlag_Export_Fields th { + font-size: 1.05em; +} +#DeviceFlag_Export #DeviceFlag_Export_Fields th span { + margin-top: 4px; + font-size: 0.8em; +} +#DeviceFlag_Export_Download_Dialog { + padding-top: 20px; + text-align: center; +} +#DeviceFlag_Export_Download_Dialog h4 { + margin-bottom: 30px; +} +#DeviceFlag_Export_Download_Dialog a { + margin-bottom: 20px; +} +#DeviceFlag_Export_Exporting { + padding-top: 50px; + text-align: center; +} +#DeviceFlag_Export_Exporting i { + margin-right: 10px; + color: #1e6dab; +} #DocumentTemplate_BulkGenerate .actions { padding-bottom: 0.5em; text-align: right; diff --git a/Disco.Web/ClientSource/Style/Config.less b/Disco.Web/ClientSource/Style/Config.less index 8afac09a..c6099643 100644 --- a/Disco.Web/ClientSource/Style/Config.less +++ b/Disco.Web/ClientSource/Style/Config.less @@ -2165,6 +2165,222 @@ h1.Config_DocumentTemplates { } } +#Config_DeviceFlags_Show { + + #DeviceFlag_OnAssignmentExpression, #DeviceFlag_OnUnassignmentExpression { + height: 16px; + min-height: 16px; + overflow: hidden; + font-family: @FontFamilyMono; + } +} + +#Config_DeviceFlags_Index { + i { + width: 1.2857142857142858em; + text-align: center; + } +} + +#Config_DeviceFlags_Icon { + display: block; + margin: 0 0 10px 10px; +} + +#Config_DeviceFlags_Icon_Update_Dialog { + display: none; + + div.colours { + text-align: center; + font-size: 30px; + + i { + cursor: pointer; + padding: 1px; + opacity: .9; + + &:hover { + opacity: 1; + } + + &.selected { + opacity: 1; + } + } + } + + div.icons { + text-align: center; + font-size: 30px; + background-color: @white; + border: 1px solid @BackgroundColour; + margin: 6px 0 14px 0; + + i { + width: 1.2857142857142858em; + text-align: center; + cursor: pointer; + padding: 4px 0px; + color: @HeaderBackgroundColour; + opacity: .6; + + &:hover { + opacity: .9; + color: inherit; + } + + &.selected { + opacity: 1; + color: inherit; + } + } + } +} + +#Config_DeviceFlags_BulkAssign_ModeDialog { + & > div { + margin-top: 6px; + background-color: @white; + line-height: 1.3em; + border: 1px solid #ddd; + + & > div { + display: block; + padding: 4px; + cursor: pointer; + + &:not(:last-child) { + border-bottom: 1px dashed #ddd; + } + + h5 { + font-size: 1.1em; + padding: 4px 0; + } + + i { + margin-right: 4px; + } + + &.add { + &:hover { + background-color: hsv(hsvhue(@StatusSuccess), 13%, 100%); + } + + i { + color: @StatusSuccess; + } + } + + &.override { + &:hover { + background-color: hsv(hsvhue(@StatusError), 13%, 100%); + } + + i { + color: @StatusError; + } + } + } + } +} + +#Config_DeviceFlags_BulkAssign_AssignDialog { + .brief { + margin: 0 0 8px 0; + + .scopeDescBulkGenerate { + font-weight: @FontWeightBodyBold; + } + + div.examples { + margin: 8px auto; + width: 300px; + + div { + margin: 2px 4px 2px 0; + width: 150px; + float: left; + + &.example1 { + width: 100px; + } + } + } + } + + div.loading { + display: none; + padding: 40px 0; + text-align: center; + + i { + margin-right: 10px; + color: @StatusInformation; + } + } + + #Config_DeviceFlags_BulkAssign_AssignDialog_DeviceSerialNumbers { + height: 200px; + margin-bottom: 8px; + } + + textarea { + width: calc(~"100% - .5em"); + margin: 0; + } + + &.loading { + & > div.loading { + display: block; + } + + & > form { + display: none; + } + } +} + +#DeviceFlag_Export { + #DeviceFlag_Export_Fields { + #DeviceFlag_Export_Fields_Defaults { + font-size: .75em; + } + + th { + font-size: 1.05em; + + span { + margin-top: 4px; + font-size: .8em; + } + } + } +} + +#DeviceFlag_Export_Download_Dialog { + padding-top: 20px; + text-align: center; + + h4 { + margin-bottom: 30px; + } + + a { + margin-bottom: 20px; + } +} + +#DeviceFlag_Export_Exporting { + padding-top: 50px; + text-align: center; + + i { + margin-right: 10px; + color: @StatusInformation; + } +} + #DocumentTemplate_BulkGenerate { .actions { padding-bottom: .5em; diff --git a/Disco.Web/ClientSource/Style/Config.min.css b/Disco.Web/ClientSource/Style/Config.min.css index 7d337fdb..a34cd212 100644 --- a/Disco.Web/ClientSource/Style/Config.min.css +++ b/Disco.Web/ClientSource/Style/Config.min.css @@ -1 +1 @@ -.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatree-node.property span.dynatree-icon{background-position-x:-48px;}table.expressionsTable{border:solid 1px #f4f4f4;border-collapse:collapse;}table.expressionsTable>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}table.expressionsTable>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}table.expressionsTable>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}table.expressionsTable>tfoot>tr>th,table.expressionsTable>tfoot>tr>td{background-color:#f4f4f4;}table.expressionsTable td.parseError{background-color:#ffd8d8;}#AttachmentType_FilterExpression{width:375px;}#deviceComponents{border:solid 1px #f4f4f4;border-collapse:collapse;}#deviceComponents>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#deviceComponents>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#deviceComponents>thead>tr>th,#deviceComponents>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#deviceComponents>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#deviceComponents>tfoot>tr>th,#deviceComponents>tfoot>tr>td{background-color:#f4f4f4;}#deviceComponents tr th.actions{width:20px;}#deviceComponents tr input.description{width:300px;}#deviceComponents tr input.cost{width:75px;}#deviceComponents tr i.remove{font-size:1.6em;color:#e51400;cursor:pointer;opacity:.8;}#deviceComponents tr i.remove:hover{opacity:1;}#deviceComponents tr i.fa-list-alt{color:#1e6dab;font-size:1.6em;cursor:pointer;}#deviceComponents tr i.fa-asterisk{color:#fa6800;font-size:1em;left:10px;top:3px;cursor:pointer;}#deviceComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#organisationAddresses{font-size:.9em;}#organisationAddresses tr:not(:last-child){border-bottom:1px dashed #aaa;}#organisationAddresses th{padding:2px;font-weight:600;width:200px;}#organisationAddresses td{padding:2px;vertical-align:middle;}#organisationAddresses tr:nth-child(even){background-color:#fff;}#organisationAddresses i.fa{font-size:1.7em;cursor:pointer;}#organisationAddresses i.fa.delete{color:#e51400;opacity:.8;}#organisationAddresses i.fa.delete:hover{opacity:1;}#organisationAddresses i.fa.edit{color:#1e6dab;}ul#loggingEntries{overflow:auto;max-height:230px;padding-left:20px;}table.deviceProfileTable th.name{width:300px;}table.deviceProfileTable th.type{width:120px;}table.deviceProfileTable th.deviceCount{width:120px;}#configurationDeviceProfileShow #displayComputerNameTemplate{margin:0 0 6px 0;}#configurationDeviceProfileShow #displayOrganisationalUnit{margin:0 0 6px 0;}#dialogComputerNameTemplate #ComputerNameTemplate{box-sizing:border-box;height:48px;width:100%;font-family:Consolas,"Courier New",monospace;}#dialogOrganisationalUnit .enforceOrganisationalUnit{line-height:2.2em;}#dialogOrganisationalUnit .organisationalUnitTree{height:380px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node{padding:1px;border:0;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-ef>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-cf>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree ul.fancytree-container>li>span>span.fancytree-icon:before{color:#fa6800;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_System_AD_SearchScope_Dialog_Loading,#dialogOrganisationalUnit_Loading{text-align:center;padding:40px 0;}#configurationDocumentTemplateExpressionBrowser{padding-right:275px;background-image:url(data:image/png;base64,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);background-position:right top;background-repeat:no-repeat;}#Logging_Task_Status{width:520px;margin:40px auto 60px auto;}#Logging_Task_Status th.process{text-align:left;font-weight:600;background-color:#f4f4f4;min-height:30px;vertical-align:middle;}#Logging_Task_Status td.description{font-size:.9em;min-height:60px;}#Logging_Task_Status td.progress{padding:8px 10px;}#Logging_Task_Status td.finishedMessage i{display:none;}#Logging_Task_Status td.finishedRedirect{position:relative;}#Logging_Task_Status td.finishedRedirect i{color:#1e6dab;position:absolute;right:10px;top:calc(57% - .5em);display:inline-block;}#Logging_Task_Status td.exception{background-color:#ffd8d8;}div.logEventsViewport{border:1px solid #bbb;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}div.logEventsViewport div.logEventsViewportContainer{overflow-y:auto;overflow-x:hidden;}div.logEventsViewport div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}div.logEventsViewport table.logEventsViewport{padding:0;margin:0;background-color:#bbb;table-layout:fixed;}div.logEventsViewport table.logEventsViewport>thead>tr{background-color:#eee;}div.logEventsViewport table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}div.logEventsViewport table.logEventsViewport>thead>tr>th.icon{width:20px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr{background-color:#fff;}div.logEventsViewport table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}div.logEventsViewport table.logEventsViewport>tbody>tr>td{padding:2px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.message{white-space:pre-wrap;}#enrolStatus #sessions .session{width:280px;padding:4px 4px 4px 72px;margin:8px;border:5px solid #efefef;-moz-border-radius:0 20px 0 0;-webkit-border-radius:0 20px 0 0;border-radius:0 20px 0 0;background-color:#f5f5f5;background-repeat:no-repeat,no-repeat;background-position:36px 36px,4px 4px;-moz-background-size:32px,64px;-o-background-size:32px,64px;-webkit-background-size:32px,64px;background-size:32px,64px;min-height:72px;cursor:pointer;}#enrolStatus #sessions .session>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#enrolStatus #sessions .session>h3 span.details{font-size:.8em;}#enrolStatus #sessions .session>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#enrolStatus #sessions .session>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#enrolStatus #sessions .session:hover{border:5px solid #6c7a87;background-color:#dfe1f8;}#dialogSession .sessionHeader{width:400px;float:left;padding:0 0 0 134px;background-repeat:no-repeat,no-repeat;background-position:96px 96px,0 0;-moz-background-size:32px,128px;-o-background-size:32px,128px;-webkit-background-size:32px,128px;background-size:32px,128px;min-height:134px;}#dialogSession .sessionHeader>h2{padding-bottom:0;}#dialogSession .sessionHeader>table{margin-top:4px;}#dialogSession .sessionHeader>table th{width:128px;text-align:right;}#dialogSession .sessionHeader>table td,#dialogSession .sessionHeader>table th{padding:1px 2px;}#dialogSession .sessionProgress{width:320px;float:right;text-align:right;}#dialogSession .sessionProgress>p.sessionStart{color:#888;margin-bottom:2px;}#dialogSession .sessionProgress>p.sessionStatus{height:1.6em;overflow:hidden;margin-bottom:3px;}#dialogSession .sessionInfoContainer>div{float:left;width:428px;overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages{height:374px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer{overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoConsole{margin-left:6px;background-color:#222;color:#0f0;font-family:Consolas,"Courier New",monospace;border:4px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;padding:2px;height:364px;}#Config_DocumentTemplates_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplates_Show #DocumentTemplate_FilterExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnGenerateExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnImportAttachmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplates_Show #Config_DocumentTemplates_Scope_Button{margin-top:4px;}#Config_DocumentTemplates_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplates_TemplatePdf_Dialog div{text-align:center;}#Config_DocumentTemplates_TemplatePdf_Dialog div input{margin:16px 0;}#Config_DocumentTemplates_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplates_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplates_JobSubTypes #Config_DocumentTemplates_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog #Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .distribute-evenly{display:flex;justify-content:space-around;margin:1em 0;}#DocumentTemplate_OnImportUserFlagRules_AddDialog textarea{width:99%;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .mt-1{margin-top:1em;}.dialog-bulk-generate .brief{margin:0 0 8px 0;}.dialog-bulk-generate .brief .scopeDescBulkGenerate{font-weight:600;}.dialog-bulk-generate .brief div.examples{margin:8px auto;width:360px;}.dialog-bulk-generate .brief div.examples div{margin:2px 4px 2px 0;width:230px;float:left;}.dialog-bulk-generate .brief div.examples div.example1{width:100px;}.dialog-bulk-generate textarea{width:calc(100% - .5em);height:200px;margin:0 auto;}.dialog-bulk-generate .sub{margin-top:.75em;}#Config_DocumentTemplates_Show_DownloadBulk_Dialog{padding-top:20px;text-align:center;}h1.Config_DocumentTemplates{margin:10px 0 6px;}#Config_DocumentTemplatePackages_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplatePackages_Show #Package_FilterExpression,#Config_DocumentTemplatePackages_Show #Package_OnGenerateExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackages_Scope_Button{margin-top:4px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List{list-style-type:decimal;list-style-position:inside;background-color:#f2f2f2;border:1px solid #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li{padding:6px 8px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li:not(:first-child){border-top:1px dashed #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li .id{font-family:Consolas,"Courier New",monospace;float:right;}#Config_DocumentTemplatePackages_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplatePackages_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplatePackages_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplatePackages_JobSubTypes #Config_DocumentTemplatePackages_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog #Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_DocumentTemplatePackages_Templates_Dialog h3{margin-bottom:4px;}#Config_DocumentTemplatePackages_Templates_Dialog>div{width:374px;float:left;}#Config_DocumentTemplatePackages_Templates_Dialog>div:first-child{margin-right:20px;}#Config_DocumentTemplatePackages_Templates_Dialog .templates_connected{min-height:200px;}#Config_DocumentTemplatePackages_Templates_Dialog ol{list-style-type:decimal;padding-left:24px;border:1px solid #d8d8d8;background-color:#f2f2f2;}#Config_DocumentTemplatePackages_Templates_Dialog li{background-color:#fff;border:1px solid #d8d8d8;margin:4px;padding:2px 4px;-moz-box-shadow:0 0 5px rgba(209,209,209,.5);-webkit-box-shadow:0 0 5px rgba(209,209,209,.5);box-shadow:0 0 5px rgba(209,209,209,.5);cursor:default;}#Config_DocumentTemplatePackages_Templates_Dialog li:hover{background-color:#cddbec;border-color:#1e6dab;}#Config_DocumentTemplatePackages_Templates_Dialog li .id{font-family:Consolas,"Courier New",monospace;color:#888;float:right;font-size:.9em;}#importStatus #sessions .session{padding:4px;margin-bottom:10px;border:1px solid #efefef;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#f5f5f5;min-height:72px;}#importStatus #sessions .session .sessionLeftPane{width:48%;float:left;}#importStatus #sessions .session .sessionLeftPane>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#importStatus #sessions .session .sessionLeftPane>h3 span.details{font-size:.8em;}#importStatus #sessions .session .sessionRightPane{width:48%;float:right;text-align:right;}#importStatus #sessions .session .sessionRightPane>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#importStatus #sessions .session .sessionRightPane>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#importStatus #sessions .session .sessionPages>.sessionPage{min-height:56px;min-width:256px;float:left;margin:3px 0 3px 0;padding:170px 0 0 0;background-color:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #eee;background-repeat:no-repeat;background-position:center top;}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails{height:84px;padding:2px 4px 0 4px;background-color:rgba(255,255,255,.8);}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails p.sessionStatus{font-size:.9em;height:1.6em;margin-bottom:3px;}#importStatus #sessions .session .sessionInfoMessages{margin-top:6px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer{max-height:220px;overflow:auto;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#undetectedPagesContainer #undetectedPages{list-style:none;margin:0;padding:0;}#undetectedPagesContainer #undetectedPages>.undetectedPage{float:left;margin:4px;border:1px solid #f4f4f4;background-color:hsl(0,0%,98.5%);height:256px;width:256px;background-position:top center;background-repeat:no-repeat;cursor:pointer;}#undetectedPagesContainer #undetectedPages>.undetectedPage>.pageDetails{margin-top:232px;height:24px;text-align:center;}#undetectedPagesContainer #undetectedPages>.undetectedPage:hover{border:1px solid #d8d8d8;background-color:#f4f4f4;}#undetectedPageDialog>.pagePreview{height:700px;max-height:700px;background-position:top center;background-repeat:no-repeat;background-size:contain;}#undetectedPageDialog .actions{border-top:1px solid #d1d1d1;padding-top:8px;margin-top:8px;text-align:right;}.deviceBatches #DeviceBatch_PurchaseDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_PurchaseDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_WarrantyDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_WarrantyDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_InsuranceDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_InsuranceDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_Comments{width:570px;height:200px;}.deviceBatches #DeviceBatch_Attachments{border:1px solid #ccc;background-color:#fff;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput{position:relative;height:200px;overflow:auto;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.comments,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img.loading{display:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}.deviceBatches #DeviceBatch_Attachments.cannotAddAttachments div.attachmentOutput{height:250px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#plugins .pageMenuArea a>h3{display:inline;color:#335a87;}#plugins .pageMenuArea a>h3:hover{color:#5e8cc2;}#plugins .pageMenuArea .pageMenuBlurb{padding-left:18px;}#plugins .pageMenuArea .pageMenuBlurb i{font-size:.9em;}#plugins #pageMenu td .pageMenuArea:not(:last-child){padding-bottom:5px;margin-bottom:10px;}#plugins #pageMenu td .pageMenuArea>a,#plugins #pageMenu td .pageMenuArea>h3{color:#333;}#plugins #pageMenu td .pageMenuArea>a:hover,#plugins #pageMenu td .pageMenuArea>h3:hover{color:#335a87;}#dialogUninstallPlugins #uninstallPlugin{margin:.5em 0;}#dialogUninstallPlugins #uninstallPluginData{margin:.5em 0;}#dialogUninstallPluginConfirm #uninstallPluginConfirm{text-align:center;margin:1em 0 .5em 0;}#dialogUninstallPluginConfirm #uninstallPluginDataConfirm{margin-top:1em;}#pluginLibraryHeading{float:right;}#pluginLibrary #pluginLibraryGroups{width:900px;margin:0 auto;column-count:2;}#pluginLibrary #pluginLibraryGroups>div{display:inline-block;}#pluginLibrary #pluginLibraryGroups div.form>table{margin:0 10px 10px 4px;width:calc(100% - 14px);}#pluginLibrary .pluginItem .pluginItemBlurb{margin:8px 0 8px 2px;padding:0 4px;border-left:4px solid #d1d1d1;}#pluginLibrary .pluginItem .pluginItemBlurb *{padding:0;margin:0;}#pluginLibrary .pluginItem .pageMenuBlurb i{font-size:.9em;}#pluginLibrary .pluginItem>h2:first-child{min-height:22px;}#pluginLibrary .pluginItem>h2:first-child i{font-size:.9em;padding-right:4px;color:#333;}#pluginLibrary .pluginItem>h2:first-child a{float:right;font-size:12px;}#dialogInstallPlugin div.info-box{margin-top:1em;}#dialogUploadPlugin #pluginFile{margin:1em 0 1em 6px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node{padding:1px;border:0;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-ef>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-cf>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c>span.fancytree-icon:before{color:#e51400;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c.fancytree-selected>span.fancytree-icon:before{color:#60a917;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_AuthRoles_Subjects li,#Config_AuthRoles_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_AuthRoles_Subjects li i.fa-user,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-user,#Config_AuthRoles_Subjects li i.fa-users,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-users{min-width:22px;}#Config_AuthRoles_Subjects_Update_Dialog{display:none;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_ReportPrefs{margin-top:10px;}#Config_ReportPrefs #Config_ReportPrefs_Preview{float:right;width:150px;height:80px;border:1px solid #444;font-size:4px;color:#fff;overflow:hidden;text-transform:uppercase;}#Config_ReportPrefs #Config_ReportPrefs_Preview .heading{height:6px;padding-left:3px;overflow:hidden;background-color:#333;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column-heading{float:left;width:calc(33% - 4px);padding-left:2px;margin:1px 0 0 2px;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column{height:100%;float:left;width:calc(33% - 2px);margin-left:2px;overflow:hidden;background:rgba(255,255,255,.2);}#Config_ReportPrefs #Config_ReportPrefs_Preview .column span{display:block;height:4px;margin:1px;background-color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft .column span.alert{background-color:#e5cc11;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta .column span.alert{background-color:#1681b4;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft .column span.alert{background-color:#85cdf0;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson .column span.alert{background-color:#b0cc22;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft .column span.alert{background-color:#cee077;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber .column span.alert{background-color:#0050ef;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft .column span.alert{background-color:#bbd0fb;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown .column span.alert{background-color:#e3c800;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs_Builder .report{margin-bottom:10px;}#Config_ReportPrefs_Builder .report ul{margin-left:10px;}#Config_ReportPrefs_Builder .theme{margin-bottom:10px;}#Config_ReportPrefs_Builder .theme>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter div.options{display:none;background-color:#fff;border:1px dashed #ccc;margin-top:4px;margin-left:15px;padding:2px 6px;}#Config_ReportPrefs_Builder .filter div.options .method{margin-top:4px;margin-bottom:8px;}#Config_ReportPrefs_Builder .filter div.options .method label{margin-right:14px;}#Config_ReportPrefs_Builder_Buttonpane{padding-right:.3em;}#Config_ReportPrefs_Builder_Buttonpane textarea{float:left;font-family:Consolas,"Courier New",monospace;color:#333;width:calc(100% - 1.2em - 10px);border:1px solid #ccc;white-space:pre;min-height:0;}#Config_ReportPrefs_Builder_Buttonpane i{float:right;cursor:pointer;margin:.3em .2em 0 0;color:#335a87;}#Config_ReportPrefs_Builder_Buttonpane i:hover{color:#5e8cc2;}#Config_ReportPrefs_Builder_Buttonpane .ui-dialog-buttonset{display:none;}#Config_Location{margin-top:10px;}#Config_Location #Config_Location_Unrestricted,#Config_Location #Config_Location_List,#Config_Location #Config_Location_Optional,#Config_Location #Config_Location_Restricted{display:none;margin-top:6px;}#Config_Location_List_Dialog{display:none;}#Config_Location_List_Dialog #Config_Location_List_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_Location_List_Dialog #Config_Location_List_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li{padding:2px 0 2px 4px;cursor:pointer;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover{background-color:#f4f4f4;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover .remove{opacity:.8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove:hover{opacity:1;}#Config_Location_ListImport_Dialog{display:none;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_Overwrite_Container{margin:6px 0;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_LocationList{width:100%;height:200px;margin:0 auto;}#Config_JobPref_Expressions{margin-top:10px;}#Config_JobPref_Expressions #OnCreateExpression,#Config_JobPref_Expressions #OnCloseExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_JobQueues_Index i{width:1.28571429em;text-align:center;}#Config_JobQueues_Icon{display:block;margin:0 0 10px 10px;}#Config_JobQueues_Icon_Update_Dialog{display:none;}#Config_JobQueues_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_JobQueues_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_JobQueues_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_JobQueues_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_JobQueues_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_JobQueues_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_JobQueues_JobSubTypes_Update{margin:8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog #Config_JobQueues_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_JobQueues_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_JobQueues_Subjects li,#Config_JobQueues_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_JobQueues_Subjects li i.fa-user,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-user,#Config_JobQueues_Subjects li i.fa-users,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-users{width:1.28571429em;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog{display:none;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_UserFlags_Show #UserFlag_OnAssignmentExpression,#Config_UserFlags_Show #UserFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_UserFlags_Index i{width:1.28571429em;text-align:center;}#Config_UserFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_UserFlags_Icon_Update_Dialog{display:none;}#Config_UserFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_UserFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_UserFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_UserFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_UserFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_UserFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_UserFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_UserFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_UserFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_UserFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_UserFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_UserFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_UserFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_UserFlags_BulkAssign_AssignDialog #Config_UserFlags_BulkAssign_AssignDialog_UserIds{height:200px;margin-bottom:8px;}#Config_UserFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_UserFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_UserFlags_BulkAssign_AssignDialog.loading>form{display:none;}#UserFlag_Export #UserFlag_Export_Fields #UserFlag_Export_Fields_Defaults{font-size:.75em;}#UserFlag_Export #UserFlag_Export_Fields th{font-size:1.05em;}#UserFlag_Export #UserFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#UserFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#UserFlag_Export_Download_Dialog h4{margin-bottom:30px;}#UserFlag_Export_Download_Dialog a{margin-bottom:20px;}#UserFlag_Export_Exporting{padding-top:50px;text-align:center;}#UserFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#DocumentTemplate_BulkGenerate .actions{padding-bottom:.5em;text-align:right;}#DocumentTemplate_BulkGenerate table{max-width:850px;margin:auto;}#DocumentTemplate_BulkGenerate table tr.when-none{text-align:center;font-style:italic;}.dialog-item-picker{height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}.dialog-item-picker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}.dialog-item-picker>div:hover{background-color:#f4f4f4;}.dialog-item-picker>div.selected,.dialog-item-picker>div.selected:hover{background-color:#eee;}.dialog-item-picker>div.disabled{cursor:not-allowed;background-color:#f4f4f4;} \ No newline at end of file +.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatree-node.property span.dynatree-icon{background-position-x:-48px;}table.expressionsTable{border:solid 1px #f4f4f4;border-collapse:collapse;}table.expressionsTable>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}table.expressionsTable>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}table.expressionsTable>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}table.expressionsTable>tfoot>tr>th,table.expressionsTable>tfoot>tr>td{background-color:#f4f4f4;}table.expressionsTable td.parseError{background-color:#ffd8d8;}#AttachmentType_FilterExpression{width:375px;}#deviceComponents{border:solid 1px #f4f4f4;border-collapse:collapse;}#deviceComponents>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#deviceComponents>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#deviceComponents>thead>tr>th,#deviceComponents>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#deviceComponents>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#deviceComponents>tfoot>tr>th,#deviceComponents>tfoot>tr>td{background-color:#f4f4f4;}#deviceComponents tr th.actions{width:20px;}#deviceComponents tr input.description{width:300px;}#deviceComponents tr input.cost{width:75px;}#deviceComponents tr i.remove{font-size:1.6em;color:#e51400;cursor:pointer;opacity:.8;}#deviceComponents tr i.remove:hover{opacity:1;}#deviceComponents tr i.fa-list-alt{color:#1e6dab;font-size:1.6em;cursor:pointer;}#deviceComponents tr i.fa-asterisk{color:#fa6800;font-size:1em;left:10px;top:3px;cursor:pointer;}#deviceComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#organisationAddresses{font-size:.9em;}#organisationAddresses tr:not(:last-child){border-bottom:1px dashed #aaa;}#organisationAddresses th{padding:2px;font-weight:600;width:200px;}#organisationAddresses td{padding:2px;vertical-align:middle;}#organisationAddresses tr:nth-child(even){background-color:#fff;}#organisationAddresses i.fa{font-size:1.7em;cursor:pointer;}#organisationAddresses i.fa.delete{color:#e51400;opacity:.8;}#organisationAddresses i.fa.delete:hover{opacity:1;}#organisationAddresses i.fa.edit{color:#1e6dab;}ul#loggingEntries{overflow:auto;max-height:230px;padding-left:20px;}table.deviceProfileTable th.name{width:300px;}table.deviceProfileTable th.type{width:120px;}table.deviceProfileTable th.deviceCount{width:120px;}#configurationDeviceProfileShow #displayComputerNameTemplate{margin:0 0 6px 0;}#configurationDeviceProfileShow #displayOrganisationalUnit{margin:0 0 6px 0;}#dialogComputerNameTemplate #ComputerNameTemplate{box-sizing:border-box;height:48px;width:100%;font-family:Consolas,"Courier New",monospace;}#dialogOrganisationalUnit .enforceOrganisationalUnit{line-height:2.2em;}#dialogOrganisationalUnit .organisationalUnitTree{height:380px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node{padding:1px;border:0;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-ef>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-cf>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree ul.fancytree-container>li>span>span.fancytree-icon:before{color:#fa6800;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_System_AD_SearchScope_Dialog_Loading,#dialogOrganisationalUnit_Loading{text-align:center;padding:40px 0;}#configurationDocumentTemplateExpressionBrowser{padding-right:275px;background-image:url(data:image/png;base64,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);background-position:right top;background-repeat:no-repeat;}#Logging_Task_Status{width:520px;margin:40px auto 60px auto;}#Logging_Task_Status th.process{text-align:left;font-weight:600;background-color:#f4f4f4;min-height:30px;vertical-align:middle;}#Logging_Task_Status td.description{font-size:.9em;min-height:60px;}#Logging_Task_Status td.progress{padding:8px 10px;}#Logging_Task_Status td.finishedMessage i{display:none;}#Logging_Task_Status td.finishedRedirect{position:relative;}#Logging_Task_Status td.finishedRedirect i{color:#1e6dab;position:absolute;right:10px;top:calc(57% - .5em);display:inline-block;}#Logging_Task_Status td.exception{background-color:#ffd8d8;}div.logEventsViewport{border:1px solid #bbb;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}div.logEventsViewport div.logEventsViewportContainer{overflow-y:auto;overflow-x:hidden;}div.logEventsViewport div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}div.logEventsViewport table.logEventsViewport{padding:0;margin:0;background-color:#bbb;table-layout:fixed;}div.logEventsViewport table.logEventsViewport>thead>tr{background-color:#eee;}div.logEventsViewport table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}div.logEventsViewport table.logEventsViewport>thead>tr>th.icon{width:20px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr{background-color:#fff;}div.logEventsViewport table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}div.logEventsViewport table.logEventsViewport>tbody>tr>td{padding:2px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.message{white-space:pre-wrap;}#enrolStatus #sessions .session{width:280px;padding:4px 4px 4px 72px;margin:8px;border:5px solid #efefef;-moz-border-radius:0 20px 0 0;-webkit-border-radius:0 20px 0 0;border-radius:0 20px 0 0;background-color:#f5f5f5;background-repeat:no-repeat,no-repeat;background-position:36px 36px,4px 4px;-moz-background-size:32px,64px;-o-background-size:32px,64px;-webkit-background-size:32px,64px;background-size:32px,64px;min-height:72px;cursor:pointer;}#enrolStatus #sessions .session>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#enrolStatus #sessions .session>h3 span.details{font-size:.8em;}#enrolStatus #sessions .session>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#enrolStatus #sessions .session>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#enrolStatus #sessions .session:hover{border:5px solid #6c7a87;background-color:#dfe1f8;}#dialogSession .sessionHeader{width:400px;float:left;padding:0 0 0 134px;background-repeat:no-repeat,no-repeat;background-position:96px 96px,0 0;-moz-background-size:32px,128px;-o-background-size:32px,128px;-webkit-background-size:32px,128px;background-size:32px,128px;min-height:134px;}#dialogSession .sessionHeader>h2{padding-bottom:0;}#dialogSession .sessionHeader>table{margin-top:4px;}#dialogSession .sessionHeader>table th{width:128px;text-align:right;}#dialogSession .sessionHeader>table td,#dialogSession .sessionHeader>table th{padding:1px 2px;}#dialogSession .sessionProgress{width:320px;float:right;text-align:right;}#dialogSession .sessionProgress>p.sessionStart{color:#888;margin-bottom:2px;}#dialogSession .sessionProgress>p.sessionStatus{height:1.6em;overflow:hidden;margin-bottom:3px;}#dialogSession .sessionInfoContainer>div{float:left;width:428px;overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages{height:374px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer{overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoConsole{margin-left:6px;background-color:#222;color:#0f0;font-family:Consolas,"Courier New",monospace;border:4px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;padding:2px;height:364px;}#Config_DocumentTemplates_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplates_Show #DocumentTemplate_FilterExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnGenerateExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnImportAttachmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplates_Show #Config_DocumentTemplates_Scope_Button{margin-top:4px;}#Config_DocumentTemplates_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplates_TemplatePdf_Dialog div{text-align:center;}#Config_DocumentTemplates_TemplatePdf_Dialog div input{margin:16px 0;}#Config_DocumentTemplates_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplates_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplates_JobSubTypes #Config_DocumentTemplates_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog #Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .distribute-evenly{display:flex;justify-content:space-around;margin:1em 0;}#DocumentTemplate_OnImportUserFlagRules_AddDialog textarea{width:99%;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .mt-1{margin-top:1em;}.dialog-bulk-generate .brief{margin:0 0 8px 0;}.dialog-bulk-generate .brief .scopeDescBulkGenerate{font-weight:600;}.dialog-bulk-generate .brief div.examples{margin:8px auto;width:360px;}.dialog-bulk-generate .brief div.examples div{margin:2px 4px 2px 0;width:230px;float:left;}.dialog-bulk-generate .brief div.examples div.example1{width:100px;}.dialog-bulk-generate textarea{width:calc(100% - .5em);height:200px;margin:0 auto;}.dialog-bulk-generate .sub{margin-top:.75em;}#Config_DocumentTemplates_Show_DownloadBulk_Dialog{padding-top:20px;text-align:center;}h1.Config_DocumentTemplates{margin:10px 0 6px;}#Config_DocumentTemplatePackages_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplatePackages_Show #Package_FilterExpression,#Config_DocumentTemplatePackages_Show #Package_OnGenerateExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackages_Scope_Button{margin-top:4px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List{list-style-type:decimal;list-style-position:inside;background-color:#f2f2f2;border:1px solid #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li{padding:6px 8px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li:not(:first-child){border-top:1px dashed #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li .id{font-family:Consolas,"Courier New",monospace;float:right;}#Config_DocumentTemplatePackages_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplatePackages_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplatePackages_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplatePackages_JobSubTypes #Config_DocumentTemplatePackages_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog #Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_DocumentTemplatePackages_Templates_Dialog h3{margin-bottom:4px;}#Config_DocumentTemplatePackages_Templates_Dialog>div{width:374px;float:left;}#Config_DocumentTemplatePackages_Templates_Dialog>div:first-child{margin-right:20px;}#Config_DocumentTemplatePackages_Templates_Dialog .templates_connected{min-height:200px;}#Config_DocumentTemplatePackages_Templates_Dialog ol{list-style-type:decimal;padding-left:24px;border:1px solid #d8d8d8;background-color:#f2f2f2;}#Config_DocumentTemplatePackages_Templates_Dialog li{background-color:#fff;border:1px solid #d8d8d8;margin:4px;padding:2px 4px;-moz-box-shadow:0 0 5px rgba(209,209,209,.5);-webkit-box-shadow:0 0 5px rgba(209,209,209,.5);box-shadow:0 0 5px rgba(209,209,209,.5);cursor:default;}#Config_DocumentTemplatePackages_Templates_Dialog li:hover{background-color:#cddbec;border-color:#1e6dab;}#Config_DocumentTemplatePackages_Templates_Dialog li .id{font-family:Consolas,"Courier New",monospace;color:#888;float:right;font-size:.9em;}#importStatus #sessions .session{padding:4px;margin-bottom:10px;border:1px solid #efefef;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#f5f5f5;min-height:72px;}#importStatus #sessions .session .sessionLeftPane{width:48%;float:left;}#importStatus #sessions .session .sessionLeftPane>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#importStatus #sessions .session .sessionLeftPane>h3 span.details{font-size:.8em;}#importStatus #sessions .session .sessionRightPane{width:48%;float:right;text-align:right;}#importStatus #sessions .session .sessionRightPane>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#importStatus #sessions .session .sessionRightPane>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#importStatus #sessions .session .sessionPages>.sessionPage{min-height:56px;min-width:256px;float:left;margin:3px 0 3px 0;padding:170px 0 0 0;background-color:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #eee;background-repeat:no-repeat;background-position:center top;}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails{height:84px;padding:2px 4px 0 4px;background-color:rgba(255,255,255,.8);}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails p.sessionStatus{font-size:.9em;height:1.6em;margin-bottom:3px;}#importStatus #sessions .session .sessionInfoMessages{margin-top:6px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer{max-height:220px;overflow:auto;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#undetectedPagesContainer #undetectedPages{list-style:none;margin:0;padding:0;}#undetectedPagesContainer #undetectedPages>.undetectedPage{float:left;margin:4px;border:1px solid #f4f4f4;background-color:hsl(0,0%,98.5%);height:256px;width:256px;background-position:top center;background-repeat:no-repeat;cursor:pointer;}#undetectedPagesContainer #undetectedPages>.undetectedPage>.pageDetails{margin-top:232px;height:24px;text-align:center;}#undetectedPagesContainer #undetectedPages>.undetectedPage:hover{border:1px solid #d8d8d8;background-color:#f4f4f4;}#undetectedPageDialog>.pagePreview{height:700px;max-height:700px;background-position:top center;background-repeat:no-repeat;background-size:contain;}#undetectedPageDialog .actions{border-top:1px solid #d1d1d1;padding-top:8px;margin-top:8px;text-align:right;}.deviceBatches #DeviceBatch_PurchaseDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_PurchaseDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_WarrantyDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_WarrantyDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_InsuranceDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_InsuranceDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_Comments{width:570px;height:200px;}.deviceBatches #DeviceBatch_Attachments{border:1px solid #ccc;background-color:#fff;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput{position:relative;height:200px;overflow:auto;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.comments,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img.loading{display:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}.deviceBatches #DeviceBatch_Attachments.cannotAddAttachments div.attachmentOutput{height:250px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#plugins .pageMenuArea a>h3{display:inline;color:#335a87;}#plugins .pageMenuArea a>h3:hover{color:#5e8cc2;}#plugins .pageMenuArea .pageMenuBlurb{padding-left:18px;}#plugins .pageMenuArea .pageMenuBlurb i{font-size:.9em;}#plugins #pageMenu td .pageMenuArea:not(:last-child){padding-bottom:5px;margin-bottom:10px;}#plugins #pageMenu td .pageMenuArea>a,#plugins #pageMenu td .pageMenuArea>h3{color:#333;}#plugins #pageMenu td .pageMenuArea>a:hover,#plugins #pageMenu td .pageMenuArea>h3:hover{color:#335a87;}#dialogUninstallPlugins #uninstallPlugin{margin:.5em 0;}#dialogUninstallPlugins #uninstallPluginData{margin:.5em 0;}#dialogUninstallPluginConfirm #uninstallPluginConfirm{text-align:center;margin:1em 0 .5em 0;}#dialogUninstallPluginConfirm #uninstallPluginDataConfirm{margin-top:1em;}#pluginLibraryHeading{float:right;}#pluginLibrary #pluginLibraryGroups{width:900px;margin:0 auto;column-count:2;}#pluginLibrary #pluginLibraryGroups>div{display:inline-block;}#pluginLibrary #pluginLibraryGroups div.form>table{margin:0 10px 10px 4px;width:calc(100% - 14px);}#pluginLibrary .pluginItem .pluginItemBlurb{margin:8px 0 8px 2px;padding:0 4px;border-left:4px solid #d1d1d1;}#pluginLibrary .pluginItem .pluginItemBlurb *{padding:0;margin:0;}#pluginLibrary .pluginItem .pageMenuBlurb i{font-size:.9em;}#pluginLibrary .pluginItem>h2:first-child{min-height:22px;}#pluginLibrary .pluginItem>h2:first-child i{font-size:.9em;padding-right:4px;color:#333;}#pluginLibrary .pluginItem>h2:first-child a{float:right;font-size:12px;}#dialogInstallPlugin div.info-box{margin-top:1em;}#dialogUploadPlugin #pluginFile{margin:1em 0 1em 6px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node{padding:1px;border:0;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-ef>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-cf>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c>span.fancytree-icon:before{color:#e51400;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c.fancytree-selected>span.fancytree-icon:before{color:#60a917;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_AuthRoles_Subjects li,#Config_AuthRoles_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_AuthRoles_Subjects li i.fa-user,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-user,#Config_AuthRoles_Subjects li i.fa-users,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-users{min-width:22px;}#Config_AuthRoles_Subjects_Update_Dialog{display:none;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_ReportPrefs{margin-top:10px;}#Config_ReportPrefs #Config_ReportPrefs_Preview{float:right;width:150px;height:80px;border:1px solid #444;font-size:4px;color:#fff;overflow:hidden;text-transform:uppercase;}#Config_ReportPrefs #Config_ReportPrefs_Preview .heading{height:6px;padding-left:3px;overflow:hidden;background-color:#333;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column-heading{float:left;width:calc(33% - 4px);padding-left:2px;margin:1px 0 0 2px;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column{height:100%;float:left;width:calc(33% - 2px);margin-left:2px;overflow:hidden;background:rgba(255,255,255,.2);}#Config_ReportPrefs #Config_ReportPrefs_Preview .column span{display:block;height:4px;margin:1px;background-color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft .column span.alert{background-color:#e5cc11;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta .column span.alert{background-color:#1681b4;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft .column span.alert{background-color:#85cdf0;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson .column span.alert{background-color:#b0cc22;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft .column span.alert{background-color:#cee077;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber .column span.alert{background-color:#0050ef;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft .column span.alert{background-color:#bbd0fb;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown .column span.alert{background-color:#e3c800;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs_Builder .report{margin-bottom:10px;}#Config_ReportPrefs_Builder .report ul{margin-left:10px;}#Config_ReportPrefs_Builder .theme{margin-bottom:10px;}#Config_ReportPrefs_Builder .theme>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter div.options{display:none;background-color:#fff;border:1px dashed #ccc;margin-top:4px;margin-left:15px;padding:2px 6px;}#Config_ReportPrefs_Builder .filter div.options .method{margin-top:4px;margin-bottom:8px;}#Config_ReportPrefs_Builder .filter div.options .method label{margin-right:14px;}#Config_ReportPrefs_Builder_Buttonpane{padding-right:.3em;}#Config_ReportPrefs_Builder_Buttonpane textarea{float:left;font-family:Consolas,"Courier New",monospace;color:#333;width:calc(100% - 1.2em - 10px);border:1px solid #ccc;white-space:pre;min-height:0;}#Config_ReportPrefs_Builder_Buttonpane i{float:right;cursor:pointer;margin:.3em .2em 0 0;color:#335a87;}#Config_ReportPrefs_Builder_Buttonpane i:hover{color:#5e8cc2;}#Config_ReportPrefs_Builder_Buttonpane .ui-dialog-buttonset{display:none;}#Config_Location{margin-top:10px;}#Config_Location #Config_Location_Unrestricted,#Config_Location #Config_Location_List,#Config_Location #Config_Location_Optional,#Config_Location #Config_Location_Restricted{display:none;margin-top:6px;}#Config_Location_List_Dialog{display:none;}#Config_Location_List_Dialog #Config_Location_List_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_Location_List_Dialog #Config_Location_List_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li{padding:2px 0 2px 4px;cursor:pointer;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover{background-color:#f4f4f4;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover .remove{opacity:.8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove:hover{opacity:1;}#Config_Location_ListImport_Dialog{display:none;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_Overwrite_Container{margin:6px 0;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_LocationList{width:100%;height:200px;margin:0 auto;}#Config_JobPref_Expressions{margin-top:10px;}#Config_JobPref_Expressions #OnCreateExpression,#Config_JobPref_Expressions #OnCloseExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_JobQueues_Index i{width:1.28571429em;text-align:center;}#Config_JobQueues_Icon{display:block;margin:0 0 10px 10px;}#Config_JobQueues_Icon_Update_Dialog{display:none;}#Config_JobQueues_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_JobQueues_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_JobQueues_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_JobQueues_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_JobQueues_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_JobQueues_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_JobQueues_JobSubTypes_Update{margin:8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog #Config_JobQueues_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_JobQueues_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_JobQueues_Subjects li,#Config_JobQueues_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_JobQueues_Subjects li i.fa-user,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-user,#Config_JobQueues_Subjects li i.fa-users,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-users{width:1.28571429em;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog{display:none;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_UserFlags_Show #UserFlag_OnAssignmentExpression,#Config_UserFlags_Show #UserFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_UserFlags_Index i{width:1.28571429em;text-align:center;}#Config_UserFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_UserFlags_Icon_Update_Dialog{display:none;}#Config_UserFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_UserFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_UserFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_UserFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_UserFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_UserFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_UserFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_UserFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_UserFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_UserFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_UserFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_UserFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_UserFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_UserFlags_BulkAssign_AssignDialog #Config_UserFlags_BulkAssign_AssignDialog_UserIds{height:200px;margin-bottom:8px;}#Config_UserFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_UserFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_UserFlags_BulkAssign_AssignDialog.loading>form{display:none;}#UserFlag_Export #UserFlag_Export_Fields #UserFlag_Export_Fields_Defaults{font-size:.75em;}#UserFlag_Export #UserFlag_Export_Fields th{font-size:1.05em;}#UserFlag_Export #UserFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#UserFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#UserFlag_Export_Download_Dialog h4{margin-bottom:30px;}#UserFlag_Export_Download_Dialog a{margin-bottom:20px;}#UserFlag_Export_Exporting{padding-top:50px;text-align:center;}#UserFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_Show #DeviceFlag_OnAssignmentExpression,#Config_DeviceFlags_Show #DeviceFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DeviceFlags_Index i{width:1.28571429em;text-align:center;}#Config_DeviceFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_DeviceFlags_Icon_Update_Dialog{display:none;}#Config_DeviceFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_DeviceFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_BulkAssign_AssignDialog #Config_DeviceFlags_BulkAssign_AssignDialog_DeviceSerialNumbers{height:200px;margin-bottom:8px;}#Config_DeviceFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>form{display:none;}#DeviceFlag_Export #DeviceFlag_Export_Fields #DeviceFlag_Export_Fields_Defaults{font-size:.75em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th{font-size:1.05em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#DeviceFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#DeviceFlag_Export_Download_Dialog h4{margin-bottom:30px;}#DeviceFlag_Export_Download_Dialog a{margin-bottom:20px;}#DeviceFlag_Export_Exporting{padding-top:50px;text-align:center;}#DeviceFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#DocumentTemplate_BulkGenerate .actions{padding-bottom:.5em;text-align:right;}#DocumentTemplate_BulkGenerate table{max-width:850px;margin:auto;}#DocumentTemplate_BulkGenerate table tr.when-none{text-align:center;font-style:italic;}.dialog-item-picker{height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}.dialog-item-picker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}.dialog-item-picker>div:hover{background-color:#f4f4f4;}.dialog-item-picker>div.selected,.dialog-item-picker>div.selected:hover{background-color:#eee;}.dialog-item-picker>div.disabled{cursor:not-allowed;background-color:#f4f4f4;} \ No newline at end of file diff --git a/Disco.Web/Disco.Web.csproj b/Disco.Web/Disco.Web.csproj index 1ae08c92..121c6f33 100644 --- a/Disco.Web/Disco.Web.csproj +++ b/Disco.Web/Disco.Web.csproj @@ -207,7 +207,9 @@ + + @@ -222,6 +224,7 @@ + @@ -234,6 +237,10 @@ + + + + @@ -344,6 +351,26 @@ True _DeviceGroupDocumentBulkGenerate.cshtml + + Create.cshtml + True + True + + + Export.cshtml + True + True + + + Index.cshtml + True + True + + + Show.cshtml + True + True + Create.cshtml True @@ -642,9 +669,18 @@ True True + + T4MVC.tt + + + T4MVC.tt + T4MVC.tt + + T4MVC.tt + T4MVC.tt @@ -1298,6 +1334,22 @@ RazorGenerator _DeviceGroupDocumentBulkGenerate.generated.cs + + RazorGenerator + Create.generated.cs + + + RazorGenerator + Export.generated.cs + + + RazorGenerator + Index.generated.cs + + + RazorGenerator + Show.generated.cs + RazorGenerator Create.generated.cs diff --git a/Disco.Web/Extensions/T4MVC/API.DeviceFlagAssignmentController.generated.cs b/Disco.Web/Extensions/T4MVC/API.DeviceFlagAssignmentController.generated.cs new file mode 100644 index 00000000..aacaf59f --- /dev/null +++ b/Disco.Web/Extensions/T4MVC/API.DeviceFlagAssignmentController.generated.cs @@ -0,0 +1,235 @@ +// +// This file was generated by a T4 template. +// Don't change it directly as your change would get overwritten. Instead, make changes +// to the .tt file (i.e. the T4 template) and save it to regenerate this file. + +// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance +// 0108: suppress "Foo hides inherited member Foo. Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed +// 0114: suppress "Foo.BarController.Baz()' hides inherited member 'Qux.BarController.Baz()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." when an action (with an argument) overrides an action in a parent controller +#pragma warning disable 1591, 3008, 3009, 0108, 0114 +#region T4MVC + +using System; +using System.Diagnostics; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using System.Web; +using System.Web.Hosting; +using System.Web.Mvc; +using System.Web.Mvc.Ajax; +using System.Web.Mvc.Html; +using System.Web.Routing; +using T4MVC; +namespace Disco.Web.Areas.API.Controllers +{ + public partial class DeviceFlagAssignmentController + { + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagAssignmentController() { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected DeviceFlagAssignmentController(Dummy d) { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoute(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(Task taskResult) + { + return RedirectToAction(taskResult.Result); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoutePermanent(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(Task taskResult) + { + return RedirectToActionPermanent(taskResult.Result); + } + + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Update() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateComments() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateComments); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult AddDevice() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.AddDevice); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult RemoveDevice() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.RemoveDevice); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagAssignmentController Actions { get { return MVC.API.DeviceFlagAssignment; } } + [GeneratedCode("T4MVC", "2.0")] + public readonly string Area = "API"; + [GeneratedCode("T4MVC", "2.0")] + public readonly string Name = "DeviceFlagAssignment"; + [GeneratedCode("T4MVC", "2.0")] + public const string NameConst = "DeviceFlagAssignment"; + [GeneratedCode("T4MVC", "2.0")] + static readonly ActionNamesClass s_actions = new ActionNamesClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionNamesClass ActionNames { get { return s_actions; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNamesClass + { + public readonly string Update = "Update"; + public readonly string UpdateComments = "UpdateComments"; + public readonly string AddDevice = "AddDevice"; + public readonly string RemoveDevice = "RemoveDevice"; + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNameConstants + { + public const string Update = "Update"; + public const string UpdateComments = "UpdateComments"; + public const string AddDevice = "AddDevice"; + public const string RemoveDevice = "RemoveDevice"; + } + + + static readonly ActionParamsClass_Update s_params_Update = new ActionParamsClass_Update(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Update UpdateParams { get { return s_params_Update; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Update + { + public readonly string id = "id"; + public readonly string key = "key"; + public readonly string value = "value"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateComments s_params_UpdateComments = new ActionParamsClass_UpdateComments(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateComments UpdateCommentsParams { get { return s_params_UpdateComments; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateComments + { + public readonly string id = "id"; + public readonly string Comments = "Comments"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_AddDevice s_params_AddDevice = new ActionParamsClass_AddDevice(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_AddDevice AddDeviceParams { get { return s_params_AddDevice; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_AddDevice + { + public readonly string id = "id"; + public readonly string DeviceSerialNumber = "DeviceSerialNumber"; + public readonly string Comments = "Comments"; + } + static readonly ActionParamsClass_RemoveDevice s_params_RemoveDevice = new ActionParamsClass_RemoveDevice(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_RemoveDevice RemoveDeviceParams { get { return s_params_RemoveDevice; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_RemoveDevice + { + public readonly string id = "id"; + } + static readonly ViewsClass s_views = new ViewsClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ViewsClass Views { get { return s_views; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ViewsClass + { + static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass(); + public _ViewNamesClass ViewNames { get { return s_ViewNames; } } + public class _ViewNamesClass + { + } + } + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public partial class T4MVC_DeviceFlagAssignmentController : Disco.Web.Areas.API.Controllers.DeviceFlagAssignmentController + { + public T4MVC_DeviceFlagAssignmentController() : base(Dummy.Instance) { } + + [NonAction] + partial void UpdateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string key, string value, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult Update(int id, string key, string value, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "key", key); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "value", value); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateOverride(callInfo, id, key, value, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateCommentsOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string Comments, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateComments(int id, string Comments, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateComments); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Comments", Comments); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateCommentsOverride(callInfo, id, Comments, redirect); + return callInfo; + } + + [NonAction] + partial void AddDeviceOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string DeviceSerialNumber, string Comments); + + [NonAction] + public override System.Web.Mvc.ActionResult AddDevice(int id, string DeviceSerialNumber, string Comments) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.AddDevice); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DeviceSerialNumber", DeviceSerialNumber); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Comments", Comments); + AddDeviceOverride(callInfo, id, DeviceSerialNumber, Comments); + return callInfo; + } + + [NonAction] + partial void RemoveDeviceOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id); + + [NonAction] + public override System.Web.Mvc.ActionResult RemoveDevice(int id) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.RemoveDevice); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + RemoveDeviceOverride(callInfo, id); + return callInfo; + } + + } +} + +#endregion T4MVC +#pragma warning restore 1591, 3008, 3009, 0108, 0114 diff --git a/Disco.Web/Extensions/T4MVC/API.DeviceFlagController.generated.cs b/Disco.Web/Extensions/T4MVC/API.DeviceFlagController.generated.cs new file mode 100644 index 00000000..1388b64a --- /dev/null +++ b/Disco.Web/Extensions/T4MVC/API.DeviceFlagController.generated.cs @@ -0,0 +1,585 @@ +// +// This file was generated by a T4 template. +// Don't change it directly as your change would get overwritten. Instead, make changes +// to the .tt file (i.e. the T4 template) and save it to regenerate this file. + +// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance +// 0108: suppress "Foo hides inherited member Foo. Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed +// 0114: suppress "Foo.BarController.Baz()' hides inherited member 'Qux.BarController.Baz()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." when an action (with an argument) overrides an action in a parent controller +#pragma warning disable 1591, 3008, 3009, 0108, 0114 +#region T4MVC + +using System; +using System.Diagnostics; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using System.Web; +using System.Web.Hosting; +using System.Web.Mvc; +using System.Web.Mvc.Ajax; +using System.Web.Mvc.Html; +using System.Web.Routing; +using T4MVC; +namespace Disco.Web.Areas.API.Controllers +{ + public partial class DeviceFlagController + { + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagController() { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected DeviceFlagController(Dummy d) { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoute(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(Task taskResult) + { + return RedirectToAction(taskResult.Result); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoutePermanent(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(Task taskResult) + { + return RedirectToActionPermanent(taskResult.Result); + } + + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Update() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateName() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateName); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateDescription() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDescription); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateIcon() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIcon); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateIconColour() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIconColour); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateIconAndColour() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIconAndColour); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateOnAssignmentExpression() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnAssignmentExpression); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateOnUnassignmentExpression() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnUnassignmentExpression); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateDevicesLinkedGroup() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDevicesLinkedGroup); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult UpdateAssignedUserLinkedGroup() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateAssignedUserLinkedGroup); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Delete() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Delete); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult BulkAssignDevices() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkAssignDevices); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult AssignedDevices() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.AssignedDevices); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Export() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult ExportRetrieve() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportRetrieve); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagController Actions { get { return MVC.API.DeviceFlag; } } + [GeneratedCode("T4MVC", "2.0")] + public readonly string Area = "API"; + [GeneratedCode("T4MVC", "2.0")] + public readonly string Name = "DeviceFlag"; + [GeneratedCode("T4MVC", "2.0")] + public const string NameConst = "DeviceFlag"; + [GeneratedCode("T4MVC", "2.0")] + static readonly ActionNamesClass s_actions = new ActionNamesClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionNamesClass ActionNames { get { return s_actions; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNamesClass + { + public readonly string Update = "Update"; + public readonly string UpdateName = "UpdateName"; + public readonly string UpdateDescription = "UpdateDescription"; + public readonly string UpdateIcon = "UpdateIcon"; + public readonly string UpdateIconColour = "UpdateIconColour"; + public readonly string UpdateIconAndColour = "UpdateIconAndColour"; + public readonly string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression"; + public readonly string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression"; + public readonly string UpdateDevicesLinkedGroup = "UpdateDevicesLinkedGroup"; + public readonly string UpdateAssignedUserLinkedGroup = "UpdateAssignedUserLinkedGroup"; + public readonly string Delete = "Delete"; + public readonly string BulkAssignDevices = "BulkAssignDevices"; + public readonly string AssignedDevices = "AssignedDevices"; + public readonly string Export = "Export"; + public readonly string ExportRetrieve = "ExportRetrieve"; + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNameConstants + { + public const string Update = "Update"; + public const string UpdateName = "UpdateName"; + public const string UpdateDescription = "UpdateDescription"; + public const string UpdateIcon = "UpdateIcon"; + public const string UpdateIconColour = "UpdateIconColour"; + public const string UpdateIconAndColour = "UpdateIconAndColour"; + public const string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression"; + public const string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression"; + public const string UpdateDevicesLinkedGroup = "UpdateDevicesLinkedGroup"; + public const string UpdateAssignedUserLinkedGroup = "UpdateAssignedUserLinkedGroup"; + public const string Delete = "Delete"; + public const string BulkAssignDevices = "BulkAssignDevices"; + public const string AssignedDevices = "AssignedDevices"; + public const string Export = "Export"; + public const string ExportRetrieve = "ExportRetrieve"; + } + + + static readonly ActionParamsClass_Update s_params_Update = new ActionParamsClass_Update(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Update UpdateParams { get { return s_params_Update; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Update + { + public readonly string id = "id"; + public readonly string key = "key"; + public readonly string value = "value"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateName s_params_UpdateName = new ActionParamsClass_UpdateName(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateName UpdateNameParams { get { return s_params_UpdateName; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateName + { + public readonly string id = "id"; + public readonly string FlagName = "FlagName"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateDescription s_params_UpdateDescription = new ActionParamsClass_UpdateDescription(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateDescription UpdateDescriptionParams { get { return s_params_UpdateDescription; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateDescription + { + public readonly string id = "id"; + public readonly string Description = "Description"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateIcon s_params_UpdateIcon = new ActionParamsClass_UpdateIcon(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateIcon UpdateIconParams { get { return s_params_UpdateIcon; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateIcon + { + public readonly string id = "id"; + public readonly string Icon = "Icon"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateIconColour s_params_UpdateIconColour = new ActionParamsClass_UpdateIconColour(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateIconColour UpdateIconColourParams { get { return s_params_UpdateIconColour; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateIconColour + { + public readonly string id = "id"; + public readonly string IconColour = "IconColour"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateIconAndColour s_params_UpdateIconAndColour = new ActionParamsClass_UpdateIconAndColour(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateIconAndColour UpdateIconAndColourParams { get { return s_params_UpdateIconAndColour; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateIconAndColour + { + public readonly string id = "id"; + public readonly string Icon = "Icon"; + public readonly string IconColour = "IconColour"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateOnAssignmentExpression s_params_UpdateOnAssignmentExpression = new ActionParamsClass_UpdateOnAssignmentExpression(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateOnAssignmentExpression UpdateOnAssignmentExpressionParams { get { return s_params_UpdateOnAssignmentExpression; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateOnAssignmentExpression + { + public readonly string id = "id"; + public readonly string OnAssignmentExpression = "OnAssignmentExpression"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateOnUnassignmentExpression s_params_UpdateOnUnassignmentExpression = new ActionParamsClass_UpdateOnUnassignmentExpression(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateOnUnassignmentExpression UpdateOnUnassignmentExpressionParams { get { return s_params_UpdateOnUnassignmentExpression; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateOnUnassignmentExpression + { + public readonly string id = "id"; + public readonly string OnUnassignmentExpression = "OnUnassignmentExpression"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateDevicesLinkedGroup s_params_UpdateDevicesLinkedGroup = new ActionParamsClass_UpdateDevicesLinkedGroup(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateDevicesLinkedGroup UpdateDevicesLinkedGroupParams { get { return s_params_UpdateDevicesLinkedGroup; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateDevicesLinkedGroup + { + public readonly string id = "id"; + public readonly string GroupId = "GroupId"; + public readonly string FilterBeginDate = "FilterBeginDate"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_UpdateAssignedUserLinkedGroup s_params_UpdateAssignedUserLinkedGroup = new ActionParamsClass_UpdateAssignedUserLinkedGroup(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_UpdateAssignedUserLinkedGroup UpdateAssignedUserLinkedGroupParams { get { return s_params_UpdateAssignedUserLinkedGroup; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_UpdateAssignedUserLinkedGroup + { + public readonly string id = "id"; + public readonly string GroupId = "GroupId"; + public readonly string FilterBeginDate = "FilterBeginDate"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_Delete s_params_Delete = new ActionParamsClass_Delete(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Delete DeleteParams { get { return s_params_Delete; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Delete + { + public readonly string id = "id"; + public readonly string redirect = "redirect"; + } + static readonly ActionParamsClass_BulkAssignDevices s_params_BulkAssignDevices = new ActionParamsClass_BulkAssignDevices(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_BulkAssignDevices BulkAssignDevicesParams { get { return s_params_BulkAssignDevices; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_BulkAssignDevices + { + public readonly string id = "id"; + public readonly string Override = "Override"; + public readonly string DeviceSerialNumbers = "DeviceSerialNumbers"; + public readonly string Comments = "Comments"; + } + static readonly ActionParamsClass_AssignedDevices s_params_AssignedDevices = new ActionParamsClass_AssignedDevices(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_AssignedDevices AssignedDevicesParams { get { return s_params_AssignedDevices; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_AssignedDevices + { + public readonly string id = "id"; + } + static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Export ExportParams { get { return s_params_Export; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Export + { + public readonly string Model = "Model"; + } + static readonly ActionParamsClass_ExportRetrieve s_params_ExportRetrieve = new ActionParamsClass_ExportRetrieve(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_ExportRetrieve ExportRetrieveParams { get { return s_params_ExportRetrieve; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_ExportRetrieve + { + public readonly string Id = "Id"; + } + static readonly ViewsClass s_views = new ViewsClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ViewsClass Views { get { return s_views; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ViewsClass + { + static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass(); + public _ViewNamesClass ViewNames { get { return s_ViewNames; } } + public class _ViewNamesClass + { + } + } + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public partial class T4MVC_DeviceFlagController : Disco.Web.Areas.API.Controllers.DeviceFlagController + { + public T4MVC_DeviceFlagController() : base(Dummy.Instance) { } + + [NonAction] + partial void UpdateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string key, string value, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult Update(int id, string key, string value, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "key", key); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "value", value); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateOverride(callInfo, id, key, value, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateNameOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string FlagName, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateName(int id, string FlagName, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateName); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "FlagName", FlagName); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateNameOverride(callInfo, id, FlagName, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateDescriptionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string Description, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateDescription(int id, string Description, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDescription); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Description", Description); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateDescriptionOverride(callInfo, id, Description, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateIconOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string Icon, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateIcon(int id, string Icon, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIcon); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Icon", Icon); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateIconOverride(callInfo, id, Icon, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateIconColourOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string IconColour, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateIconColour(int id, string IconColour, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIconColour); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "IconColour", IconColour); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateIconColourOverride(callInfo, id, IconColour, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateIconAndColourOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string Icon, string IconColour, bool redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateIconAndColour(int id, string Icon, string IconColour, bool redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateIconAndColour); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Icon", Icon); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "IconColour", IconColour); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateIconAndColourOverride(callInfo, id, Icon, IconColour, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateOnAssignmentExpressionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string OnAssignmentExpression, bool redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateOnAssignmentExpression(int id, string OnAssignmentExpression, bool redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnAssignmentExpression); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "OnAssignmentExpression", OnAssignmentExpression); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateOnAssignmentExpressionOverride(callInfo, id, OnAssignmentExpression, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateOnUnassignmentExpressionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string OnUnassignmentExpression, bool redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateOnUnassignmentExpression(int id, string OnUnassignmentExpression, bool redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnUnassignmentExpression); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "OnUnassignmentExpression", OnUnassignmentExpression); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateOnUnassignmentExpressionOverride(callInfo, id, OnUnassignmentExpression, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateDevicesLinkedGroupOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateDevicesLinkedGroup(int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDevicesLinkedGroup); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "GroupId", GroupId); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "FilterBeginDate", FilterBeginDate); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateDevicesLinkedGroupOverride(callInfo, id, GroupId, FilterBeginDate, redirect); + return callInfo; + } + + [NonAction] + partial void UpdateAssignedUserLinkedGroupOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult UpdateAssignedUserLinkedGroup(int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateAssignedUserLinkedGroup); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "GroupId", GroupId); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "FilterBeginDate", FilterBeginDate); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + UpdateAssignedUserLinkedGroupOverride(callInfo, id, GroupId, FilterBeginDate, redirect); + return callInfo; + } + + [NonAction] + partial void DeleteOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, bool? redirect); + + [NonAction] + public override System.Web.Mvc.ActionResult Delete(int id, bool? redirect) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Delete); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect); + DeleteOverride(callInfo, id, redirect); + return callInfo; + } + + [NonAction] + partial void BulkAssignDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, bool Override, string DeviceSerialNumbers, string Comments); + + [NonAction] + public override System.Web.Mvc.ActionResult BulkAssignDevices(int id, bool Override, string DeviceSerialNumbers, string Comments) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkAssignDevices); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Override", Override); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DeviceSerialNumbers", DeviceSerialNumbers); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Comments", Comments); + BulkAssignDevicesOverride(callInfo, id, Override, DeviceSerialNumbers, Comments); + return callInfo; + } + + [NonAction] + partial void AssignedDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id); + + [NonAction] + public override System.Web.Mvc.ActionResult AssignedDevices(int id) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.AssignedDevices); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + AssignedDevicesOverride(callInfo, id); + return callInfo; + } + + [NonAction] + partial void ExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, Disco.Web.Areas.Config.Models.DeviceFlag.ExportModel Model); + + [NonAction] + public override System.Web.Mvc.ActionResult Export(Disco.Web.Areas.Config.Models.DeviceFlag.ExportModel Model) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Model", Model); + ExportOverride(callInfo, Model); + return callInfo; + } + + [NonAction] + partial void ExportRetrieveOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string Id); + + [NonAction] + public override System.Web.Mvc.ActionResult ExportRetrieve(string Id) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportRetrieve); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Id", Id); + ExportRetrieveOverride(callInfo, Id); + return callInfo; + } + + } +} + +#endregion T4MVC +#pragma warning restore 1591, 3008, 3009, 0108, 0114 diff --git a/Disco.Web/Extensions/T4MVC/Config.DeviceFlagController.generated.cs b/Disco.Web/Extensions/T4MVC/Config.DeviceFlagController.generated.cs new file mode 100644 index 00000000..0775834b --- /dev/null +++ b/Disco.Web/Extensions/T4MVC/Config.DeviceFlagController.generated.cs @@ -0,0 +1,210 @@ +// +// This file was generated by a T4 template. +// Don't change it directly as your change would get overwritten. Instead, make changes +// to the .tt file (i.e. the T4 template) and save it to regenerate this file. + +// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance +// 0108: suppress "Foo hides inherited member Foo. Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed +// 0114: suppress "Foo.BarController.Baz()' hides inherited member 'Qux.BarController.Baz()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." when an action (with an argument) overrides an action in a parent controller +#pragma warning disable 1591, 3008, 3009, 0108, 0114 +#region T4MVC + +using System; +using System.Diagnostics; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using System.Web; +using System.Web.Hosting; +using System.Web.Mvc; +using System.Web.Mvc.Ajax; +using System.Web.Mvc.Html; +using System.Web.Routing; +using T4MVC; +namespace Disco.Web.Areas.Config.Controllers +{ + public partial class DeviceFlagController + { + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagController() { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected DeviceFlagController(Dummy d) { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoute(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(Task taskResult) + { + return RedirectToAction(taskResult.Result); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoutePermanent(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(Task taskResult) + { + return RedirectToActionPermanent(taskResult.Result); + } + + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Index() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Index); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Export() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public DeviceFlagController Actions { get { return MVC.Config.DeviceFlag; } } + [GeneratedCode("T4MVC", "2.0")] + public readonly string Area = "Config"; + [GeneratedCode("T4MVC", "2.0")] + public readonly string Name = "DeviceFlag"; + [GeneratedCode("T4MVC", "2.0")] + public const string NameConst = "DeviceFlag"; + [GeneratedCode("T4MVC", "2.0")] + static readonly ActionNamesClass s_actions = new ActionNamesClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionNamesClass ActionNames { get { return s_actions; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNamesClass + { + public readonly string Index = "Index"; + public readonly string Create = "Create"; + public readonly string Export = "Export"; + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNameConstants + { + public const string Index = "Index"; + public const string Create = "Create"; + public const string Export = "Export"; + } + + + static readonly ActionParamsClass_Index s_params_Index = new ActionParamsClass_Index(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Index IndexParams { get { return s_params_Index; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Index + { + public readonly string id = "id"; + } + static readonly ActionParamsClass_Create s_params_Create = new ActionParamsClass_Create(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Create CreateParams { get { return s_params_Create; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Create + { + public readonly string model = "model"; + } + static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Export ExportParams { get { return s_params_Export; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Export + { + public readonly string DownloadId = "DownloadId"; + public readonly string DeviceFlagId = "DeviceFlagId"; + public readonly string CurrentOnly = "CurrentOnly"; + } + static readonly ViewsClass s_views = new ViewsClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ViewsClass Views { get { return s_views; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ViewsClass + { + static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass(); + public _ViewNamesClass ViewNames { get { return s_ViewNames; } } + public class _ViewNamesClass + { + public readonly string Create = "Create"; + public readonly string Export = "Export"; + public readonly string Index = "Index"; + public readonly string Show = "Show"; + } + public readonly string Create = "~/Areas/Config/Views/DeviceFlag/Create.cshtml"; + public readonly string Export = "~/Areas/Config/Views/DeviceFlag/Export.cshtml"; + public readonly string Index = "~/Areas/Config/Views/DeviceFlag/Index.cshtml"; + public readonly string Show = "~/Areas/Config/Views/DeviceFlag/Show.cshtml"; + } + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public partial class T4MVC_DeviceFlagController : Disco.Web.Areas.Config.Controllers.DeviceFlagController + { + public T4MVC_DeviceFlagController() : base(Dummy.Instance) { } + + [NonAction] + partial void IndexOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int? id); + + [NonAction] + public override System.Web.Mvc.ActionResult Index(int? id) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Index); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); + IndexOverride(callInfo, id); + return callInfo; + } + + [NonAction] + partial void CreateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo); + + [NonAction] + public override System.Web.Mvc.ActionResult Create() + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Create); + CreateOverride(callInfo); + return callInfo; + } + + [NonAction] + partial void CreateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, Disco.Web.Areas.Config.Models.DeviceFlag.CreateModel model); + + [NonAction] + public override System.Web.Mvc.ActionResult Create(Disco.Web.Areas.Config.Models.DeviceFlag.CreateModel model) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Create); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "model", model); + CreateOverride(callInfo, model); + return callInfo; + } + + [NonAction] + partial void ExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string DownloadId, int? DeviceFlagId, bool? CurrentOnly); + + [NonAction] + public override System.Web.Mvc.ActionResult Export(string DownloadId, int? DeviceFlagId, bool? CurrentOnly) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DownloadId", DownloadId); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DeviceFlagId", DeviceFlagId); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "CurrentOnly", CurrentOnly); + ExportOverride(callInfo, DownloadId, DeviceFlagId, CurrentOnly); + return callInfo; + } + + } +} + +#endregion T4MVC +#pragma warning restore 1591, 3008, 3009, 0108, 0114 diff --git a/Disco.Web/Extensions/T4MVC/T4MVC.cs b/Disco.Web/Extensions/T4MVC/T4MVC.cs index 63a30aa7..43f83097 100644 --- a/Disco.Web/Extensions/T4MVC/T4MVC.cs +++ b/Disco.Web/Extensions/T4MVC/T4MVC.cs @@ -56,6 +56,8 @@ namespace T4MVC public Disco.Web.Areas.API.Controllers.DeviceBatchController DeviceBatch = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceBatchController(); public Disco.Web.Areas.API.Controllers.DeviceCertificateController DeviceCertificate = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceCertificateController(); public Disco.Web.Areas.API.Controllers.DeviceController Device = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceController(); + public Disco.Web.Areas.API.Controllers.DeviceFlagAssignmentController DeviceFlagAssignment = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceFlagAssignmentController(); + public Disco.Web.Areas.API.Controllers.DeviceFlagController DeviceFlag = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceFlagController(); public Disco.Web.Areas.API.Controllers.DeviceModelController DeviceModel = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceModelController(); public Disco.Web.Areas.API.Controllers.DeviceProfileController DeviceProfile = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceProfileController(); public Disco.Web.Areas.API.Controllers.DocumentTemplateController DocumentTemplate = new Disco.Web.Areas.API.Controllers.T4MVC_DocumentTemplateController(); @@ -80,6 +82,7 @@ namespace T4MVC public Disco.Web.Areas.Config.Controllers.AuthorizationRoleController AuthorizationRole = new Disco.Web.Areas.Config.Controllers.T4MVC_AuthorizationRoleController(); public Disco.Web.Areas.Config.Controllers.ConfigController Config = new Disco.Web.Areas.Config.Controllers.T4MVC_ConfigController(); public Disco.Web.Areas.Config.Controllers.DeviceBatchController DeviceBatch = new Disco.Web.Areas.Config.Controllers.T4MVC_DeviceBatchController(); + public Disco.Web.Areas.Config.Controllers.DeviceFlagController DeviceFlag = new Disco.Web.Areas.Config.Controllers.T4MVC_DeviceFlagController(); public Disco.Web.Areas.Config.Controllers.DeviceModelController DeviceModel = new Disco.Web.Areas.Config.Controllers.T4MVC_DeviceModelController(); public Disco.Web.Areas.Config.Controllers.DeviceProfileController DeviceProfile = new Disco.Web.Areas.Config.Controllers.T4MVC_DeviceProfileController(); public Disco.Web.Areas.Config.Controllers.DocumentTemplateController DocumentTemplate = new Disco.Web.Areas.Config.Controllers.T4MVC_DocumentTemplateController();