public static void Delete(object Object, ObservableCollection <Client> Clients = null, ObservableCollection <CleaningJob> CleaningJobs = null, ObservableCollection <Cleaner> Cleaners = null, ObservableCollection <TeamsHelper> TeamsHelpers = null, ObservableCollection <Service> Services = null) { var messageBoxText = "Delete this item?"; string caption = "Confirm Deletion"; MessageBoxButton button = MessageBoxButton.OKCancel; MessageBoxImage icon = MessageBoxImage.Warning; MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon); // Process message box results switch (result) { case MessageBoxResult.OK: { try { using (var db = new PodaciContext()) { if (Object.GetType().Name == "TeamsHelper") { try { db.Remove(((TeamsHelper)Object).Team); db.SaveChanges(); TeamsHelpers.Remove((TeamsHelper)Object); } catch { MessageBox.Show("Not possible to delete Team while it has cleaning jobs allocated!", "Delete no possible", MessageBoxButton.OK, MessageBoxImage.Warning); } } if (Object.GetType().Name == "Client") { var client = db.Clients.Include(x => x.CleaningJobs).FirstOrDefault(); if (client.CleaningJobs?.Count > 0) { MessageBox.Show("Not possible to delete Client while he has cleaning jobs allocated to him!", "Delete no possible", MessageBoxButton.OK, MessageBoxImage.Warning); } else { db.Remove(Object); db.SaveChanges(); Clients.Remove((Client)Object); } } if (Object.GetType().Name == "CleaningJob") { db.Remove(Object); db.SaveChanges(); CleaningJobs.Remove((CleaningJob)Object); } if (Object.GetType().Name == "Service") { db.Remove(Object); db.SaveChanges(); Services.Remove((Service)Object); } if (Object.GetType().Name == "Cleaner") { try { db.Remove(Object); db.SaveChanges(); Cleaners.Remove((Cleaner)Object); } catch { MessageBox.Show("Not possible to delete Cleaner while he has cleaning jobs allocated!", "Delete no possible", MessageBoxButton.OK, MessageBoxImage.Warning); } } } } catch { MessageBox.Show("Error deleting!", "Delete no possible", MessageBoxButton.OK, MessageBoxImage.Warning); } break; } case MessageBoxResult.Cancel: { break; } } }
public static void setRepeatingJobs(int RepeatJobId, CleaningJob CleaningJobCopy) { try { if (RepeatJobId == 0) { return; } int iterations = 50; var date = CleaningJobCopy.Date; List <int> ids = new List <int>(); using (var db = new PodaciContext()) { var RepeatJob = db.RepeatJobs .Include(x => x.CleaningJobs).FirstOrDefault(x => x.Id == RepeatJobId); RepeatJob.AllDaysToDays(); //var defaultCleanJob = RepeatJob.CleaningJobs.FirstOrDefault(); int week = getWeek(date); int year = date.Year; int maxWeek = getWeek(new DateTime(year, 12, 31)); List <int> weeks = new List <int> { week }; for (int i = 0; i < iterations + 1; i++) { weeks.Add((weeks[i] + RepeatJob.RepeatFrequency) % (maxWeek + 1)); } List <CleaningJob> toRemove = new List <CleaningJob>(); foreach (var cleanJob in RepeatJob.CleaningJobs) { if (cleanJob.Date >= date) { if (!RepeatJob.days[cleanJob.Day] || !weeks.Contains(cleanJob.Week)) { toRemove.Add(cleanJob); } } } foreach (var c in toRemove) { if (c.Id != CleaningJobCopy.Id) { db.Remove(c); } } db.SaveChanges(); if (RepeatJob.CleaningJobs == null || RepeatJob.CleaningJobs.Count <= 0) { return; } int day = getDay(date); List <DateTime> weekDatetimes = new List <DateTime>(); for (int i = 0; i < 7; i++) { if (RepeatJob.days[i]) { weekDatetimes.Add(date.AddDays(i - day)); } } int datesCount = weekDatetimes.Count; for (int i = 0; i < iterations; i++) { //var watch = System.Diagnostics.Stopwatch.StartNew(); for (int j = 0; j < datesCount; j++) { var cleanjob = RepeatJob.CleaningJobs.FirstOrDefault(x => x.Date.Date == weekDatetimes[j].Date); if (cleanjob == null) { var defaultCleanJob = new CleaningJob(); defaultCleanJob.TeamId = CleaningJobCopy.TeamId; defaultCleanJob.TimeEnd = CleaningJobCopy.TimeEnd; defaultCleanJob.TimeStart = CleaningJobCopy.TimeStart; defaultCleanJob.Location = CleaningJobCopy.Location; defaultCleanJob.NoOfHours = CleaningJobCopy.NoOfHours; defaultCleanJob.ClientId = CleaningJobCopy.ClientId; defaultCleanJob.CleanerId = CleaningJobCopy.CleanerId; defaultCleanJob.ServiceId = CleaningJobCopy.ServiceId; defaultCleanJob.Amount = CleaningJobCopy.Amount; defaultCleanJob.Date = weekDatetimes[j]; defaultCleanJob.RepeatJob = null; defaultCleanJob.RepeatJobId = RepeatJobId; defaultCleanJob.JobStatus = CleaningJobCopy.JobStatus; db.Add(defaultCleanJob); db.SaveChanges(); ids.Add(defaultCleanJob.Id); } else { cleanjob.TeamId = CleaningJobCopy.TeamId; cleanjob.TimeEnd = CleaningJobCopy.TimeEnd; cleanjob.TimeStart = CleaningJobCopy.TimeStart; cleanjob.Location = CleaningJobCopy.Location; cleanjob.NoOfHours = CleaningJobCopy.NoOfHours; cleanjob.ClientId = CleaningJobCopy.ClientId; cleanjob.CleanerId = CleaningJobCopy.CleanerId; cleanjob.ServiceId = CleaningJobCopy.ServiceId; cleanjob.Amount = CleaningJobCopy.Amount; cleanjob.Date = weekDatetimes[j]; cleanjob.JobStatus = CleaningJobCopy.JobStatus; //watch.Reset(); //watch.Start(); if (cleanjob.Id != CleaningJobCopy.Id) { ids.Add(cleanjob.Id); db.Update(cleanjob); } //watch.Stop(); //var elapsedMs2 = watch.ElapsedMilliseconds; //System.Diagnostics.Debug.WriteLine("elapsedMs2= " + elapsedMs2 ); } weekDatetimes[j] = weekDatetimes[j].AddDays(7 * RepeatJob.RepeatFrequency); } } db.SaveChanges(); } using (var db = new PodaciContext()) { var cjTemp = db.CleaningJobs.Include(x => x.ServiceJobs).FirstOrDefault(x => x.Id == CleaningJobCopy.Id); foreach (int id in ids) { var ServiceJobsCopy = new List <ServiceJob>(); foreach (var v in cjTemp.ServiceJobs) { ServiceJobsCopy.Add(new ServiceJob { CleaningJobId = v.CleaningJobId, ServiceId = v.ServiceId }); } if (ServiceJobsCopy != null) { foreach (var v in ServiceJobsCopy) { v.CleaningJobId = id; v.CleaningJob = null; } } var cljTemp = db.CleaningJobs.Include(x => x.ServiceJobs).FirstOrDefault(x => x.Id == id).ServiceJobs; checkAndSaveServiceJobs(ServiceJobsCopy, cljTemp, db); } } } catch (Exception ex) { MessageBox.Show("Error Repeating jobs: " + ex.Message); } }
protected void OnPropertyChanged(string prop) { if (PropertyChanged != null) { if (prop == "Name") { Team.Name = Name; using (var db = new PodaciContext()) { db.Update(Team); db.SaveChanges(); } } else if (prop == "Color") { Team.Color = Color; using (var db = new PodaciContext()) { db.Update(Team); db.SaveChanges(); } } else { bool flag = true; List <int> Cleaners = new List <int>(); if (CleanerId != null) { if (Cleaners.Contains((int)CleanerId)) { flag = false; } Cleaners.Add((int)CleanerId); } if (Cleaner2Id != null) { if (Cleaners.Contains((int)Cleaner2Id)) { flag = false; } Cleaners.Add((int)Cleaner2Id); } if (Cleaner3Id != null) { if (Cleaners.Contains((int)Cleaner3Id)) { flag = false; } Cleaners.Add((int)Cleaner3Id); } if (Cleaner4Id != null) { if (Cleaners.Contains((int)Cleaner4Id)) { flag = false; } Cleaners.Add((int)Cleaner4Id); } if (Cleaner5Id != null) { if (Cleaners.Contains((int)Cleaner5Id)) { flag = false; } Cleaners.Add((int)Cleaner5Id); } if (Cleaner6Id != null) { if (Cleaners.Contains((int)Cleaner6Id)) { flag = false; } Cleaners.Add((int)Cleaner6Id); } if (flag) { using (var db = new PodaciContext()) { List <CleanerTeam> toRemove = new List <CleanerTeam>(); for (int i = 0; i < Team.CleanerTeams?.Count(); i++) { if (!Cleaners.Contains(Team.CleanerTeams[i].CleanerId)) { toRemove.Add(Team.CleanerTeams[i]); } } if (toRemove.Count > 0) { foreach (var CleanerTeam in toRemove) { db.Remove(CleanerTeam); Team.CleanerTeams.Remove(CleanerTeam); } db.SaveChanges(); } flag = false; foreach (int CleanerId in Cleaners) { if (CleanerId != 0 && !Team.CleanerTeams.Any(x => x.CleanerId == CleanerId)) { var CleanerTeam = new CleanerTeam { CleanerId = CleanerId, TeamId = Team.Id }; db.Add(CleanerTeam); Team.CleanerTeams.Add(CleanerTeam); flag = true; } } if (flag) { db.SaveChanges(); } //if (Cleaners.Count < Team.CleanerTeams?.Count()) //{ // var cleanersTemp = Team.CleanerTeams.Select(x => x.CleanerId)?.ToList(); // foreach (var CleanId in cleanersTemp) // { // if (Cleaners.Count == 0 || !Cleaners.Contains(CleanId)) // { // db.Remove(CleanId); // db.SaveChanges(); // } // } //} //else if (Cleaners.Count >= Team.CleanerTeams?.Count()) //{ // var cleanersTemp = Team.CleanerTeams.Select(x => x.CleanerId)?.ToList(); // flag = false; // List<int> cleanerIds = new List<int>(); // foreach (var CleanId in Cleaners) // { // if (cleanersTemp == null || !cleanersTemp.Contains(CleanId)) // { // cleanerIds.Add(CleanId); // flag = true; // } // } // if (flag) // { // int j = 0; // for (int i = 0; i < Team.CleanerTeams?.Count(); i++) // { // if (!Cleaners.Contains(Team.CleanerTeams[i].CleanerId)) // { // db.Remove(Team.CleanerTeams[i]); // db.SaveChanges(); // db.Add(new CleanerTeam { CleanerId = cleanerIds[j], TeamId = Team.Id }); // db.SaveChanges(); // Team.CleanerTeams[i].CleanerId = cleanerIds[j]; // j++; // } // } // if (Cleaners.Count > Team.CleanerTeams?.Count()) // { // for (int i = Team.CleanerTeams.Count(); i < Cleaners.Count; i++) // { // var cleanTeam = new CleanerTeam { CleanerId = cleanerIds[j], TeamId = Team.Id }; // Team.CleanerTeams.Add(cleanTeam); // db.Add(cleanTeam); // db.SaveChanges(); // j++; // } // } // } //} } } } PropertyChanged(this, new PropertyChangedEventArgs(prop)); } }