public void DeviceReadyForReturn(RepositoryMonitorEvent e) { var job = (Job)e.Entity; var emailConfig = new ConfigurationStore(e.Database).DeserializeConfiguration(); var messageConfig = emailConfig.MessageConfig.First(z => z.EmailMessageType == MessageType.DeviceReadyForCollection); var user = UserService.GetUser(job.UserId); if (!job.DeviceReadyForReturn.HasValue || !messageConfig.EmailAlertEnabled || user.EmailAddress == null) { return; } //Send Collection Email try { Internal.Email.SendEmailMessage(user, messageConfig, job); //Insert note into job log if email has been sent successfully e.Database.JobLogs.Add(new JobLog { Job = job, Comments = $"# Collection Email Sent.\r\n Collection email sent to {user.DisplayName}", TechUser = e.Database.Users.Find(UserService.CurrentUserId), Timestamp = DateTime.Now }); e.Database.SaveChanges(); } catch (Exception message) { throw new Exception(message.ToString()); } }
private static void RepositoryEventBefore(RepositoryMonitorEvent e) { if (e.EventType == RepositoryMonitorEventType.Deleted) { if (e.EntityType == typeof(JobLog)) { var repositoryLog = (JobLog)e.Entity; int logJobId; using (DiscoDataContext Database = new DiscoDataContext()) logJobId = Database.JobLogs.Where(l => l.Id == repositoryLog.Id).Select(a => a.JobId).First(); HubContext.Clients.Group(LogsGroupName(logJobId)).removeLog(repositoryLog.Id); } if (e.EntityType == typeof(JobAttachment)) { var repositoryAttachment = (JobAttachment)e.Entity; int attachmentJobId; using (DiscoDataContext Database = new DiscoDataContext()) attachmentJobId = Database.JobAttachments.Where(a => a.Id == repositoryAttachment.Id).Select(a => a.JobId).First(); HubContext.Clients.Group(AttachmentsGroupName(attachmentJobId)).removeAttachment(repositoryAttachment.Id); } } }
private static void RepositoryAfterEvent(RepositoryMonitorEvent e) { if (e.EventType == RepositoryMonitorEventType.Added) { if (e.EntityType == typeof(UserAttachment)) { var a = (UserAttachment)e.Entity; HubContext.Clients.Group(GroupName(a.UserId)).addAttachment(a.Id); } } }
internal static void UpdateAfterEventFromEntryState(RepositoryMonitorEvent monitorEvent) { monitorEvent.afterCommit = true; if (monitorEvent.EventType == RepositoryMonitorEventType.Added) { // Update Entity Key for Added Events monitorEvent.EntityKey = DetermineEntityKey(monitorEvent.objectEntryState); } // Execute Deferred Actions if (monitorEvent.executeAfterCommit != null) foreach (var deferredAction in monitorEvent.executeAfterCommit) deferredAction.Invoke(monitorEvent); }
private static void RepositoryEventBefore(RepositoryMonitorEvent e) { if (e.EventType == RepositoryMonitorEventType.Deleted) { if (e.EntityType == typeof(UserAttachment)) { var repositoryAttachment = (UserAttachment)e.Entity; string attachmentUserId; using (DiscoDataContext Database = new DiscoDataContext()) attachmentUserId = Database.UserAttachments.Where(a => a.Id == repositoryAttachment.Id).Select(a => a.UserId).First(); HubContext.Clients.Group(GroupName(attachmentUserId)).removeAttachment(repositoryAttachment.Id); } } }
private void ProcessRepositoryEvent(RepositoryMonitorEvent Event) { var userFlagAssignment = (UserFlagAssignment)Event.Entity; switch (Event.EventType) { case RepositoryMonitorEventType.Added: 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 (Configuration.FilterBeginDate.HasValue) { if (userFlagAssignment.AddedDate >= Configuration.FilterBeginDate) { if (userFlagAssignment.RemovedDate.HasValue) { RemoveMember(userFlagAssignment.UserId); } else { AddMember(userFlagAssignment.UserId); } } } else { if (userFlagAssignment.RemovedDate.HasValue) { RemoveMember(userFlagAssignment.UserId); } else { AddMember(userFlagAssignment.UserId); } } break; case RepositoryMonitorEventType.Deleted: string userId = userFlagAssignment.UserId; // Remove the user if no other (non-removed) assignments exist. RemoveMember(userId, (database) => { 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 { if (database.UserFlagAssignments.Any(a => a.UserFlagId == UserFlagId && a.UserId == userId && !a.RemovedDate.HasValue)) { return null; } else { return new string[] { userId }; } } }); break; } }
private void ProcessRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; string previousUserId = Event.GetPreviousPropertyValue<string>("AssignedUserId"); Event.ExecuteAfterCommit(e => { switch (e.EventType) { case RepositoryMonitorEventType.Added: AddMember(device.AssignedUserId); break; case RepositoryMonitorEventType.Modified: if (device.DeviceProfileId == this.DeviceProfileId) { if (device.AssignedUserId != null) AddMember(device.AssignedUserId); if (e.ModifiedProperties.Contains("AssignedUserId")) { if (previousUserId != null) RemoveMember(previousUserId, (database) => !database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) ? new string[] { previousUserId } : null); } } else { if (previousUserId != null) RemoveMember(previousUserId, (database) => !database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) ? new string[] { previousUserId } : null); } break; case RepositoryMonitorEventType.Deleted: if (previousUserId != null) RemoveMember(previousUserId, (database) => !database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) ? new string[] { previousUserId } : null); break; } }); }
private void JobNotification(RepositoryMonitorEvent e) { List<int> jobIds = null; JobTableItemModel[] existingItems = null; if (e.EntityType == typeof(Job)) jobIds = new List<int>() { ((Job)e.Entity).Id }; else if (e.EntityType == typeof(JobLog)) { if (e.EventType == RepositoryMonitorEventType.Added) { var jobLog = ((JobLog)e.Entity); var job = base.Items.FirstOrDefault(i => i.JobId == jobLog.JobId); if (job != null && job.LastActivityDate < jobLog.Timestamp) job.LastActivityDate = jobLog.Timestamp; return; } else jobIds = new List<int>() { ((JobLog)e.Entity).JobId }; } else if (e.EntityType == typeof(JobAttachment)) { if (e.EventType == RepositoryMonitorEventType.Added) { var jobAttachment = ((JobAttachment)e.Entity); var job = base.Items.FirstOrDefault(i => i.JobId == jobAttachment.JobId); if (job != null && job.LastActivityDate < jobAttachment.Timestamp) job.LastActivityDate = jobAttachment.Timestamp; return; } else jobIds = new List<int>() { ((JobAttachment)e.Entity).JobId }; } else if (e.EntityType == typeof(JobQueueJob)) jobIds = new List<int>() { ((JobQueueJob)e.Entity).JobId }; else if (e.EntityType == typeof(JobMetaWarranty)) jobIds = new List<int>() { ((JobMetaWarranty)e.Entity).JobId }; else if (e.EntityType == typeof(JobMetaNonWarranty)) jobIds = new List<int>() { ((JobMetaNonWarranty)e.Entity).JobId }; else if (e.EntityType == typeof(JobMetaInsurance)) jobIds = new List<int>() { ((JobMetaInsurance)e.Entity).JobId }; else if (e.EntityType == typeof(DeviceProfile)) { int deviceProfileId = ((DeviceProfile)e.Entity).Id; existingItems = base.Items.Where(i => i.DeviceProfileId == deviceProfileId).ToArray(); } else if (e.EntityType == typeof(DeviceModel)) { int deviceModelId = ((DeviceModel)e.Entity).Id; existingItems = base.Items.Where(i => i.DeviceModelId == deviceModelId).ToArray(); } else if (e.EntityType == typeof(Device)) { string deviceSerialNumber = ((Device)e.Entity).SerialNumber; existingItems = base.Items.Where(i => i.DeviceSerialNumber == deviceSerialNumber).ToArray(); } else return; // Subscription should never reach if (jobIds == null) { if (existingItems == null) throw new InvalidOperationException("Notification algorithm didn't indicate any Jobs for update"); else jobIds = existingItems.Select(i => i.JobId).ToList(); } if (jobIds.Count == 0) return; else UpdateJobs(e.Database, jobIds, existingItems); }
private void ProcessDeviceAssignmentRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; var deviceSerialNumber = device.SerialNumber; var deviceAccountId = device.DeviceDomainId; if (ActiveDirectory.IsValidDomainAccountId(deviceAccountId)) { var deviceCurrentAssignedUserId = device.AssignedUserId; var devicePreviousAssignedUserId = Event.GetPreviousPropertyValue<string>("AssignedUserId"); Event.ExecuteAfterCommit(e => { bool previousUserHasTemplate = false; bool currentUserHasTemplate = false; if (devicePreviousAssignedUserId != null) { 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) { 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 + "$" }); else if (previousUserHasTemplate && !currentUserHasTemplate) RemoveMember(deviceSerialNumber, (database) => new string[] { deviceAccountId + "$" }); }); } }
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; } }); } }
private void ProcessUserAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (UserAttachment)e.Entity; List<Tuple<string, string>> devices; if (DeviceUserContainAttachment(e.Database, attachment.UserId, out devices) && devices != null) devices.ForEach(d => AddMember(d.Item2, (database) => new string[] { d.Item1 })); }
private static void RepositoryEvent(RepositoryMonitorEvent i) { List<string> deviceSerialNumbers = new List<string>(); List<string> userIds = new List<string>(); if (i.EntityType == typeof(Job)) { if (i.EventType == RepositoryMonitorEventType.Modified && i.ModifiedProperties.Contains("DeviceSerialNumber")) { var p = i.GetPreviousPropertyValue<string>("DeviceSerialNumber"); if (p != null) deviceSerialNumbers.Add(p); } var j = (Job)i.Entity; if (j.DeviceSerialNumber != null) deviceSerialNumbers.Add(j.DeviceSerialNumber); } else if (i.EntityType == typeof(JobMetaNonWarranty)) { var jmnw = (JobMetaNonWarranty)i.Entity; if (jmnw.Job != null) { if (jmnw.Job.DeviceSerialNumber != null) deviceSerialNumbers.Add(jmnw.Job.DeviceSerialNumber); } else { var sn = i.Database.Jobs.Where(j => j.Id == jmnw.JobId).Select(j => j.DeviceSerialNumber).FirstOrDefault(); if (sn != null) deviceSerialNumbers.Add(sn); } } else if (i.EntityType == typeof(Device)) { var d = (Device)i.Entity; deviceSerialNumbers.Add(d.SerialNumber); if (i.EventType == RepositoryMonitorEventType.Modified && i.ModifiedProperties.Contains("AssignedUserId")) { var p = i.GetPreviousPropertyValue<string>("AssignedUserId"); if (p != null) userIds.Add(p); } } else if (i.EntityType == typeof(DeviceProfile)) { var dp = (DeviceProfile)i.Entity; deviceSerialNumbers.AddRange( i.Database.Jobs .Where(j => !j.ClosedDate.HasValue && j.Device.DeviceProfileId == dp.Id) .Select(j => j.DeviceSerialNumber) ); } else if (i.EntityType == typeof(User)) { var u = (User)i.Entity; deviceSerialNumbers.AddRange( i.Database.Jobs .Where(j => !j.ClosedDate.HasValue && j.Device.AssignedUserId == u.UserId) .Select(j => j.DeviceSerialNumber) ); } if (deviceSerialNumbers.Count > 0 || userIds.Count > 0) { i.ExecuteAfterCommit(e => { BufferedUpdateStream.OnNext(Tuple.Create(deviceSerialNumbers, userIds)); }); } }
private void ProcessDeviceAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (DeviceAttachment)e.Entity; string deviceAccountId; if (DeviceContainsAttachment(e.Database, attachment.DeviceSerialNumber, out deviceAccountId)) AddMember(attachment.DeviceSerialNumber, (database) => new string[] { deviceAccountId }); }
private static void RepositoryAfterEvent(RepositoryMonitorEvent e) { if (e.EventType == RepositoryMonitorEventType.Added) { if (e.EntityType == typeof(JobLog)) { var a = (JobLog)e.Entity; HubContext.Clients.Group(LogsGroupName(a.JobId)).addLog(a.Id); } if (e.EntityType == typeof(JobAttachment)) { var a = (JobAttachment)e.Entity; HubContext.Clients.Group(AttachmentsGroupName(a.JobId)).addAttachment(a.Id); } } }
private void ProcessDeviceAssignmentRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; var deviceSerialNumber = device.SerialNumber; bool relevantDevice; 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) { var deviceCurrentAssignedUserId = device.AssignedUserId; var devicePreviousAssignedUserId = Event.GetPreviousPropertyValue<string>("AssignedUserId"); Event.ExecuteAfterCommit(e => { if (devicePreviousAssignedUserId != null) RemoveMember(devicePreviousAssignedUserId, (database) => new string[] { devicePreviousAssignedUserId }); if (deviceCurrentAssignedUserId != null) AddMember(deviceCurrentAssignedUserId, (database) => new string[] { deviceCurrentAssignedUserId }); }); } }
private void ProcessUserAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (UserAttachment)e.Entity; var userId = attachment.UserId; if (UserContainAttachment(e.Database, userId) && userId != null) AddMember(userId, (database) => new string[] { userId }); }
private void ProcessJobAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (JobAttachment)e.Entity; string userId; if (JobsContainAttachment(e.Database, attachment.JobId, out userId) && userId != null) AddMember(userId, (database) => new string[] { userId }); }
private void ProcessDeviceAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (DeviceAttachment)e.Entity; string userId; if (DeviceContainsAttachment(e.Database, attachment.DeviceSerialNumber, out userId) && userId != null) AddMember(userId, (database) => new string[] { userId }); }
private void ProcessJobAttachmentAddEvent(RepositoryMonitorEvent e) { var attachment = (JobAttachment)e.Entity; string deviceAccountId; string deviceSerialNumber; if (JobsContainAttachment(e.Database, attachment.JobId, out deviceAccountId, out deviceSerialNumber)) AddMember(deviceSerialNumber, (database) => new string[] { deviceAccountId }); }
private static void RepositoryEvent_JobChange(RepositoryMonitorEvent e) { if (e.EventType == RepositoryMonitorEventType.Added) { // New Job var todaysStats = _data.Last(); todaysStats.OpenedJobs += 1; todaysStats.TotalJobs += 1; } else { DateTime? previousValue = e.GetPreviousPropertyValue<DateTime?>("ClosedDate"); if (previousValue.HasValue) { // Remove Statistics var statItem = _data.FirstOrDefault(i => i.Timestamp == previousValue.Value.Date); if (statItem != null) { statItem.ClosedJobs -= 1; statItem.TotalJobs += 1; } foreach (var affectedStat in _data.Where(i => i.Timestamp > previousValue)) { affectedStat.TotalJobs += 1; } } } DateTime? currentValue = e.GetCurrentPropertyValue<DateTime?>("ClosedDate"); if (currentValue.HasValue) { // Add Statistics // Remove Statistics var statItem = _data.FirstOrDefault(i => i.Timestamp == currentValue.Value.Date); if (statItem != null) { statItem.ClosedJobs += 1; statItem.TotalJobs -= 1; } foreach (var affectedStat in _data.Where(i => i.Timestamp > currentValue)) { affectedStat.TotalJobs -= 1; } } }
private void ProcessRepositoryEvent(RepositoryMonitorEvent Event) { var device = (Device)Event.Entity; string previousDeviceDomainId = Event.GetPreviousPropertyValue<string>("DeviceDomainId"); Event.ExecuteAfterCommit(e => { switch (e.EventType) { case RepositoryMonitorEventType.Added: AddMember(device.DeviceDomainId + "$"); break; case RepositoryMonitorEventType.Modified: if (device.DeviceBatchId == this.DeviceBatchId) { if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId)) AddMember(device.DeviceDomainId + "$"); if (e.ModifiedProperties.Contains("DeviceDomainId")) { if (ActiveDirectory.IsValidDomainAccountId(previousDeviceDomainId)) RemoveMember(previousDeviceDomainId + "$"); } } else { if (e.ModifiedProperties.Contains("DeviceDomainId")) { if (ActiveDirectory.IsValidDomainAccountId(previousDeviceDomainId)) RemoveMember(previousDeviceDomainId + "$"); } else { if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId)) RemoveMember(device.DeviceDomainId + "$"); } } break; case RepositoryMonitorEventType.Deleted: if (ActiveDirectory.IsValidDomainAccountId(previousDeviceDomainId)) RemoveMember(previousDeviceDomainId + "$"); break; } }); }