Disco.Services.Documents.ManagedGroups.DocumentTemplateDevicesManagedGroup.ProcessDeviceRenameRepositoryEvent C# (CSharp) Method

ProcessDeviceRenameRepositoryEvent() private method

private ProcessDeviceRenameRepositoryEvent ( RepositoryMonitorEvent Event ) : void
Event RepositoryMonitorEvent
return void
        private void ProcessDeviceRenameRepositoryEvent(RepositoryMonitorEvent Event)
        {
            var device = (Device)Event.Entity;
            var deviceSerialNumber = device.SerialNumber;
            var deviceAccountId = device.DeviceDomainId;
            var deviceAccountIdValid = ActiveDirectory.IsValidDomainAccountId(deviceAccountId);
            var devicePreviousAccountId = Event.GetPreviousPropertyValue<string>("DeviceDomainId");
            var devicePreviousAccountIdValid = ActiveDirectory.IsValidDomainAccountId(devicePreviousAccountId);

            if (deviceAccountIdValid || devicePreviousAccountIdValid)
            {
                Event.ExecuteAfterCommit(e =>
                {
                    switch (DocumentTemplateScope)
                    {
                        case DocumentTemplate.DocumentTemplateScopes.Device:
                            if (DeviceContainsAttachment(e.Database, device.SerialNumber, out deviceAccountId))
                            {
                                if (deviceAccountIdValid)
                                    AddMember(device.SerialNumber, (database) => new string[] { deviceAccountId });
                                if (devicePreviousAccountIdValid)
                                    RemoveMember(device.SerialNumber, (database) => new string[] { devicePreviousAccountId + "$" });
                            }
                            break;
                        case DocumentTemplate.DocumentTemplateScopes.Job:
                            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)
                            {
                                if (deviceAccountIdValid)
                                    AddMember(device.SerialNumber, (database) => new string[] { deviceAccountId + "$" });
                                if (devicePreviousAccountIdValid)
                                    RemoveMember(device.SerialNumber, (database) => new string[] { devicePreviousAccountId + "$" });
                            }
                            break;
                        case DocumentTemplate.DocumentTemplateScopes.User:
                            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)
                            {
                                if (deviceAccountIdValid)
                                    AddMember(device.SerialNumber, (database) => new string[] { deviceAccountId + "$" });
                                if (devicePreviousAccountIdValid)
                                    RemoveMember(device.SerialNumber, (database) => new string[] { devicePreviousAccountId + "$" });
                            }
                            break;
                    }
                });
            }
        }