From 3e57af394d7953812db00ad909201381064e9630 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Sun, 7 Feb 2021 18:15:52 +1100 Subject: [PATCH] feature: custom details first-class custom details (such as those from the UserDetails plugin) can now be more deeply integrated throughtout the system --- .../Configuration/SystemConfiguration.cs | 14 + Disco.Data/Repository/DiscoDataContext.cs | 1 + Disco.Models/Disco.Models.csproj | 1 + .../Services/Plugins/Details/DetailsResult.cs | 42 + Disco.Models/UI/Device/DeviceShowModel.cs | 4 + Disco.Models/UI/Job/JobShowModel.cs | 4 + Disco.Models/UI/User/UserShowModel.cs | 4 + Disco.Services/Disco.Services.csproj | 5 + .../Extensions/ImagingExtensions.cs | 57 + .../DetailsProviderExtensions.cs | 60 + .../DetailsProvider/DetailsProviderFeature.cs | 15 + .../DetailsProvider/DetailsProviderService.cs | 235 +++ .../Areas/API/Controllers/UserController.cs | 26 + Disco.Web/ClientSource/Style/Device.css | 8 + Disco.Web/ClientSource/Style/Device.less | 17 +- Disco.Web/ClientSource/Style/Device.min.css | 2 +- .../Style/Images/UnknownPhoto.png | Bin 0 -> 9481 bytes Disco.Web/ClientSource/Style/Job.css | 8 + Disco.Web/ClientSource/Style/Job.less | 27 +- Disco.Web/ClientSource/Style/Job.min.css | 2 +- Disco.Web/ClientSource/Style/User.css | 17 +- Disco.Web/ClientSource/Style/User.less | 23 +- Disco.Web/ClientSource/Style/User.min.css | 2 +- Disco.Web/Controllers/DeviceController.cs | 18 +- Disco.Web/Controllers/JobController.cs | 22 +- Disco.Web/Controllers/UserController.cs | 6 + Disco.Web/Disco.Web.csproj | 10 + .../T4MVC/API.UserController.generated.cs | 28 + .../T4MVC/SharedController.generated.cs | 2 + Disco.Web/Extensions/T4MVC/T4MVC.cs | 1 + Disco.Web/Models/Device/ShowModel.cs | 5 + Disco.Web/Models/Job/ShowModel.cs | 5 + Disco.Web/Models/User/ShowModel.cs | 6 + .../Views/Device/DeviceParts/_Subject.cshtml | 30 +- .../Device/DeviceParts/_Subject.generated.cs | 607 ++++--- Disco.Web/Views/Job/JobParts/_Subject.cshtml | 422 ++--- .../Views/Job/JobParts/_Subject.generated.cs | 1425 ++++++++++------- .../Shared/_CustomDetailValueRender.cshtml | 23 + .../_CustomDetailValueRender.generated.cs | 133 ++ .../Views/User/UserParts/_Subject.cshtml | 127 +- .../User/UserParts/_Subject.generated.cs | 535 ++++--- 41 files changed, 2700 insertions(+), 1279 deletions(-) create mode 100644 Disco.Models/Services/Plugins/Details/DetailsResult.cs create mode 100644 Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderExtensions.cs create mode 100644 Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderFeature.cs create mode 100644 Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderService.cs create mode 100644 Disco.Web/ClientSource/Style/Images/UnknownPhoto.png create mode 100644 Disco.Web/Views/Shared/_CustomDetailValueRender.cshtml create mode 100644 Disco.Web/Views/Shared/_CustomDetailValueRender.generated.cs diff --git a/Disco.Data/Configuration/SystemConfiguration.cs b/Disco.Data/Configuration/SystemConfiguration.cs index 41286fc7..bb43b5e5 100644 --- a/Disco.Data/Configuration/SystemConfiguration.cs +++ b/Disco.Data/Configuration/SystemConfiguration.cs @@ -150,6 +150,15 @@ namespace Disco.Data.Configuration return System.IO.Path.Combine(DataStoreLocation, @"PluginPackages\"); } } + + public string PluginUserPhotosLocation + => Path.Combine(DataStoreLocation, @"PluginUserPhotos\"); + + public DateTime PluginDetailsCacheExpiration + { + get => Get(DateTime.MinValue); + set => Set(value); + } #endregion #region Organisation Details @@ -292,6 +301,11 @@ namespace Disco.Data.Configuration get => Get(null); set => Set(value); } + public string EmailReplyToAddress + { + get => Get(null); + set => Set(value); + } public string EmailUsername { get => Get(null); diff --git a/Disco.Data/Repository/DiscoDataContext.cs b/Disco.Data/Repository/DiscoDataContext.cs index 1b036208..895eab7e 100644 --- a/Disco.Data/Repository/DiscoDataContext.cs +++ b/Disco.Data/Repository/DiscoDataContext.cs @@ -22,6 +22,7 @@ namespace Disco.Data.Repository public virtual DbSet DocumentTemplates { get; set; } public virtual DbSet Users { get; set; } + public virtual DbSet UserDetails { get; set; } public virtual DbSet UserAttachments { get; set; } public virtual DbSet UserFlags { get; set; } public virtual DbSet UserFlagAssignments { get; set; } diff --git a/Disco.Models/Disco.Models.csproj b/Disco.Models/Disco.Models.csproj index 0348aff9..78d2bfb1 100644 --- a/Disco.Models/Disco.Models.csproj +++ b/Disco.Models/Disco.Models.csproj @@ -145,6 +145,7 @@ + diff --git a/Disco.Models/Services/Plugins/Details/DetailsResult.cs b/Disco.Models/Services/Plugins/Details/DetailsResult.cs new file mode 100644 index 00000000..264e5063 --- /dev/null +++ b/Disco.Models/Services/Plugins/Details/DetailsResult.cs @@ -0,0 +1,42 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +namespace Disco.Models.Services.Plugins.Details +{ + public class DetailsResult + { + public DateTime GatheredOn { get; private set; } + public DateTime ExpiresOn { get; private set; } + public Dictionary Details { get; } + + public bool SetExpiration(DateTime expireOn) + { + if (ExpiresOn > expireOn) + { + // only set the expiration if it is sooner + ExpiresOn = expireOn; + return true; + } + else + { + return false; + } + } + + public DetailsResult() + { + GatheredOn = DateTime.Now; + ExpiresOn = DateTime.Now.AddDays(7); + Details = new Dictionary(); + } + + [JsonConstructor] + public DetailsResult(DateTime gatheredOn, DateTime expiresOn, Dictionary details) + { + GatheredOn = gatheredOn; + ExpiresOn = expiresOn; + Details = details ?? new Dictionary(); + } + } +} diff --git a/Disco.Models/UI/Device/DeviceShowModel.cs b/Disco.Models/UI/Device/DeviceShowModel.cs index bfa52840..8d19c50b 100644 --- a/Disco.Models/UI/Device/DeviceShowModel.cs +++ b/Disco.Models/UI/Device/DeviceShowModel.cs @@ -1,6 +1,7 @@ using Disco.Models.BI.Config; using Disco.Models.Services.Documents; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using System.Collections.Generic; namespace Disco.Models.UI.Device @@ -20,5 +21,8 @@ namespace Disco.Models.UI.Device List DocumentTemplates { get; set; } List DocumentTemplatePackages { get; set; } + DetailsResult DeviceDetails { get; set; } + DetailsResult AssignedUserDetails { get; set; } + bool HasAssignedUserPhoto { get; set; } } } diff --git a/Disco.Models/UI/Job/JobShowModel.cs b/Disco.Models/UI/Job/JobShowModel.cs index ab20c850..89caf2fc 100644 --- a/Disco.Models/UI/Job/JobShowModel.cs +++ b/Disco.Models/UI/Job/JobShowModel.cs @@ -1,6 +1,7 @@ using Disco.Models.Services.Documents; using Disco.Models.Services.Job; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using System; using System.Collections.Generic; @@ -17,5 +18,8 @@ namespace Disco.Models.UI.Job LocationModes LocationMode { get; set; } List LocationOptions { get; set; } + DetailsResult UserDetails { get; set; } + bool HasUserPhoto { get; set; } + DetailsResult DeviceDetails { get; set; } } } diff --git a/Disco.Models/UI/User/UserShowModel.cs b/Disco.Models/UI/User/UserShowModel.cs index acd25af8..64c42601 100644 --- a/Disco.Models/UI/User/UserShowModel.cs +++ b/Disco.Models/UI/User/UserShowModel.cs @@ -2,6 +2,7 @@ using Disco.Models.Services.Authorization; using Disco.Models.Services.Documents; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using System.Collections.Generic; namespace Disco.Models.UI.User @@ -17,5 +18,8 @@ namespace Disco.Models.UI.User IAuthorizationToken AuthorizationToken { get; set; } IClaimNavigatorItem ClaimNavigator { get; set; } + DetailsResult UserDetails { get; set; } + bool HasUserPhoto { get; set; } + Dictionary AssignedDevicesDetails { get; set; } } } \ No newline at end of file diff --git a/Disco.Services/Disco.Services.csproj b/Disco.Services/Disco.Services.csproj index 3096e279..87caf1ea 100644 --- a/Disco.Services/Disco.Services.csproj +++ b/Disco.Services/Disco.Services.csproj @@ -322,6 +322,7 @@ + @@ -394,6 +395,10 @@ + + + + diff --git a/Disco.Services/Extensions/ImagingExtensions.cs b/Disco.Services/Extensions/ImagingExtensions.cs index f1b48f10..ed3707ff 100644 --- a/Disco.Services/Extensions/ImagingExtensions.cs +++ b/Disco.Services/Extensions/ImagingExtensions.cs @@ -76,6 +76,36 @@ namespace Disco.Services return destination; } + public static Bitmap ResizeImage(this Image Source, int MaxHeight, Brush BackgroundColor = null) + { + // Determine Width + int Height = (Source.Height > MaxHeight) ? + MaxHeight : + Source.Height; + + int Width = (Source.Height > Height) ? + (int)(((float)Height / Source.Height) * Source.Width) : + Source.Width; + + Bitmap destination = new Bitmap(Width, Height); + destination.SetResolution(72, 72); + using (Graphics destinationGraphics = Graphics.FromImage(destination)) + { + destinationGraphics.CompositingQuality = CompositingQuality.HighQuality; + destinationGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + destinationGraphics.SmoothingMode = SmoothingMode.HighQuality; + + if (BackgroundColor != null) + destinationGraphics.FillRectangle(BackgroundColor, destinationGraphics.VisibleClipBounds); + + float ratio = Math.Min((float)(destination.Width) / (float)(Source.Width), (float)(destination.Height) / (float)(Source.Height)); + + destinationGraphics.DrawImageResized(Source, ratio); + } + + return destination; + } + public static RectangleF CalculateResize(int SourceWidth, int SourceHeight, int TargetWidth, int TargetHeight, out float scaleRatio) { scaleRatio = Math.Min((float)(TargetWidth) / SourceWidth, (float)(TargetHeight) / SourceHeight); @@ -119,6 +149,33 @@ namespace Disco.Services graphics.DrawImage(SourceImage, resizeBounds, new RectangleF(0, 0, SourceImage.Width, SourceImage.Height), GraphicsUnit.Pixel); } + public static void DrawImageResized(this Graphics graphics, Image SourceImage, float? Scale = null, float LocationX = -1, float LocationY = -1) + { + RectangleF clipBounds = graphics.VisibleClipBounds; + if (Scale == null) // Calculate Scale + Scale = Math.Min(clipBounds.Width / SourceImage.Width, clipBounds.Height / SourceImage.Height); + float newWidth = SourceImage.Width * Scale.Value; + float newHeight = SourceImage.Height * Scale.Value; + float newLeft = LocationX; + float newTop = LocationY; + + if (newLeft < 0 || newTop < 0) + { + if (newWidth < clipBounds.Width) + newLeft = (clipBounds.Width - newWidth) / 2; + else + newLeft = 0; + if (newHeight < clipBounds.Height) + newTop = (clipBounds.Height - newHeight) / 2; + else + newTop = 0; + } + newLeft += clipBounds.Left; + newTop += clipBounds.Top; + + graphics.DrawImage(SourceImage, new RectangleF(newLeft, newTop, newWidth, newHeight), new RectangleF(0, 0, SourceImage.Width, SourceImage.Height), GraphicsUnit.Pixel); + } + public static void DrawImageResized(this Graphics graphics, Image SourceImage, float Scale, float LocationX, float LocationY) { RectangleF clipBounds = graphics.VisibleClipBounds; diff --git a/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderExtensions.cs b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderExtensions.cs new file mode 100644 index 00000000..9a84b792 --- /dev/null +++ b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderExtensions.cs @@ -0,0 +1,60 @@ +using Disco.Data.Repository; +using Disco.Models.Services.Plugins.Details; +using Disco.Models.UI.Device; +using Disco.Models.UI.Job; +using Disco.Models.UI.User; +using System.Collections.Generic; + +namespace Disco.Services.Plugins.Features.DetailsProvider +{ + public static class DetailsProviderExtensions + { + + public static void PopulateDetails(this UserShowModel model, DiscoDataContext database) + { + var service = new DetailsProviderService(database); + + model.UserDetails = service.GetDetails(model.User); + model.HasUserPhoto = service.HasUserPhoto(model.User); + + var currentAssignments = model.User.CurrentDeviceUserAssignments(); + if (currentAssignments.Count > 0) + { + model.AssignedDevicesDetails = new Dictionary(currentAssignments.Count); + + foreach (var device in currentAssignments) + { + model.AssignedDevicesDetails[device.DeviceSerialNumber] = service.GetDetails(device.Device); + } + } + } + + public static void PopulateDetails(this DeviceShowModel model, DiscoDataContext database) + { + var service = new DetailsProviderService(database); + + model.DeviceDetails = service.GetDetails(model.Device); + + if (model.Device.AssignedUser != null) + { + model.AssignedUserDetails = service.GetDetails(model.Device.AssignedUser); + model.HasAssignedUserPhoto = service.HasUserPhoto(model.Device.AssignedUser); + } + } + + public static void PopulateDetails(this JobShowModel model, DiscoDataContext database) + { + var service = new DetailsProviderService(database); + + if (model.Job.Device != null) + model.DeviceDetails = service.GetDetails(model.Job.Device); + + if (model.Job.User != null) + { + model.UserDetails = service.GetDetails(model.Job.User); + model.HasUserPhoto = service.HasUserPhoto(model.Job.User); + } + } + + } +} diff --git a/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderFeature.cs b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderFeature.cs new file mode 100644 index 00000000..5d612352 --- /dev/null +++ b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderFeature.cs @@ -0,0 +1,15 @@ +using Disco.Data.Repository; +using Disco.Models.Repository; +using Disco.Models.Services.Plugins.Details; +using System; + +namespace Disco.Services.Plugins.Features.DetailsProvider +{ + [PluginFeatureCategory(DisplayName = "Detail Providers")] + public abstract class DetailsProviderFeature : PluginFeature + { + public abstract DetailsResult GetDetails(DiscoDataContext database, User user, DateTime? cacheTimestamp); + public abstract DetailsResult GetDetails(DiscoDataContext database, Device device, DateTime? cacheTimestamp); + public abstract byte[] GetUserPhoto(DiscoDataContext database, User user, DateTime? cacheTimestamp); + } +} diff --git a/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderService.cs b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderService.cs new file mode 100644 index 00000000..c54e2c72 --- /dev/null +++ b/Disco.Services/Plugins/Features/DetailsProvider/DetailsProviderService.cs @@ -0,0 +1,235 @@ +using Disco.Data.Repository; +using Disco.Models.Repository; +using Disco.Models.Services.Plugins.Details; +using Disco.Services.Authorization; +using Disco.Services.Users; +using Exceptionless.Json; +using System; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace Disco.Services.Plugins.Features.DetailsProvider +{ + public class DetailsProviderService + { + private const string DetailsScope = "Details"; + private readonly DiscoDataContext database; + + public DetailsProviderService(DiscoDataContext database) + { + this.database = database; + } + + public bool HasUserPhoto(User user) + { + var cachePath = GetUserPhotoCachePath(user); + if (File.Exists(cachePath)) + return true; + + // slow-path: this should only happen once, + // the first time, before we cache + var photo = GetUserPhoto(user); + + return photo != null; + } + + public byte[] GetUserPhoto(User user) + { + var cachePath = GetUserPhotoCachePath(user); + var cacheAge = default(DateTime?); + if (File.Exists(cachePath)) + cacheAge = File.GetLastWriteTime(cachePath); + + var features = Plugins.GetPluginFeatures(typeof(DetailsProviderFeature)); + + foreach (var feature in features) + { + var instance = feature.CreateInstance(); + var result = instance.GetUserPhoto(database, user, cacheAge); + if (result != null) + { + // resize image + using (var originalStream = new MemoryStream(result)) + { + using (var originalImage = Image.FromStream(originalStream)) + { + using (var resizedImage = originalImage.ResizeImage(192, Brushes.White)) + { + using (var savedResizedImage = (MemoryStream)resizedImage.SaveJpg(85)) + { + result = savedResizedImage.ToArray(); + } + } + } + } + + Directory.CreateDirectory(Path.GetDirectoryName(cachePath)); + File.WriteAllBytes(cachePath, result); + return result; + } + } + + // serve from cache + if (cacheAge.HasValue) + return File.ReadAllBytes(cachePath); + + return null; + } + + private string GetUserPhotoCachePath(User user) + { + var hasher = new SHA1Managed(); + var userHash = BitConverter.ToString(hasher.ComputeHash(Encoding.UTF8.GetBytes(user.UserId))).Replace("-", string.Empty); + return Path.Combine(database.DiscoConfiguration.PluginUserPhotosLocation, userHash.Substring(0, 2), $"{userHash}.jpg"); + } + + public DetailsResult GetDetails(User user) + { + var result = new DetailsResult(); + var saveChangesRequired = false; + + if (!UserService.CurrentAuthorization.HasAll(Claims.User.Show, Claims.User.ShowDetails)) + return result; + + var features = Plugins.GetPluginFeatures(typeof(DetailsProviderFeature)); + + if (features.Count == 0) + return result; + + var cache = user.UserDetails?.Where(d => d.Scope == DetailsScope).ToDictionary(d => d.Key, d => new { DbDetails = d, Details = JsonConvert.DeserializeObject(d.Value) }, StringComparer.OrdinalIgnoreCase); + + foreach (var feature in features) + { + var featureResult = default(DetailsResult); + if (!cache.TryGetValue(feature.Id, out var cacheResult) || cacheResult.Details.ExpiresOn < DateTime.Now || cacheResult.Details.GatheredOn < database.DiscoConfiguration.PluginDetailsCacheExpiration) + { + var timestamp = cacheResult?.Details.GatheredOn; + if (timestamp.HasValue && timestamp.Value < database.DiscoConfiguration.PluginDetailsCacheExpiration) + timestamp = null; + + try + { + var featureInstance = feature.CreateInstance(); + featureResult = featureInstance.GetDetails(database, user, timestamp); + + if (featureResult != null) + { + if (featureResult.ExpiresOn > DateTime.Now) + { + if (cacheResult == null) + database.UserDetails.Add(new UserDetail() { UserId = user.UserId, Scope = DetailsScope, Key = feature.Id, Value = JsonConvert.SerializeObject(featureResult) }); + else + cacheResult.DbDetails.Value = JsonConvert.SerializeObject(featureResult); + saveChangesRequired = true; + } + else if (cacheResult != null) + { + database.UserDetails.Remove(cacheResult.DbDetails); + saveChangesRequired = true; + } + } + } + catch (Exception) + { + // ignore exceptions when plugins behave badly + } + } + else + { + featureResult = cacheResult.Details; + } + + // apply feature results + if (featureResult != null) + { + result.SetExpiration(featureResult.ExpiresOn); + foreach (var value in featureResult.Details) + { + result.Details[value.Key] = value.Value; + } + } + } + + if (saveChangesRequired) + database.SaveChanges(); + + return result; + } + + public DetailsResult GetDetails(Device device) + { + var result = new DetailsResult(); + var saveChangesRequired = false; + + if (!UserService.CurrentAuthorization.HasAll(Claims.Device.Show, Claims.Device.ShowDetails)) + return result; + + var features = Plugins.GetPluginFeatures(typeof(DetailsProviderFeature)); + + if (features.Count == 0) + return result; + + var cache = device.DeviceDetails?.Where(d => d.Scope == DetailsScope).ToDictionary(d => d.Key, d => new { DbDetails = d, Details = JsonConvert.DeserializeObject(d.Value) }, StringComparer.OrdinalIgnoreCase); + + foreach (var feature in features) + { + var featureResult = default(DetailsResult); + if (!cache.TryGetValue(feature.Id, out var cacheResult) || cacheResult.Details.ExpiresOn < DateTime.Now || cacheResult.Details.GatheredOn < database.DiscoConfiguration.PluginDetailsCacheExpiration) + { + var timestamp = cacheResult?.Details.GatheredOn; + if (timestamp.HasValue && timestamp.Value < database.DiscoConfiguration.PluginDetailsCacheExpiration) + timestamp = null; + + try + { + var featureInstance = feature.CreateInstance(); + featureResult = featureInstance.GetDetails(database, device, timestamp); + + if (featureResult != null) + { + if (featureResult.ExpiresOn > DateTime.Now) + { + if (cacheResult == null) + database.DeviceDetails.Add(new DeviceDetail() { DeviceSerialNumber = device.SerialNumber, Scope = DetailsScope, Key = feature.Id, Value = JsonConvert.SerializeObject(featureResult) }); + else + cacheResult.DbDetails.Value = JsonConvert.SerializeObject(featureResult); + saveChangesRequired = true; + } + else if (cacheResult != null) + { + database.DeviceDetails.Remove(cacheResult.DbDetails); + saveChangesRequired = true; + } + } + } + catch (Exception) + { + // ignore exceptions when plugins behave badly + } + } + else + { + featureResult = cacheResult.Details; + } + + // apply feature results + if (featureResult != null) + { + result.SetExpiration(featureResult.ExpiresOn); + foreach (var value in featureResult.Details) + { + result.Details[value.Key] = value.Value; + } + } + } + + if (saveChangesRequired) + database.SaveChanges(); + + return result; + } + } +} diff --git a/Disco.Web/Areas/API/Controllers/UserController.cs b/Disco.Web/Areas/API/Controllers/UserController.cs index b8fd2d87..50f5be2c 100644 --- a/Disco.Web/Areas/API/Controllers/UserController.cs +++ b/Disco.Web/Areas/API/Controllers/UserController.cs @@ -6,11 +6,13 @@ using Disco.Services.Authorization; using Disco.Services.Documents; using Disco.Services.Interop; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Plugins.Features.DetailsProvider; using Disco.Services.Users; using Disco.Services.Web; using System; using System.IO; using System.Linq; +using System.Web; using System.Web.Mvc; namespace Disco.Web.Areas.API.Controllers @@ -186,5 +188,29 @@ namespace Disco.Web.Areas.API.Controllers return RedirectToAction(MVC.API.DocumentTemplatePackage.Generate(DocumentTemplatePackageId, userId)); } + public virtual ActionResult Photo(string userId) + { + if (string.IsNullOrEmpty(userId)) + throw new ArgumentNullException(nameof(userId)); + + userId = ActiveDirectory.ParseDomainAccountId(userId); + var user = UserService.GetUser(userId); + + if (user == null) + return HttpNotFound(); + + var service = new DetailsProviderService(Database); + + if (!service.HasUserPhoto(user)) + return HttpNotFound(); + + var photo = service.GetUserPhoto(user); + + if (photo == null) + return HttpNotFound(); + + return File(photo, "image/jpg"); + } + } } diff --git a/Disco.Web/ClientSource/Style/Device.css b/Disco.Web/ClientSource/Style/Device.css index 9ed47b94..4a0887ac 100644 --- a/Disco.Web/ClientSource/Style/Device.css +++ b/Disco.Web/ClientSource/Style/Device.css @@ -126,6 +126,14 @@ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWUlEQVQ4y6XRXWiSURgHcJsXa4WNNuuyiy6CoAupixERoXXhmljuxaJiFrVA1i72cVFCOSMt8rNt2YfGO5g5Z1NstWW+c4ZBq4QpqMkEbZDSCObAMprjdf90sIjxsgUdODd/zvmd5zwPCwDrf/aGB7q6utgmk8ngdruzVqt10eVyTWu1Wuk/AXK5vMpoNPpjsRgGbU8/9fbdH/J4PAuRSARKpfLKhoBYLG595nTCaDSZVjPp6TPbHQ5H0mAwfBeJRHXrAp0dna9JcqCguX2H/Xd+S625aLFYQBDE8XWBd+8/TI6Njc+vzcfGX4nLX4FOp5OuC0wGAlS53NzaPPAm2Gi32+H3+5tYJEl+pigKoVAIPp+PnpqaosPhMF1uHB2Px2mv14vya6VgMKhhHGN3d/dSMplENptFIpHA3NwcCoUCSqUSKqvScZVKBbPZHGQEFApFMZ1OI5PJIBqNrkD5fB40Ta8AlcrUajVsNpufEbh+42YxHEkh+/UbUqlZpGd/lAH8WTMzMzDd64d7NMAMDOobi/OpHqh6rqK9jcCvBQncQzK0Xm5DPn0BJ4lz6GgVIkedYAaamxqK0dEDePl4FziczehTsZGLs7BnNwdiwRac4lejvp6La83VzABv/8FF/qG9oD/WQS/fhNptHEw8rEJiuAo7ubXACAtH9m0Fu2YHxQzweEuEVIYnaiFmvQ04f1aItksi5KaP4ZFGjDB5GG/7j4LL5YYYgZYW2c/yiJbv6h/A0EvC4RjGiOsFnK4J+KgABmyjsDufL0skki8CgYCoXOLz+TWrwG+kXMkgQ6yv+QAAAABJRU5ErkJggg==) /*Images/Actions/unlocked.png*/; background-repeat: no-repeat; } +#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Photo_Container { + float: left; + padding-right: 2px; +} +#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Photo { + max-width: 48px; + height: auto; +} #Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags { font-size: 16px; } diff --git a/Disco.Web/ClientSource/Style/Device.less b/Disco.Web/ClientSource/Style/Device.less index 226eb35b..cead4c00 100644 --- a/Disco.Web/ClientSource/Style/Device.less +++ b/Disco.Web/ClientSource/Style/Device.less @@ -43,9 +43,9 @@ } } - & > tbody > tr > td:not(:last-child) { - border-right: 1px dashed #aaa; - } + & > tbody > tr > td:not(:last-child) { + border-right: 1px dashed #aaa; + } #Device_Show_Details { @@ -69,6 +69,17 @@ } #Device_Show_User { + + #Device_Show_User_Photo_Container { + float: left; + padding-right: 2px; + } + + #Device_Show_User_Photo { + max-width: 48px; + height: auto; + } + #Device_Show_User_Flags { font-size: 16px; diff --git a/Disco.Web/ClientSource/Style/Device.min.css b/Disco.Web/ClientSource/Style/Device.min.css index 5493e5a7..8767da3b 100644 --- a/Disco.Web/ClientSource/Style/Device.min.css +++ b/Disco.Web/ClientSource/Style/Device.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;}#layout_PageHeading #Device_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Device_Show_Status span.icon{margin-right:6px;}#Device_Show #Device_Show_Subjects{table-layout:fixed;}#Device_Show #Device_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div{position:relative;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Device_Show #Device_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Device_Show #Device_Show_Subjects #Device_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Name{font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Enrolled_Trusted{display:inline-block;height:16px;padding-left:16px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWUlEQVQ4y6XRXWiSURgHcJsXa4WNNuuyiy6CoAupixERoXXhmljuxaJiFrVA1i72cVFCOSMt8rNt2YfGO5g5Z1NstWW+c4ZBq4QpqMkEbZDSCObAMprjdf90sIjxsgUdODd/zvmd5zwPCwDrf/aGB7q6utgmk8ngdruzVqt10eVyTWu1Wuk/AXK5vMpoNPpjsRgGbU8/9fbdH/J4PAuRSARKpfLKhoBYLG595nTCaDSZVjPp6TPbHQ5H0mAwfBeJRHXrAp0dna9JcqCguX2H/Xd+S625aLFYQBDE8XWBd+8/TI6Njc+vzcfGX4nLX4FOp5OuC0wGAlS53NzaPPAm2Gi32+H3+5tYJEl+pigKoVAIPp+PnpqaosPhMF1uHB2Px2mv14vya6VgMKhhHGN3d/dSMplENptFIpHA3NwcCoUCSqUSKqvScZVKBbPZHGQEFApFMZ1OI5PJIBqNrkD5fB40Ta8AlcrUajVsNpufEbh+42YxHEkh+/UbUqlZpGd/lAH8WTMzMzDd64d7NMAMDOobi/OpHqh6rqK9jcCvBQncQzK0Xm5DPn0BJ4lz6GgVIkedYAaamxqK0dEDePl4FziczehTsZGLs7BnNwdiwRac4lejvp6La83VzABv/8FF/qG9oD/WQS/fhNptHEw8rEJiuAo7ubXACAtH9m0Fu2YHxQzweEuEVIYnaiFmvQ04f1aItksi5KaP4ZFGjDB5GG/7j4LL5YYYgZYW2c/yiJbv6h/A0EvC4RjGiOsFnK4J+KgABmyjsDufL0skki8CgYCoXOLz+TWrwG+kXMkgQ6yv+QAAAABJRU5ErkJggg==);background-repeat:no-repeat;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags{font-size:16px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i{cursor:default;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i>.details{display:none;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container{padding-top:4px;}#Device_Show #Device_Show_Subjects #Device_Show_Policies table.verticalHeadings>tbody>tr>td:first-child{width:120px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Aspects #Device_Show_Aspects_Model_Image{display:block;width:256px;height:256px;margin:0 auto;}#Device_Show #Device_Show_Subjects #Device_Show_Subjects_Actions>td{padding-top:4px;}#DeviceDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#DeviceDetailTabs #DeviceDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#DeviceDetailTabs #DeviceDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#DeviceDetailTabs #DeviceDetailTabItems>li>a{padding:5px 8px;}#DeviceDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li{background-color:#fff;padding:2px 0 2px 4px;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li:nth-child(odd),#Device_Show_Policies_Batch_Actions_Update_Dialog ul li:nth-child(odd){background-color:hsl(0,0%,98.5%);}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li.selected,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li.selected{background-color:#cddbec;font-weight:600;}#DeviceDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#DeviceDetailTab-DetailsContainer>table{border:solid 1px #f4f4f4;border-collapse:collapse;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#DeviceDetailTab-DetailsContainer>table>thead>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#DeviceDetailTab-DetailsContainer>table>tfoot>tr>th,#DeviceDetailTab-DetailsContainer>table>tfoot>tr>td{background-color:#f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{width:150px;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>td.pad{padding:10px 6px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition{position:relative;height:40px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span{position:absolute;display:block;height:40px;box-sizing:border-box;overflow-x:hidden;overflow-y:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#f4f4f4;padding:2px;line-height:18px;border:1px solid #cacaca;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .details{position:relative;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .freespace{position:absolute;top:0;height:40px;display:block;background-color:#fff;background:repeating-linear-gradient(45deg,#f4f4f4,#f4f4f4 10px,#fff 10px,#fff 20px);}#deviceShowResources #AttachmentsContainer{padding:0;}#deviceShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#deviceShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#deviceShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#deviceShowResources #Attachments div.attachmentOutput>a span.comments,#deviceShowResources #Attachments div.attachmentOutput>a span.author,#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#deviceShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#deviceShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#deviceShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#deviceShowResources #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;}#deviceShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Devices_Export .Devices_Export_Type_Target{margin-top:10px;display:none;}#Devices_Export #Devices_Export_Fields #Devices_Export_Fields_Defaults{font-size:.75em;}#Devices_Export #Devices_Export_Fields th{font-size:1.05em;}#Devices_Export #Devices_Export_Fields th span{margin-top:4px;font-size:.8em;}#Devices_Export_Download_Dialog{padding-top:20px;text-align:center;}#Devices_Export_Download_Dialog h4{margin-bottom:30px;}#Devices_Export_Download_Dialog a{margin-bottom:20px;}#Devices_Export_Exporting{padding-top:50px;text-align:center;}#Devices_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Devices_Import #ImportFile{width:96%;margin-bottom:8px;}#Devices_Import #Devices_Import_Documentation{width:700px;margin:20px auto;}#Devices_Import #Devices_Import_Documentation>table>tbody th:first-child{width:220px;}#Devices_Import_Completed_Dialog{padding:50px 0;text-align:center;}#Devices_Import_Completed_Dialog h3{margin-bottom:16px;}#Devices_Import_Completed_Dialog i{margin-right:10px;color:#60a917;}#Devices_Import_Loading_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Loading_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType>li>a>span:not(.ui-menu-icon){padding-right:16px;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType ul{z-index:1000;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td.headerIgnoreColumn{background-color:#fa6800;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td:not(.headerIgnoreColumn){background-color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerDeviceSerialNumber{border-top-color:#d1e6f7;border-bottom-color:#d1e6f7;background-color:#e2f0fa;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerIgnoreColumn{max-width:150px;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#ccc;}#Devices_Import_Parsing_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Parsing_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Review #Devices_Import_Review_Navigation{margin-top:15px;text-align:right;}#Devices_Import_Review #Devices_Import_Review_Navigation ul{display:inline-block;padding:0;border:1px solid #bbb;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li{display:inline-block;padding:3px 10px;margin:0;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionDetached{background-color:#ffd0cc;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionModified{background-color:#e2f0fa;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionAdded{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionUnchanged{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead tr:nth-child(2) th{padding-top:0;font-weight:normal;font-size:.9em;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.action{text-align:center;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td.action i:before{color:#e51400;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td{background-color:#ffe7e5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td.action i:before{content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td:nth-child(n+3){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td.action i:before{color:#1e6dab;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td{background-color:#f4f9fd;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td.action i:before{color:#60a917;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr:not(.actionUnchanged) td.actionUnchanged:nth-child(n+3):not(.headerDeviceSerialNumber){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError{color:#e51400;background-color:#fff1ef;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError span.errorMessage{display:none;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionModified{background-color:#e2f0fa !important;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceSerialNumber,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedDate,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedReason,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerModelId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerBatchId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerProfileId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerAssignedUserId{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody span.smallMessage{color:inherit;} \ 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;}#layout_PageHeading #Device_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Device_Show_Status span.icon{margin-right:6px;}#Device_Show #Device_Show_Subjects{table-layout:fixed;}#Device_Show #Device_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div{position:relative;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Device_Show #Device_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Device_Show #Device_Show_Subjects #Device_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Name{font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Enrolled_Trusted{display:inline-block;height:16px;padding-left:16px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWUlEQVQ4y6XRXWiSURgHcJsXa4WNNuuyiy6CoAupixERoXXhmljuxaJiFrVA1i72cVFCOSMt8rNt2YfGO5g5Z1NstWW+c4ZBq4QpqMkEbZDSCObAMprjdf90sIjxsgUdODd/zvmd5zwPCwDrf/aGB7q6utgmk8ngdruzVqt10eVyTWu1Wuk/AXK5vMpoNPpjsRgGbU8/9fbdH/J4PAuRSARKpfLKhoBYLG595nTCaDSZVjPp6TPbHQ5H0mAwfBeJRHXrAp0dna9JcqCguX2H/Xd+S625aLFYQBDE8XWBd+8/TI6Njc+vzcfGX4nLX4FOp5OuC0wGAlS53NzaPPAm2Gi32+H3+5tYJEl+pigKoVAIPp+PnpqaosPhMF1uHB2Px2mv14vya6VgMKhhHGN3d/dSMplENptFIpHA3NwcCoUCSqUSKqvScZVKBbPZHGQEFApFMZ1OI5PJIBqNrkD5fB40Ta8AlcrUajVsNpufEbh+42YxHEkh+/UbUqlZpGd/lAH8WTMzMzDd64d7NMAMDOobi/OpHqh6rqK9jcCvBQncQzK0Xm5DPn0BJ4lz6GgVIkedYAaamxqK0dEDePl4FziczehTsZGLs7BnNwdiwRac4lejvp6La83VzABv/8FF/qG9oD/WQS/fhNptHEw8rEJiuAo7ubXACAtH9m0Fu2YHxQzweEuEVIYnaiFmvQ04f1aItksi5KaP4ZFGjDB5GG/7j4LL5YYYgZYW2c/yiJbv6h/A0EvC4RjGiOsFnK4J+KgABmyjsDufL0skki8CgYCoXOLz+TWrwG+kXMkgQ6yv+QAAAABJRU5ErkJggg==);background-repeat:no-repeat;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Photo_Container{float:left;padding-right:2px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Photo{max-width:48px;height:auto;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags{font-size:16px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i{cursor:default;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i>.details{display:none;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container{padding-top:4px;}#Device_Show #Device_Show_Subjects #Device_Show_Policies table.verticalHeadings>tbody>tr>td:first-child{width:120px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Aspects #Device_Show_Aspects_Model_Image{display:block;width:256px;height:256px;margin:0 auto;}#Device_Show #Device_Show_Subjects #Device_Show_Subjects_Actions>td{padding-top:4px;}#DeviceDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#DeviceDetailTabs #DeviceDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#DeviceDetailTabs #DeviceDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#DeviceDetailTabs #DeviceDetailTabItems>li>a{padding:5px 8px;}#DeviceDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li{background-color:#fff;padding:2px 0 2px 4px;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li:nth-child(odd),#Device_Show_Policies_Batch_Actions_Update_Dialog ul li:nth-child(odd){background-color:hsl(0,0%,98.5%);}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li.selected,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li.selected{background-color:#cddbec;font-weight:600;}#DeviceDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#DeviceDetailTab-DetailsContainer>table{border:solid 1px #f4f4f4;border-collapse:collapse;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#DeviceDetailTab-DetailsContainer>table>thead>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#DeviceDetailTab-DetailsContainer>table>tfoot>tr>th,#DeviceDetailTab-DetailsContainer>table>tfoot>tr>td{background-color:#f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{width:150px;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>td.pad{padding:10px 6px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition{position:relative;height:40px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span{position:absolute;display:block;height:40px;box-sizing:border-box;overflow-x:hidden;overflow-y:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#f4f4f4;padding:2px;line-height:18px;border:1px solid #cacaca;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .details{position:relative;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .freespace{position:absolute;top:0;height:40px;display:block;background-color:#fff;background:repeating-linear-gradient(45deg,#f4f4f4,#f4f4f4 10px,#fff 10px,#fff 20px);}#deviceShowResources #AttachmentsContainer{padding:0;}#deviceShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#deviceShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#deviceShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#deviceShowResources #Attachments div.attachmentOutput>a span.comments,#deviceShowResources #Attachments div.attachmentOutput>a span.author,#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#deviceShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#deviceShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#deviceShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#deviceShowResources #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;}#deviceShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Devices_Export .Devices_Export_Type_Target{margin-top:10px;display:none;}#Devices_Export #Devices_Export_Fields #Devices_Export_Fields_Defaults{font-size:.75em;}#Devices_Export #Devices_Export_Fields th{font-size:1.05em;}#Devices_Export #Devices_Export_Fields th span{margin-top:4px;font-size:.8em;}#Devices_Export_Download_Dialog{padding-top:20px;text-align:center;}#Devices_Export_Download_Dialog h4{margin-bottom:30px;}#Devices_Export_Download_Dialog a{margin-bottom:20px;}#Devices_Export_Exporting{padding-top:50px;text-align:center;}#Devices_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Devices_Import #ImportFile{width:96%;margin-bottom:8px;}#Devices_Import #Devices_Import_Documentation{width:700px;margin:20px auto;}#Devices_Import #Devices_Import_Documentation>table>tbody th:first-child{width:220px;}#Devices_Import_Completed_Dialog{padding:50px 0;text-align:center;}#Devices_Import_Completed_Dialog h3{margin-bottom:16px;}#Devices_Import_Completed_Dialog i{margin-right:10px;color:#60a917;}#Devices_Import_Loading_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Loading_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType>li>a>span:not(.ui-menu-icon){padding-right:16px;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType ul{z-index:1000;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td.headerIgnoreColumn{background-color:#fa6800;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td:not(.headerIgnoreColumn){background-color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerDeviceSerialNumber{border-top-color:#d1e6f7;border-bottom-color:#d1e6f7;background-color:#e2f0fa;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerIgnoreColumn{max-width:150px;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#ccc;}#Devices_Import_Parsing_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Parsing_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Review #Devices_Import_Review_Navigation{margin-top:15px;text-align:right;}#Devices_Import_Review #Devices_Import_Review_Navigation ul{display:inline-block;padding:0;border:1px solid #bbb;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li{display:inline-block;padding:3px 10px;margin:0;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionDetached{background-color:#ffd0cc;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionModified{background-color:#e2f0fa;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionAdded{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionUnchanged{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead tr:nth-child(2) th{padding-top:0;font-weight:normal;font-size:.9em;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.action{text-align:center;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td.action i:before{color:#e51400;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td{background-color:#ffe7e5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td.action i:before{content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td:nth-child(n+3){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td.action i:before{color:#1e6dab;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td{background-color:#f4f9fd;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td.action i:before{color:#60a917;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr:not(.actionUnchanged) td.actionUnchanged:nth-child(n+3):not(.headerDeviceSerialNumber){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError{color:#e51400;background-color:#fff1ef;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError span.errorMessage{display:none;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionModified{background-color:#e2f0fa !important;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceSerialNumber,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedDate,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedReason,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerModelId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerBatchId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerProfileId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerAssignedUserId{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody span.smallMessage{color:inherit;} \ No newline at end of file diff --git a/Disco.Web/ClientSource/Style/Images/UnknownPhoto.png b/Disco.Web/ClientSource/Style/Images/UnknownPhoto.png new file mode 100644 index 0000000000000000000000000000000000000000..5803a670ec8a0c4347c753d96aad9eca305f75a4 GIT binary patch literal 9481 zcmV+kCHC5hP)D|409q z-{31;TuGkC;H~~Rzr-)`a*ZaWOQSM@Bxhwa)dcDg#|-GOvH%9 zf|!t?OHVo=V1xlQ3ckqw>dM>A^8&opxAO1xNzFV9^sF=qkPs0Q=h9_JEO;@laZ}9D zA_QUv^cfLG{QAlVp9kQr{wLlQs}?V$jmqKB?4Wb$OJypta;S-ka_KWn(I!L@5TX#a zxd0}3WaSk%HF&FYd|BTMOPnOZpa6wo$dJJL*;H8##wu)LEnj3M(lCq4U5g?lKzN2t zWJm5^dFJr0Mja}2%lt)hZ;LxPiME#=64OW1p-qdBfPj$DN>+ffA0>aPLFrLbk9-@q zVtUD6t=@N2O5SS7T0Gt3ZtFMG`wrSdL~iM{4N4L;v6Z}-h}eP^5Hdv@l|!4pk9dq| zs9wAB)td~w)uTL~^ycI)G=iWIU<;Llki~P^J#!YR_e~fP0T2?R8PH>zwj-A*eBU#A zOYT~^c+-HlDiWA4$FH2{4wRL+)J3#uTjNjeRWnOhK$pqg$by%ucfyc13l@519Z19@ zw7(|znRvzA6gF?gnBPxc+2(E(VlUG$q{l2rSmr2;%;Y{agExC+v#(q$XVA2mM{y35 z2i6AI0Fqaj-&-*^i{!moe=^{uIWP*v7CmN}V=A|GJM zfM%Uz7W9B2-(`*-=Lz1j@~N9Z@>cKS0b_2rp-2i{pJ^6Y%Ao^AVC|qQVK{_|lFV;tvhPBLxu1FLsWJa`X;{EMW!C<|5r6^e*9vn*J;&R0jA{IY8`|p_*{;%$@olguKuu@@ceYm}0gBohBm5*^>gc6sE*} zbi)~)e-w`M4BusrTkKzTcp=HJ#xI_9wfzIl?YZGs2t!(QX_sVfz=+sFXDsn#a%#YM z;Faal5D*b^!ajl~W{EcZhlvJn^{4c!=a{yszW@^9oZ|SD~tIG4`&>Z z)8BiBV+fb?pJ^0FFhBdiD<@g<{wplxa+ezQ0KwR7A>}l8*kNeFOLDMW;9|$(Whq%= z?O?)XjuCPz=NaX|CoH1SAD&q79(a{G-eTT~i(=q{8Q! z+|wEi5knR&d3B6SxhxtwbTG#sc-4f0r{9pwE_;`qSgDEVv%@A^Y_pTAY+2s4{cc>U zV3=H`6AbMf?ymh^ZKvq|2n7|nf{KD$oBud^<{pw|Vd8xd_IZqceviB$l&dn-{+#)7!NP`m3wWL0F ziYtyQ(JY}~ZI&hxykFGJSbLRT<}kmk*h%-}T)q;I3dqQ)<|MU{)C|6W7F#)VF+D)t zKY`$xcXSDI!)}0)Rod9$hhqo6#8K49f;%q1FIz}M%q;6pgxEo$-g!`07#^VH{q+u@ z5i}~lK*88I@=#Yh^k-r1B1=JybxAe|Dgv1fmr1}<5Qa9qbmAm$_2q`pkq$%TL}#%l zcfPDew)7b7#h>RPjm{lNV12r=9E{?jH%*$_zFyJsBx>k|ABkt_;tFu%71j+~v=`)n z${mviS_ty?NmJW5L68Tt3L!!fqfltCH^4ZSD^pm#cgt!YLFM7IvNEY`WU1g~69%5S zErqF|juJEh+Np!NIcj3lu$Tn155bp@k#8$2H*jIqKde&cFK*;z(ou`)y84lFbVc zJW?|S&##1OCxG6cl~WbjQ;xKW_nAN_^ONN;2t9BT%c+P*E$#2-OPsH^RLYg<$21(r zOcZ!o2wN~J!u4H62A8T;TRa#k%ig4=XQotZxW1b>y#}t@y6?q$bcg$(7)1c7&dUy_1B*4He1 zQUa%tKIN!y6<(FUS16QGqX_~J_=d?djBACiELWLTQ}%Ny$sV3`Ix60m?@tzZ50lpx zt}Ree6}fV49=UXh=Tge>DL_T9IX_w8ea@xXuQi*f%AV9%IaL$Jc<>!iqvOHFd5;u? zMx zcUK2p)ds4Pld(S;P9QPBlhr2dy@H1=2BxzsodH#JM$l^ob{=7W^H?W}IF ze~MjsslS`UmZ6ghP2hhm$mb>zyguJ{vkTd`y(`xz8o()e=St@B)ky?zhi~oA(^g^e z!I9dZiARJMd4+wsF3b7^g13@z#wSPjCwIQI)k8}K#!8OysO(Il!+>uxpt~RFr~ySP zp0`e^>)Z!`Jp8h)NmN_-Hhr^amr)IR%W0PKK&Cc4_Mulso;bM6J8Qq>mz1QL$f<5Fo~ ziXvo|TR2)ee?}?fkV-b;+r4u3;ky$17au>!i#uS+TX}SqfDXbIYm7*MHUS|mS}YRT z1AD5HUR9O2Uj9@qmzURYKXZ^*ckrhkKb3aQoo9&H;R+EutaF*m#7r^GOg?(c1%#4o zkQ!H^O4g8)^1tMBlMUWyBNSVCyQ>@1#jJCg5sDsDPFbgbPE}lnDNP`7`=g|sqzw=D z(hmNx^2dcy)}dMPuL_~h76XJ1A%es~ z8`?^fsZH=xFuHUr>RB){&3#biB+h;u@jvb~6AvEnHf=+dq$crKj-0jZL6j;Oetv68 z3R`3EF7wbqU)JHwlDfnP2XrtDos1x}ZDl4U@YJuIu^Q@*4AhWV@40Jq;0EbXB#+ev zzG+Sv7Fo`ZwwQdRYUV0jHC3g?F-j~krPxkU99l8RmAjS>{;CdXa^uPx|4wOP;7E?C zL~Qls6ty<3Ua_-Bl(!znRUO*c%awm)E-SVz2|!J_Q62TRo65LAn!JTu;NyJxrUDOm z2PiJ?!DH^v=9uz0^b!B%&e2T<-pZev-%)HZDn)PCXLhSYs%5)=4|dltAJ*j@DtIfG&HE*eS5=>Q0RCSpe_Pve#_`m~{X%o*bqbuBl1D zGDy>z1%`PBJVx|ahkYT>hUA$ntO(d-y+%FVbK&)%8fX0FEQZHeC;aU50lbLw8GMQz zuIB1zoa0uelJ1*|Ei@!d)8Pl4BSg+UAHeHphe}fTMqFv|woS*cT&bJqDb5lggFQ{| zx(U>F=$l>5h8;3!@=4s{k)>ro)4rE!mN>_E(|~)M8-e-8-7L!{+jb_Ag?%)D{ z!M3|h>CEA)ZOC)tHlWQM9ky+GD9FPTcMlpsiyvi$ zxq#3rb1de00iJYuu@9VBQc3eTiyWax$TSPI@~wL5Vy_Y3;X7#C%j^&Ll6k_~Ip{YT zcvIX>ZOa&hY_kE((4j+{9$gfQ9R_T0h1hO)G+wSN7|gA-8Qk>XsZee$cMz9L*by;X z6fGCpKG{}<+sm_#JMC2cn;X3FSAp7YcUOh|TTlV5!T{dF3>R*4@cwAYytjGM*xriY z4fN^T`PYXXBOLPWGY`v8Qgd$NTAqyY!Q&U@CI#=oAel>!%)dWek%sAZO|3oDsA^UI zz?fLBep-H$$JEvP`!@}E51dSXj@R;<*1cW2HqlZQz{+hqSyJY5$}Uk=g)nBD7;Tb2 zlCQ`YSN`|JgSYzg<~`;o!ud|CO-P%>JL?12GvBjJo(^r#Uqno_p|0?ID<7Ch@K&c- z=5O*_5YnNIqGLJX>ZzXH)pa+g0mkm1*Ulamje$SpUvhS3b7H_-o#h?8QQnwFW^K#Y zCHWTGy4Gw{)8r##Y+j+*naYmxZ9x9yZv$WE6Fju?z2`i5t4H||ui>bu>_AjvM;fI` zR)E+nq0UXnzLd6rQM2Q$QYuDmCdK*kD}0@It(%nve658v)=A0dMtv{6kKpiKpAZzXq8-Splfkp~axnrC&+xm~?}@Jqyj5X=zsm>lJf{m@c{sH4 z#&~pWqTkflKHk=)J4-hmkO~MHGgy686g&PNpXAE5Z~wjy@K#^PFY_xb_@`rw2lj`a zmM0vi_ZA&Ot7=jz^i-do>mn3}0exqnt0~QiG&MPJMrNf)Rt47hFdtp{(xHO4`YL{h zyP5V608~%HmS^9Ur{IMIwCEzlmDX-)42%Oph71`x>q@AoY&kC}M~LaVCV_3f%X?Qo zcL?CEPIDh0F;BP!Y!g}Nr~$9qsAd|7EX^qU z&K2IqU#_ej7Du7LE*){rfU)6^LK9o5 zqtajC181CbmQn*?_H}F*y9zwYf969g>jwbd>fh!!If3}|CuB^RE2Tv@-$)O{pEN>S|1FZfuCN<%nzi*2=%Sf#9u%`~-i@QIqEh z{_zu^&NR71`nxKc#c*gr~+z;ibkuq z@tKwW4FGTTrTn`26(OWWXu%`jS7y9et$w5eHaMm-2SrNf&NLxyI!RToDX$FsU0%d#e=CF^48g*f%YpW}B{9=cBOR{xRtfLdzNv4z0mfP0dAtm*^# zs$3{(6}%=!xy3Y7d0XucYk7)gYTnqjlit)3_oWwreB<~Kff2vG^3Sgsywz!bgI^2i z(xpW!S6Ne8sA?Li^yU#-O*2xmTRQu!hhg2>uH2-c)O3zg`+YO!GnHRmdbpJ@^2U|H zHGucPG5smIuVbd9ON)@ej!?)F9i2nxF18d$jSW;Lj?p;DU21~k@?3c{_I*KA8E++G zSxrqX+$JB1lYTuQLg4@KmX&k+1n+^a{&RI-haO!zHkd75m&Aq?Nxoc~S}L7dm6XO! zJ$1Q-8Ot8Ci(lQ3@=EDs(J)otFY$(z+PR~REoSD!a$koT3tpF5=9p)ODcXdDDBB1T z5EACh3EqkssTs@Gq^NagFU%N20Mz<#sTq&%|F)`eSJgE*fDPSw9e-zElDGOk-rr${ zDLS<2GRG`!U_{>zZHt}tzA;gn=rpn-^^4qgJFYAx&bUtg%IYbOnigJI991ov*K|eh ze5E!(#10C6Waa-=QK~I^ul|_%wUAjlv}x02fhAkBZ;>uS6}#eB<@+0@!D>|{rn$gf z|JMSgOvC+8ru2Aai(5eDSK-nMUh$L6;$=~)$#;S$MDU?BuiA^+zDpLT=+UM{i)j{} z_6Owz%GJe1)I@LDUzEqGQWG-6_yf!3-yJ_&xjH|&x;IT#h8dPWb}?}8>YaN6Z*|eU zC193-fRHv*d3z1u4NEl@*^rtwMn1b&A09W?(wab2r58pjqe4_=sggU`OL@CCR0ZDb zqoIp}IevCeYHLo&JpoH>(k8SOh=NEQd09mf-LLagRIupSk>< zcx80oQabZ6ay2bJ$C{*&7Q;|(-IL_W+u;a90{d#jIfF4|$EGj3!e!7nxxLD(6t8-d z>W=fDHDgsPe^FI&smRwj)h;+8=yQ|=Ub5QWi^F)QaD+8_7X1<1L;QxOG+)^byxVcwWU58G ztoGibllOs0B{`y@;_urzU*19|dD3=$dUZdk)KX6ML_*c|m=X(~Wk|Y|WtVMXixIqH zceQ;{dW2Kw?Fl+(@rss)E}@0D=n;;W zHS(F(%#w<96!z43>Ai8PA7yJN`V1AxWdg5-OcN?*&^h9!w* zP|`k+^s`Mi^MlpWu(s0Q|6aGyyd1JhLp`qOwlm)UQ#G3i>H};lDPT33tdd;r3(`RY zt3NhgZBNq9+7Hv9B*=3-ar%uYEh49qpVm=Ps+6QjE&Wt>1X2?iD^F(q38ZC(Ep$hD z;cxlTef7>%IFrg2242cH#)0<&X&0)dt;JKdrnvbCKq~TG`|yF46Q9Y|mGLrFMx{Da z#d!bS56(?Pf0a9|)y-esx|!qxVLbKCUM59I1aIQOG2qE@35v$oA~>lg`tH+8KZdr_ z(L$`}toDwGLnKHZrplfREKkN^V)TDb;jc7a{r2{P0Vq z{`klk@E+`PXKIL>W@4vDH;)l|!DQwu>zW+Ii~GwVfGSCtYLqLf>BBNL;V)hVwhlNd z^9$-^u`J1L1UjoPT6wI=+jisy8J=~88-+WXqP*!?Xbe@P!|iFEqG?T_vUOTh$x6*0Q~LUdP)d}&e;2O=P<$n| z+ms7-xVrv9)ov6@e>bXxN-ihV0+{i$4BzH;S%y~aIwEopETu%=j3tiBjG6Jiw|mvX zuWR`XvQ!vj->OOJpp}%=znsA7+;aQ;i(t}BTV$abypCADfrd^Jg+Vd2n^o!!d=rFH zVNc4fKyG7NHSyP8&@43>u2dXN*`}2vJW~^In#$z*ltc)K;hxpjN>mG;ybkLw>SRv5 zI;!jB&DgU#MVD0J3zhS#7L0GR9GixUZn>SdI8I<3(xMD+Ic#yCr}1jV?)xb=;RJ2! z!Q);@4P(R9|Lh;crB}Dw{9sB8X^f@xaXMX0O+9wMxB9H6=sGqw%`_zw()@xn$uCT? z0WX(nw(G(B8EB7zPVzn?8XbJ#kO2k%XDaQ8a$TU+RWhoj(7=Z4V)>sa?_#E+zNTVg z%B9DpO>e&PEuhjIzA3z?psjJbPhd z$dd!j8t2%-IH{nxgeVWZtQI_K8m`hU$VtxYrJ_8j09Kr5H8tlBO~dPMFxR21)%l|P z0j~I71q{JS|F%Sei`+`H5-wXu!a$EEsR-b5YnfV-9YX zFT?B!1{x&(+JOU{-7r~L69C&>;Hr%$G5|vac}vCS>04=$^K>Be8I&HXZl zjJh_dG6!q}t4=OzV69<`ZEmr=c*!F~_jsOC&Rd$e;01K|GuV|Fx4HI|z)I5)WpND5wC?qN3d5S$jKf@Qfi z<8k}e2ACTD7bm~n_Szww=@B)cHec%X0=bt*F^zvGYDAq|bhtUmQ#+(HY z=mtybmh6{zXqq$T--bj`BYC=XDQ4GH$y|dvn>_?NO^;iAFJWg)4cet_6V|Qd8JK4- zZA(c@L*4YV0fRBqo!sds8rZ0`*P2ETXZ8VzX|$GRA3*Q!GK7AGocFUTm)_dUsnYfx zojHOGJRObVCltnp!*x^b{KnLbY#daI+t*^s_X6gPuzseZ6N8dbG7Uwnv_Dj_nFec# ziHjh4sJ5T@vbm&4=$Co}>c?Yc-`gn-WZxaYgY>xjlYPYwapkZc6`9L!(+s(Qpv>r- z(FSR#a>~%>s=D&MkBmk#*6&bLcG()6FvKh(9-jUFCw4YeO=KrdaYXFV_3XD|`eSLxy+gP^g=SB##*7J5Hk}phQd`C{ zUgJqjfMWE$GaqPQWrL9onO|=JQ3|=zpIV;o(J)BC*rY7TH*YJ%y70Z0Y7X-@?&a8a zPLB)NBNpOx!Ir5tL0J3hx!>2{k*BzFYG}dxf_c5|qgCeO<{+3m5(uRs9%5&nWRp-_ zfRlU({&NMw-K4nBpfryo%Dt-3B9dYmBW8wbx0XV) zec|$>PkbW&%kT%B;R2hd5}!#Pas^FHKinFvJ#+rTZAWiEc`WpvO290a_&xzI^2Ta_ zVuYr%o!oaF*n*f|w9Jnz#1Jr+31t(@cp$KqwZ zEX#{a-I<`>RtZnW3Q;;(lsn}}euBnT?zVG0z&tB%qM4@Bc49@D`w19uhG&q3C>~A4 zkr@qTTdt}r>LM37$1^;|c`mcb;FKBrqMz+JF{ehD9?&FfT9W zh|@NaNnwzVHF#G2Y*jjignos%PY=g`kEcx(2U~3MH0N0-B4USaHn_?qE^?W5HtC;A z_MkDRg*Ma7v&2yrSYVbOf$e&3v&0?T!E!Q{v=`*X%+qqZ+*9uymO7o}S%fXCQw$w- z&BBj}%jO%g8irSSh9`KMi(F!x5krRTu)`LcY||$`mF&aZoEBPi>CvOdv>oXa(x%N6 zM>x)HyoeLY5#8;oTX_NV4oNRg`^B>ns+5`JbZn0CBDREe&Y27S!PW4bJjLTY$z`?~ zGGsuXA=~t`Q68tvHQ4IYY4>)E4qc|0qC=MsZ8~)5ag-NwH@BH((+j)p@E+#q(XJde zIoxQke4X0%u@(%TVu$nQv3{}{T@9X;$9RGZY_P+S5km$H?98tb5&D$5PDgiIb!e9$UY-rnbXP zxyV@_=P5QBGGb(*OJy%6IkoE&x;;Pt(_;G(GRbROnVe>Uc@~&qiDkX0XLQeWk5A8c zd*O0#y4AL4yUf`0v+OazF6W($;ZU@5c(6a%+*se<+IsQ|eKiPoSmPW|bB=X}42g27 zi-^&u_PD!m-!J~@G&>9In7b6hE*;Vsafu^Ln_0R{C!J0&=(aky%^zJ@oasV-K3opT zQ7E=Y+n3Kh`Sc|{jCSH-Fk~Qowpil==htGqO^JM)V>18>$r~7>EM-gT5rov z4V+W_BBeof^%_bYHv&o2vVR{zvl)m==d!4t_%FeF|?A+9JhSD^1EHG=W zWJ`xhkSG(x!SvM0h2He^Y}i%d>`ZH_GpkiNEedJn=e)%!2G%`UWj&_RCQ7#B&7?or z8uSNS(a!e9#@Z8?TS<_pIE>Yhk#zuR;IYGiAyL|EdrDvbi*|!-_x3ubX!mt$@6@&z$l+tp1=Gd`;G0G$hx6mu}P)ti*J(EP3jxqY| z)9ZaPIwm%8GD=3tD2k#ejEPAkk(h|cx_~|dwiz(6Enb|uVI1s%nxE6kdgfFjTebnt zzX#cpj6|UjO>9I^B8fKMs#{}1!Jv)Cv_v$TB*>;8#`!(U-$$t}J9S{ITMsexKP~w- z5k;ozE!&$LI>VvF8TjK8#@bu7lAt9q>GZicKi99(rw(mB^|PFKp5CosI*xZTa3hs) b|F{1S{%j*#DRa0500000NkvXXu0mjfQ51Rm literal 0 HcmV?d00001 diff --git a/Disco.Web/ClientSource/Style/Job.css b/Disco.Web/ClientSource/Style/Job.css index 59460721..08b79d5f 100644 --- a/Disco.Web/ClientSource/Style/Job.css +++ b/Disco.Web/ClientSource/Style/Job.css @@ -202,6 +202,14 @@ #Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table > tbody > tr > td:first-child { width: 62px; } +#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo_Container { + float: left; + padding-right: 4px; +} +#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo { + height: auto; + max-width: 96px; +} #Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags { margin: 4px 0; font-size: 16px; diff --git a/Disco.Web/ClientSource/Style/Job.less b/Disco.Web/ClientSource/Style/Job.less index b9bcbcec..da94817c 100644 --- a/Disco.Web/ClientSource/Style/Job.less +++ b/Disco.Web/ClientSource/Style/Job.less @@ -73,9 +73,9 @@ } } - & > tbody > tr > td:not(:last-child) { - border-right: 1px dashed #aaa; - } + & > tbody > tr > td:not(:last-child) { + border-right: 1px dashed #aaa; + } #Job_Show_Job { #Job_Show_Job_Type { @@ -83,7 +83,7 @@ text-transform: uppercase; font-size: 16px; } - + & > table { table-layout: fixed; } @@ -113,10 +113,10 @@ vertical-align: middle; } - & > tbody > tr > td:first-child { - font-weight: @FontWeightBodyBold; - width: 60px; - } + & > tbody > tr > td:first-child { + font-weight: @FontWeightBodyBold; + width: 60px; + } } } @@ -166,6 +166,17 @@ } #Job_Show_User { + + #Job_Show_User_Photo_Container { + float: left; + padding-right: 4px; + } + + #Job_Show_User_Photo { + height: auto; + max-width: 96px; + } + #Job_Show_User_Flags { margin: 4px 0; font-size: 16px; diff --git a/Disco.Web/ClientSource/Style/Job.min.css b/Disco.Web/ClientSource/Style/Job.min.css index d40851b1..2ddee7f1 100644 --- a/Disco.Web/ClientSource/Style/Job.min.css +++ b/Disco.Web/ClientSource/Style/Job.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;}#layout_PageHeading #Job_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Job_Show_Status span.icon{margin-right:6px;}#layout_PageHeading #Job_Show_QueueStatus{display:inline-block;float:right;height:50px;font-size:.6em;}#Jobs_Index_MyJobs{margin-bottom:10px;}#Jobs_Index_MyJobs .jobTable>h3,#Jobs_Index_StaleJobs .jobTable>h3{color:#555;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:normal;font-size:12px;margin:8px 0 20px 20px !important;text-transform:uppercase;}#Job_List{padding-top:20px;}#Job_List>.jobTable>h3{margin:30px 0 50px 20px !important;}#Job_Show #Job_Show_Subjects{table-layout:fixed;}#Job_Show #Job_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div{position:relative;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Job_Show #Job_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>h2{text-transform:uppercase;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_1,#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_2{padding-left:16px;font-weight:600;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update{margin-left:16px;font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update_Dialog{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates{padding-bottom:6px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td{vertical-align:middle;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td:first-child{font-weight:600;width:60px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_GenerateDocument_Container{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Device>div{padding-left:102px;min-height:100px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Model_Image{position:absolute;left:0;top:0;height:96px;width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details{float:left;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar{float:right;border-left:1px dashed #ddd;padding-left:4px;margin-right:2px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar_Details_Button,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar_Details_Button{font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table>tbody>tr>td:first-child{width:62px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions>td{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions #Job_Show_Device_Actions{padding-left:111px;}#jobDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#jobDetailTabs #jobDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#jobDetailTabs #jobDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#jobDetailTabs #jobDetailTabItems>li>a{padding:5px 8px;}#jobDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#jobShowResources #CommentsContainer{padding:0;width:375px;}#jobShowResources #Comments{height:300px;padding:0;border:1px solid #ccc;background-color:#fff;}#jobShowResources #Comments div.commentOutput{height:249px;overflow:auto;background-color:#fafafa;color:#000;}#jobShowResources #Comments div.commentOutput>div{padding:3px;margin:4px 6px;border-bottom:1px solid #ccc;}#jobShowResources #Comments div.commentOutput>div span.author{color:#444;display:block;font-weight:600;font-size:.95em;float:left;}#jobShowResources #Comments div.commentOutput>div span.timestamp{display:block;float:right;font-size:.9em;font-style:italic;}#jobShowResources #Comments div.commentOutput>div div.comment{clear:both;display:block;margin-left:4px;}#jobShowResources #Comments div.commentOutput>div div.comment p{line-height:1.2em;padding-bottom:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment h1,#jobShowResources #Comments div.commentOutput>div div.comment h2,#jobShowResources #Comments div.commentOutput>div div.comment h3,#jobShowResources #Comments div.commentOutput>div div.comment h4,#jobShowResources #Comments div.commentOutput>div div.comment h5{font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:600;font-size:14px;margin:2px 0 !important;}#jobShowResources #Comments div.commentOutput>div div.comment hr{margin-top:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment code{font-size:.9em;}#jobShowResources #Comments div.commentOutput>div:hover span.remove{opacity:.5;}#jobShowResources #Comments div.commentOutput>div span.remove{font-size:1.2em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#jobShowResources #Comments div.commentOutput>div span.remove:hover{opacity:1;}#jobShowResources #Comments div.commentOutput>div:last-child{border-bottom:none;}#jobShowResources #Comments.cannotAddLogs div.commentOutput{height:300px;}#jobShowResources #Comments div.commentInput{border-top:1px solid #ccc;height:40px;padding:5px;}#jobShowResources #Comments div.commentInput textarea.commentInput{border:0;padding:0;margin:0;width:325px;height:40px;min-height:40px;overflow:auto;float:left;resize:none;}#jobShowResources #Comments div.commentInput span.action{color:#333;font-size:1.5em;display:block;margin:0;cursor:pointer;float:left;border:1px solid #fff;padding:.5em;}#jobShowResources #Comments div.commentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Comments div.commentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Comments div.commentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#jobShowResources #AttachmentsContainer{padding:0;}#jobShowResources #Attachments{position:relative;height:300px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#fff;}#jobShowResources #Attachments div.attachmentOutput{position:relative;height:249px;overflow:auto;}#jobShowResources #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;}#jobShowResources #Attachments div.attachmentOutput>a span.comments,#jobShowResources #Attachments div.attachmentOutput>a span.author,#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#jobShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#jobShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#jobShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#jobShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#jobShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#jobShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:300px;}#jobShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}#jobShowResources #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;}#jobShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Job_Show_Job_Actions_AddQueue_Dialog{height:400px;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div:hover{background-color:#f4f4f4;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected,#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected:hover{background-color:#eee;}#Job_Show_Job_Actions_AddQueue_Dialog .details{display:none;position:absolute;left:280px;top:30px;}#Job_Show_Job_Actions_AddQueue_Dialog .details h4{margin-bottom:4px;}#Job_Show_Job_Actions_AddQueue_Dialog .details>div{margin:5px 0;}#Job_Show_Job_Actions_AddQueue_Dialog .details select{min-width:270px;}#Job_Show_Job_Actions_AddQueue_Dialog .details textarea{min-width:270px;height:100px;}#jobDetailTab-Queues #jobQueues{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#jobDetailTab-Queues #jobQueues td{border:solid 1px #d8d8d8;background-color:#fff;}#jobDetailTab-Queues #jobQueues th{background-color:#eee;border:solid 1px #d8d8d8;}#jobDetailTab-Queues #jobQueues i.fa-edit{float:right;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#jobDetailTab-Queues #jobQueues i.fa-edit:hover{color:#5e8cc2;}#jobDetailTab-Queues #jobQueues td:hover i.fa-edit{display:inline-block;}#jobDetailTab-Queues #jobQueues th.name{width:200px;}#jobDetailTab-Queues #jobQueues th.sla{width:130px;}#jobDetailTab-Queues #jobQueues tr.removed td{background-color:#f4f4f4;}#jobDetailTab-Queues #jobQueues td.name{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.name .fa-stack{line-height:1.6em;}#jobDetailTab-Queues #jobQueues td.added .when,#jobDetailTab-Queues #jobQueues td.removed .when{font-style:italic;margin-top:4px;font-size:.9em;}#jobDetailTab-Queues #jobQueues td.added .commentsRaw,#jobDetailTab-Queues #jobQueues td.removed .commentsRaw{display:none;}#jobDetailTab-Queues #jobQueues td.removed.na{vertical-align:middle;text-align:center;}#jobDetailTab-Queues #jobQueues td.sla{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.sla.overdue{color:#e51400;}#jobDetailTab-Queues>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#Job_Show_Queues_Actions_EditAddedComment_Dialog h4,#Job_Show_Queues_Actions_EditRemovedComment_Dialog h4,#Job_Show_Queues_Actions_EditSla_Dialog h4{margin-bottom:4px;}#Job_Show_Queues_Actions_EditAddedComment_Dialog_Comment{width:280px;}#Job_Show_Queues_Actions_EditRemovedComment_Dialog_Comment{width:280px;}#jobComponents{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobComponents td{border:solid 1px #d8d8d8;background-color:#fff;}#jobComponents th{background-color:#eee;border:solid 1px #d8d8d8;}#jobComponents tr th.actions{width:18px;}#jobComponents tr input.description{width:400px;}#jobComponents tr input.cost{width:150px;}#jobComponents tr span.remove{font-size:1.5em;color:#e51400;cursor:pointer;opacity:.5;}#jobComponents tr span.remove:hover{opacity:1;}#jobComponents 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);}#jobComponents tr .totalCost{font-weight:600;}#jobWarrantyDetails{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobWarrantyDetails td{border:solid 1px #d8d8d8;background-color:#fff;}#jobWarrantyDetails th{background-color:#eee;border:solid 1px #d8d8d8;}#jobWarrantyDetails tr th{width:200px;text-align:right;}#jobNonWarrantyFinance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyFinance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyFinance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyFinance tr th{width:200px;text-align:right;}#jobNonWarrantyRepairs{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyRepairs td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyRepairs th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyRepairs tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyInsurance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyInsurance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyInsurance tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance tr td textarea{width:400px;}#jobFlags{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#jobFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#jobFlags tr th{width:200px;text-align:right;}#warrantyJobForm #warrantyDisclosedInformation table{font-size:.9em;}#warrantyJobForm #warrantyDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#warrantyJobForm #warrantyDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#warrantyJobForm #warrantyDisclosedInformation table td{padding:2px;}#warrantyJobFaultDescription #FaultDescription{width:600px;height:250px;}#publishJobAttachments{border:1px solid #ccc;background-color:#fff;position:relative;max-height:249px;overflow:auto;}#publishJobAttachments>a{display:block;float:left;height:48px;width:261px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#publishJobAttachments>a span.comments,#publishJobAttachments>a span.author,#publishJobAttachments>a span.timestamp{display:block;float:left;width:188px;overflow:hidden;height:16px;}#publishJobAttachments>a span.author{color:#888;width:150px;}#publishJobAttachments>a span.timestamp{color:#888;font-style:italic;}#publishJobAttachments>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#publishJobAttachments>a span.icon img{height:48px;width:48px;}#publishJobAttachments>a span.icon img.loading{display:none;}#publishJobAttachments>a input.select{display:block;float:left;line-height:48px;margin-right:2px;width:20px;}#publishJobAttachments>a:hover{background-color:#ededed;border:1px solid #ccc;}#publishJobAttachments>a:hover span.remove{opacity:.5;}#publishJobAttachments>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#publishJobAttachments>a span.remove:hover{opacity:1;}#submitDialog{padding-top:50px;text-align:center;}#submitDialog i{margin-right:10px;color:#1e6dab;}#repairJobForm #repairDisclosedInformation table{font-size:.9em;}#repairJobForm #repairDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#repairJobForm #repairDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#repairJobForm #repairDisclosedInformation table td{padding:2px;}#repairJobRepairDescription #RepairDescription{width:600px;height:250px;}#createJob_Container{margin:0 -20px;}#createJob_Container img.modelImage{width:64px;height:64px;}#createJob_Container .createJob_Component{margin:0 10px;padding:5px 0;border-bottom:1px dashed #ccc;}#createJob_Container .createJob_Component:last-child{border-bottom:none;}#createJob_Container #createJob_Type{border:1px solid #ccc;background-color:#f2f2f2;padding:2px 4px;}#createJob_Container #createJob_SubTypes{margin:-1px 0 0 20px;border:1px solid #ccc;border-top:none;padding:2px 4px;background-color:#f2f2f2;}#createJob_Container #createJob_SubTypes .createJob_SubType{display:none;}#createJob_Container #createJob_Type li,#createJob_Container #createJob_SubTypes li{margin:2px 0;padding:0 0 0 4px;}#createJob_Container #createJob_Type li i,#createJob_Container #createJob_SubTypes li i{display:none;cursor:default;font-weight:normal;}#createJob_Container #createJob_Type li:hover i,#createJob_Container #createJob_SubTypes li:hover i{display:inline-block;}#createJob_Container #createJob_Type li.highlight,#createJob_Container #createJob_SubTypes li.highlight{background-color:#cddbec;font-weight:600;color:#000;}#createJob_Container #createJob_Type li.highlight i,#createJob_Container #createJob_SubTypes li.highlight i{display:inline-block;}#createJob_Container #createJob_SubTypes.isQuickLog li i{display:none;}#createJob_Container #createJob_CommentsContainer #Comments{width:100%;min-width:500px;}#createJob_Container #createJob_QuickLogAutoCloseContainer h3{margin-bottom:4px;}#createJob_Container #createJob_QuickLogAutoCloseContainer input{margin-left:4px;}#createJob_Container #createJob_QuickLogTaskTimeContainer{display:none;margin:4px 0 0 25px;padding:4px 4px;background-color:#f2f2f2;border-left:4px solid #d8d8d8;}#createJob_Container #createJob_QuickLogTaskTimeContainer h4{display:inline-block;padding-right:10px;}#createJob_Container #createJob_QuickLogTaskTimeContainer label{margin-right:15px;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutesContainer{display:none;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutes{width:50px;}#createJobRedirect h1{margin-top:60px !important;margin-bottom:60px;}#createJobRedirect>div{text-align:right;}#createJobRedirect>div i{margin-right:10px;} \ 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;}#layout_PageHeading #Job_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Job_Show_Status span.icon{margin-right:6px;}#layout_PageHeading #Job_Show_QueueStatus{display:inline-block;float:right;height:50px;font-size:.6em;}#Jobs_Index_MyJobs{margin-bottom:10px;}#Jobs_Index_MyJobs .jobTable>h3,#Jobs_Index_StaleJobs .jobTable>h3{color:#555;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:normal;font-size:12px;margin:8px 0 20px 20px !important;text-transform:uppercase;}#Job_List{padding-top:20px;}#Job_List>.jobTable>h3{margin:30px 0 50px 20px !important;}#Job_Show #Job_Show_Subjects{table-layout:fixed;}#Job_Show #Job_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div{position:relative;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Job_Show #Job_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>h2{text-transform:uppercase;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_1,#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_2{padding-left:16px;font-weight:600;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update{margin-left:16px;font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update_Dialog{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates{padding-bottom:6px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td{vertical-align:middle;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td:first-child{font-weight:600;width:60px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_GenerateDocument_Container{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Device>div{padding-left:102px;min-height:100px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Model_Image{position:absolute;left:0;top:0;height:96px;width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details{float:left;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar{float:right;border-left:1px dashed #ddd;padding-left:4px;margin-right:2px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar_Details_Button,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar_Details_Button{font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table>tbody>tr>td:first-child{width:62px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo_Container{float:left;padding-right:4px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo{height:auto;max-width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions>td{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions #Job_Show_Device_Actions{padding-left:111px;}#jobDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#jobDetailTabs #jobDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#jobDetailTabs #jobDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#jobDetailTabs #jobDetailTabItems>li>a{padding:5px 8px;}#jobDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#jobShowResources #CommentsContainer{padding:0;width:375px;}#jobShowResources #Comments{height:300px;padding:0;border:1px solid #ccc;background-color:#fff;}#jobShowResources #Comments div.commentOutput{height:249px;overflow:auto;background-color:#fafafa;color:#000;}#jobShowResources #Comments div.commentOutput>div{padding:3px;margin:4px 6px;border-bottom:1px solid #ccc;}#jobShowResources #Comments div.commentOutput>div span.author{color:#444;display:block;font-weight:600;font-size:.95em;float:left;}#jobShowResources #Comments div.commentOutput>div span.timestamp{display:block;float:right;font-size:.9em;font-style:italic;}#jobShowResources #Comments div.commentOutput>div div.comment{clear:both;display:block;margin-left:4px;}#jobShowResources #Comments div.commentOutput>div div.comment p{line-height:1.2em;padding-bottom:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment h1,#jobShowResources #Comments div.commentOutput>div div.comment h2,#jobShowResources #Comments div.commentOutput>div div.comment h3,#jobShowResources #Comments div.commentOutput>div div.comment h4,#jobShowResources #Comments div.commentOutput>div div.comment h5{font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:600;font-size:14px;margin:2px 0 !important;}#jobShowResources #Comments div.commentOutput>div div.comment hr{margin-top:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment code{font-size:.9em;}#jobShowResources #Comments div.commentOutput>div:hover span.remove{opacity:.5;}#jobShowResources #Comments div.commentOutput>div span.remove{font-size:1.2em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#jobShowResources #Comments div.commentOutput>div span.remove:hover{opacity:1;}#jobShowResources #Comments div.commentOutput>div:last-child{border-bottom:none;}#jobShowResources #Comments.cannotAddLogs div.commentOutput{height:300px;}#jobShowResources #Comments div.commentInput{border-top:1px solid #ccc;height:40px;padding:5px;}#jobShowResources #Comments div.commentInput textarea.commentInput{border:0;padding:0;margin:0;width:325px;height:40px;min-height:40px;overflow:auto;float:left;resize:none;}#jobShowResources #Comments div.commentInput span.action{color:#333;font-size:1.5em;display:block;margin:0;cursor:pointer;float:left;border:1px solid #fff;padding:.5em;}#jobShowResources #Comments div.commentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Comments div.commentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Comments div.commentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#jobShowResources #AttachmentsContainer{padding:0;}#jobShowResources #Attachments{position:relative;height:300px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#fff;}#jobShowResources #Attachments div.attachmentOutput{position:relative;height:249px;overflow:auto;}#jobShowResources #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;}#jobShowResources #Attachments div.attachmentOutput>a span.comments,#jobShowResources #Attachments div.attachmentOutput>a span.author,#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#jobShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#jobShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#jobShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#jobShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#jobShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#jobShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:300px;}#jobShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}#jobShowResources #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;}#jobShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Job_Show_Job_Actions_AddQueue_Dialog{height:400px;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div:hover{background-color:#f4f4f4;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected,#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected:hover{background-color:#eee;}#Job_Show_Job_Actions_AddQueue_Dialog .details{display:none;position:absolute;left:280px;top:30px;}#Job_Show_Job_Actions_AddQueue_Dialog .details h4{margin-bottom:4px;}#Job_Show_Job_Actions_AddQueue_Dialog .details>div{margin:5px 0;}#Job_Show_Job_Actions_AddQueue_Dialog .details select{min-width:270px;}#Job_Show_Job_Actions_AddQueue_Dialog .details textarea{min-width:270px;height:100px;}#jobDetailTab-Queues #jobQueues{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#jobDetailTab-Queues #jobQueues td{border:solid 1px #d8d8d8;background-color:#fff;}#jobDetailTab-Queues #jobQueues th{background-color:#eee;border:solid 1px #d8d8d8;}#jobDetailTab-Queues #jobQueues i.fa-edit{float:right;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#jobDetailTab-Queues #jobQueues i.fa-edit:hover{color:#5e8cc2;}#jobDetailTab-Queues #jobQueues td:hover i.fa-edit{display:inline-block;}#jobDetailTab-Queues #jobQueues th.name{width:200px;}#jobDetailTab-Queues #jobQueues th.sla{width:130px;}#jobDetailTab-Queues #jobQueues tr.removed td{background-color:#f4f4f4;}#jobDetailTab-Queues #jobQueues td.name{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.name .fa-stack{line-height:1.6em;}#jobDetailTab-Queues #jobQueues td.added .when,#jobDetailTab-Queues #jobQueues td.removed .when{font-style:italic;margin-top:4px;font-size:.9em;}#jobDetailTab-Queues #jobQueues td.added .commentsRaw,#jobDetailTab-Queues #jobQueues td.removed .commentsRaw{display:none;}#jobDetailTab-Queues #jobQueues td.removed.na{vertical-align:middle;text-align:center;}#jobDetailTab-Queues #jobQueues td.sla{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.sla.overdue{color:#e51400;}#jobDetailTab-Queues>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#Job_Show_Queues_Actions_EditAddedComment_Dialog h4,#Job_Show_Queues_Actions_EditRemovedComment_Dialog h4,#Job_Show_Queues_Actions_EditSla_Dialog h4{margin-bottom:4px;}#Job_Show_Queues_Actions_EditAddedComment_Dialog_Comment{width:280px;}#Job_Show_Queues_Actions_EditRemovedComment_Dialog_Comment{width:280px;}#jobComponents{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobComponents td{border:solid 1px #d8d8d8;background-color:#fff;}#jobComponents th{background-color:#eee;border:solid 1px #d8d8d8;}#jobComponents tr th.actions{width:18px;}#jobComponents tr input.description{width:400px;}#jobComponents tr input.cost{width:150px;}#jobComponents tr span.remove{font-size:1.5em;color:#e51400;cursor:pointer;opacity:.5;}#jobComponents tr span.remove:hover{opacity:1;}#jobComponents 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);}#jobComponents tr .totalCost{font-weight:600;}#jobWarrantyDetails{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobWarrantyDetails td{border:solid 1px #d8d8d8;background-color:#fff;}#jobWarrantyDetails th{background-color:#eee;border:solid 1px #d8d8d8;}#jobWarrantyDetails tr th{width:200px;text-align:right;}#jobNonWarrantyFinance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyFinance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyFinance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyFinance tr th{width:200px;text-align:right;}#jobNonWarrantyRepairs{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyRepairs td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyRepairs th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyRepairs tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyInsurance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyInsurance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyInsurance tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance tr td textarea{width:400px;}#jobFlags{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#jobFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#jobFlags tr th{width:200px;text-align:right;}#warrantyJobForm #warrantyDisclosedInformation table{font-size:.9em;}#warrantyJobForm #warrantyDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#warrantyJobForm #warrantyDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#warrantyJobForm #warrantyDisclosedInformation table td{padding:2px;}#warrantyJobFaultDescription #FaultDescription{width:600px;height:250px;}#publishJobAttachments{border:1px solid #ccc;background-color:#fff;position:relative;max-height:249px;overflow:auto;}#publishJobAttachments>a{display:block;float:left;height:48px;width:261px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#publishJobAttachments>a span.comments,#publishJobAttachments>a span.author,#publishJobAttachments>a span.timestamp{display:block;float:left;width:188px;overflow:hidden;height:16px;}#publishJobAttachments>a span.author{color:#888;width:150px;}#publishJobAttachments>a span.timestamp{color:#888;font-style:italic;}#publishJobAttachments>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#publishJobAttachments>a span.icon img{height:48px;width:48px;}#publishJobAttachments>a span.icon img.loading{display:none;}#publishJobAttachments>a input.select{display:block;float:left;line-height:48px;margin-right:2px;width:20px;}#publishJobAttachments>a:hover{background-color:#ededed;border:1px solid #ccc;}#publishJobAttachments>a:hover span.remove{opacity:.5;}#publishJobAttachments>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#publishJobAttachments>a span.remove:hover{opacity:1;}#submitDialog{padding-top:50px;text-align:center;}#submitDialog i{margin-right:10px;color:#1e6dab;}#repairJobForm #repairDisclosedInformation table{font-size:.9em;}#repairJobForm #repairDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#repairJobForm #repairDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#repairJobForm #repairDisclosedInformation table td{padding:2px;}#repairJobRepairDescription #RepairDescription{width:600px;height:250px;}#createJob_Container{margin:0 -20px;}#createJob_Container img.modelImage{width:64px;height:64px;}#createJob_Container .createJob_Component{margin:0 10px;padding:5px 0;border-bottom:1px dashed #ccc;}#createJob_Container .createJob_Component:last-child{border-bottom:none;}#createJob_Container #createJob_Type{border:1px solid #ccc;background-color:#f2f2f2;padding:2px 4px;}#createJob_Container #createJob_SubTypes{margin:-1px 0 0 20px;border:1px solid #ccc;border-top:none;padding:2px 4px;background-color:#f2f2f2;}#createJob_Container #createJob_SubTypes .createJob_SubType{display:none;}#createJob_Container #createJob_Type li,#createJob_Container #createJob_SubTypes li{margin:2px 0;padding:0 0 0 4px;}#createJob_Container #createJob_Type li i,#createJob_Container #createJob_SubTypes li i{display:none;cursor:default;font-weight:normal;}#createJob_Container #createJob_Type li:hover i,#createJob_Container #createJob_SubTypes li:hover i{display:inline-block;}#createJob_Container #createJob_Type li.highlight,#createJob_Container #createJob_SubTypes li.highlight{background-color:#cddbec;font-weight:600;color:#000;}#createJob_Container #createJob_Type li.highlight i,#createJob_Container #createJob_SubTypes li.highlight i{display:inline-block;}#createJob_Container #createJob_SubTypes.isQuickLog li i{display:none;}#createJob_Container #createJob_CommentsContainer #Comments{width:100%;min-width:500px;}#createJob_Container #createJob_QuickLogAutoCloseContainer h3{margin-bottom:4px;}#createJob_Container #createJob_QuickLogAutoCloseContainer input{margin-left:4px;}#createJob_Container #createJob_QuickLogTaskTimeContainer{display:none;margin:4px 0 0 25px;padding:4px 4px;background-color:#f2f2f2;border-left:4px solid #d8d8d8;}#createJob_Container #createJob_QuickLogTaskTimeContainer h4{display:inline-block;padding-right:10px;}#createJob_Container #createJob_QuickLogTaskTimeContainer label{margin-right:15px;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutesContainer{display:none;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutes{width:50px;}#createJobRedirect h1{margin-top:60px !important;margin-bottom:60px;}#createJobRedirect>div{text-align:right;}#createJobRedirect>div i{margin-right:10px;} \ No newline at end of file diff --git a/Disco.Web/ClientSource/Style/User.css b/Disco.Web/ClientSource/Style/User.css index 2c37d361..40df60c3 100644 --- a/Disco.Web/ClientSource/Style/User.css +++ b/Disco.Web/ClientSource/Style/User.css @@ -94,9 +94,6 @@ padding-top: 0; height: 100%; } -#User_Show #User_Show_Subjects > tbody > tr > td > div { - position: relative; -} #User_Show #User_Show_Subjects > tbody > tr > td > div div.status { margin-top: 2px; padding-top: 2px; @@ -111,6 +108,20 @@ #User_Show #User_Show_Subjects #User_Show_Details { width: 330px; } +#User_Show #User_Show_Subjects #User_Show_Details.hasPhoto { + width: 450px; +} +#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Photo_Container { + float: left; + padding-right: 4px; +} +#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Photo { + max-height: 192px; + width: auto; +} +#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings { + width: auto; +} #User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings > tbody > tr > td:first-child { width: 104px; font-weight: 600; diff --git a/Disco.Web/ClientSource/Style/User.less b/Disco.Web/ClientSource/Style/User.less index 1d03ada2..3581450c 100644 --- a/Disco.Web/ClientSource/Style/User.less +++ b/Disco.Web/ClientSource/Style/User.less @@ -26,7 +26,6 @@ height: 100%; & > div /* Extra DIV added for FireFox TD relative position incompatibility */ { - position: relative; div.status { margin-top: 2px; @@ -40,14 +39,30 @@ } } - & > tbody > tr > td:not(:last-child) { - border-right: 1px dashed #aaa; - } + & > tbody > tr > td:not(:last-child) { + border-right: 1px dashed #aaa; + } #User_Show_Details { width: 330px; + &.hasPhoto { + width: 450px; + } + + #User_Show_Details_Photo_Container { + float: left; + padding-right: 4px; + } + + #User_Show_Details_Photo { + max-height: 192px; + width: auto; + } + table.verticalHeadings { + width: auto; + & > tbody > tr > td:first-child { width: 104px; font-weight: @FontWeightBodyBold; diff --git a/Disco.Web/ClientSource/Style/User.min.css b/Disco.Web/ClientSource/Style/User.min.css index acedb9f8..96d12d30 100644 --- a/Disco.Web/ClientSource/Style/User.min.css +++ b/Disco.Web/ClientSource/Style/User.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;}#layout_PageHeading #User_Show_Flags{display:inline-block;float:right;height:50px;font-size:.6em;}#layout_PageHeading #User_Show_Flags>i{cursor:default;}#layout_PageHeading #User_Show_Flags>i>.details{display:none;}#User_Show #User_Show_Subjects{table-layout:fixed;}#User_Show #User_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#User_Show #User_Show_Subjects>tbody>tr>td>div{position:relative;}#User_Show #User_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#User_Show #User_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#User_Show #User_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#User_Show #User_Show_Subjects #User_Show_Details{width:330px;}#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Identity_Id{font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container{padding-top:4px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Actions{margin-top:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment{border-bottom:1px dashed #ddd;padding:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment td:first-child{width:90px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment img.User_Show_AssignedDevices_CurrentAssignment_Image{float:left;width:64px;height:64px;margin-right:6px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment div.User_Show_AssignedDevices_CurrentAssignment_Details{float:left;}#User_Show #User_Show_Subjects #User_Show_Subjects_Actions>td{padding-top:4px;}#UserDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#UserDetailTabs #UserDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#UserDetailTabs #UserDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#UserDetailTabs #UserDetailTabItems>li>a{padding:5px 8px;}#UserDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#UserDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#User_Show_Details_Actions_AddFlag_Dialog{height:400px;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div:hover{background-color:#f4f4f4;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div.selected,#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div.selected:hover{background-color:#eee;}#User_Show_Details_Actions_AddFlag_Dialog .details{display:none;position:absolute;left:280px;top:1em;}#User_Show_Details_Actions_AddFlag_Dialog .details h4{margin-bottom:4px;}#User_Show_Details_Actions_AddFlag_Dialog .details textarea{min-width:280px;height:200px;}#UserDetailTab-Flags #userFlags{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#UserDetailTab-Flags #userFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#UserDetailTab-Flags #userFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#UserDetailTab-Flags #userFlags i.fa-edit{position:absolute;top:0;right:0;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#UserDetailTab-Flags #userFlags i.fa-edit:hover{color:#5e8cc2;}#UserDetailTab-Flags #userFlags td:hover i.fa-edit{display:inline-block;}#UserDetailTab-Flags #userFlags th.name{width:200px;}#UserDetailTab-Flags #userFlags tr.removed td{background-color:#f4f4f4;}#UserDetailTab-Flags #userFlags td.name{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.name .fa-stack{line-height:1.6em;}#UserDetailTab-Flags #userFlags td.added,#UserDetailTab-Flags #userFlags td.removed{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.added .expressionResult,#UserDetailTab-Flags #userFlags td.removed .expressionResult{margin-top:4px;font-style:italic;}#UserDetailTab-Flags #userFlags td.comments{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.comments .editable{position:relative;}#UserDetailTab-Flags #userFlags td.comments .commentsRaw{display:none;}#UserDetailTab-Flags #userFlags td.removed.na{vertical-align:middle;text-align:center;}#UserDetailTab-Flags>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#User_Show_Flags_Actions_EditComments_Dialog h4{margin-bottom:4px;}#User_Show_Flags_Actions_EditComments_Dialog_Comments{width:280px;}#UserDetailTab-Authorization #UserDetailTab-AuthorizationContainer{background-color:#fff;border:1px solid #ccc;}#UserDetailTab-Authorization #UserDetailTab-Authorization_ClaimsTree_Container{width:50%;float:left;padding:6px 10px 6px 4px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_ClaimsTree_Container>span.smallMessage:last-child{display:block;text-align:right;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership{width:40%;float:right;padding:6px 10px;border-left:1px dashed #ccc;border-bottom:1px dashed #ccc;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership #UserDetailTab-Authorization_Membership_Roles{margin-bottom:10px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership #UserDetailTab-Authorization_Membership_Groups_Container>span.smallMessage:last-child{display:block;text-align:right;}#UserDetailTab-Authorization #UserDetailTab-Authorization_NoAccess{width:50%;float:left;padding:6px 10px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_NoAccess h3{margin-bottom:10px;}#userShowResources #AttachmentsContainer{padding:0;}#userShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#userShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#userShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#userShowResources #Attachments div.attachmentOutput>a span.comments,#userShowResources #Attachments div.attachmentOutput>a span.author,#userShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#userShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#userShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#userShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#userShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#userShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#userShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#userShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#userShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#userShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#userShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:162px;}#userShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#userShowResources #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;}#userShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#userShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#userShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments{margin-top:6px;background-color:#fff;line-height:1.3;border:1px solid #ddd;max-height:300px;overflow-y:auto;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment{display:block;padding:4px;cursor:pointer;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment:not(:last-child){border-bottom:1px dashed #ddd;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment:hover{background-color:#f4f4f4;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment tr:first-child td{width:68px;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment td:first-child{width:90px;font-weight:600;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment img.CreateJob_Assignment_Image{width:64px;height:64px;} \ 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;}#layout_PageHeading #User_Show_Flags{display:inline-block;float:right;height:50px;font-size:.6em;}#layout_PageHeading #User_Show_Flags>i{cursor:default;}#layout_PageHeading #User_Show_Flags>i>.details{display:none;}#User_Show #User_Show_Subjects{table-layout:fixed;}#User_Show #User_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#User_Show #User_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#User_Show #User_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#User_Show #User_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#User_Show #User_Show_Subjects #User_Show_Details{width:330px;}#User_Show #User_Show_Subjects #User_Show_Details.hasPhoto{width:450px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Photo_Container{float:left;padding-right:4px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Photo{max-height:192px;width:auto;}#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings{width:auto;}#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Identity_Id{font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container{padding-top:4px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Actions{margin-top:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment{border-bottom:1px dashed #ddd;padding:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment td:first-child{width:90px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment img.User_Show_AssignedDevices_CurrentAssignment_Image{float:left;width:64px;height:64px;margin-right:6px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment div.User_Show_AssignedDevices_CurrentAssignment_Details{float:left;}#User_Show #User_Show_Subjects #User_Show_Subjects_Actions>td{padding-top:4px;}#UserDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#UserDetailTabs #UserDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#UserDetailTabs #UserDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#UserDetailTabs #UserDetailTabItems>li>a{padding:5px 8px;}#UserDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#UserDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#User_Show_Details_Actions_AddFlag_Dialog{height:400px;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div:hover{background-color:#f4f4f4;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div.selected,#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div.selected:hover{background-color:#eee;}#User_Show_Details_Actions_AddFlag_Dialog .details{display:none;position:absolute;left:280px;top:1em;}#User_Show_Details_Actions_AddFlag_Dialog .details h4{margin-bottom:4px;}#User_Show_Details_Actions_AddFlag_Dialog .details textarea{min-width:280px;height:200px;}#UserDetailTab-Flags #userFlags{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#UserDetailTab-Flags #userFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#UserDetailTab-Flags #userFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#UserDetailTab-Flags #userFlags i.fa-edit{position:absolute;top:0;right:0;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#UserDetailTab-Flags #userFlags i.fa-edit:hover{color:#5e8cc2;}#UserDetailTab-Flags #userFlags td:hover i.fa-edit{display:inline-block;}#UserDetailTab-Flags #userFlags th.name{width:200px;}#UserDetailTab-Flags #userFlags tr.removed td{background-color:#f4f4f4;}#UserDetailTab-Flags #userFlags td.name{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.name .fa-stack{line-height:1.6em;}#UserDetailTab-Flags #userFlags td.added,#UserDetailTab-Flags #userFlags td.removed{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.added .expressionResult,#UserDetailTab-Flags #userFlags td.removed .expressionResult{margin-top:4px;font-style:italic;}#UserDetailTab-Flags #userFlags td.comments{vertical-align:middle;}#UserDetailTab-Flags #userFlags td.comments .editable{position:relative;}#UserDetailTab-Flags #userFlags td.comments .commentsRaw{display:none;}#UserDetailTab-Flags #userFlags td.removed.na{vertical-align:middle;text-align:center;}#UserDetailTab-Flags>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#User_Show_Flags_Actions_EditComments_Dialog h4{margin-bottom:4px;}#User_Show_Flags_Actions_EditComments_Dialog_Comments{width:280px;}#UserDetailTab-Authorization #UserDetailTab-AuthorizationContainer{background-color:#fff;border:1px solid #ccc;}#UserDetailTab-Authorization #UserDetailTab-Authorization_ClaimsTree_Container{width:50%;float:left;padding:6px 10px 6px 4px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_ClaimsTree_Container>span.smallMessage:last-child{display:block;text-align:right;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership{width:40%;float:right;padding:6px 10px;border-left:1px dashed #ccc;border-bottom:1px dashed #ccc;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership #UserDetailTab-Authorization_Membership_Roles{margin-bottom:10px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_Membership #UserDetailTab-Authorization_Membership_Groups_Container>span.smallMessage:last-child{display:block;text-align:right;}#UserDetailTab-Authorization #UserDetailTab-Authorization_NoAccess{width:50%;float:left;padding:6px 10px;}#UserDetailTab-Authorization #UserDetailTab-Authorization_NoAccess h3{margin-bottom:10px;}#userShowResources #AttachmentsContainer{padding:0;}#userShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#userShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#userShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#userShowResources #Attachments div.attachmentOutput>a span.comments,#userShowResources #Attachments div.attachmentOutput>a span.author,#userShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#userShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#userShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#userShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#userShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#userShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#userShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#userShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#userShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#userShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#userShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:162px;}#userShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#userShowResources #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;}#userShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#userShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#userShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments{margin-top:6px;background-color:#fff;line-height:1.3;border:1px solid #ddd;max-height:300px;overflow-y:auto;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment{display:block;padding:4px;cursor:pointer;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment:not(:last-child){border-bottom:1px dashed #ddd;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment:hover{background-color:#f4f4f4;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment tr:first-child td{width:68px;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment td:first-child{width:90px;font-weight:600;}#User_Show_Details_Actions_CreateJob_Dialog #CreateJob_Assignments li.CreateJob_Assignment img.CreateJob_Assignment_Image{width:64px;height:64px;} \ No newline at end of file diff --git a/Disco.Web/Controllers/DeviceController.cs b/Disco.Web/Controllers/DeviceController.cs index dba79073..37f449cb 100644 --- a/Disco.Web/Controllers/DeviceController.cs +++ b/Disco.Web/Controllers/DeviceController.cs @@ -5,7 +5,7 @@ using Disco.Models.UI.Device; using Disco.Services; using Disco.Services.Authorization; using Disco.Services.Devices.Exporting; -using Disco.Services.Plugins; +using Disco.Services.Plugins.Features.DetailsProvider; using Disco.Services.Plugins.Features.UIExtension; using Disco.Services.Users; using Disco.Services.Web; @@ -205,9 +205,16 @@ namespace Disco.Web.Controllers Database.Configuration.LazyLoadingEnabled = true; m.Device = Database.Devices - .Include("DeviceModel").Include("DeviceProfile").Include("DeviceBatch").Include("DeviceDetails") - .Include("DeviceUserAssignments.AssignedUser.UserFlagAssignments").Include("AssignedUser.UserFlagAssignments").Include("DeviceCertificates") - .Include("DeviceAttachments.TechUser").Include("DeviceAttachments.DocumentTemplate") + .Include("DeviceModel") + .Include("DeviceProfile") + .Include("DeviceBatch") + .Include("DeviceDetails") + .Include("DeviceUserAssignments.AssignedUser.UserFlagAssignments") + .Include("AssignedUser.UserFlagAssignments") + .Include("AssignedUser.UserDetails") + .Include("DeviceCertificates") + .Include("DeviceAttachments.TechUser") + .Include("DeviceAttachments.DocumentTemplate") .FirstOrDefault(d => d.SerialNumber == id); if (m.Device == null) @@ -262,6 +269,9 @@ namespace Disco.Web.Controllers m.DeviceProfileWirelessProfileProviders = m.Device.DeviceProfile.GetWirelessProfileProviders().ToList(); } + // Populate Custom Details + m.PopulateDetails(Database); + // UI Extensions UIExtensions.ExecuteExtensions(this.ControllerContext, m); diff --git a/Disco.Web/Controllers/JobController.cs b/Disco.Web/Controllers/JobController.cs index 6742e6e6..89b73b90 100644 --- a/Disco.Web/Controllers/JobController.cs +++ b/Disco.Web/Controllers/JobController.cs @@ -9,6 +9,7 @@ using Disco.Services.Jobs.JobLists; using Disco.Services.Jobs.JobQueues; using Disco.Services.Jobs.Statistics; using Disco.Services.Logging; +using Disco.Services.Plugins.Features.DetailsProvider; using Disco.Services.Plugins.Features.RepairProvider; using Disco.Services.Plugins.Features.UIExtension; using Disco.Services.Plugins.Features.WarrantyProvider; @@ -298,9 +299,21 @@ namespace Disco.Web.Controllers var m = new Models.Job.ShowModel(); m.Job = Database.Jobs - .Include("Device.DeviceModel").Include("Device.DeviceBatch").Include("DeviceHeldTechUser").Include("DeviceReadyForReturnTechUser").Include("DeviceReturnedTechUser") - .Include("OpenedTechUser").Include("ClosedTechUser").Include("JobType").Include("JobSubTypes").Include("User.UserFlagAssignments").Include("JobLogs.TechUser") - .Include("JobAttachments.TechUser").Include("JobAttachments.DocumentTemplate") + .Include("Device.DeviceModel") + .Include("Device.DeviceBatch") + .Include("Device.DeviceDetails") + .Include("DeviceHeldTechUser") + .Include("DeviceReadyForReturnTechUser") + .Include("DeviceReturnedTechUser") + .Include("OpenedTechUser") + .Include("ClosedTechUser") + .Include("JobType") + .Include("JobSubTypes") + .Include("User.UserFlagAssignments") + .Include("User.UserDetails") + .Include("JobLogs.TechUser") + .Include("JobAttachments.TechUser") + .Include("JobAttachments.DocumentTemplate") .FirstOrDefault(j => j.Id == id.Value); if (m.Job == null) @@ -364,6 +377,9 @@ namespace Disco.Web.Controllers m.LocationOptions = ManagedJobList.OpenJobsTable(j => j).Items.Cast().JobLocationReferences(Database.DiscoConfiguration.JobPreferences.LocationList).ToList(); } + // Populate Custom Details + m.PopulateDetails(Database); + // UI Extensions UIExtensions.ExecuteExtensions(this.ControllerContext, m); diff --git a/Disco.Web/Controllers/UserController.cs b/Disco.Web/Controllers/UserController.cs index 8e9a7801..4b78416c 100644 --- a/Disco.Web/Controllers/UserController.cs +++ b/Disco.Web/Controllers/UserController.cs @@ -4,6 +4,7 @@ using Disco.Services; using Disco.Services.Authorization; using Disco.Services.Authorization.Roles; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Plugins.Features.DetailsProvider; using Disco.Services.Plugins.Features.UIExtension; using Disco.Services.Users; using Disco.Services.Users.UserFlags; @@ -56,10 +57,12 @@ namespace Disco.Web.Controllers .Include("DeviceUserAssignments.Device.DeviceModel") .Include("DeviceUserAssignments.Device.DeviceProfile") .Include("DeviceUserAssignments.Device.DeviceBatch") + .Include("DeviceUserAssignments.Device.DeviceDetails") .Include("UserAttachments.TechUser") .Include("UserAttachments.DocumentTemplate") .Include("UserFlagAssignments.AddedUser") .Include("UserFlagAssignments.RemovedUser") + .Include("UserDetails") .FirstOrDefault(um => um.UserId == id); if (m.User == null) @@ -110,6 +113,9 @@ namespace Disco.Web.Controllers m.DocumentTemplatePackages = m.User.AvailableDocumentTemplatePackages(Database, UserService.CurrentUser); } + // Populate Custom Details + m.PopulateDetails(Database); + // UI Extensions UIExtensions.ExecuteExtensions(this.ControllerContext, m); diff --git a/Disco.Web/Disco.Web.csproj b/Disco.Web/Disco.Web.csproj index e62dfaae..9e5943ab 100644 --- a/Disco.Web/Disco.Web.csproj +++ b/Disco.Web/Disco.Web.csproj @@ -827,6 +827,11 @@ True Queues.cshtml + + True + True + _CustomDetailValueRender.cshtml + AccessDeniedException.cshtml True @@ -1445,6 +1450,7 @@ tinymce.js Always + Always @@ -2156,6 +2162,10 @@ RazorGenerator Licence.generated.cs + + RazorGenerator + _CustomDetailValueRender.generated.cs + RazorGenerator AccessDeniedException.generated.cs diff --git a/Disco.Web/Extensions/T4MVC/API.UserController.generated.cs b/Disco.Web/Extensions/T4MVC/API.UserController.generated.cs index 80b80ae8..27053c63 100644 --- a/Disco.Web/Extensions/T4MVC/API.UserController.generated.cs +++ b/Disco.Web/Extensions/T4MVC/API.UserController.generated.cs @@ -105,6 +105,12 @@ namespace Disco.Web.Areas.API.Controllers { return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.GeneratePdfPackage); } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult Photo() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Photo); + } [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public UserController Actions { get { return MVC.API.User; } } @@ -129,6 +135,7 @@ namespace Disco.Web.Areas.API.Controllers public readonly string AttachmentRemove = "AttachmentRemove"; public readonly string GeneratePdf = "GeneratePdf"; public readonly string GeneratePdfPackage = "GeneratePdfPackage"; + public readonly string Photo = "Photo"; } [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] @@ -142,6 +149,7 @@ namespace Disco.Web.Areas.API.Controllers public const string AttachmentRemove = "AttachmentRemove"; public const string GeneratePdf = "GeneratePdf"; public const string GeneratePdfPackage = "GeneratePdfPackage"; + public const string Photo = "Photo"; } @@ -216,6 +224,14 @@ namespace Disco.Web.Areas.API.Controllers public readonly string Domain = "Domain"; public readonly string DocumentTemplatePackageId = "DocumentTemplatePackageId"; } + static readonly ActionParamsClass_Photo s_params_Photo = new ActionParamsClass_Photo(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_Photo PhotoParams { get { return s_params_Photo; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_Photo + { + public readonly string userId = "userId"; + } static readonly ViewsClass s_views = new ViewsClass(); [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public ViewsClass Views { get { return s_views; } } @@ -338,6 +354,18 @@ namespace Disco.Web.Areas.API.Controllers return callInfo; } + [NonAction] + partial void PhotoOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string userId); + + [NonAction] + public override System.Web.Mvc.ActionResult Photo(string userId) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Photo); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "userId", userId); + PhotoOverride(callInfo, userId); + return callInfo; + } + } } diff --git a/Disco.Web/Extensions/T4MVC/SharedController.generated.cs b/Disco.Web/Extensions/T4MVC/SharedController.generated.cs index 973a9b2a..13e6eae3 100644 --- a/Disco.Web/Extensions/T4MVC/SharedController.generated.cs +++ b/Disco.Web/Extensions/T4MVC/SharedController.generated.cs @@ -36,6 +36,7 @@ namespace T4MVC public _ViewNamesClass ViewNames { get { return s_ViewNames; } } public class _ViewNamesClass { + public readonly string _CustomDetailValueRender = "_CustomDetailValueRender"; public readonly string _DialogLayout = "_DialogLayout"; public readonly string _EmptyLayout = "_EmptyLayout"; public readonly string _GenerateDocumentControl = "_GenerateDocumentControl"; @@ -46,6 +47,7 @@ namespace T4MVC public readonly string _SearchDialog = "_SearchDialog"; public readonly string Error = "Error"; } + public readonly string _CustomDetailValueRender = "~/Views/Shared/_CustomDetailValueRender.cshtml"; public readonly string _DialogLayout = "~/Views/Shared/_DialogLayout.cshtml"; public readonly string _EmptyLayout = "~/Views/Shared/_EmptyLayout.cshtml"; public readonly string _GenerateDocumentControl = "~/Views/Shared/_GenerateDocumentControl.cshtml"; diff --git a/Disco.Web/Extensions/T4MVC/T4MVC.cs b/Disco.Web/Extensions/T4MVC/T4MVC.cs index 91a8d7a0..0627ff28 100644 --- a/Disco.Web/Extensions/T4MVC/T4MVC.cs +++ b/Disco.Web/Extensions/T4MVC/T4MVC.cs @@ -620,6 +620,7 @@ namespace Links public static readonly string warning32_png = Url("warning32.png"); } + public static readonly string UnknownPhoto_png = Url("UnknownPhoto.png"); } public static readonly string IsotopeStyles_css = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(URLPATH + "/IsotopeStyles.min.css") ? Url("IsotopeStyles.min.css") : Url("IsotopeStyles.css"); diff --git a/Disco.Web/Models/Device/ShowModel.cs b/Disco.Web/Models/Device/ShowModel.cs index 266d57cb..5a9a6408 100644 --- a/Disco.Web/Models/Device/ShowModel.cs +++ b/Disco.Web/Models/Device/ShowModel.cs @@ -1,5 +1,6 @@ using Disco.Models.Services.Documents; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using Disco.Models.UI.Device; using Disco.Services.Plugins; using Disco.Web.Models.Shared; @@ -30,5 +31,9 @@ namespace Disco.Web.Models.Device Templates = DocumentTemplates, TemplatePackages = DocumentTemplatePackages, }; + + public DetailsResult DeviceDetails { get; set; } + public DetailsResult AssignedUserDetails { get; set; } + public bool HasAssignedUserPhoto { get; set; } } } \ No newline at end of file diff --git a/Disco.Web/Models/Job/ShowModel.cs b/Disco.Web/Models/Job/ShowModel.cs index c208beb1..b613fd62 100644 --- a/Disco.Web/Models/Job/ShowModel.cs +++ b/Disco.Web/Models/Job/ShowModel.cs @@ -1,6 +1,7 @@ using Disco.Models.Services.Documents; using Disco.Models.Services.Job; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using Disco.Models.UI.Job; using Disco.Web.Models.Shared; using System; @@ -28,5 +29,9 @@ namespace Disco.Web.Models.Job public LocationModes LocationMode { get; set; } public List LocationOptions { get; set; } + + public DetailsResult UserDetails { get; set; } + public bool HasUserPhoto { get; set; } + public DetailsResult DeviceDetails { get; set; } } } \ No newline at end of file diff --git a/Disco.Web/Models/User/ShowModel.cs b/Disco.Web/Models/User/ShowModel.cs index 5511fb39..ca1fd76b 100644 --- a/Disco.Web/Models/User/ShowModel.cs +++ b/Disco.Web/Models/User/ShowModel.cs @@ -2,6 +2,7 @@ using Disco.Models.Services.Authorization; using Disco.Models.Services.Documents; using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.Services.Plugins.Details; using Disco.Models.UI.User; using Disco.Web.Models.Shared; using System.Collections.Generic; @@ -27,6 +28,10 @@ namespace Disco.Web.Models.User public IAuthorizationToken AuthorizationToken { get; set; } public IClaimNavigatorItem ClaimNavigator { get; set; } + public DetailsResult UserDetails { get; set; } + public bool HasUserPhoto { get; set; } + public Dictionary AssignedDevicesDetails { get; set; } + public FancyTreeNode[] ClaimNavigatorFancyTreeNodes { get @@ -55,5 +60,6 @@ namespace Disco.Web.Models.User } } } + } } \ No newline at end of file diff --git a/Disco.Web/Views/Device/DeviceParts/_Subject.cshtml b/Disco.Web/Views/Device/DeviceParts/_Subject.cshtml index bb727312..fcfd7fab 100644 --- a/Disco.Web/Views/Device/DeviceParts/_Subject.cshtml +++ b/Disco.Web/Views/Device/DeviceParts/_Subject.cshtml @@ -187,6 +187,17 @@ + @if (Model.DeviceDetails != null && Model.DeviceDetails.Details.Count > 0) + { +
+ @foreach (var detail in Model.DeviceDetails.Details) + { +
+ @detail.Key: @Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail) +
+ } +
+ }
@{ var assignedUser = Model.Device.AssignedUser; @@ -199,7 +210,13 @@ @if (assignedUser != null) { -
+
+ @if (Model.HasAssignedUserPhoto) + { +
+ +
+ }
@if (Authorization.Has(Claims.User.Show)) { @@ -266,6 +283,17 @@
} + @if (Model.AssignedUserDetails != null && Model.AssignedUserDetails.Details.Count > 0) + { +
+ @foreach (var detail in Model.AssignedUserDetails.Details) + { +
+ @detail.Key: @Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail) +
+ } +
+ }
} else diff --git a/Disco.Web/Views/Device/DeviceParts/_Subject.generated.cs b/Disco.Web/Views/Device/DeviceParts/_Subject.generated.cs index 559b9596..4fc44d91 100644 --- a/Disco.Web/Views/Device/DeviceParts/_Subject.generated.cs +++ b/Disco.Web/Views/Device/DeviceParts/_Subject.generated.cs @@ -776,20 +776,94 @@ WriteLiteral("\', function (response, result) {\r\n #line default #line hidden WriteLiteral(" \r\n \r\n \r\n \r\n"); + + + #line 190 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 190 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + if (Model.DeviceDetails != null && Model.DeviceDetails.Details.Count > 0) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 193 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 193 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + foreach (var detail in Model.DeviceDetails.Details) + { + + + #line default + #line hidden +WriteLiteral("
\r\n "); + + + #line 196 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + Write(detail.Key); + + + #line default + #line hidden +WriteLiteral(": "); + + + #line 196 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + Write(Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n"); + + + #line 198 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral("
\r\n"); + + + #line 200 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); - #line 191 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 202 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 191 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 202 "..\..\Views\Device\DeviceParts\_Subject.cshtml" var assignedUser = Model.Device.AssignedUser; @@ -805,13 +879,13 @@ WriteLiteral(">\r\n \r\n < " \r\n"); - #line 200 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 211 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 200 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 211 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (assignedUser != null) { @@ -822,7 +896,61 @@ WriteLiteral(" \r\n (Model.HasAssignedUserPhoto ? "hasPhoto" : "noPhoto" + + #line default + #line hidden +, 12285), false) +); + +WriteLiteral(">\r\n"); + + + #line 214 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 214 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + if (Model.HasAssignedUserPhoto) + { + + + #line default + #line hidden +WriteLiteral(" \r\n (Url.Action(MVC.API.User.Photo(assignedUser.UserId)) + + #line default + #line hidden +, 12635), false) +); + +WriteLiteral(" />\r\n
\r\n"); + + + #line 219 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); - #line 204 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 221 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 204 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 221 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Authorization.Has(Claims.User.Show)) { @@ -845,14 +973,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 206 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 223 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLink(assignedUser.DisplayName, MVC.User.Show(assignedUser.UserId))); #line default #line hidden - #line 206 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 223 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } else @@ -862,14 +990,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 210 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 227 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(assignedUser.DisplayName); #line default #line hidden - #line 210 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 227 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -886,7 +1014,7 @@ WriteLiteral(" title=\"Id\""); WriteLiteral(">"); - #line 213 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 230 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(assignedUser.FriendlyId()); @@ -895,13 +1023,13 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 214 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 231 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 214 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 231 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Authorization.Has(Claims.User.ShowDetails)) { if (!string.IsNullOrWhiteSpace(assignedUser.PhoneNumber)) @@ -919,7 +1047,7 @@ WriteLiteral(" title=\"Phone Number\""); WriteLiteral(">"); - #line 218 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 235 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(assignedUser.PhoneNumber); @@ -928,7 +1056,7 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 219 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 236 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } if (!string.IsNullOrWhiteSpace(assignedUser.EmailAddress)) { @@ -944,21 +1072,21 @@ WriteLiteral(" title=\"Email Address\""); WriteLiteral(">(Model.Device.AssignedUser.EmailAddress + #line 239 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 14329), Tuple.Create(Model.Device.AssignedUser.EmailAddress #line default #line hidden -, 13241), false) +, 14329), false) ); WriteLiteral(">"); - #line 222 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 239 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(assignedUser.EmailAddress); @@ -967,7 +1095,7 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 223 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 240 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } } @@ -977,7 +1105,7 @@ WriteLiteral("\r\n"); WriteLiteral(" "); - #line 225 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 242 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Authorization.Has(Claims.User.ShowFlagAssignments)) { @@ -991,13 +1119,13 @@ WriteLiteral(" id=\"Device_Show_User_Flags\""); WriteLiteral(">\r\n"); - #line 228 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 245 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 228 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 245 "..\..\Views\Device\DeviceParts\_Subject.cshtml" foreach (var flag in assignedUser.UserFlagAssignments.Where(f => !f.RemovedDate.HasValue).Select(f => Tuple.Create(f, UserFlagService.GetUserFlag(f.UserFlagId)))) { @@ -1006,26 +1134,26 @@ WriteLiteral(">\r\n"); #line hidden WriteLiteral(" (flag.Item2.Icon + #line 247 "..\..\Views\Device\DeviceParts\_Subject.cshtml" +, Tuple.Create(Tuple.Create("", 15057), Tuple.Create(flag.Item2.Icon #line default #line hidden -, 13969), false) -, Tuple.Create(Tuple.Create(" ", 13987), Tuple.Create("fa-fw", 13988), true) -, Tuple.Create(Tuple.Create(" ", 13993), Tuple.Create("d-", 13994), true) +, 15057), false) +, Tuple.Create(Tuple.Create(" ", 15075), Tuple.Create("fa-fw", 15076), true) +, Tuple.Create(Tuple.Create(" ", 15081), Tuple.Create("d-", 15082), true) - #line 230 "..\..\Views\Device\DeviceParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 13996), Tuple.Create(flag.Item2.IconColour + #line 247 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 15084), Tuple.Create(flag.Item2.IconColour #line default #line hidden -, 13996), false) +, 15084), false) ); WriteLiteral(">\r\n "); - #line 232 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 249 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(flag.Item2.Name); @@ -1048,7 +1176,7 @@ WriteLiteral(">"); WriteLiteral(""); - #line 232 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 249 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (flag.Item1.Comments != null) { @@ -1061,7 +1189,7 @@ WriteLiteral(" class=\"comments\""); WriteLiteral(">"); - #line 233 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 250 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(flag.Item1.Comments.ToHtmlComment()); @@ -1070,7 +1198,7 @@ WriteLiteral(">"); WriteLiteral(""); - #line 233 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 250 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } #line default @@ -1082,7 +1210,7 @@ WriteLiteral(" class=\"added\""); WriteLiteral(">"); - #line 233 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 250 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(CommonHelpers.FriendlyDateAndUser(flag.Item1.AddedDate, flag.Item1.AddedUserId)); @@ -1092,7 +1220,7 @@ WriteLiteral("\r\n " \r\n"); - #line 236 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 253 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1135,7 +1263,76 @@ WriteLiteral(">\r\n $(functio " \r\n \r\n"); - #line 268 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 285 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 286 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + if (Model.AssignedUserDetails != null && Model.AssignedUserDetails.Details.Count > 0) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 289 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 289 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + foreach (var detail in Model.AssignedUserDetails.Details) + { + + + #line default + #line hidden +WriteLiteral("
\r\n " + +" "); + + + #line 292 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + Write(detail.Key); + + + #line default + #line hidden +WriteLiteral(": "); + + + #line 292 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + Write(Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)); + + + #line default + #line hidden +WriteLiteral("\r\n
\r\n"); + + + #line 294 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 296 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1144,7 +1341,7 @@ WriteLiteral(">\r\n $(functio WriteLiteral(" \r\n"); - #line 270 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 298 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } else { @@ -1159,7 +1356,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral(">Not Assigned\r\n"); - #line 274 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 302 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1169,13 +1366,13 @@ WriteLiteral(" \r\n " \r\n \r\n"); - #line 279 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 307 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 279 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 307 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Authorization.Has(Claims.Device.Actions.GenerateDocuments)) { @@ -1193,7 +1390,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 282 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 310 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.Partial(MVC.Shared.Views._GenerateDocumentControl, Model.GenerateDocumentControlModel)); @@ -1202,7 +1399,7 @@ WriteLiteral(" "); WriteLiteral("\r\n \r\n"); - #line 284 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 312 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1225,13 +1422,13 @@ WriteLiteral(" title=\"Device Profile\""); WriteLiteral(">\r\n"); - #line 291 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 319 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 291 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 319 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Authorization.Has(Claims.Config.DeviceProfile.Show)) { @@ -1239,14 +1436,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 293 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 321 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLink(Model.Device.DeviceProfile.Name, MVC.Config.DeviceProfile.Index(Model.Device.DeviceProfileId))); #line default #line hidden - #line 293 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 321 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } else @@ -1256,14 +1453,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 297 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 325 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.Device.DeviceProfile.Name); #line default #line hidden - #line 297 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 325 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1285,7 +1482,7 @@ WriteLiteral(">Distribution:\r\n \r\n WriteLiteral(" "); - #line 306 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 334 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.Device.DeviceProfile.DistributionType.ToString()); @@ -1301,13 +1498,13 @@ WriteLiteral(">Address:\r\n \r\n "\r\n"); - #line 314 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 342 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 314 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 342 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.DeviceProfileDefaultOrganisationAddress != null) { @@ -1322,7 +1519,7 @@ WriteLiteral(" id=\"Device_Show_Policies_Profile_Address\""); WriteLiteral(">"); - #line 317 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 345 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.DeviceProfileDefaultOrganisationAddress.Name); @@ -1331,7 +1528,7 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 318 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 346 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } else { @@ -1348,7 +1545,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral(">None\r\n"); - #line 322 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 350 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1366,7 +1563,7 @@ WriteLiteral(">Provision Account:\r\n \r\ WriteLiteral(" "); - #line 331 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 359 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.Device.DeviceProfile.ProvisionADAccount ? "Active Directory" : "No"); @@ -1384,7 +1581,7 @@ WriteLiteral(">Certificates:\r\n \r\n WriteLiteral(" "); - #line 339 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 367 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.DeviceProfileCertificateProviders != null ? string.Join(", ", Model.DeviceProfileCertificateProviders.Select(c => c.Name)) : "None Provisioned"); @@ -1401,7 +1598,7 @@ WriteLiteral(">Wireless Profiles:\r\n \r\ WriteLiteral(" "); - #line 346 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 374 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.DeviceProfileWirelessProfileProviders != null ? string.Join(", ", Model.DeviceProfileWirelessProfileProviders.Select(c => c.Name)) : "None Provisioned"); @@ -1411,13 +1608,13 @@ WriteLiteral("\r\n \r\n < " \r\n"); - #line 350 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 378 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 350 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 378 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.Device.CanUpdateDeviceProfile()) { @@ -1425,14 +1622,14 @@ WriteLiteral("\r\n \r\n < #line default #line hidden - #line 352 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 380 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Update Profile", MVC.API.Device.UpdateDeviceProfileId(Model.Device.SerialNumber, redirect: true), "Device_Show_Policies_Profile_Actions_Update_Button")); #line default #line hidden - #line 352 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 380 "..\..\Views\Device\DeviceParts\_Subject.cshtml" @@ -1454,13 +1651,13 @@ WriteLiteral(" class=\"none\""); WriteLiteral(">\r\n"); - #line 357 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 385 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 357 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 385 "..\..\Views\Device\DeviceParts\_Subject.cshtml" foreach (var dp in Model.DeviceProfiles.OrderBy(i => i.Name)) { @@ -1475,7 +1672,7 @@ WriteLiteral(" type=\"radio\""); WriteLiteral(" data-deviceprofileid=\""); - #line 360 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 388 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(dp.Id); @@ -1485,45 +1682,45 @@ WriteLiteral("\""); WriteLiteral(" name=\"DeviceProfile\""); -WriteAttribute("id", Tuple.Create(" id=\"", 22203), Tuple.Create("\"", 22230) -, Tuple.Create(Tuple.Create("", 22208), Tuple.Create("DeviceProfile_", 22208), true) +WriteAttribute("id", Tuple.Create(" id=\"", 24149), Tuple.Create("\"", 24176) +, Tuple.Create(Tuple.Create("", 24154), Tuple.Create("DeviceProfile_", 24154), true) - #line 360 "..\..\Views\Device\DeviceParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 22222), Tuple.Create(dp.Id + #line 388 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 24168), Tuple.Create(dp.Id #line default #line hidden -, 22222), false) +, 24168), false) ); WriteLiteral(" />(dp.Id + #line 388 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 24206), Tuple.Create(dp.Id #line default #line hidden -, 22260), false) +, 24206), false) ); -WriteAttribute("title", Tuple.Create(" title=\"", 22269), Tuple.Create("\"", 22313) -, Tuple.Create(Tuple.Create("", 22277), Tuple.Create("Distribution:", 22277), true) +WriteAttribute("title", Tuple.Create(" title=\"", 24215), Tuple.Create("\"", 24259) +, Tuple.Create(Tuple.Create("", 24223), Tuple.Create("Distribution:", 24223), true) - #line 360 "..\..\Views\Device\DeviceParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create(" ", 22290), Tuple.Create(dp.DistributionType + #line 388 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create(" ", 24236), Tuple.Create(dp.DistributionType #line default #line hidden -, 22291), false) +, 24237), false) ); WriteLiteral(">"); - #line 360 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 388 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(dp.Name); @@ -1532,7 +1729,7 @@ WriteLiteral(">"); WriteLiteral("\r\n \r\n"); - #line 362 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 390 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -1545,7 +1742,7 @@ WriteLiteral(" \r\n"); - #line 715 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 743 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -2418,7 +2615,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 716 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 744 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.Device.CanUpdateUntrustEnrol()) { @@ -2426,14 +2623,14 @@ WriteLiteral(" "); #line default #line hidden - #line 718 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 746 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Untrust Enrol", MVC.API.Device.UpdateAllowUnauthenticatedEnrol(Model.Device.SerialNumber, false.ToString(), true), "Device_Show_Device_Actions_UntrustEnrol_Button")); #line default #line hidden - #line 718 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 746 "..\..\Views\Device\DeviceParts\_Subject.cshtml" @@ -2504,7 +2701,7 @@ WriteLiteral(@"> "); - #line 758 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 786 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -2513,7 +2710,7 @@ WriteLiteral(@"> WriteLiteral(" "); - #line 759 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 787 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.Device.CanDecommission()) { @@ -2521,14 +2718,14 @@ WriteLiteral(" "); #line default #line hidden - #line 761 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 789 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Decommission", MVC.API.Device.Decommission(), "Device_Show_Device_Actions_Decommission_Button")); #line default #line hidden - #line 761 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 789 "..\..\Views\Device\DeviceParts\_Subject.cshtml" @@ -2560,13 +2757,13 @@ WriteLiteral(" class=\"none\""); WriteLiteral(">\r\n"); - #line 768 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 796 "..\..\Views\Device\DeviceParts\_Subject.cshtml" #line default #line hidden - #line 768 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 796 "..\..\Views\Device\DeviceParts\_Subject.cshtml" foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) { @@ -2577,34 +2774,34 @@ WriteLiteral("
  • \r\n WriteLiteral(" type=\"radio\""); -WriteAttribute("id", Tuple.Create(" id=\"", 46839), Tuple.Create("\"", 46917) -, Tuple.Create(Tuple.Create("", 46844), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 46844), true) +WriteAttribute("id", Tuple.Create(" id=\"", 48785), Tuple.Create("\"", 48863) +, Tuple.Create(Tuple.Create("", 48790), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 48790), true) - #line 771 "..\..\Views\Device\DeviceParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 46891), Tuple.Create((int)decommissionReason + #line 799 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 48837), Tuple.Create((int)decommissionReason #line default #line hidden -, 46891), false) +, 48837), false) ); WriteLiteral("\r\n name=\"Device_Show_Device_Actions_Dec" + "ommission_Reason\""); -WriteAttribute("value", Tuple.Create(" value=\"", 47016), Tuple.Create("\"", 47050) +WriteAttribute("value", Tuple.Create(" value=\"", 48962), Tuple.Create("\"", 48996) - #line 772 "..\..\Views\Device\DeviceParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 47024), Tuple.Create((int)decommissionReason + #line 800 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 48970), Tuple.Create((int)decommissionReason #line default #line hidden -, 47024), false) +, 48970), false) ); WriteLiteral(" "); - #line 772 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 800 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty); @@ -2612,21 +2809,21 @@ WriteLiteral(" "); #line hidden WriteLiteral(" />\r\n ((int)decommissionReason + #line 801 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 49193), Tuple.Create((int)decommissionReason #line default #line hidden -, 47247), false) +, 49193), false) ); WriteLiteral(">"); - #line 773 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 801 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(decommissionReason.ReasonMessage()); @@ -2635,7 +2832,7 @@ WriteLiteral(">"); WriteLiteral("\r\n
  • \r\n"); - #line 775 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 803 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -2653,7 +2850,7 @@ WriteLiteral(">\r\n $(function () {\r\n "uttonDialog = null;\r\n var deviceSerialNumber = \'"); - #line 783 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 811 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Model.Device.SerialNumber); @@ -2686,7 +2883,7 @@ WriteLiteral("\';\r\n\r\n button.click(function () {\r\n\ " });\r\n \r\n"); - #line 819 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 847 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -2695,7 +2892,7 @@ WriteLiteral("\';\r\n\r\n button.click(function () {\r\n\ WriteLiteral(" "); - #line 820 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 848 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.Device.CanRecommission()) { @@ -2703,14 +2900,14 @@ WriteLiteral(" "); #line default #line hidden - #line 822 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 850 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Recommission", MVC.API.Device.Recommission(Model.Device.SerialNumber, true), "Device_Show_Device_Actions_Recommission_Button")); #line default #line hidden - #line 822 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 850 "..\..\Views\Device\DeviceParts\_Subject.cshtml" @@ -2764,7 +2961,7 @@ WriteLiteral(@"> "); - #line 857 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 885 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } @@ -2773,7 +2970,7 @@ WriteLiteral(@"> WriteLiteral(" "); - #line 858 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 886 "..\..\Views\Device\DeviceParts\_Subject.cshtml" if (Model.Device.CanDelete()) { @@ -2781,14 +2978,14 @@ WriteLiteral(" "); #line default #line hidden - #line 860 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 888 "..\..\Views\Device\DeviceParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Delete Device", MVC.API.Device.Delete(Model.Device.SerialNumber, true), "Device_Show_Device_Actions_Delete_Button")); #line default #line hidden - #line 860 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 888 "..\..\Views\Device\DeviceParts\_Subject.cshtml" @@ -2848,7 +3045,7 @@ WriteLiteral(@"> "); - #line 898 "..\..\Views\Device\DeviceParts\_Subject.cshtml" + #line 926 "..\..\Views\Device\DeviceParts\_Subject.cshtml" } diff --git a/Disco.Web/Views/Job/JobParts/_Subject.cshtml b/Disco.Web/Views/Job/JobParts/_Subject.cshtml index 0efbfb73..300c25f7 100644 --- a/Disco.Web/Views/Job/JobParts/_Subject.cshtml +++ b/Disco.Web/Views/Job/JobParts/_Subject.cshtml @@ -71,9 +71,9 @@ { @CommonHelpers.FriendlyDate(Model.Job.ExpectedClosedDate) } - - - } + + + } @if (Model.Job.ClosedDate.HasValue) { @@ -180,142 +180,153 @@ {@Html.ActionLink(Model.Job.DeviceSerialNumber, MVC.Device.Show(Model.Job.DeviceSerialNumber))} else {@Model.Job.DeviceSerialNumber} - -
    -
    - Model Image -
    @Model.Job.Device.ComputerName
    -
    @Html.ActionLink(Model.Job.Device.DeviceModel.ToString(), MVC.Config.DeviceModel.Index(Model.Job.Device.DeviceModelId))
    + +
    +
    + Model Image +
    @Model.Job.Device.ComputerName
    +
    @Html.ActionLink(Model.Job.Device.DeviceModel.ToString(), MVC.Config.DeviceModel.Index(Model.Job.Device.DeviceModelId))
    + @if (Model.Job.Device.DeviceBatch != null) + { +
    @Html.ActionLink(Model.Job.Device.DeviceBatch.Name, MVC.Config.DeviceBatch.Index(Model.Job.Device.DeviceBatchId))
    + } +
    @if (Model.Job.Device.DeviceBatch != null) { -
    @Html.ActionLink(Model.Job.Device.DeviceBatch.Name, MVC.Config.DeviceBatch.Index(Model.Job.Device.DeviceBatchId))
    + if (Model.Job.JobTypeId == JobType.JobTypeIds.HWar) + { +
    +
    DEVICE WARRANTY
    +
    Until: @Model.Job.Device.DeviceBatch.WarrantyValidUntil.ToFullDateTime("Unknown")
    + @if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.WarrantyDetails)) + { + Show Details +
    +
    @(new HtmlString(Model.Job.Device.DeviceBatch.WarrantyDetails))
    +
    + + } +
    + } + if (Model.Job.JobTypeId == JobType.JobTypeIds.HNWar) + { +
    +
    INSURANCE
    +
    @Model.Job.Device.DeviceBatch.InsuranceSupplier
    +
    Until: @Model.Job.Device.DeviceBatch.InsuredUntil.ToFullDateTime("Unknown")
    + @if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.InsuranceDetails)) + { + Show Details +
    +
    @(new HtmlString(Model.Job.Device.DeviceBatch.InsuranceDetails))
    +
    + + } +
    + } }
    - @if (Model.Job.Device.DeviceBatch != null) + @if (Model.DeviceDetails != null && Model.DeviceDetails.Details.Count > 0) { - if (Model.Job.JobTypeId == JobType.JobTypeIds.HWar) - { -
    -
    DEVICE WARRANTY
    -
    Until: @Model.Job.Device.DeviceBatch.WarrantyValidUntil.ToFullDateTime("Unknown")
    - @if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.WarrantyDetails)) - { - Show Details -
    -
    @(new HtmlString(Model.Job.Device.DeviceBatch.WarrantyDetails))
    -
    - - } -
    - } - if (Model.Job.JobTypeId == JobType.JobTypeIds.HNWar) - { -
    -
    INSURANCE
    -
    @Model.Job.Device.DeviceBatch.InsuranceSupplier
    -
    Until: @Model.Job.Device.DeviceBatch.InsuredUntil.ToFullDateTime("Unknown")
    - @if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.InsuranceDetails)) - { - Show Details -
    -
    @(new HtmlString(Model.Job.Device.DeviceBatch.InsuranceDetails))
    -
    - - } -
    - } +
    + @foreach (var detail in Model.DeviceDetails.Details) + { +
    + @detail.Key: @Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail) +
    + } +
    } -
    - @if (Model.Job.DeviceHeld.HasValue) - { - var canEditLocation = Authorization.Has(Claims.Job.Properties.DeviceHeldLocation); -
    - - - - - } + + } + + } + + + } @if (Model.Job.User != null) { } - @if (Authorization.Has(Claims.User.ShowFlagAssignments)) - { -
    - @foreach (var flag in Model.Job.User.UserFlagAssignments.Where(f => !f.RemovedDate.HasValue).Select(f => Tuple.Create(f, UserFlagService.GetUserFlag(f.UserFlagId)))) - { - - - @flag.Item2.Name@if (flag.Item1.Comments != null) - {@flag.Item1.Comments.ToHtmlComment()}@CommonHelpers.FriendlyDateAndUser(flag.Item1.AddedDate, flag.Item1.AddedUserId) - - - } - -
    - } - @if (Model.Job.WaitingForUserAction.HasValue) - { -
    -

    Awaiting Action

    - Since: @Model.Job.WaitingForUserAction.ToFullDateTime() -
    - } - - - } \r\n \r\n"); +WriteLiteral(" \r\n \r\n"); #line 76 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + } #line default @@ -311,14 +311,14 @@ WriteLiteral(" class=\"status\""); WriteLiteral(">\r\n (Model.Job.JobType.Id +, Tuple.Create(Tuple.Create("", 5786), Tuple.Create(Model.Job.JobType.Id #line default #line hidden -, 5774), false) +, 5786), false) ); WriteLiteral(">"); @@ -372,14 +372,14 @@ WriteLiteral(">\r\n"); #line hidden WriteLiteral(" (jobSubType.Id +, Tuple.Create(Tuple.Create("", 6403), Tuple.Create(jobSubType.Id #line default #line hidden -, 6391), false) +, 6403), false) ); WriteLiteral(">"); @@ -423,14 +423,14 @@ WriteLiteral(">\r\n"); #line hidden WriteLiteral(" (jobSubType.Id +, Tuple.Create(Tuple.Create("", 6863), Tuple.Create(jobSubType.Id #line default #line hidden -, 6851), false) +, 6863), false) ); WriteLiteral(">"); @@ -719,31 +719,31 @@ WriteLiteral(">\r\n"); #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n \r\n \r\n \r\n (Url.Action(MVC.API.DeviceModel.Image(Model.Job.Device.DeviceModelId, Model.Job.Device.DeviceModel.ImageHash())) + , Tuple.Create(Tuple.Create("", 11496), Tuple.Create(Url.Action(MVC.API.DeviceModel.Image(Model.Job.Device.DeviceModelId, Model.Job.Device.DeviceModel.ImageHash())) #line default #line hidden -, 11468), false) +, 11496), false) ); -WriteLiteral(" />\r\n \r\n "); #line 187 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.Device.ComputerName); + Write(Model.Job.Device.ComputerName); #line default #line hidden -WriteLiteral("\r\n \r\n "); #line 188 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Html.ActionLink(Model.Job.Device.DeviceModel.ToString(), MVC.Config.DeviceModel.Index(Model.Job.Device.DeviceModelId))); + Write(Html.ActionLink(Model.Job.Device.DeviceModel.ToString(), MVC.Config.DeviceModel.Index(Model.Job.Device.DeviceModelId))); #line default @@ -777,19 +777,19 @@ WriteLiteral("\r\n"); #line 189 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line default #line hidden #line 189 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.Device.DeviceBatch != null) - { + if (Model.Job.Device.DeviceBatch != null) + { #line default #line hidden -WriteLiteral(" "); #line 191 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Html.ActionLink(Model.Job.Device.DeviceBatch.Name, MVC.Config.DeviceBatch.Index(Model.Job.Device.DeviceBatchId))); + Write(Html.ActionLink(Model.Job.Device.DeviceBatch.Name, MVC.Config.DeviceBatch.Index(Model.Job.Device.DeviceBatchId))); #line default @@ -808,6 +808,280 @@ WriteLiteral("\r\n"); #line 192 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 194 "..\..\Views\Job\JobParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 194 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.Job.Device.DeviceBatch != null) + { + if (Model.Job.JobTypeId == JobType.JobTypeIds.HWar) + { + + + #line default + #line hidden +WriteLiteral(" \r\n
    DEVICE WARRANTY
    \r\n " + +"
    Until:
    \r\n"); + + + #line 201 "..\..\Views\Job\JobParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 201 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.WarrantyDetails)) + { + + + #line default + #line hidden +WriteLiteral(" Show Details\r\n"); + +WriteLiteral(" (Model.Job.Device.DeviceBatch.Name + + #line default + #line hidden +, 13329), false) +); + +WriteLiteral(">\r\n
    "); + + + #line 205 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(new HtmlString(Model.Job.Device.DeviceBatch.WarrantyDetails)); + + + #line default + #line hidden +WriteLiteral("
    \r\n \r\n"); + +WriteLiteral(" + $(function () { + var d; + $('#Job_Show_Device_Details_HWar_Details_Button').click(function () { + if (!d) + d = $('#Job_Show_Device_Details_HWar_Details_Dialog').dialog({ + width: 570, + modal: true + }); + else + d.dialog('open'); + return false; + }); + }); + +"); + + + #line 222 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 224 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + if (Model.Job.JobTypeId == JobType.JobTypeIds.HNWar) + { + + + #line default + #line hidden +WriteLiteral(" \r\n
    INSURANCE
    \r\n " + +" "); + + + #line 229 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Model.Job.Device.DeviceBatch.InsuranceSupplier); + + + #line default + #line hidden +WriteLiteral("\r\n
    Until:
    \r\n"); + + + #line 231 "..\..\Views\Job\JobParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 231 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.InsuranceDetails)) + { + + + #line default + #line hidden +WriteLiteral(" Show Details\r\n"); + +WriteLiteral(" (Model.Job.Device.DeviceBatch.Name + + #line default + #line hidden +, 15762), false) +); + +WriteLiteral(">\r\n
    "); + + + #line 235 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(new HtmlString(Model.Job.Device.DeviceBatch.InsuranceDetails)); + + + #line default + #line hidden +WriteLiteral("
    \r\n \r\n"); + +WriteLiteral(" + $(function () { + var d; + $('#Job_Show_Device_Details_HNWar_Details_Button').click(function () { + if (!d) + d = $('#Job_Show_Device_Details_HNWar_Details_Dialog').dialog({ + width: 570, + modal: true + }); + else + d.dialog('open'); + return false; + }); + }); + +"); + + + #line 252 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 254 "..\..\Views\Job\JobParts\_Subject.cshtml" + } } @@ -816,546 +1090,343 @@ WriteLiteral("\r\n"); WriteLiteral(" \r\n"); - #line 194 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 257 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 194 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.Device.DeviceBatch != null) + #line 257 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.DeviceDetails != null && Model.DeviceDetails.Details.Count > 0) { - if (Model.Job.JobTypeId == JobType.JobTypeIds.HWar) - { #line default #line hidden -WriteLiteral(" \r\n
    DEVICE WARRANTY
    \r\n " + -"
    Until: \r\n"); - #line 200 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.Device.DeviceBatch.WarrantyValidUntil.ToUnixEpoc()); - - - #line default - #line hidden -WriteLiteral("\""); - -WriteLiteral(">"); - - - #line 200 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.Device.DeviceBatch.WarrantyValidUntil.ToFullDateTime("Unknown")); - - - #line default - #line hidden -WriteLiteral("
    \r\n"); - - - #line 201 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 260 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line default #line hidden - #line 201 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.WarrantyDetails)) - { + #line 260 "..\..\Views\Job\JobParts\_Subject.cshtml" + foreach (var detail in Model.DeviceDetails.Details) + { #line default #line hidden -WriteLiteral(" Show Details\r\n"); - -WriteLiteral(" (Model.Job.Device.DeviceBatch.Name - - #line default - #line hidden -, 13229), false) -); - -WriteLiteral(">\r\n
    "); +WriteLiteral("
    \r\n "); - #line 205 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(new HtmlString(Model.Job.Device.DeviceBatch.WarrantyDetails)); + #line 263 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(detail.Key); #line default #line hidden -WriteLiteral("
    \r\n
    \r\n"); - -WriteLiteral(" - $(function () { - var d; - $('#Job_Show_Device_Details_HWar_Details_Button').click(function () { - if (!d) - d = $('#Job_Show_Device_Details_HWar_Details_Dialog').dialog({ - width: 570, - modal: true - }); - else - d.dialog('open'); - return false; - }); - }); - -"); +WriteLiteral(": "); - #line 222 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 263 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)); #line default #line hidden -WriteLiteral(" \r\n"); +WriteLiteral("\r\n \r\n"); - #line 224 "..\..\Views\Job\JobParts\_Subject.cshtml" - } - if (Model.Job.JobTypeId == JobType.JobTypeIds.HNWar) - { + #line 265 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" \r\n
    INSURANCE
    \r\n " + -" "); +WriteLiteral(" \r\n"); - #line 229 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.Device.DeviceBatch.InsuranceSupplier); - - - #line default - #line hidden -WriteLiteral("\r\n
    Until:
    \r\n"); - - - #line 231 "..\..\Views\Job\JobParts\_Subject.cshtml" - - - #line default - #line hidden - - #line 231 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (!string.IsNullOrWhiteSpace(Model.Job.Device.DeviceBatch.InsuranceDetails)) - { - - - #line default - #line hidden -WriteLiteral(" Show Details\r\n"); - -WriteLiteral(" (Model.Job.Device.DeviceBatch.Name - - #line default - #line hidden -, 15542), false) -); - -WriteLiteral(">\r\n
    "); - - - #line 235 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(new HtmlString(Model.Job.Device.DeviceBatch.InsuranceDetails)); - - - #line default - #line hidden -WriteLiteral("
    \r\n \r\n"); - -WriteLiteral(" - $(function () { - var d; - $('#Job_Show_Device_Details_HNWar_Details_Button').click(function () { - if (!d) - d = $('#Job_Show_Device_Details_HNWar_Details_Dialog').dialog({ - width: 570, - modal: true - }); - else - d.dialog('open'); - return false; - }); - }); - -"); - - - #line 252 "..\..\Views\Job\JobParts\_Subject.cshtml" - } - - - #line default - #line hidden -WriteLiteral(" \r\n"); - - - #line 254 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 267 "..\..\Views\Job\JobParts\_Subject.cshtml" } #line default #line hidden -WriteLiteral(" \r\n"); +WriteLiteral(" "); - #line 257 "..\..\Views\Job\JobParts\_Subject.cshtml" - - - #line default - #line hidden - - #line 257 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.DeviceHeld.HasValue) - { - var canEditLocation = Authorization.Has(Claims.Job.Properties.DeviceHeldLocation); + #line 268 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.Job.DeviceHeld.HasValue) + { + var canEditLocation = Authorization.Has(Claims.Job.Properties.DeviceHeldLocation); #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"); +WriteLiteral("\r\n \r\n"); - #line 301 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 312 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line default #line hidden - #line 301 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.DeviceReadyForReturn.HasValue) - { + #line 312 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.Job.DeviceReadyForReturn.HasValue) + { #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n \r\n \r\n"); +WriteLiteral("\r\n \r\n"); - #line 307 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 318 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" "); +WriteLiteral(" "); - #line 308 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.DeviceReturnedDate.HasValue) - { + #line 319 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.Job.DeviceReturnedDate.HasValue) + { #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n \r\n \r\n"); +WriteLiteral("\r\n \r\n"); - #line 314 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 325 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral("
    Location: - - @if (canEditLocation) - { - switch (Model.LocationMode) + @if (Model.Job.DeviceHeld.HasValue) + { + var canEditLocation = Authorization.Has(Claims.Job.Properties.DeviceHeldLocation); +
    + + + + - - - - - - @if (Model.Job.DeviceReadyForReturn.HasValue) - { - - - + else if (string.IsNullOrEmpty(Model.Job.DeviceHeldLocation)) + { + <None/Unknown> + } + else + { + @Model.Job.DeviceHeldLocation + } + + - } - @if (Model.Job.DeviceReturnedDate.HasValue) - { - - + + - } -
    Location: + + @if (canEditLocation) { - case LocationModes.Unrestricted: - case LocationModes.OptionalList: - @Html.TextBoxFor(m => m.Job.DeviceHeldLocation, new { @class = "small discreet" }) - break; - case LocationModes.RestrictedList: - List listOptions = new List() { new SelectListItem() { Value = "", Text = "" } }; - if (!string.IsNullOrWhiteSpace(Model.Job.DeviceHeldLocation) && !Model.LocationOptions.Any(l => l.Location.Equals(Model.Job.DeviceHeldLocation))) - { - listOptions.Add(new SelectListItem() { Value = Model.Job.DeviceHeldLocation, Text = string.Format("Custom: {0}", Model.Job.DeviceHeldLocation) }); - } - listOptions.AddRange(Model.LocationOptions.Select(l => new SelectListItem() { Value = l.Location, Text = (l.References.Count == 0 ? l.Location : (l.References.Count == 1 ? string.Format("{0} [Job {1}]", l.Location, l.References[0].JobId) : string.Format("{0} [{1} jobs]", l.Location, l.References.Count))) })); - @Html.DropDownListFor(m => m.Job.DeviceHeldLocation, listOptions, new { @class = "small discreet" }); - break; + switch (Model.LocationMode) + { + case LocationModes.Unrestricted: + case LocationModes.OptionalList: + @Html.TextBoxFor(m => m.Job.DeviceHeldLocation, new { @class = "small discreet" }) + break; + case LocationModes.RestrictedList: + List listOptions = new List() { new SelectListItem() { Value = "", Text = "" } }; + if (!string.IsNullOrWhiteSpace(Model.Job.DeviceHeldLocation) && !Model.LocationOptions.Any(l => l.Location.Equals(Model.Job.DeviceHeldLocation))) + { + listOptions.Add(new SelectListItem() { Value = Model.Job.DeviceHeldLocation, Text = string.Format("Custom: {0}", Model.Job.DeviceHeldLocation) }); + } + listOptions.AddRange(Model.LocationOptions.Select(l => new SelectListItem() { Value = l.Location, Text = (l.References.Count == 0 ? l.Location : (l.References.Count == 1 ? string.Format("{0} [Job {1}]", l.Location, l.References[0].JobId) : string.Format("{0} [{1} jobs]", l.Location, l.References.Count))) })); + @Html.DropDownListFor(m => m.Job.DeviceHeldLocation, listOptions, new { @class = "small discreet" }); + break; + } + @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader() } - @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader() - } - else if (string.IsNullOrEmpty(Model.Job.DeviceHeldLocation)) - { - <None/Unknown> - } - else - { - @Model.Job.DeviceHeldLocation - } - -
    Held Since:@CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceHeld, Model.Job.DeviceHeldTechUser)
    Ready:@CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReadyForReturn, Model.Job.DeviceReadyForReturnTechUser)
    Returned:@CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReturnedDate, Model.Job.DeviceReturnedTechUser)Held Since:@CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceHeld, Model.Job.DeviceHeldTechUser)
    - @if (canEditLocation) - { - - } -
    - } - -
    + @if (Model.HasUserPhoto) + { +
    + +
    + }

    @if (Authorization.Has(Claims.User.Show)) {@Html.ActionLink(Model.Job.User.DisplayName, MVC.User.Show(Model.Job.UserId))} else {@Model.Job.User.DisplayName} -

    -
    @Model.Job.User.FriendlyId()
    - @if (Authorization.Has(Claims.User.ShowDetails)) - { - if (!string.IsNullOrWhiteSpace(Model.Job.User.PhoneNumber)) - {
    Phone: @Model.Job.User.PhoneNumber
    } - if (!string.IsNullOrWhiteSpace(Model.Job.User.EmailAddress)) - {} + +
    @Model.Job.User.FriendlyId()
    + @if (Authorization.Has(Claims.User.ShowDetails)) + { + if (!string.IsNullOrWhiteSpace(Model.Job.User.PhoneNumber)) + {
    Phone: @Model.Job.User.PhoneNumber
    } + if (!string.IsNullOrWhiteSpace(Model.Job.User.EmailAddress)) + {} + } + @if (Authorization.Has(Claims.User.ShowFlagAssignments)) + { +
    + @foreach (var flag in Model.Job.User.UserFlagAssignments.Where(f => !f.RemovedDate.HasValue).Select(f => Tuple.Create(f, UserFlagService.GetUserFlag(f.UserFlagId)))) + { + + + @flag.Item2.Name@if (flag.Item1.Comments != null) + {@flag.Item1.Comments.ToHtmlComment()}@CommonHelpers.FriendlyDateAndUser(flag.Item1.AddedDate, flag.Item1.AddedUserId) + + + } + +
    + } + @if (Model.Job.WaitingForUserAction.HasValue) + { +
    +

    Awaiting Action

    + Since: @Model.Job.WaitingForUserAction.ToFullDateTime() +
    + } + @if (Model.UserDetails != null && Model.UserDetails.Details.Count > 0) + { +
    + @foreach (var detail in Model.UserDetails.Details) + { +
    + @detail.Key: @Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail) +
    + } +
    + } +
    +
    diff --git a/Disco.Web/Views/Job/JobParts/_Subject.generated.cs b/Disco.Web/Views/Job/JobParts/_Subject.generated.cs index 51a6b431..0b7706ba 100644 --- a/Disco.Web/Views/Job/JobParts/_Subject.generated.cs +++ b/Disco.Web/Views/Job/JobParts/_Subject.generated.cs @@ -260,11 +260,11 @@ WriteLiteral(@"', data, function (response, result) { #line default #line hidden -WriteLiteral("
    Location" + -":\r\n " + -" \r\n
    " + +"Location:\r\n " + +" \r\n"); - #line 266 "..\..\Views\Job\JobParts\_Subject.cshtml" - - - #line default - #line hidden - - #line 266 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (canEditLocation) - { - switch (Model.LocationMode) - { - case LocationModes.Unrestricted: - case LocationModes.OptionalList: - - - #line default - #line hidden - - #line 272 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Html.TextBoxFor(m => m.Job.DeviceHeldLocation, new { @class = "small discreet" })); - - - #line default - #line hidden - - #line 272 "..\..\Views\Job\JobParts\_Subject.cshtml" - - break; - case LocationModes.RestrictedList: - List listOptions = new List() { new SelectListItem() { Value = "", Text = "" } }; - if (!string.IsNullOrWhiteSpace(Model.Job.DeviceHeldLocation) && !Model.LocationOptions.Any(l => l.Location.Equals(Model.Job.DeviceHeldLocation))) - { - listOptions.Add(new SelectListItem() { Value = Model.Job.DeviceHeldLocation, Text = string.Format("Custom: {0}", Model.Job.DeviceHeldLocation) }); - } - listOptions.AddRange(Model.LocationOptions.Select(l => new SelectListItem() { Value = l.Location, Text = (l.References.Count == 0 ? l.Location : (l.References.Count == 1 ? string.Format("{0} [Job {1}]", l.Location, l.References[0].JobId) : string.Format("{0} [{1} jobs]", l.Location, l.References.Count))) })); - - - #line default - #line hidden - - #line 281 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Html.DropDownListFor(m => m.Job.DeviceHeldLocation, listOptions, new { @class = "small discreet" })); - - - #line default - #line hidden - - #line 281 "..\..\Views\Job\JobParts\_Subject.cshtml" - ; - break; - } + #line 277 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 284 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(AjaxHelpers.AjaxSave()); + #line 277 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (canEditLocation) + { + switch (Model.LocationMode) + { + case LocationModes.Unrestricted: + case LocationModes.OptionalList: + + + #line default + #line hidden + + #line 283 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Html.TextBoxFor(m => m.Job.DeviceHeldLocation, new { @class = "small discreet" })); #line default #line hidden - #line 284 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 283 "..\..\Views\Job\JobParts\_Subject.cshtml" + + break; + case LocationModes.RestrictedList: + List listOptions = new List() { new SelectListItem() { Value = "", Text = "" } }; + if (!string.IsNullOrWhiteSpace(Model.Job.DeviceHeldLocation) && !Model.LocationOptions.Any(l => l.Location.Equals(Model.Job.DeviceHeldLocation))) + { + listOptions.Add(new SelectListItem() { Value = Model.Job.DeviceHeldLocation, Text = string.Format("Custom: {0}", Model.Job.DeviceHeldLocation) }); + } + listOptions.AddRange(Model.LocationOptions.Select(l => new SelectListItem() { Value = l.Location, Text = (l.References.Count == 0 ? l.Location : (l.References.Count == 1 ? string.Format("{0} [Job {1}]", l.Location, l.References[0].JobId) : string.Format("{0} [{1} jobs]", l.Location, l.References.Count))) })); + #line default #line hidden - #line 284 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 292 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Html.DropDownListFor(m => m.Job.DeviceHeldLocation, listOptions, new { @class = "small discreet" })); #line default #line hidden - #line 284 "..\..\Views\Job\JobParts\_Subject.cshtml" - - } - else if (string.IsNullOrEmpty(Model.Job.DeviceHeldLocation)) - { + #line 292 "..\..\Views\Job\JobParts\_Subject.cshtml" + ; + break; + } + + + #line default + #line hidden + + #line 295 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden -WriteLiteral("
    Held Since:
    Held Since:"); - #line 299 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceHeld, Model.Job.DeviceHeldTechUser)); + #line 310 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceHeld, Model.Job.DeviceHeldTechUser)); #line default #line hidden -WriteLiteral("
    Rea" + -"dy:\r\n " + +" Ready:"); - #line 305 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReadyForReturn, Model.Job.DeviceReadyForReturnTechUser)); + #line 316 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReadyForReturn, Model.Job.DeviceReadyForReturnTechUser)); #line default #line hidden -WriteLiteral("
    Ret" + -"urned:\r\n " + +" Returned:"); - #line 312 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReturnedDate, Model.Job.DeviceReturnedTechUser)); + #line 323 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(CommonHelpers.FriendlyDateAndTitleUser(Model.Job.DeviceReturnedDate, Model.Job.DeviceReturnedTechUser)); #line default #line hidden -WriteLiteral("
    \r\n"); +WriteLiteral(" \r\n"); - #line 316 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 327 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line default #line hidden - #line 316 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (canEditLocation) - { + #line 327 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (canEditLocation) + { #line default #line hidden -WriteLiteral(" \r\n $(function () {\r\n"); - #line 320 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 331 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 320 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 331 "..\..\Views\Job\JobParts\_Subject.cshtml" switch (Model.LocationMode) { case LocationModes.Unrestricted: @@ -1382,7 +1453,7 @@ WriteLiteral(@" url: '"); - #line 337 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 348 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Url.Action(MVC.API.Job.DeviceHeldLocations())); @@ -1439,7 +1510,7 @@ WriteLiteral("\',\r\n dat " url: \'"); - #line 388 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 399 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Url.Action(MVC.API.Job.UpdateDeviceHeldLocation(Model.Job.Id, null))); @@ -1467,7 +1538,7 @@ WriteLiteral(@"', WriteLiteral("\r\n"); - #line 406 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 417 "..\..\Views\Job\JobParts\_Subject.cshtml" break; case LocationModes.RestrictedList: @@ -1483,7 +1554,7 @@ WriteLiteral(@" '"); - #line 412 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 423 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Url.Action(MVC.API.Job.UpdateDeviceHeldLocation(Model.Job.Id, null))); @@ -1495,37 +1566,37 @@ WriteLiteral("\',\r\n \'DeviceHeldLoc WriteLiteral("\r\n"); - #line 415 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 426 "..\..\Views\Job\JobParts\_Subject.cshtml" break; } #line default #line hidden -WriteLiteral("\r\n\r\n });\r\n \r\n"); +WriteLiteral("\r\n\r\n });\r\n \r\n"); - #line 421 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 432 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral("
    \r\n"); +WriteLiteral("
    \r\n"); - #line 423 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 434 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" \r\n \r\n"); +WriteLiteral(" \r\n \r\n"); - #line 426 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 437 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default @@ -1533,7 +1604,7 @@ WriteLiteral(" \r\n \r\n"); WriteLiteral(" "); - #line 427 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 438 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.User != null) { @@ -1544,7 +1615,50 @@ WriteLiteral(" \r\n
    \r\n \r\n
    \r\n"); + + + #line 442 "..\..\Views\Job\JobParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 442 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.HasUserPhoto) + { + + + #line default + #line hidden +WriteLiteral(" \r\n (Url.Action(MVC.API.User.Photo(Model.Job.UserId)) + + #line default + #line hidden +, 30524), false) +); + +WriteLiteral(" />\r\n
    \r\n"); + + + #line 447 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); - #line 432 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 449 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 432 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 449 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Authorization.Has(Claims.User.Show)) { #line default #line hidden - #line 433 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 450 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLink(Model.Job.User.DisplayName, MVC.User.Show(Model.Job.UserId))); #line default #line hidden - #line 433 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 450 "..\..\Views\Job\JobParts\_Subject.cshtml" } else { @@ -1581,20 +1695,20 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 435 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 452 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Model.Job.User.DisplayName); #line default #line hidden - #line 435 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 452 "..\..\Views\Job\JobParts\_Subject.cshtml" } #line default #line hidden -WriteLiteral(" \r\n \r\n "); - #line 437 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.User.FriendlyId()); + #line 454 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Model.Job.User.FriendlyId()); #line default @@ -1612,17 +1726,17 @@ WriteLiteral(">"); WriteLiteral("
    \r\n"); - #line 438 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 455 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line default #line hidden - #line 438 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Authorization.Has(Claims.User.ShowDetails)) - { - if (!string.IsNullOrWhiteSpace(Model.Job.User.PhoneNumber)) + #line 455 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Authorization.Has(Claims.User.ShowDetails)) { + if (!string.IsNullOrWhiteSpace(Model.Job.User.PhoneNumber)) + { #line default #line hidden @@ -1635,8 +1749,8 @@ WriteLiteral(" title=\"Phone Number\""); WriteLiteral(">Phone: "); - #line 441 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.User.PhoneNumber); + #line 458 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Model.Job.User.PhoneNumber); #line default @@ -1644,10 +1758,10 @@ WriteLiteral(">Phone: "); WriteLiteral(""); - #line 441 "..\..\Views\Job\JobParts\_Subject.cshtml" - } - if (!string.IsNullOrWhiteSpace(Model.Job.User.EmailAddress)) - { + #line 458 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + if (!string.IsNullOrWhiteSpace(Model.Job.User.EmailAddress)) + { #line default #line hidden @@ -1659,22 +1773,22 @@ WriteLiteral(" title=\"Email Address\""); WriteLiteral(">Email: (Model.Job.User.EmailAddress + #line 460 "..\..\Views\Job\JobParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 31570), Tuple.Create(Model.Job.User.EmailAddress #line default #line hidden -, 30027), false) +, 31570), false) ); WriteLiteral(">"); - #line 443 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.User.EmailAddress); + #line 460 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Model.Job.User.EmailAddress); #line default @@ -1682,80 +1796,80 @@ WriteLiteral(">"); WriteLiteral(""); - #line 443 "..\..\Views\Job\JobParts\_Subject.cshtml" - } - } + #line 460 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + } #line default #line hidden -WriteLiteral(" "); +WriteLiteral(" "); - #line 445 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Authorization.Has(Claims.User.ShowFlagAssignments)) - { + #line 462 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Authorization.Has(Claims.User.ShowFlagAssignments)) + { #line default #line hidden -WriteLiteral(" \r\n"); - #line 448 "..\..\Views\Job\JobParts\_Subject.cshtml" - + #line 465 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line default #line hidden - #line 448 "..\..\Views\Job\JobParts\_Subject.cshtml" - foreach (var flag in Model.Job.User.UserFlagAssignments.Where(f => !f.RemovedDate.HasValue).Select(f => Tuple.Create(f, UserFlagService.GetUserFlag(f.UserFlagId)))) - { + #line 465 "..\..\Views\Job\JobParts\_Subject.cshtml" + foreach (var flag in Model.Job.User.UserFlagAssignments.Where(f => !f.RemovedDate.HasValue).Select(f => Tuple.Create(f, UserFlagService.GetUserFlag(f.UserFlagId)))) + { #line default #line hidden -WriteLiteral(" (flag.Item2.Icon + #line 467 "..\..\Views\Job\JobParts\_Subject.cshtml" +, Tuple.Create(Tuple.Create("", 32094), Tuple.Create(flag.Item2.Icon #line default #line hidden -, 30523), false) -, Tuple.Create(Tuple.Create(" ", 30541), Tuple.Create("fa-fw", 30542), true) -, Tuple.Create(Tuple.Create(" ", 30547), Tuple.Create("d-", 30548), true) +, 32094), false) +, Tuple.Create(Tuple.Create(" ", 32112), Tuple.Create("fa-fw", 32113), true) +, Tuple.Create(Tuple.Create(" ", 32118), Tuple.Create("d-", 32119), true) - #line 450 "..\..\Views\Job\JobParts\_Subject.cshtml" -, Tuple.Create(Tuple.Create("", 30550), Tuple.Create(flag.Item2.IconColour + #line 467 "..\..\Views\Job\JobParts\_Subject.cshtml" +, Tuple.Create(Tuple.Create("", 32121), Tuple.Create(flag.Item2.IconColour #line default #line hidden -, 30550), false) +, 32121), false) ); -WriteLiteral(">\r\n \r\n \r\n \r\n "); - #line 452 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(flag.Item2.Name); + #line 469 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(flag.Item2.Name); #line default @@ -1763,9 +1877,9 @@ WriteLiteral(">"); WriteLiteral(""); - #line 452 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (flag.Item1.Comments != null) - { + #line 469 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (flag.Item1.Comments != null) + { #line default #line hidden @@ -1776,8 +1890,8 @@ WriteLiteral(" class=\"comments\""); WriteLiteral(">"); - #line 453 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(flag.Item1.Comments.ToHtmlComment()); + #line 470 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(flag.Item1.Comments.ToHtmlComment()); #line default @@ -1785,8 +1899,8 @@ WriteLiteral(">"); WriteLiteral(""); - #line 453 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 470 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden @@ -1797,80 +1911,82 @@ WriteLiteral(" class=\"added\""); WriteLiteral(">"); - #line 453 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(CommonHelpers.FriendlyDateAndUser(flag.Item1.AddedDate, flag.Item1.AddedUserId)); + #line 470 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(CommonHelpers.FriendlyDateAndUser(flag.Item1.AddedDate, flag.Item1.AddedUserId)); #line default #line hidden -WriteLiteral("\r\n \r\n \r\n"); +WriteLiteral("\r\n \r\n " + +" \r\n"); - #line 456 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 473 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" \r\n $(function () {\r\n $" + -"(\'#Job_Show_User_Flags\')\r\n .tooltip({\r\n " + -" items: \'i.flag\',\r\n " + -" content: function () {\r\n " + -"var $this = $(this);\r\n return $this.c" + -"hildren(\'.details\').html();\r\n },\r\n " + -" tooltipClass: \'User_FlagAssignment_Tooltip\',\r\n " + -" position: {\r\n " + -" my: \"right top\",\r\n at" + -": \"right bottom\",\r\n collision: \"flipf" + -"it flip\"\r\n },\r\n " + -" hade: {\r\n effect: \'\'\r\n " + -" },\r\n " + -" close: function (e, ui) {\r\n ui.too" + -"ltip.hover(\r\n function () {\r\n " + -" $(this).stop(true).fadeTo(100, 1" + -");\r\n },\r\n " + -" function () {\r\n " + -" $(this).fadeOut(100, function () { $(this).remove(); });\r\n " + -" });\r\n " + -" }\r\n });\r\n });\r\n " + -" \r\n \r\n"); +WriteLiteral(">\r\n $(function () {\r\n " + +" $(\'#Job_Show_User_Flags\')\r\n .toolt" + +"ip({\r\n items: \'i.flag\',\r\n " + +" content: function () {\r\n " + +" var $this = $(this);\r\n " + +" return $this.children(\'.details\').html();\r\n " + +" },\r\n tooltipClas" + +"s: \'User_FlagAssignment_Tooltip\',\r\n p" + +"osition: {\r\n my: \"right top\",\r\n " + +" at: \"right bottom\",\r\n " + +" collision: \"flipfit flip\"\r\n " + +" },\r\n hade: " + +"{\r\n effect: \'\'\r\n " + +" },\r\n close" + +": function (e, ui) {\r\n ui.tooltip" + +".hover(\r\n function () {\r\n " + +" $(this).stop(true).fadeTo(10" + +"0, 1);\r\n },\r\n " + +" function () {\r\n " + +" $(this).fadeOut(100, function () { $(this).remove(); " + +"});\r\n });\r\n " + +" }\r\n });\r\n " + +" });\r\n \r\n " + +" \r\n"); - #line 488 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 505 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" "); +WriteLiteral(" "); - #line 489 "..\..\Views\Job\JobParts\_Subject.cshtml" - if (Model.Job.WaitingForUserAction.HasValue) - { + #line 506 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.Job.WaitingForUserAction.HasValue) + { #line default #line hidden -WriteLiteral(" \r\n

    Awaiting Action

    \r\n Sinc" + -"e: \r\n

    Awaiting Action

    \r\n " + +" Since: "); - #line 493 "..\..\Views\Job\JobParts\_Subject.cshtml" - Write(Model.Job.WaitingForUserAction.ToFullDateTime()); + #line 510 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Model.Job.WaitingForUserAction.ToFullDateTime()); #line default #line hidden -WriteLiteral("\r\n \r\n"); +WriteLiteral("\r\n \r\n"); - #line 495 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 512 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default #line hidden -WriteLiteral(" \r\n \r\n"); +WriteLiteral(" "); - #line 498 "..\..\Views\Job\JobParts\_Subject.cshtml" - } + #line 513 "..\..\Views\Job\JobParts\_Subject.cshtml" + if (Model.UserDetails != null && Model.UserDetails.Details.Count > 0) + { + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 516 "..\..\Views\Job\JobParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 516 "..\..\Views\Job\JobParts\_Subject.cshtml" + foreach (var detail in Model.UserDetails.Details) + { + + + #line default + #line hidden +WriteLiteral("
    \r\n "); + + + #line 519 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(detail.Key); + + + #line default + #line hidden +WriteLiteral(": "); + + + #line 519 "..\..\Views\Job\JobParts\_Subject.cshtml" + Write(Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)); + + + #line default + #line hidden +WriteLiteral("\r\n
    \r\n"); + + + #line 521 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n"); + + + #line 523 "..\..\Views\Job\JobParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + + + #line 526 "..\..\Views\Job\JobParts\_Subject.cshtml" + } #line default @@ -1915,13 +2100,13 @@ WriteLiteral(" id=\"Job_Show_Job_Actions\""); WriteLiteral(">\r\n"); - #line 502 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 530 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 502 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 530 "..\..\Views\Job\JobParts\_Subject.cshtml" List CanCloseForcedReasons; if (Model.Job.CanCloseForced(out CanCloseForcedReasons)) @@ -1931,14 +2116,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 506 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 534 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Forcibly Close", MVC.API.Job.Close(Model.Job.Id, true), "Job_Show_Job_Actions_ForceClose_Button")); #line default #line hidden - #line 506 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 534 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -1968,13 +2153,13 @@ WriteLiteral(">Are you sure?\r\n "
      \r\n"); - #line 513 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 541 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 513 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 541 "..\..\Views\Job\JobParts\_Subject.cshtml" foreach (var reason in CanCloseForcedReasons) { @@ -1984,7 +2169,7 @@ WriteLiteral(">Are you sure?\r\n WriteLiteral("
    • "); - #line 515 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 543 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(reason); @@ -1993,7 +2178,7 @@ WriteLiteral("
    • "); WriteLiteral("
    • \r\n"); - #line 516 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 544 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2002,13 +2187,13 @@ WriteLiteral("\r\n"); WriteLiteral("
    \r\n \r\n"); - #line 519 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 547 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 519 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 547 "..\..\Views\Job\JobParts\_Subject.cshtml" using (Html.BeginForm(MVC.API.Job.ForceClose(Model.Job.Id, null, true))) { @@ -2026,7 +2211,7 @@ WriteLiteral(" class=\"block\""); WriteLiteral(">\r\n

    \r\n"); - #line 525 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 553 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2061,7 +2246,7 @@ WriteLiteral(">\r\n $(function () {\r\n " \r\n"); - #line 558 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 586 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2070,13 +2255,13 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral("\r\n\r\n"); - #line 561 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 589 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 561 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 589 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanCloseNormally()) { @@ -2084,14 +2269,14 @@ WriteLiteral("\r\n\r\n"); #line default #line hidden - #line 563 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 591 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Close", MVC.API.Job.Close(Model.Job.Id, true), "Job_Show_Job_Actions_Close_Button")); #line default #line hidden - #line 563 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 591 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -2137,7 +2322,7 @@ WriteLiteral(">\r\n $(function () {\r\n " });\r\n });\r\n \r\n"); - #line 600 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 628 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2146,7 +2331,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 601 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 629 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanReopen()) { @@ -2154,14 +2339,14 @@ WriteLiteral(" "); #line default #line hidden - #line 603 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 631 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Reopen Job", MVC.API.Job.Reopen(Model.Job.Id, true), "Job_Show_Job_Actions_Reopen_Button")); #line default #line hidden - #line 603 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 631 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -2208,7 +2393,7 @@ WriteLiteral(">\r\n $(function () {\r\n " \r\n"); - #line 641 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 669 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2217,7 +2402,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 642 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 670 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanDelete()) { @@ -2225,14 +2410,14 @@ WriteLiteral(" "); #line default #line hidden - #line 644 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 672 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Delete", MVC.API.Job.Delete(Model.Job.Id, true), "Job_Show_Job_Actions_Delete_Button")); #line default #line hidden - #line 644 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 672 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -2280,7 +2465,7 @@ WriteLiteral(">\r\n $(function () {\r\n " \r\n"); - #line 682 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 710 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2289,7 +2474,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 683 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 711 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanAddQueues() && Model.AvailableQueues != null && Model.AvailableQueues.Count > 0) { @@ -2303,14 +2488,14 @@ WriteLiteral(" "); #line default #line hidden - #line 691 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 719 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Add to Queue", MVC.API.JobQueueJob.AddJob(), "Job_Show_Job_Actions_AddQueue_Button")); #line default #line hidden - #line 691 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 719 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -2327,13 +2512,13 @@ WriteLiteral(" title=\"Add Job to Queue\""); WriteLiteral(">\r\n"); - #line 693 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 721 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 693 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 721 "..\..\Views\Job\JobParts\_Subject.cshtml" using (Html.BeginForm(MVC.API.JobQueueJob.AddJob())) { @@ -2358,14 +2543,14 @@ WriteLiteral(" type=\"hidden\""); WriteLiteral(" name=\"JobId\""); -WriteAttribute("value", Tuple.Create(" value=\"", 44049), Tuple.Create("\"", 44070) +WriteAttribute("value", Tuple.Create(" value=\"", 46423), Tuple.Create("\"", 46444) - #line 696 "..\..\Views\Job\JobParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 44057), Tuple.Create(Model.Job.Id + #line 724 "..\..\Views\Job\JobParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 46431), Tuple.Create(Model.Job.Id #line default #line hidden -, 44057), false) +, 46431), false) ); WriteLiteral(" />\r\n"); @@ -2377,13 +2562,13 @@ WriteLiteral(" class=\"queuePicker\""); WriteLiteral(">\r\n"); - #line 698 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 726 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 698 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 726 "..\..\Views\Job\JobParts\_Subject.cshtml" foreach (var jobQueue in Model.AvailableQueues.OrderBy(jq => jq.Name)) { @@ -2397,7 +2582,7 @@ WriteLiteral(" class=\"queue\""); WriteLiteral(" data-queueid=\""); - #line 700 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 728 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(jobQueue.Id); @@ -2408,7 +2593,7 @@ WriteLiteral("\""); WriteLiteral(" data-queuesla=\""); - #line 700 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 728 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(jobQueue.DefaultSLAExpiry.HasValue ? jobQueue.DefaultSLAExpiry.Value.ToString() : null); @@ -2419,7 +2604,7 @@ WriteLiteral("\""); WriteLiteral(" data-queuepriority=\""); - #line 700 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 728 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(jobQueue.Priority.ToString()); @@ -2429,32 +2614,32 @@ WriteLiteral("\""); WriteLiteral(">\r\n (jobQueue.Icon + #line 729 "..\..\Views\Job\JobParts\_Subject.cshtml" +, Tuple.Create(Tuple.Create("", 46927), Tuple.Create(jobQueue.Icon #line default #line hidden -, 44553), false) -, Tuple.Create(Tuple.Create(" ", 44569), Tuple.Create("fa-fw", 44570), true) -, Tuple.Create(Tuple.Create(" ", 44575), Tuple.Create("fa-lg", 44576), true) -, Tuple.Create(Tuple.Create(" ", 44581), Tuple.Create("d-", 44582), true) +, 46927), false) +, Tuple.Create(Tuple.Create(" ", 46943), Tuple.Create("fa-fw", 46944), true) +, Tuple.Create(Tuple.Create(" ", 46949), Tuple.Create("fa-lg", 46950), true) +, Tuple.Create(Tuple.Create(" ", 46955), Tuple.Create("d-", 46956), true) - #line 701 "..\..\Views\Job\JobParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 44584), Tuple.Create(jobQueue.IconColour + #line 729 "..\..\Views\Job\JobParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 46958), Tuple.Create(jobQueue.IconColour #line default #line hidden -, 44584), false) +, 46958), false) ); WriteLiteral(">"); - #line 701 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 729 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(jobQueue.Name); @@ -2463,7 +2648,7 @@ WriteLiteral(">"); WriteLiteral("\r\n \r\n"); - #line 703 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 731 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2481,7 +2666,7 @@ WriteLiteral(">\r\n
    \r\n WriteLiteral(" "); - #line 708 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 736 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.DropDownList("Priority", priorityItems, new { id = "Job_Show_Job_Actions_AddQueue_Priority" })); @@ -2489,27 +2674,27 @@ WriteLiteral(" "); #line hidden WriteLiteral(" (priorityValue.ToLower() + #line 736 "..\..\Views\Job\JobParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 47399), Tuple.Create(priorityValue.ToLower() #line default #line hidden -, 45025), false) +, 47399), false) ); -WriteAttribute("title", Tuple.Create(" title=\"", 45052), Tuple.Create("\"", 45085) +WriteAttribute("title", Tuple.Create(" title=\"", 47426), Tuple.Create("\"", 47459) - #line 708 "..\..\Views\Job\JobParts\_Subject.cshtml" - , Tuple.Create(Tuple.Create("", 45060), Tuple.Create(priorityValue + #line 736 "..\..\Views\Job\JobParts\_Subject.cshtml" + , Tuple.Create(Tuple.Create("", 47434), Tuple.Create(priorityValue #line default #line hidden -, 45060), false) -, Tuple.Create(Tuple.Create(" ", 45076), Tuple.Create("Priority", 45077), true) +, 47434), false) +, Tuple.Create(Tuple.Create(" ", 47450), Tuple.Create("Priority", 47451), true) ); WriteLiteral(">\r\n
    \r\n
    \r\n " + @@ -2518,7 +2703,7 @@ WriteLiteral(">\r\n
    \r\n WriteLiteral(" "); - #line 712 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 740 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.DropDownList("SLAExpiresMinutes", slaOptions, new { id = "Job_Show_Job_Actions_AddQueue_SLAExpiresMinutes" })); @@ -2536,7 +2721,7 @@ WriteLiteral(">\r\n \r\n "\n"); - #line 719 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 747 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2598,7 +2783,7 @@ WriteLiteral(">\r\n $(function () {\r\n " });\r\n });\r\n \r\n"); - #line 798 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 826 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2607,7 +2792,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 799 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 827 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanLogWarranty()) { @@ -2615,14 +2800,14 @@ WriteLiteral(" "); #line default #line hidden - #line 801 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 829 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Log Warranty", MVC.Job.LogWarranty(Model.Job.Id, null, null), "Job_Show_Job_Actions_LogWarranty_Button")); #line default #line hidden - #line 801 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 829 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2632,7 +2817,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 803 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 831 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanWarrantyCompleted()) { @@ -2640,14 +2825,14 @@ WriteLiteral(" "); #line default #line hidden - #line 805 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 833 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Warranty Complete", MVC.API.Job.UpdateWarrantyExternalCompletedDate(Model.Job.Id, "Now", true), "Job_Show_Job_Actions_WarrantyComplete_Button", "alert")); #line default #line hidden - #line 805 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 833 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2657,7 +2842,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 807 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 835 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanInsuranceClaimFormSent()) { @@ -2665,14 +2850,14 @@ WriteLiteral(" "); #line default #line hidden - #line 809 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 837 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Insurance Claim Sent", MVC.API.Job.UpdateInsuranceClaimFormSentDate(Model.Job.Id, "Now", true), "Job_Show_Job_Actions_InsuranceClaimSent_Button", "alert")); #line default #line hidden - #line 809 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 837 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2682,7 +2867,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 811 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 839 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanLogRepair()) { @@ -2690,14 +2875,14 @@ WriteLiteral(" "); #line default #line hidden - #line 813 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 841 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Log Repair", MVC.Job.LogRepair(Model.Job.Id, null, null), "Job_Show_Job_Actions_LogRepair_Button")); #line default #line hidden - #line 813 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 841 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2707,7 +2892,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 815 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 843 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanRepairComplete()) { @@ -2715,14 +2900,14 @@ WriteLiteral(" "); #line default #line hidden - #line 817 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 845 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Repairs Complete", MVC.API.Job.UpdateNonWarrantyRepairerCompletedDate(Model.Job.Id, "Now", true), "Job_Show_Job_Actions_RepairComplete_Button", "alert")); #line default #line hidden - #line 817 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 845 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2732,7 +2917,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 819 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 847 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanConvertHWarToHNWar()) { @@ -2740,14 +2925,14 @@ WriteLiteral(" "); #line default #line hidden - #line 821 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 849 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Convert to Non-Warranty", MVC.API.Job.ConvertHWarToHNWar(Model.Job.Id, true), "Job_Show_Job_Actions_ConvertToHNWar_Button")); #line default #line hidden - #line 821 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 849 "..\..\Views\Job\JobParts\_Subject.cshtml" @@ -2795,7 +2980,7 @@ WriteLiteral(">\r\n $(function () {\r\n " });\r\n \r\n"); - #line 861 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 889 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2804,13 +2989,13 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" \r\n"); - #line 863 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 891 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 863 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 891 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.Device != null) { @@ -2824,13 +3009,13 @@ WriteLiteral(" id=\"Job_Show_Device_Actions\""); WriteLiteral(">\r\n"); - #line 866 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 894 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 866 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 894 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanDeviceHeld()) { @@ -2838,14 +3023,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 868 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 896 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Device Held", MVC.API.Job.DeviceHeld(Model.Job.Id, true), "Job_Show_Device_Actions_Held_Button")); #line default #line hidden - #line 868 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 896 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2855,7 +3040,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 870 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 898 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanDeviceReadyForReturn()) { @@ -2863,14 +3048,14 @@ WriteLiteral(" "); #line default #line hidden - #line 872 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 900 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Device Ready For Return", MVC.API.Job.DeviceReadyForReturn(Model.Job.Id, true), "Job_Show_Device_Actions_DeviceReadyForReturn_Button", "alert")); #line default #line hidden - #line 872 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 900 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2880,7 +3065,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 874 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 902 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanDeviceReturned()) { @@ -2888,14 +3073,14 @@ WriteLiteral(" "); #line default #line hidden - #line 876 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 904 "..\..\Views\Job\JobParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Device Returned", MVC.API.Job.DeviceReturned(Model.Job.Id, true), "Job_Show_Device_Actions_DeviceReturned_Button", Model.Job.CanDeviceReadyForReturn() ? null : "alert")); #line default #line hidden - #line 876 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 904 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2905,7 +3090,7 @@ WriteLiteral(" "); WriteLiteral(" \r\n"); - #line 879 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 907 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -2914,7 +3099,7 @@ WriteLiteral(" \r\n"); WriteLiteral(" "); - #line 880 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 908 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.User != null) { @@ -2928,13 +3113,13 @@ WriteLiteral(" id=\"Job_Show_User_Actions\""); WriteLiteral(">\r\n\r\n\r\n"); - #line 885 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 913 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 885 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 913 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanWaitingForUserAction()) { @@ -2962,13 +3147,13 @@ WriteLiteral(" title=\"Waiting for User Action\""); WriteLiteral(">\r\n"); - #line 889 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 917 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 889 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 917 "..\..\Views\Job\JobParts\_Subject.cshtml" using (Html.BeginForm(MVC.API.Job.WaitingForUserAction(Model.Job.Id, null, true))) { @@ -2986,7 +3171,7 @@ WriteLiteral(" class=\"block\""); WriteLiteral(">\r\n

    \r\n"); - #line 895 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 923 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -3021,7 +3206,7 @@ WriteLiteral(">\r\n $(function () {\r\n " });\r\n \r\n"); - #line 928 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 956 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -3030,7 +3215,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral(" "); - #line 929 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 957 "..\..\Views\Job\JobParts\_Subject.cshtml" if (Model.Job.CanNotWaitingForUserAction()) { @@ -3058,13 +3243,13 @@ WriteLiteral(" title=\"Not Waiting for User Action\""); WriteLiteral(">\r\n"); - #line 933 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 961 "..\..\Views\Job\JobParts\_Subject.cshtml" #line default #line hidden - #line 933 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 961 "..\..\Views\Job\JobParts\_Subject.cshtml" using (Html.BeginForm(MVC.API.Job.NotWaitingForUserAction(Model.Job.Id, null, true))) { @@ -3082,7 +3267,7 @@ WriteLiteral(" class=\"block\""); WriteLiteral(">\r\n

    \r\n"); - #line 939 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 967 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -3118,7 +3303,7 @@ WriteLiteral(">\r\n $(function () {\r\n " });\r\n \r\n"); - #line 973 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 1001 "..\..\Views\Job\JobParts\_Subject.cshtml" } @@ -3127,7 +3312,7 @@ WriteLiteral(">\r\n $(function () {\r\n WriteLiteral("\r\n \r\n"); - #line 976 "..\..\Views\Job\JobParts\_Subject.cshtml" + #line 1004 "..\..\Views\Job\JobParts\_Subject.cshtml" } diff --git a/Disco.Web/Views/Shared/_CustomDetailValueRender.cshtml b/Disco.Web/Views/Shared/_CustomDetailValueRender.cshtml new file mode 100644 index 00000000..a1327209 --- /dev/null +++ b/Disco.Web/Views/Shared/_CustomDetailValueRender.cshtml @@ -0,0 +1,23 @@ +@model System.Collections.Generic.KeyValuePair +@using System.Text.RegularExpressions +@{ + var emailMatch = Regex.Match(Model.Value, @"^(?.+)\s?<(?
    .+@.+)>$"); + if (!emailMatch.Success) + { + emailMatch = Regex.Match(Model.Value, @"^(?
    .+@.+)$"); + } +} +@if (emailMatch.Success) +{ + var emailAddress = emailMatch.Groups["address"].Value; + var emailName = emailAddress; + if (emailMatch.Groups["name"].Success) + { + emailName = emailMatch.Groups["name"].Value; + } + @emailName +} +else +{ + @Model.Value +} \ No newline at end of file diff --git a/Disco.Web/Views/Shared/_CustomDetailValueRender.generated.cs b/Disco.Web/Views/Shared/_CustomDetailValueRender.generated.cs new file mode 100644 index 00000000..40974306 --- /dev/null +++ b/Disco.Web/Views/Shared/_CustomDetailValueRender.generated.cs @@ -0,0 +1,133 @@ +#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.Views.Shared +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text; + + #line 2 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" + using System.Text.RegularExpressions; + + #line default + #line hidden + 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("~/Views/Shared/_CustomDetailValueRender.cshtml")] + public partial class _CustomDetailValueRender : Disco.Services.Web.WebViewPage> + { + public _CustomDetailValueRender() + { + } + public override void Execute() + { + + #line 3 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" + + var emailMatch = Regex.Match(Model.Value, @"^(?.+)\s?<(?
    .+@.+)>$"); + if (!emailMatch.Success) + { + emailMatch = Regex.Match(Model.Value, @"^(?
    .+@.+)$"); + } + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 10 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" + if (emailMatch.Success) +{ + var emailAddress = emailMatch.Groups["address"].Value; + var emailName = emailAddress; + if (emailMatch.Groups["name"].Success) + { + emailName = emailMatch.Groups["name"].Value; + } + + + #line default + #line hidden +WriteLiteral(" (emailAddress + + #line default + #line hidden +, 570), false) +); + +WriteLiteral(">"); + + + #line 18 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" + Write(emailName); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 19 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" +} +else +{ + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 22 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" + Write(Model.Value); + + + #line default + #line hidden +WriteLiteral("\r\n"); + + + #line 23 "..\..\Views\Shared\_CustomDetailValueRender.cshtml" +} + + #line default + #line hidden + } + } +} +#pragma warning restore 1591 diff --git a/Disco.Web/Views/User/UserParts/_Subject.cshtml b/Disco.Web/Views/User/UserParts/_Subject.cshtml index 9fb651e5..ae475f5b 100644 --- a/Disco.Web/Views/User/UserParts/_Subject.cshtml +++ b/Disco.Web/Views/User/UserParts/_Subject.cshtml @@ -3,11 +3,18 @@ Authorization.Require(Claims.User.Show); var currentDeviceAssignments = Model.User.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue).OrderByDescending(dua => dua.AssignedDate).ToList(); + Disco.Models.Services.Plugins.Details.DetailsResult deviceDetails; } - + @if (Model.AssignedDevicesDetails != null && Model.AssignedDevicesDetails.TryGetValue(assignment.DeviceSerialNumber, out deviceDetails) && deviceDetails.Details.Count > 0) + { + foreach (var detail in deviceDetails.Details) + { + + + + + } + }
    + + @if (Model.HasUserPhoto) + { +
    + +
    + }
    @@ -66,6 +73,21 @@
    } + @if (Model.UserDetails != null && Model.UserDetails.Details.Count > 0) + { +
    + + @foreach (var detail in Model.UserDetails.Details) + { + + + + + + } +
    @detail.Key:@Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)
    +
    + } @if (Authorization.Has(Claims.User.Actions.GenerateDocuments)) {
    @@ -91,52 +113,53 @@
      @foreach (var assignment in currentDeviceAssignments) { -
    • - - - - - - - - - - - - - - - - - - - - - - -
      - Model Image -
      - Serial Number: - - @assignment.Device.SerialNumber (@assignment.Device.ComputerName) -
      - Model: - - @assignment.Device.DeviceModel.ToString() -
      Asset: - @if (!string.IsNullOrEmpty(assignment.Device.AssetNumber)) - { - @assignment.Device.AssetNumber - } - else - { - Unknown - } -
      Assigned: - @CommonHelpers.FriendlyDate(assignment.AssignedDate) -
      -
    • } +
    • + + + + + + + + + + + + + + + + + + + + + + +
      + Model Image +
      + Serial Number: + + @assignment.Device.SerialNumber (@assignment.Device.ComputerName) +
      + Model: + + @assignment.Device.DeviceModel.ToString() +
      Asset: + @if (!string.IsNullOrEmpty(assignment.Device.AssetNumber)) + { + @assignment.Device.AssetNumber + } + else + { + Unknown + } +
      Assigned: + @CommonHelpers.FriendlyDate(assignment.AssignedDate) +
      +
    • + }
    @@ -376,6 +399,16 @@ @CommonHelpers.FriendlyDate(assignment.AssignedDate)
    @detail.Key:@Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)
    diff --git a/Disco.Web/Views/User/UserParts/_Subject.generated.cs b/Disco.Web/Views/User/UserParts/_Subject.generated.cs index b411a846..00d95d98 100644 --- a/Disco.Web/Views/User/UserParts/_Subject.generated.cs +++ b/Disco.Web/Views/User/UserParts/_Subject.generated.cs @@ -49,6 +49,7 @@ namespace Disco.Web.Views.User.UserParts Authorization.Require(Claims.User.Show); var currentDeviceAssignments = Model.User.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue).OrderByDescending(dua => dua.AssignedDate).ToList(); + Disco.Models.Services.Plugins.Details.DetailsResult deviceDetails; #line default @@ -61,7 +62,61 @@ WriteLiteral(">\r\n \r\n \r\n \r\n
    \r\n (Model.HasUserPhoto ? "hasPhoto" : "noPhoto" + + #line default + #line hidden +, 447), false) +); + +WriteLiteral(">\r\n"); + + + #line 12 "..\..\Views\User\UserParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 12 "..\..\Views\User\UserParts\_Subject.cshtml" + if (Model.HasUserPhoto) + { + + + #line default + #line hidden +WriteLiteral(" \r\n (Url.Action(MVC.API.User.Photo(Model.User.UserId)) + + #line default + #line hidden +, 687), false) +); + +WriteLiteral(" />\r\n
    \r\n"); + + + #line 17 "..\..\Views\User\UserParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral("
    \r\n "); - #line 19 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 26 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.UserId); @@ -101,7 +156,7 @@ WriteLiteral(" title=\"Display Name\""); WriteLiteral(">"); - #line 24 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 31 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.DisplayName); @@ -118,7 +173,7 @@ WriteLiteral(" title=\"Given Name\""); WriteLiteral(">"); - #line 28 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 35 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.GivenName); @@ -135,7 +190,7 @@ WriteLiteral(" title=\"Surname\""); WriteLiteral(">"); - #line 32 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 39 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.Surname); @@ -145,13 +200,13 @@ WriteLiteral("\r\n \r\n "\r\n
    \r\n"); - #line 36 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 43 "..\..\Views\User\UserParts\_Subject.cshtml" #line default #line hidden - #line 36 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 43 "..\..\Views\User\UserParts\_Subject.cshtml" if (Authorization.Has(Claims.User.ShowDetails)) { @@ -172,13 +227,13 @@ WriteLiteral(">\r\n \r\n "Email:\r\n \r\n"); - #line 43 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 50 "..\..\Views\User\UserParts\_Subject.cshtml" #line default #line hidden - #line 43 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 50 "..\..\Views\User\UserParts\_Subject.cshtml" if (!string.IsNullOrEmpty(Model.User.EmailAddress)) { @@ -194,7 +249,7 @@ WriteLiteral(" title=\"Email Address [Update in Active Directory]\""); WriteLiteral(">"); - #line 45 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 52 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.EmailAddress); @@ -203,7 +258,7 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 46 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 53 "..\..\Views\User\UserParts\_Subject.cshtml" } else { @@ -218,7 +273,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral(">Unknown\r\n"); - #line 50 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 57 "..\..\Views\User\UserParts\_Subject.cshtml" } @@ -229,13 +284,13 @@ WriteLiteral(" \r\n "hone:\r\n \r\n"); - #line 56 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 63 "..\..\Views\User\UserParts\_Subject.cshtml" #line default #line hidden - #line 56 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 63 "..\..\Views\User\UserParts\_Subject.cshtml" if (!string.IsNullOrEmpty(Model.User.PhoneNumber)) { @@ -251,7 +306,7 @@ WriteLiteral(" title=\"Phone Number [Update in Active Directory]\""); WriteLiteral(">"); - #line 58 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 65 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Model.User.PhoneNumber); @@ -260,7 +315,7 @@ WriteLiteral(">"); WriteLiteral("\r\n"); - #line 59 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 66 "..\..\Views\User\UserParts\_Subject.cshtml" } else { @@ -275,7 +330,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral(">Unknown\r\n"); - #line 63 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 70 "..\..\Views\User\UserParts\_Subject.cshtml" } @@ -285,7 +340,7 @@ WriteLiteral(" \r\n "\n \r\n \r\n"); - #line 68 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 75 "..\..\Views\User\UserParts\_Subject.cshtml" } @@ -294,7 +349,81 @@ WriteLiteral(" \r\n WriteLiteral(" "); - #line 69 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 76 "..\..\Views\User\UserParts\_Subject.cshtml" + if (Model.UserDetails != null && Model.UserDetails.Details.Count > 0) + { + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + + + #line 80 "..\..\Views\User\UserParts\_Subject.cshtml" + + + #line default + #line hidden + + #line 80 "..\..\Views\User\UserParts\_Subject.cshtml" + foreach (var detail in Model.UserDetails.Details) + { + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" "); + + + #line 83 "..\..\Views\User\UserParts\_Subject.cshtml" + Write(detail.Key); + + + #line default + #line hidden +WriteLiteral(":\r\n "); + + + #line 84 "..\..\Views\User\UserParts\_Subject.cshtml" + Write(Html.Partial(MVC.Shared.Views._CustomDetailValueRender, detail)); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 86 "..\..\Views\User\UserParts\_Subject.cshtml" + + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n"); + + + #line 90 "..\..\Views\User\UserParts\_Subject.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 91 "..\..\Views\User\UserParts\_Subject.cshtml" if (Authorization.Has(Claims.User.Actions.GenerateDocuments)) { @@ -312,7 +441,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 72 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 94 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Html.Partial(MVC.Shared.Views._GenerateDocumentControl, Model.GenerateDocumentControlModel)); @@ -321,7 +450,7 @@ WriteLiteral(" "); WriteLiteral("\r\n \r\n"); - #line 74 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 96 "..\..\Views\User\UserParts\_Subject.cshtml" } @@ -334,13 +463,13 @@ WriteLiteral(" id=\"User_Show_Details_Actions\""); WriteLiteral(">\r\n"); - #line 76 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 98 "..\..\Views\User\UserParts\_Subject.cshtml" #line default #line hidden - #line 76 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 98 "..\..\Views\User\UserParts\_Subject.cshtml" if (Model.User.CanCreateJob()) { Html.BundleDeferred("~/ClientScripts/Modules/Disco-CreateJob"); @@ -349,14 +478,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 79 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 101 "..\..\Views\User\UserParts\_Subject.cshtml" Write(Html.ActionLinkSmallButton("Create Job", MVC.Job.Create(Model.PrimaryDeviceSerialNumber, Model.User.UserId), "User_Show_Details_Actions_CreateJob_Button")); #line default #line hidden - #line 79 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 101 "..\..\Views\User\UserParts\_Subject.cshtml" if (currentDeviceAssignments.Count > 1) { @@ -396,73 +525,73 @@ WriteLiteral(" class=\"none\""); WriteLiteral(">\r\n"); - #line 92 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 114 "..\..\Views\User\UserParts\_Subject.cshtml" #line default #line hidden - #line 92 "..\..\Views\User\UserParts\_Subject.cshtml" + #line 114 "..\..\Views\User\UserParts\_Subject.cshtml" foreach (var assignment in currentDeviceAssignments) { #line default #line hidden -WriteLiteral("