Exemple #1
0
        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;
            }
            }
        }
Exemple #2
0
        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));
            }
        }