diff --git a/Disco.Services/Documents/ManagedGroups/DocumentTemplateDevicesManagedGroup.cs b/Disco.Services/Documents/ManagedGroups/DocumentTemplateDevicesManagedGroup.cs index 9cd5c96b..7b0eac99 100644 --- a/Disco.Services/Documents/ManagedGroups/DocumentTemplateDevicesManagedGroup.cs +++ b/Disco.Services/Documents/ManagedGroups/DocumentTemplateDevicesManagedGroup.cs @@ -21,7 +21,6 @@ namespace Disco.Services.Documents.ManagedGroups private IDisposable repositoryAddSubscription; private IDisposable repositoryRemoveSubscription; private IDisposable deviceRenameRepositorySubscription; - private IDisposable jobCloseRepositorySubscription; private IDisposable deviceAssignmentRepositorySubscription; private string DocumentTemplateId; private string DocumentTemplateDescription; @@ -62,9 +61,6 @@ namespace Disco.Services.Documents.ManagedGroups repositoryRemoveSubscription = DocumentTemplateManagedGroups.JobAttachmentRemoveEvents.Value .Where(e => e.Item3 == DocumentTemplateId) .Subscribe(ProcessJobAttachmentRemoveEvent); - // Observe Job Close/Reopen - jobCloseRepositorySubscription = DocumentTemplateManagedGroups.JobCloseRepositoryEvents.Value - .Subscribe(ProcessJobCloseRepositoryEvent); break; case DocumentTemplate.DocumentTemplateScopes.User: // Observe User Attachments @@ -161,27 +157,64 @@ namespace Disco.Services.Documents.ManagedGroups switch (DocumentTemplateScope) { case DocumentTemplate.DocumentTemplateScopes.Device: - return Database.Devices - .Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .Select(d => d.DeviceDomainId) - .ToList() - .Where(ActiveDirectory.IsValidDomainAccountId) - .Select(id => id + "$"); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Devices + .Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .Select(d => d.DeviceDomainId) + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } + else + { + return Database.Devices + .Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .Select(d => d.DeviceDomainId) + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } case DocumentTemplate.DocumentTemplateScopes.Job: - return Database.Jobs - .Where(j => !j.ClosedDate.HasValue && j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .Select(j => j.Device.DeviceDomainId) - .Distinct() - .ToList() - .Where(ActiveDirectory.IsValidDomainAccountId) - .Select(id => id + "$"); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Jobs + .Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .Select(j => j.Device.DeviceDomainId) + .Distinct() + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } + else + { + return Database.Jobs + .Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .Select(j => j.Device.DeviceDomainId) + .Distinct() + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } case DocumentTemplate.DocumentTemplateScopes.User: - return Database.Users - .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId) - .ToList() - .Where(ActiveDirectory.IsValidDomainAccountId) - .Select(id => id + "$"); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Users + .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId) + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } + else + { + return Database.Users + .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId) + .ToList() + .Where(ActiveDirectory.IsValidDomainAccountId) + .Select(id => id + "$"); + } default: return Enumerable.Empty(); } @@ -190,10 +223,22 @@ namespace Disco.Services.Documents.ManagedGroups #region Device Scope private bool DeviceContainsAttachment(DiscoDataContext Database, string DeviceSerialNumber, out string DeviceAccountId) { - var result = Database.Devices - .Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null) - .Select(d => new Tuple(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) - .FirstOrDefault(); + Tuple result; + + if (Configuration.FilterBeginDate.HasValue) + { + result = Database.Devices + .Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null) + .Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))) + .FirstOrDefault(); + } + else + { + result = Database.Devices + .Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null) + .Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) + .FirstOrDefault(); + } if (result == null) { @@ -241,13 +286,29 @@ namespace Disco.Services.Documents.ManagedGroups #region Job Scope private bool JobsContainAttachment(DiscoDataContext Database, int JobId, out string DeviceAccountId, out string DeviceSerialNumber) { - var result = Database.Jobs - .Where(j => j.Id == JobId && j.Device.DeviceDomainId != null) - .Select(j => new Tuple( - j.Device.DeviceDomainId, - j.Device.SerialNumber, - j.Device.Jobs.Where(dj => !dj.ClosedDate.HasValue).Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) - ).FirstOrDefault(); + Tuple result; + + if (Configuration.FilterBeginDate.HasValue) + { + result = Database.Jobs + .Where(j => j.Id == JobId && j.Device.DeviceDomainId != null) + .Select(j => new Tuple( + j.Device.DeviceDomainId, + j.Device.SerialNumber, + j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))) + .FirstOrDefault(); + } + else + { + result = Database.Jobs + .Where(j => j.Id == JobId && j.Device.DeviceDomainId != null) + .Select(j => new Tuple( + j.Device.DeviceDomainId, + j.Device.SerialNumber, + j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)))) + .FirstOrDefault(); + } + if (result == null) { @@ -304,14 +365,30 @@ namespace Disco.Services.Documents.ManagedGroups #region User Scope private bool DeviceUserContainAttachment(DiscoDataContext Database, string UserId, out List> Devices) { - var result = Database.Users - .Where(u => u.UserId == UserId) - .Select(u => new Tuple>>( - u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId), - u.DeviceUserAssignments - .Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null) - .Select(dua => new Tuple(dua.Device.DeviceDomainId, dua.Device.SerialNumber))) - ).FirstOrDefault(); + Tuple>> result; + + if (Configuration.FilterBeginDate.HasValue) + { + result = Database.Users + .Where(u => u.UserId == UserId) + .Select(u => Tuple.Create( + u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate), + u.DeviceUserAssignments + .Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null) + .Select(dua => new Tuple(dua.Device.DeviceDomainId, dua.Device.SerialNumber)))) + .FirstOrDefault(); + } + else + { + result = Database.Users + .Where(u => u.UserId == UserId) + .Select(u => Tuple.Create( + u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId), + u.DeviceUserAssignments + .Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null) + .Select(dua => new Tuple(dua.Device.DeviceDomainId, dua.Device.SerialNumber)))) + .FirstOrDefault(); + } if (result == null) { @@ -376,9 +453,19 @@ namespace Disco.Services.Documents.ManagedGroups } break; case DocumentTemplate.DocumentTemplateScopes.Job: - var jobsHaveTemplate = e.Database.Jobs - .Where(j => !j.ClosedDate.HasValue && j.DeviceSerialNumber == deviceSerialNumber) - .Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); + bool jobsHaveTemplate; + if (Configuration.FilterBeginDate.HasValue) + { + jobsHaveTemplate = e.Database.Jobs + .Where(j => j.DeviceSerialNumber == deviceSerialNumber) + .Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); + } + else + { + jobsHaveTemplate = e.Database.Jobs + .Where(j => j.DeviceSerialNumber == deviceSerialNumber) + .Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); + } if (jobsHaveTemplate) { @@ -389,10 +476,21 @@ namespace Disco.Services.Documents.ManagedGroups } break; case DocumentTemplate.DocumentTemplateScopes.User: - var userHasTemplate = e.Database.Devices - .Where(d => d.SerialNumber == deviceSerialNumber) - .Select(d => d.AssignedUser) - .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); + bool userHasTemplate; + if (Configuration.FilterBeginDate.HasValue) + { + userHasTemplate = e.Database.Devices + .Where(d => d.SerialNumber == deviceSerialNumber) + .Select(d => d.AssignedUser) + .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); + } + else + { + userHasTemplate = e.Database.Devices + .Where(d => d.SerialNumber == deviceSerialNumber) + .Select(d => d.AssignedUser) + .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); + } if (userHasTemplate) { @@ -407,30 +505,6 @@ namespace Disco.Services.Documents.ManagedGroups } } - private void ProcessJobCloseRepositoryEvent(RepositoryMonitorEvent e) - { - var job = (Job)e.Entity; - - if (job.DeviceSerialNumber != null) - { - var jobId = job.Id; - - var relevantJob = e.Database.Jobs - .Where(j => j.Id == jobId && j.JobAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId)) - .Any(); - - if (relevantJob) - { - string deviceAccountId; - string deviceSerialNumber; - if (JobsContainAttachment(e.Database, jobId, out deviceAccountId, out deviceSerialNumber)) - AddMember(deviceSerialNumber, (database) => new string[] { deviceAccountId }); - else - RemoveMember(deviceSerialNumber, (database) => new string[] { deviceAccountId }); - } - } - } - private void ProcessDeviceAssignmentRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; @@ -448,14 +522,36 @@ namespace Disco.Services.Documents.ManagedGroups bool currentUserHasTemplate = false; if (devicePreviousAssignedUserId != null) - previousUserHasTemplate = e.Database.Users - .Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) - .Any(); + { + if (Configuration.FilterBeginDate.HasValue) + { + previousUserHasTemplate = e.Database.Users + .Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate)) + .Any(); + } + else + { + previousUserHasTemplate = e.Database.Users + .Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) + .Any(); + } + } if (deviceCurrentAssignedUserId != null) - currentUserHasTemplate = e.Database.Users - .Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) - .Any(); + { + if (Configuration.FilterBeginDate.HasValue) + { + currentUserHasTemplate = e.Database.Users + .Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate)) + .Any(); + } + else + { + currentUserHasTemplate = e.Database.Users + .Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) + .Any(); + } + } if (!previousUserHasTemplate && currentUserHasTemplate) AddMember(deviceSerialNumber, (database) => new string[] { deviceAccountId + "$" }); @@ -476,9 +572,6 @@ namespace Disco.Services.Documents.ManagedGroups if (deviceRenameRepositorySubscription != null) deviceRenameRepositorySubscription.Dispose(); - if (jobCloseRepositorySubscription != null) - jobCloseRepositorySubscription.Dispose(); - if (deviceAssignmentRepositorySubscription != null) deviceAssignmentRepositorySubscription.Dispose(); } diff --git a/Disco.Services/Documents/ManagedGroups/DocumentTemplateUsersManagedGroup.cs b/Disco.Services/Documents/ManagedGroups/DocumentTemplateUsersManagedGroup.cs index e9824fb3..f4257c35 100644 --- a/Disco.Services/Documents/ManagedGroups/DocumentTemplateUsersManagedGroup.cs +++ b/Disco.Services/Documents/ManagedGroups/DocumentTemplateUsersManagedGroup.cs @@ -20,7 +20,6 @@ namespace Disco.Services.Documents.ManagedGroups private IDisposable repositoryAddSubscription; private IDisposable repositoryRemoveSubscription; - private IDisposable jobCloseRepositorySubscription; private IDisposable deviceAssignmentRepositorySubscription; private string DocumentTemplateId; private string DocumentTemplateDescription; @@ -64,9 +63,6 @@ namespace Disco.Services.Documents.ManagedGroups repositoryRemoveSubscription = DocumentTemplateManagedGroups.JobAttachmentRemoveEvents.Value .Where(e => e.Item3 == DocumentTemplateId) .Subscribe(ProcessJobAttachmentRemoveEvent); - // Observe Job Close/Reopen - jobCloseRepositorySubscription = DocumentTemplateManagedGroups.JobCloseRepositoryEvents.Value - .Subscribe(ProcessJobCloseRepositoryEvent); break; case DocumentTemplate.DocumentTemplateScopes.User: // Observe User Attachments @@ -156,18 +152,46 @@ namespace Disco.Services.Documents.ManagedGroups switch (DocumentTemplateScope) { case DocumentTemplate.DocumentTemplateScopes.Device: - return Database.Devices - .Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .Select(d => d.AssignedUserId); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Devices + .Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .Select(d => d.AssignedUserId); + } + else + { + return Database.Devices + .Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .Select(d => d.AssignedUserId); + } case DocumentTemplate.DocumentTemplateScopes.Job: - return Database.Jobs - .Where(j => !j.ClosedDate.HasValue && j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .Select(j => j.UserId) - .Distinct(); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Jobs + .Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .Select(j => j.UserId) + .Distinct(); + } + else + { + return Database.Jobs + .Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .Select(j => j.UserId) + .Distinct(); + } case DocumentTemplate.DocumentTemplateScopes.User: - return Database.Users - .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) - .Select(u => u.UserId); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Users + .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) + .Select(u => u.UserId); + } + else + { + return Database.Users + .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) + .Select(u => u.UserId); + } default: return Enumerable.Empty(); } @@ -176,10 +200,26 @@ namespace Disco.Services.Documents.ManagedGroups #region Device Scope private bool DeviceContainsAttachment(DiscoDataContext Database, string DeviceSerialNumber, out string UserId) { - var result = Database.Devices - .Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null) - .Select(d => new Tuple(d.AssignedUserId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) - .FirstOrDefault(); + Tuple result; + + if (Configuration.FilterBeginDate.HasValue) + { + result = Database.Devices + .Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null) + .Select(d => Tuple.Create( + d.AssignedUserId, + d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))) + .FirstOrDefault(); + } + else + { + result = Database.Devices + .Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null) + .Select(d => Tuple.Create( + d.AssignedUserId, + d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) + .FirstOrDefault(); + } if (result == null) { @@ -222,12 +262,26 @@ namespace Disco.Services.Documents.ManagedGroups #region Job Scope private bool JobsContainAttachment(DiscoDataContext Database, int JobId, out string UserId) { - var result = Database.Jobs - .Where(j => j.Id == JobId && j.UserId != null) - .Select(j => new Tuple( - j.UserId, - j.User.Jobs.Where(uj => !uj.ClosedDate.HasValue).Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) - ).FirstOrDefault(); + Tuple result; + + if (Configuration.FilterBeginDate.HasValue) + { + result = Database.Jobs + .Where(j => j.Id == JobId && j.UserId != null) + .Select(j => Tuple.Create( + j.UserId, + j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))) + .FirstOrDefault(); + } + else + { + result = Database.Jobs + .Where(j => j.Id == JobId && j.UserId != null) + .Select(j => Tuple.Create( + j.UserId, + j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)))) + .FirstOrDefault(); + } if (result == null) { @@ -270,11 +324,18 @@ namespace Disco.Services.Documents.ManagedGroups #region User Scope private bool UserContainAttachment(DiscoDataContext Database, string UserId) { - var result = Database.Users - .Where(u => u.UserId == UserId) - .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); - - return result; + if (Configuration.FilterBeginDate.HasValue) + { + return Database.Users + .Where(u => u.UserId == UserId) + .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); + } + else + { + return Database.Users + .Where(u => u.UserId == UserId) + .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); + } } private void ProcessUserAttachmentAddEvent(RepositoryMonitorEvent e) @@ -299,37 +360,24 @@ namespace Disco.Services.Documents.ManagedGroups } #endregion - private void ProcessJobCloseRepositoryEvent(RepositoryMonitorEvent e) - { - var job = (Job)e.Entity; - - if (job.UserId != null) - { - var jobId = job.Id; - - var relevantJob = e.Database.Jobs - .Where(j => j.Id == jobId && j.JobAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId)) - .Any(); - - if (relevantJob) - { - string userId; - if (JobsContainAttachment(e.Database, jobId, out userId)) - AddMember(userId, (database) => new string[] { userId }); - else - RemoveMember(userId, (database) => new string[] { userId }); - } - } - } - private void ProcessDeviceAssignmentRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; var deviceSerialNumber = device.SerialNumber; + bool relevantDevice; - var relevantDevice = Event.Database.Devices - .Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId)) - .Any(); + if (Configuration.FilterBeginDate.HasValue) + { + relevantDevice = Event.Database.Devices + .Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId && ja.Timestamp >= Configuration.FilterBeginDate)) + .Any(); + } + else + { + relevantDevice = Event.Database.Devices + .Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId)) + .Any(); + } if (relevantDevice) { @@ -355,9 +403,6 @@ namespace Disco.Services.Documents.ManagedGroups if (repositoryRemoveSubscription != null) repositoryRemoveSubscription.Dispose(); - if (jobCloseRepositorySubscription != null) - jobCloseRepositorySubscription.Dispose(); - if (deviceAssignmentRepositorySubscription != null) deviceAssignmentRepositorySubscription.Dispose(); } diff --git a/Disco.Services/Users/UserFlags/UserFlagUserDevicesManagedGroup.cs b/Disco.Services/Users/UserFlags/UserFlagUserDevicesManagedGroup.cs index 58416052..35c67a65 100644 --- a/Disco.Services/Users/UserFlags/UserFlagUserDevicesManagedGroup.cs +++ b/Disco.Services/Users/UserFlags/UserFlagUserDevicesManagedGroup.cs @@ -24,7 +24,7 @@ namespace Disco.Services.Users.UserFlags public override string Description { get { return string.Format(DescriptionFormat, UserFlagName); } } public override string CategoryDescription { get { return CategoryDescriptionFormat; } } public override string GroupDescription { get { return string.Format(GroupDescriptionFormat, UserFlagName); } } - public override bool IncludeFilterBeginDate { get { return false; } } + public override bool IncludeFilterBeginDate { get { return true; } } private UserFlagUserDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, UserFlag UserFlag) : base(Key, Configuration) @@ -105,7 +105,27 @@ namespace Disco.Services.Users.UserFlags private IEnumerable DetermineDeviceMembers(DiscoDataContext Database, string UserId) { - return DetermineDeviceMembers(Database.Users.Where(u => u.UserId == UserId)); + IQueryable assignments; + + if (Configuration.FilterBeginDate.HasValue) + { + assignments = Database.Users + .Where(u => u.UserId == UserId && + u.UserFlagAssignments + .Any(a => a.UserFlagId == UserFlagId && + !a.RemovedDate.HasValue && + a.AddedDate >= Configuration.FilterBeginDate)); + } + else + { + assignments = Database.Users + .Where(u => u.UserId == UserId && + u.UserFlagAssignments + .Any(a => a.UserFlagId == UserFlagId && + !a.RemovedDate.HasValue)); + } + + return DetermineDeviceMembers(assignments); } private IEnumerable DetermineDeviceMembers(IQueryable Users) @@ -121,38 +141,85 @@ namespace Disco.Services.Users.UserFlags public override IEnumerable DetermineMembers(DiscoDataContext Database) { - var assignments = Database.UserFlagAssignments - .Where(a => a.UserFlagId == UserFlagId && !a.RemovedDate.HasValue) - .Select(a => a.User); + IQueryable assignments; + + if (Configuration.FilterBeginDate.HasValue) + { + assignments = Database.UserFlagAssignments + .Where(a => a.UserFlagId == UserFlagId && + !a.RemovedDate.HasValue && + a.AddedDate >= Configuration.FilterBeginDate) + .Select(a => a.User); + } + else + { + assignments = Database.UserFlagAssignments + .Where(a => a.UserFlagId == UserFlagId && + !a.RemovedDate.HasValue) + .Select(a => a.User); + } return DetermineDeviceMembers(assignments); } private void ProcessRepositoryEvent(RepositoryMonitorEvent Event) { - var userFlagAssignemnt = (UserFlagAssignment)Event.Entity; - string userId = userFlagAssignemnt.UserId; + var userFlagAssignment = (UserFlagAssignment)Event.Entity; + string userId = userFlagAssignment.UserId; switch (Event.EventType) { case RepositoryMonitorEventType.Added: - if (!userFlagAssignemnt.RemovedDate.HasValue) - AddMember(userFlagAssignemnt.UserId, (database) => DetermineDeviceMembers(database, userId)); + if (Configuration.FilterBeginDate.HasValue) + { + if (!userFlagAssignment.RemovedDate.HasValue && userFlagAssignment.AddedDate >= Configuration.FilterBeginDate) + { + AddMember(userFlagAssignment.UserId, (database) => DetermineDeviceMembers(database, userId)); + } + } + else + { + if (!userFlagAssignment.RemovedDate.HasValue) + { + AddMember(userFlagAssignment.UserId, (database) => DetermineDeviceMembers(database, userId)); + } + } break; case RepositoryMonitorEventType.Modified: - if (userFlagAssignemnt.RemovedDate.HasValue) - RemoveMember(userFlagAssignemnt.UserId, (database) => DetermineDeviceMembers(database, userId)); - else - AddMember(userFlagAssignemnt.UserId, (database) => DetermineDeviceMembers(database, userId)); + if (!Configuration.FilterBeginDate.HasValue || userFlagAssignment.AddedDate >= Configuration.FilterBeginDate) + { + if (userFlagAssignment.RemovedDate.HasValue) + RemoveMember(userFlagAssignment.UserId, (database) => DetermineDeviceMembers(database, userId)); + else + AddMember(userFlagAssignment.UserId, (database) => DetermineDeviceMembers(database, userId)); + } break; case RepositoryMonitorEventType.Deleted: // Remove the user's devices if no other (non-removed) assignments exist. RemoveMember(userId, (database) => { - if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue)) - return null; + if (Configuration.FilterBeginDate.HasValue) + { + if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue && a.AddedDate >= Configuration.FilterBeginDate)) + { + return null; + } + else + { + return DetermineDeviceMembers(database, userId); + } + } else - return DetermineDeviceMembers(database, userId); + { + if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue)) + { + return null; + } + else + { + return DetermineDeviceMembers(database, userId); + } + } }); break; } diff --git a/Disco.Services/Users/UserFlags/UserFlagUsersManagedGroup.cs b/Disco.Services/Users/UserFlags/UserFlagUsersManagedGroup.cs index 742a006c..faf0c916 100644 --- a/Disco.Services/Users/UserFlags/UserFlagUsersManagedGroup.cs +++ b/Disco.Services/Users/UserFlags/UserFlagUsersManagedGroup.cs @@ -16,7 +16,7 @@ namespace Disco.Services.Users.UserFlags private const string DescriptionFormat = "User associated with the {0} Flag will be added to this Active Directory group."; private const string CategoryDescriptionFormat = "Assigned Users Linked Group"; private const string GroupDescriptionFormat = "{0} [User Flag Users]"; - + private IDisposable repositorySubscription; private int UserFlagId; private string UserFlagName; @@ -24,7 +24,7 @@ namespace Disco.Services.Users.UserFlags public override string Description { get { return string.Format(DescriptionFormat, UserFlagName); } } public override string CategoryDescription { get { return CategoryDescriptionFormat; } } public override string GroupDescription { get { return string.Format(GroupDescriptionFormat, UserFlagName); } } - public override bool IncludeFilterBeginDate { get { return false; } } + public override bool IncludeFilterBeginDate { get { return true; } } private UserFlagUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, UserFlag UserFlag) : base(Key, Configuration) @@ -105,36 +105,96 @@ namespace Disco.Services.Users.UserFlags public override IEnumerable DetermineMembers(DiscoDataContext Database) { - return Database.UserFlagAssignments - .Where(a => a.UserFlagId == UserFlagId && !a.RemovedDate.HasValue) - .Select(a => a.UserId); + if (Configuration.FilterBeginDate.HasValue) + { + return Database.UserFlagAssignments + .Where(a => a.UserFlagId == UserFlagId && !a.RemovedDate.HasValue && a.AddedDate >= Configuration.FilterBeginDate) + .Select(a => a.UserId); + } + else + { + return Database.UserFlagAssignments + .Where(a => a.UserFlagId == UserFlagId && !a.RemovedDate.HasValue) + .Select(a => a.UserId); + } } private void ProcessRepositoryEvent(RepositoryMonitorEvent Event) { - var userFlagAssignemnt = (UserFlagAssignment)Event.Entity; + var userFlagAssignment = (UserFlagAssignment)Event.Entity; switch (Event.EventType) { case RepositoryMonitorEventType.Added: - if (!userFlagAssignemnt.RemovedDate.HasValue) - AddMember(userFlagAssignemnt.UserId); + if (Configuration.FilterBeginDate.HasValue) + { + if (!userFlagAssignment.RemovedDate.HasValue && userFlagAssignment.AddedDate >= Configuration.FilterBeginDate) + { + AddMember(userFlagAssignment.UserId); + } + } + else + { + if (!userFlagAssignment.RemovedDate.HasValue) + { + AddMember(userFlagAssignment.UserId); + } + } break; case RepositoryMonitorEventType.Modified: - if (userFlagAssignemnt.RemovedDate.HasValue) - RemoveMember(userFlagAssignemnt.UserId); + if (Configuration.FilterBeginDate.HasValue) + { + if (userFlagAssignment.AddedDate >= Configuration.FilterBeginDate) + { + if (userFlagAssignment.RemovedDate.HasValue) + { + RemoveMember(userFlagAssignment.UserId); + } + else + { + AddMember(userFlagAssignment.UserId); + } + } + } else - AddMember(userFlagAssignemnt.UserId); + { + if (userFlagAssignment.RemovedDate.HasValue) + { + RemoveMember(userFlagAssignment.UserId); + } + else + { + AddMember(userFlagAssignment.UserId); + } + } break; case RepositoryMonitorEventType.Deleted: - string userId = userFlagAssignemnt.UserId; + string userId = userFlagAssignment.UserId; // Remove the user if no other (non-removed) assignments exist. RemoveMember(userId, (database) => { - if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue)) - return null; + if (Configuration.FilterBeginDate.HasValue) + { + if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue && a.AddedDate >= Configuration.FilterBeginDate)) + { + return null; + } + else + { + return new string[] { userId }; + } + } else - return new string[] { userId }; + { + if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue)) + { + return null; + } + else + { + return new string[] { userId }; + } + } }); break; } diff --git a/Disco.Web/Areas/API/Controllers/UserFlagController.cs b/Disco.Web/Areas/API/Controllers/UserFlagController.cs index 5807d86f..b3b1ceb7 100644 --- a/Disco.Web/Areas/API/Controllers/UserFlagController.cs +++ b/Disco.Web/Areas/API/Controllers/UserFlagController.cs @@ -1,5 +1,4 @@ using Disco.Models.Repository; -using Disco.Models.Services.Interop.ActiveDirectory; using Disco.Services.Authorization; using Disco.Services.Interop.ActiveDirectory; using Disco.Services.Tasks; @@ -17,8 +16,6 @@ namespace Disco.Web.Areas.API.Controllers const string pDescription = "description"; const string pIcon = "icon"; const string pIconColour = "iconcolour"; - const string pAssignedUsersLinkedGroup = "assigneduserslinkedgroup"; - const string pAssignedUserDevicesLinkedGroup = "assigneduserdeviceslinkedgroup"; [DiscoAuthorize(Claims.Config.UserFlag.Configure)] public virtual ActionResult Update(int id, string key, string value = null, Nullable redirect = null) @@ -48,12 +45,6 @@ namespace Disco.Web.Areas.API.Controllers case pIconColour: UpdateIconColour(flag, value); break; - case pAssignedUsersLinkedGroup: - UpdateAssignedUsersLinkedGroup(flag, value); - break; - case pAssignedUserDevicesLinkedGroup: - UpdateAssignedUserDevicesLinkedGroup(flag, value); - break; default: throw new Exception("Invalid Update Key"); } @@ -132,7 +123,7 @@ namespace Disco.Web.Areas.API.Controllers } } [DiscoAuthorize(Claims.Config.UserFlag.Configure)] - public virtual ActionResult UpdateAssignedUsersLinkedGroup(int id, string GroupId = null, bool redirect = false) + public virtual ActionResult UpdateAssignedUsersLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false) { try { @@ -144,7 +135,7 @@ namespace Disco.Web.Areas.API.Controllers throw new ArgumentException("Invalid User Flag Id", "id"); - var syncTaskStatus = UpdateAssignedUsersLinkedGroup(UserFlag, GroupId); + var syncTaskStatus = UpdateAssignedUsersLinkedGroup(UserFlag, GroupId, FilterBeginDate); if (redirect) if (syncTaskStatus == null) return RedirectToAction(MVC.Config.UserFlag.Index(UserFlag.Id)); @@ -165,7 +156,7 @@ namespace Disco.Web.Areas.API.Controllers } } [DiscoAuthorize(Claims.Config.UserFlag.Configure)] - public virtual ActionResult UpdateAssignedUserDevicesLinkedGroup(int id, string GroupId = null, bool redirect = false) + public virtual ActionResult UpdateAssignedUserDevicesLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false) { try { @@ -177,7 +168,7 @@ namespace Disco.Web.Areas.API.Controllers throw new ArgumentException("Invalid User Flag Id", "id"); - var syncTaskStatus = UpdateAssignedUserDevicesLinkedGroup(UserFlag, GroupId); + var syncTaskStatus = UpdateAssignedUserDevicesLinkedGroup(UserFlag, GroupId, FilterBeginDate); if (redirect) if (syncTaskStatus == null) return RedirectToAction(MVC.Config.UserFlag.Index(UserFlag.Id)); @@ -256,9 +247,9 @@ namespace Disco.Web.Areas.API.Controllers } } - private ScheduledTaskStatus UpdateAssignedUsersLinkedGroup(UserFlag UserFlag, string AssignedUsersLinkedGroup) + private ScheduledTaskStatus UpdateAssignedUsersLinkedGroup(UserFlag UserFlag, string AssignedUsersLinkedGroup, DateTime? FilterBeginDate) { - var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUsersManagedGroup.GetKey(UserFlag), AssignedUsersLinkedGroup, null); + var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUsersManagedGroup.GetKey(UserFlag), AssignedUsersLinkedGroup, FilterBeginDate); if (UserFlag.UsersLinkedGroup != configJson) { @@ -278,9 +269,9 @@ namespace Disco.Web.Areas.API.Controllers return null; } - private ScheduledTaskStatus UpdateAssignedUserDevicesLinkedGroup(UserFlag UserFlag, string AssignedUserDevicesLinkedGroup) + private ScheduledTaskStatus UpdateAssignedUserDevicesLinkedGroup(UserFlag UserFlag, string AssignedUserDevicesLinkedGroup, DateTime? FilterBeginDate) { - var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUserDevicesManagedGroup.GetKey(UserFlag), AssignedUserDevicesLinkedGroup, null); + var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUserDevicesManagedGroup.GetKey(UserFlag), AssignedUserDevicesLinkedGroup, FilterBeginDate); if (UserFlag.UserDevicesLinkedGroup != configJson) { diff --git a/Disco.Web/Areas/Config/Models/Shared/LinkedGroupModel.cs b/Disco.Web/Areas/Config/Models/Shared/LinkedGroupModel.cs index d5b04d06..bdfd4e2e 100644 --- a/Disco.Web/Areas/Config/Models/Shared/LinkedGroupModel.cs +++ b/Disco.Web/Areas/Config/Models/Shared/LinkedGroupModel.cs @@ -12,5 +12,6 @@ namespace Disco.Web.Areas.Config.Models.Shared public string UpdateUrl { get; set; } public ADManagedGroup ManagedGroup { get; set; } + public bool IncludeFilterBeginDate { get; set; } } } \ No newline at end of file diff --git a/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.cshtml b/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.cshtml index cb22a1f0..e59ef3d8 100644 --- a/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.cshtml +++ b/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.cshtml @@ -43,7 +43,7 @@ Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); } } -
+
@@ -70,30 +70,30 @@ @@ -104,25 +104,25 @@ @@ -348,62 +348,62 @@ @if (canConfig) { - - - + $('#Config_DocumentTemplates_TemplatePdf_Button').click(showDialog); + }); + + } + + }
@if (canConfig) { - @Html.TextBoxFor(model => model.DocumentTemplate.Description) - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + @Html.TextBoxFor(model => model.DocumentTemplate.Description) + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + } else { - if (string.IsNullOrEmpty(Model.DocumentTemplate.Description)) - { - <None Specified> - } - else - { - @Model.DocumentTemplate.Description - } + if (string.IsNullOrEmpty(Model.DocumentTemplate.Description)) + { + <None Specified> + } + else + { + @Model.DocumentTemplate.Description + } }
@if (canConfig) - { - - - @AjaxHelpers.AjaxLoader() - + { + + + @AjaxHelpers.AjaxLoader() + } else { - - + + }
@@ -147,56 +147,151 @@
@if (canConfig) - { -
- @using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateScope(Model.DocumentTemplate.Id, redirect: true))) - { -
- - + @foreach (var scope in Model.Scopes) + { + + } + +
+ } +
+

+ Expressions within the Template PDF may need to be updated to reflect any changes to the Document Template Scope. +

+
+ @if (Model.DocumentTemplate.UsersLinkedGroup != null || Model.DocumentTemplate.DevicesLinkedGroup != null) + { +
+

+ Warning: This Document Template contains Linked Groups, these will be automatically updated to reflect the new Document Template Scope which may result in undesired behaviour. +

+
+ } +
+ + } + @if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job) + { +
+

Job Type Filters:

+
+
+ @if (Model.DocumentTemplate.JobSubTypes.Count > 0) { -
-

- Warning: This Document Template contains Linked Groups, these will be automatically updated to reflect the new Document Template Scope which may result in undesired behaviour. -

-
+
    + @foreach (var jobType in Model.DocumentTemplate.JobSubTypes.GroupBy(jst => jst.JobType).OrderBy(jtg => jtg.Key.Description)) + { +
  • + @jobType.Key.Description +
      + @if (jobType.Count() == Model.JobTypes.FirstOrDefault(jt => jt.Id == jobType.Key.Id).JobSubTypes.Count) + { +
    • [All Sub Types]
    • + } + else + { + foreach (var jobSubType in jobType) + { +
    • @jobSubType.Description
    • + } + } +
    +
  • + } +
+ } + else + { + <No Filter> }
- - } - @if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job) - { -
-

Job Type Filters:

-
-
- @if (Model.DocumentTemplate.JobSubTypes.Count > 0) - { -
    - @foreach (var jobType in Model.DocumentTemplate.JobSubTypes.GroupBy(jst => jst.JobType).OrderBy(jtg => jtg.Key.Description)) - { -
  • - @jobType.Key.Description -
      - @if (jobType.Count() == Model.JobTypes.FirstOrDefault(jt => jt.Id == jobType.Key.Id).JobSubTypes.Count) - { -
    • [All Sub Types]
    • - } - else - { - foreach (var jobSubType in jobType) - { -
    • @jobSubType.Description
    • - } - } -
    -
  • - } -
- } - else - { - <No Filter> - } -
- @if (canConfig) - { - Update -
- @using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateJobSubTypes(Model.DocumentTemplate.Id, null, true))) - { - var selectedTypes = Model.DocumentTemplate.JobSubTypes.Select(jst => jst.JobType).Distinct().ToList(); - foreach (var jt in Model.JobTypes) - { -
-

- -

-
- @CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id), "div") - @CommonHelpers.CheckBoxList("JobSubTypes", jt.JobSubTypes.OrderBy(jst => jst.Description).ToSelectListItems(Model.DocumentTemplate.JobSubTypes), 2) -
-
- } - } -
- - } -
+ } +
}
- @Html.ActionLinkSmallButton("Download Template", MVC.API.DocumentTemplate.Template(Model.DocumentTemplate.Id)) - @if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.Upload)) - { - -
-

Select a PDF Template to upload:

-
- @using (Html.BeginForm(MVC.API.DocumentTemplate.Template(Model.DocumentTemplate.Id, true, null), FormMethod.Post, new { enctype = "multipart/form-data" })) - { - - } -
-
- - } -
@@ -420,61 +420,61 @@ @if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.ConfigureFilterExpression)) { - @Html.EditorFor(model => model.DocumentTemplate.FilterExpression) - @AjaxHelpers.AjaxRemove() - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + + if (!!field.val()) { + fieldRemove.show(); + } else { + fieldRemove.hide(); + } + }); + } else { - if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.FilterExpression)) - { - <None Specified> - } - else - { -
- @Model.DocumentTemplate.FilterExpression -
- } + if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.FilterExpression)) + { + <None Specified> + } + else + { +
+ @Model.DocumentTemplate.FilterExpression +
+ } }

@@ -489,62 +489,62 @@ @if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.ConfigureFilterExpression)) - { - @Html.EditorFor(model => model.DocumentTemplate.OnGenerateExpression) - @AjaxHelpers.AjaxRemove() - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + + if (!!field.val()) { + fieldRemove.show(); + } else { + fieldRemove.hide(); + } + }); + } else { - if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.OnGenerateExpression)) - { - <None Specified> - } - else - { -

- @Model.DocumentTemplate.OnGenerateExpression -
- } + if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.OnGenerateExpression)) + { + <None Specified> + } + else + { +
+ @Model.DocumentTemplate.OnGenerateExpression +
+ } }

@@ -560,61 +560,61 @@ @if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.ConfigureFilterExpression)) { - @Html.EditorFor(model => model.DocumentTemplate.OnImportAttachmentExpression) - @AjaxHelpers.AjaxRemove() - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + + if (!!field.val()) { + fieldRemove.show(); + } else { + fieldRemove.hide(); + } + }); + } else { - if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.OnImportAttachmentExpression)) - { - <None Specified> - } - else - { -

- @Model.DocumentTemplate.OnImportAttachmentExpression -
- } + if (string.IsNullOrWhiteSpace(Model.DocumentTemplate.OnImportAttachmentExpression)) + { + <None Specified> + } + else + { +
+ @Model.DocumentTemplate.OnImportAttachmentExpression +
+ } }

@@ -630,24 +630,26 @@

@Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() - { - CanConfigure = canConfig, - CategoryDescription = DocumentTemplateUsersManagedGroup.GetCategoryDescription(Model.DocumentTemplate), - Description = DocumentTemplateUsersManagedGroup.GetDescription(Model.DocumentTemplate), - ManagedGroup = Model.UsersLinkedGroup, - UpdateUrl = Url.Action(MVC.API.DocumentTemplate.UpdateUsersLinkedGroup(Model.DocumentTemplate.Id, redirect: true)) - }) + { + CanConfigure = canConfig, + CategoryDescription = DocumentTemplateUsersManagedGroup.GetCategoryDescription(Model.DocumentTemplate), + Description = DocumentTemplateUsersManagedGroup.GetDescription(Model.DocumentTemplate), + ManagedGroup = Model.UsersLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DocumentTemplate.UpdateUsersLinkedGroup(Model.DocumentTemplate.Id, redirect: true)) + }) @Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() - { - CanConfigure = canConfig, - CategoryDescription = DocumentTemplateDevicesManagedGroup.GetCategoryDescription(Model.DocumentTemplate), - Description = DocumentTemplateDevicesManagedGroup.GetDescription(Model.DocumentTemplate), - ManagedGroup = Model.DevicesLinkedGroup, - UpdateUrl = Url.Action(MVC.API.DocumentTemplate.UpdateDevicesLinkedGroup(Model.DocumentTemplate.Id, redirect: true)) - }) + { + CanConfigure = canConfig, + CategoryDescription = DocumentTemplateDevicesManagedGroup.GetCategoryDescription(Model.DocumentTemplate), + Description = DocumentTemplateDevicesManagedGroup.GetDescription(Model.DocumentTemplate), + ManagedGroup = Model.DevicesLinkedGroup, + IncludeFilterBeginDate = true, + UpdateUrl = Url.Action(MVC.API.DocumentTemplate.UpdateDevicesLinkedGroup(Model.DocumentTemplate.Id, redirect: true)) + }) @if (canConfig) - { - @Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared) + { + @Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared) }
@@ -702,113 +704,113 @@
@if (hideAdvanced) { - - + }); + } @if (Authorization.Has(Claims.Config.Show)) { - @Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser()) + @Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser()) } @if (canBulkGenerate) { - Bulk Generate -
-
- @switch (Model.DocumentTemplate.Scope) - { - case "Device": -
- Enter multiple Device Serial Numbers separated by <new line>, commas (,) or semicolons (;). -
-
-

Examples:

-
- 01234567
- ABCD9876
- 8VQ6G2R -
-
01234567,ABCD9876,8VQ6G2R
-
01234567;ABCD9876;8VQ6G2R
-
- break; - case "Job": -
- Enter multiple Job Ids separated by <new line>, commas (,) or semicolons (;). -
-
-

Examples:

-
- 86
- 99
- 44 -
-
86,99,44
-
86;99;44
-
- break; - case "User": -
- Enter multiple User Ids separated by <new line>, commas (,) or semicolons (;). -
-
-

Examples:

-
- user6
- smi0099
@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith -
-
user6,smi0099,@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
-
user6;smi0099;@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
-
- break; - } + Bulk Generate +
+
+ @switch (Model.DocumentTemplate.Scope) + { + case "Device": +
+ Enter multiple Device Serial Numbers separated by <new line>, commas (,) or semicolons (;).
- @using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post)) - { -
- +
+

Examples:

+
+ 01234567
+ ABCD9876
+ 8VQ6G2R +
+
01234567,ABCD9876,8VQ6G2R
+
01234567;ABCD9876;8VQ6G2R
+
+ break; + case "Job": +
+ Enter multiple Job Ids separated by <new line>, commas (,) or semicolons (;). +
+
+

Examples:

+
+ 86
+ 99
+ 44 +
+
86,99,44
+
86;99;44
+
+ break; + case "User": +
+ Enter multiple User Ids separated by <new line>, commas (,) or semicolons (;). +
+
+

Examples:

+
+ user6
+ smi0099
@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith +
+
user6,smi0099,@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
+
user6;smi0099;@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
+
+ break; }
+ @using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post)) + { +
+ + } +
- + }); + } @if (Authorization.Has(Claims.Config.DocumentTemplate.Delete)) { - @Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete") + @Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete") }
diff --git a/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.generated.cs b/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.generated.cs index 5b5acbc3..02e10c23 100644 --- a/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.generated.cs +++ b/Disco.Web/Areas/Config/Views/DocumentTemplate/Show.generated.cs @@ -111,10 +111,10 @@ WriteLiteral("\r\n(hideAdvanced ? "Config_HideAdvanced" : null +, Tuple.Create(Tuple.Create("", 2032), Tuple.Create(hideAdvanced ? " Config_HideAdvanced" : null #line default #line hidden @@ -174,86 +174,85 @@ WriteLiteral("\r\n \r\n \r\n #line 71 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" if (canConfig) { - + #line default #line hidden #line 73 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(Html.TextBoxFor(model => model.DocumentTemplate.Description)); + Write(Html.TextBoxFor(model => model.DocumentTemplate.Description)); #line default #line hidden #line 73 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - - + + #line default #line hidden #line 74 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(AjaxHelpers.AjaxSave()); + Write(AjaxHelpers.AjaxSave()); #line default #line hidden #line 74 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - - + + #line default #line hidden #line 75 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(AjaxHelpers.AjaxLoader()); + Write(AjaxHelpers.AjaxLoader()); #line default #line hidden #line 75 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - + #line default #line hidden -WriteLiteral(" - $(function () { - document.DiscoFunctions.PropertyChangeHelper( - $('#DocumentTemplate_Description'), - 'Description', - '"); + $(function () { + document.DiscoFunctions.PropertyChangeHelper( + $('#DocumentTemplate_Description'), + 'Description', + '"); #line 81 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(Url.Action(MVC.API.DocumentTemplate.UpdateDescription(Model.DocumentTemplate.Id))); + Write(Url.Action(MVC.API.DocumentTemplate.UpdateDescription(Model.DocumentTemplate.Id))); #line default #line hidden -WriteLiteral("\',\r\n \'Description\'\r\n " + -" );\r\n });\r\n " + -" \r\n"); +WriteLiteral("\',\r\n \'Description\'\r\n " + +" );\r\n });\r\n \r\n"); #line 86 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" } else { - if (string.IsNullOrEmpty(Model.DocumentTemplate.Description)) - { + if (string.IsNullOrEmpty(Model.DocumentTemplate.Description)) + { #line default #line hidden -WriteLiteral(" <None Specified>\r\n"); #line 92 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - } - else - { - + } + else + { + #line default #line hidden #line 95 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(Model.DocumentTemplate.Description); + Write(Model.DocumentTemplate.Description); #line default #line hidden #line 95 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - - } + + } } @@ -297,12 +296,12 @@ WriteLiteral(" \r\n \r\n #line 106 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" if (canConfig) - { + { #line default #line hidden -WriteLiteral("
\r\n"); #line 149 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" if (canConfig) - { + { #line default #line hidden -WriteLiteral(" \r\n"); #line 152 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - + #line default #line hidden #line 152 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateScope(Model.DocumentTemplate.Id, redirect: true))) - { + using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateScope(Model.DocumentTemplate.Id, redirect: true))) + { #line default #line hidden -WriteLiteral(" \r\n \r\n Scope: \r\n Scope: \r\n \r\n"); #line 157 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - + #line default #line hidden #line 157 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - foreach (var scope in Model.Scopes) - { + foreach (var scope in Model.Scopes) + { #line default #line hidden -WriteLiteral(" (scope +, Tuple.Create(Tuple.Create("", 8039), Tuple.Create(scope #line default #line hidden -, 8225), false) +, 8039), false) ); -WriteAttribute("selected", Tuple.Create(" selected=\"", 8232), Tuple.Create("\"", 8303) +WriteAttribute("selected", Tuple.Create(" selected=\"", 8046), Tuple.Create("\"", 8118) #line 159 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - , Tuple.Create(Tuple.Create("", 8243), Tuple.Create(scope == Model.DocumentTemplate.Scope ? "selected" : null +, Tuple.Create(Tuple.Create("", 8057), Tuple.Create(scope == Model.DocumentTemplate.Scope ? " selected" : null #line default #line hidden -, 8243), false) +, 8057), false) ); WriteLiteral(">"); #line 159 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - Write(scope); + Write(scope); #line default @@ -600,104 +599,102 @@ WriteLiteral("\r\n"); #line 160 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - } + } #line default #line hidden -WriteLiteral(" \r\n " + -"
\r\n"); +WriteLiteral(" \r\n
\r\n"); #line 163 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - } + } #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n \r\n Expressions within the Template PDF may need to be updated to reflect any ch" + -"anges to the Document Template Scope.\r\n

\r" + -"\n
\r\n"); +"anges to the Document Template Scope.\r\n

\r\n " + +"
\r\n"); #line 169 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - + #line default #line hidden #line 169 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - if (Model.DocumentTemplate.UsersLinkedGroup != null || Model.DocumentTemplate.DevicesLinkedGroup != null) - { + if (Model.DocumentTemplate.UsersLinkedGroup != null || Model.DocumentTemplate.DevicesLinkedGroup != null) + { #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n \r\n Warning: This Document Template contains Linked Groups, these will be automatically updated to reflect the new Document Template Scope which may result in undesired behaviour. -

-
+

+
"); #line 176 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" - } + } #line default #line hidden -WriteLiteral("
\r\n"); +WriteLiteral(" \r\n"); -WriteLiteral(" \r\n $(function () {\r\n " + -" var dialog;\r\n\r\n function showDialog() " + -"{\r\n if (dialog == null) {\r\n " + -" dialog = $(\'#Config_DocumentTemplates_Scope_Dialog" + -"\').dialog({\r\n width: 400,\r\n " + -" resizable: false,\r\n " + -" modal: true,\r\n " + -" autoOpen: false,\r\n but" + -"tons: {\r\n \'Save Changes\': fun" + -"ction () {\r\n dialog.dialo" + -"g(\'option\', \'buttons\', null);\r\n " + -" dialog.dialog(\'disable\');\r\n " + -" $(\'#Config_DocumentTemplates_Scope_Scope\').closest(\'form\').submit();\r\n" + -" },\r\n " + -" \'Cancel\': function () {\r\n " + -" dialog.dialog(\'close\');\r\n " + -" }\r\n }\r\n" + -" });\r\n " + -" }\r\n\r\n dialog.dialog(\'open\');\r\n\r\n" + -" return false;\r\n " + -" }\r\n\r\n $(\'#Config_DocumentTemplates" + -"_Scope_Button\').click(showDialog);\r\n });\r\n " + -" \r\n"); +WriteLiteral(">\r\n $(function () {\r\n v" + +"ar dialog;\r\n\r\n function showDialog() {\r\n " + +" if (dialog == null) {\r\n " + +" dialog = $(\'#Config_DocumentTemplates_Scope_Dialog\').dialog({\r\n " + +" width: 400,\r\n " + +" resizable: false,\r\n mod" + +"al: true,\r\n autoOpen: false,\r\n " + +" buttons: {\r\n " + +" \'Save Changes\': function () {\r\n " + +" dialog.dialog(\'option\', \'buttons\', null);\r\n " + +" dialog.dialog(\'disable\');\r\n " + +" $(\'#Config_DocumentTemplates_Scope_Scope\').clo" + +"sest(\'form\').submit();\r\n },\r\n " + +" \'Cancel\': function () {\r\n " + +" dialog.dialog(\'close\');\r\n " + +" }\r\n " + +" }\r\n });\r\n " + +" }\r\n\r\n dialog.dialog(\'open\');\r\n\r\n " + +" return false;\r\n }\r\n\r\n" + +" $(\'#Config_DocumentTemplates_Scope_Button\').clic" + +"k(showDialog);\r\n });\r\n \r\n"); #line 210 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" @@ -711,16 +708,16 @@ WriteLiteral(" "); #line 211 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job) - { + { #line default #line hidden -WriteLiteral("
\r\n"); +WriteLiteral("
\r\n"); -WriteLiteral("

Job Type Filters:

\r\n"); +WriteLiteral("

Job Type Filters:

\r\n"); -WriteLiteral("