Ejemplo n.º 1
0
        private void Prediction()
        {
            // Set sample size from (CurrentDate - 3 Months) to Current Date
            DateTime CurrentDate = new DateTime(DateTime.Today.Year,
                                                DateTime.Today.Month, DateTime.Today.Day, 0, 0, 0);
            int      FirstDay        = -90;
            DateTime SampleStartDate = DateUtil.AddDay(CurrentDate, FirstDay);



            //int i = 0;
            // Crop all dates by sample size;
            //foreach(ArrayList ar in AllDates)
            //{
            //    foreach (CalEvent ev in ar)
            //    {
            //        HoursArr[i] = ev.GetHoursBetweenStartAndEndTime();
            //        i++;
            //    }
            //}


            // Set DateTime Array of 90
            int timespan = (CurrentDate - SampleStartDate).Days;

            DateTime[]    dates       = new DateTime[timespan];
            DayOccupied[] OccupDayArr = new DayOccupied[timespan];

            // Initialise dates and OccupiedDay array;
            for (int j = 0; j < dates.Length; j++)
            {
                dates[j]                 = new DateTime();
                dates[j]                 = DateUtil.AddDay(SampleStartDate, j);
                OccupDayArr[j]           = new DayOccupied();
                OccupDayArr[j].DateStart = dates[j];
            }


            ArrayList AllDates = new ArrayList();
            //int i = 0;

            int DateIndex;


            foreach (CalEvent e in EvList)
            {
                int Incrementer = 0;
                //ArrayList EventDates = e.GetDates(SampleStartDate, CurrentDate);
                //AllDates.Add(EventDates);
                ArrayList EventDateTimes = e.GetDates();

                ArrayList EventDates = new ArrayList();
                EventDates = CutTimes(EventDateTimes);
                DateTime SampleStartDateTemp = new DateTime(SampleStartDate.Year,
                                                            SampleStartDate.Month, SampleStartDate.Day, 0, 0, 0);
                while (Incrementer < 90)
                {
                    //MessageBox.Show(SampleStartDate.ToString());
                    if (EventDates.Contains(SampleStartDateTemp))
                    {
                        DateIndex = EventDates.IndexOf(SampleStartDateTemp);
                        //MessageBox.Show(EventDates[DateIndex].ToString());
                        OccupDayArr[Incrementer].SetInterval(e.GetStartDate(), e.GetEndDate());
                        Incrementer++;
                        SampleStartDateTemp = SampleStartDateTemp.AddDays(1);
                    }
                    else
                    {
                        Incrementer++;
                        SampleStartDateTemp = SampleStartDateTemp.AddDays(1);
                    }
                }
            }

            //foreach (var e in OccupDayArr)
            //{
            //    MessageBox.Show(e.GetHoursUsed().ToString() + " : " + e.DateStart.ToString());
            //}
            bool FirstMonthOccupied  = false; // First month from the sample is current month - 3 months
            bool SecondMonthOccupied = false;
            bool ThirdMonthOccupied  = false;

            for (int i = 0; i < 28; i++)
            {
                if (OccupDayArr[i].GetHoursUsed() != 0)
                {
                    FirstMonthOccupied = true;
                    break;
                }
            }
            for (int i = 29; i < 56; i++)
            {
                if (OccupDayArr[i].GetHoursUsed() != 0)
                {
                    SecondMonthOccupied = true;
                    break;
                }
            }
            for (int i = 57; i < 84; i++)
            {
                if (OccupDayArr[i].GetHoursUsed() != 0)
                {
                    ThirdMonthOccupied = true;
                    break;
                }
            }

            if (ThirdMonthOccupied && SecondMonthOccupied && FirstMonthOccupied)
            {
                Alert("Three months taken");
                for (int i = 0; i < HoursArr.Length; i++)
                {
                    HoursArr[i] = OccupDayArr[i].GetHoursUsed()
                                  + OccupDayArr[i + 28].GetHoursUsed() // 28 is after 4 weeks
                                  + OccupDayArr[i + 56].GetHoursUsed();

                    HoursArr[i] = HoursArr[i] / 3;


                    //MessageBox.Show(HoursArr[i].ToString() + " : " + i.ToString() + "\n"
                    // + OccupDayArr[i].GetHoursUsed() + " : " + OccupDayArr[i].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 29].GetHoursUsed() + " : " + OccupDayArr[i + 29].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 59].GetHoursUsed() + " : " + OccupDayArr[i + 59].DateStart.ToString());


                    Points[i] = new ObservablePoint(i, HoursArr[i]);
                    //this.Refresh();
                }
            }

            else if (ThirdMonthOccupied && SecondMonthOccupied)
            {
                Alert("One two months taken");
                for (int i = 0; i < HoursArr.Length; i++)
                {
                    HoursArr[i] = OccupDayArr[i + 28].GetHoursUsed() // 28 is after 4 weeks
                                  + OccupDayArr[i + 56].GetHoursUsed();

                    HoursArr[i] = HoursArr[i] / 2;


                    //MessageBox.Show(HoursArr[i].ToString() + " : " + i.ToString() + "\n"
                    // + OccupDayArr[i].GetHoursUsed() + " : " + OccupDayArr[i].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 29].GetHoursUsed() + " : " + OccupDayArr[i + 29].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 59].GetHoursUsed() + " : " + OccupDayArr[i + 59].DateStart.ToString());


                    Points[i] = new ObservablePoint(i, HoursArr[i]);
                    //this.Refresh();
                }
            }

            else if (ThirdMonthOccupied)
            {
                Alert("One month taken");
                for (int i = 0; i < HoursArr.Length; i++)
                {
                    HoursArr[i] = OccupDayArr[i + 56].GetHoursUsed();

                    //MessageBox.Show(HoursArr[i].ToString() + " : " + i.ToString() + "\n"
                    // + OccupDayArr[i].GetHoursUsed() + " : " + OccupDayArr[i].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 29].GetHoursUsed() + " : " + OccupDayArr[i + 29].DateStart.ToString() + "\n"
                    // + OccupDayArr[i + 59].GetHoursUsed() + " : " + OccupDayArr[i + 59].DateStart.ToString());


                    Points[i] = new ObservablePoint(i, HoursArr[i]);
                    //this.Refresh();
                }
            }
            else
            {
                for (int i = 0; i < Points.Length; i++)
                {
                    Points[i] = new ObservablePoint(i, 0);
                    Alert("No data.");
                }
            }

            //MessageBox.Show("Finished");
        }
Ejemplo n.º 2
0
        /*
         * take start date
         * see if the start date belongs
         * if it belongs add to the list
         * increment start date by 1 day
         *
         * how to know if it belongs:
         * getweekday -> compare it to all values of recurring array
         * */
        public void CalcRecurringDates()
        {
            //Console.WriteLine("loop1");
            DateTime tempDate = new DateTime(dateStart.Year, dateStart.Month,
                                             dateStart.Day, dateStart.Hour, dateStart.Minute, dateStart.Second);

            bool foundAll = false;

            //      || recurringType[0] != "Weekly")) ;
            if (!recurring && (Object.Equals(recurringType, default(string[]))))
            {
                while (!foundAll)
                {
                    recurringDates.Add(tempDate);
                    tempDate = DateUtil.AddDay(tempDate);

                    if (DateUtil.DatesEqual(tempDate.AddDays(-1), dateEnd))
                    {
                        foundAll = true;
                    }
                }
            }


            while (!foundAll) // what if start and end dates are reversed or equal?
                              //what if selected weekly and daily and mondays for ex?
            {
                if (recurringType.Contains("Weekly"))
                {
                    recurringDates.Add(tempDate);

                    tempDate = DateUtil.AddDay(tempDate, 7);
                    //Console.WriteLine("loop2");
                }

                else if (((recurringType.Length > 1) && recurringType[1].ToString().Contains("Daily")) ||
                         !recurring)
                {
                    recurringDates.Add(tempDate);
                    tempDate = DateUtil.AddDay(tempDate);
                    //Console.WriteLine("loop3");
                }

                //else if (Array.Exists(recurringType, element => element == tempDate.DayOfWeek.ToString()))
                else if (recurringType.Contains(tempDate.DayOfWeek.ToString()))
                {
                    DateTime recurringDay = new DateTime(tempDate.Year, tempDate.Month, tempDate.Day);
                    recurringDates.Add(recurringDay);
                    tempDate = DateUtil.AddDay(tempDate);
                    if (DateUtil.DatesEqual(tempDate.AddDays(-1), dateEnd))
                    {
                        foundAll = true;
                        break;
                    }
                }
                else
                {
                    tempDate = DateUtil.AddDay(tempDate);
                }

                if (tempDate >= dateEnd)
                {
                    foundAll = true;
                    break;
                }
            }
        }