public static void DeleteJobQueue(DiscoDataContext Database, int JobQueueId, IScheduledTaskStatus Status) { JobQueue queue = Database.JobQueues.Find(JobQueueId); // Validate: Current Jobs? var currentJobs = Database.JobQueueJobs.Any(jqj => jqj.JobQueueId == queue.Id && !jqj.RemovedDate.HasValue); if (currentJobs) throw new InvalidOperationException("The Job Queue cannot be deleted because it contains jobs"); // Delete History Status.UpdateStatus(0, string.Format("Removing '{0}' [{1}] Job Queue", queue.Name, queue.Id), "Starting"); var jobQueueJobs = Database.JobQueueJobs.Include("Job").Where(jsj => jsj.JobQueueId == queue.Id).ToList(); if (jobQueueJobs.Count > 0) { double progressInterval = 90 / jobQueueJobs.Count; for (int jqjIndex = 0; jqjIndex < jobQueueJobs.Count; jqjIndex++) { var jqj = jobQueueJobs[jqjIndex]; Status.UpdateStatus(jqjIndex * progressInterval, string.Format("Merging history into job #{0} logs", jqj.JobId)); // Write Logs Database.JobLogs.Add(new JobLog() { JobId = jqj.JobId, TechUserId = jqj.AddedUserId, Timestamp = jqj.AddedDate, Comments = string.Format("# Added to Queue\r\n**{0}**\r\nPriority: **{1}**\r\n{2}", Environment.NewLine, queue.Name, jqj.Priority.ToString(), string.IsNullOrWhiteSpace(jqj.AddedComment) ? "<no comment>" : jqj.AddedComment) }); Database.JobLogs.Add(new JobLog() { JobId = jqj.JobId, TechUserId = jqj.RemovedUserId, Timestamp = jqj.RemovedDate.Value, Comments = string.Format("# Removed from Queue\r\n**{0}**\r\n{1}", queue.Name, string.IsNullOrWhiteSpace(jqj.RemovedComment) ? "<no comment>" : jqj.RemovedComment) }); // Delete JQJ Database.JobQueueJobs.Remove(jqj); // Save Changes Database.SaveChanges(); } } // Delete Queue Status.UpdateStatus(90, "Deleting Queue"); Database.JobQueues.Remove(queue); Database.SaveChanges(); // Remove from Cache _cache.RemoveQueue(JobQueueId); Status.Finished(string.Format("Successfully Deleted Job Queue: '{0}' [{1}]", queue.Name, queue.Id)); }
public static void DeleteUserFlag(DiscoDataContext Database, int UserFlagId, IScheduledTaskStatus Status) { UserFlag flag = Database.UserFlags.Find(UserFlagId); // Dispose of AD Managed Groups Interop.ActiveDirectory.ActiveDirectory.Context.ManagedGroups.Remove(UserFlagUserDevicesManagedGroup.GetKey(flag)); Interop.ActiveDirectory.ActiveDirectory.Context.ManagedGroups.Remove(UserFlagUsersManagedGroup.GetKey(flag)); // Delete Assignments Status.UpdateStatus(0, string.Format("Removing '{0}' [{1}] User Flag", flag.Name, flag.Id), "Starting"); List<UserFlagAssignment> flagAssignments = Database.UserFlagAssignments.Where(fa => fa.UserFlagId == flag.Id).ToList(); if (flagAssignments.Count > 0) { Status.UpdateStatus(20, "Removing flag from users"); flagAssignments.ForEach(flagAssignment => Database.UserFlagAssignments.Remove(flagAssignment)); Database.SaveChanges(); } // Delete Flag Status.UpdateStatus(90, "Deleting User Flag"); Database.UserFlags.Remove(flag); Database.SaveChanges(); // Remove from Cache _cache.Remove(UserFlagId); Status.Finished(string.Format("Successfully Deleted User Flag: '{0}' [{1}]", flag.Name, flag.Id)); }