Dictionary<CalendarEvent, List<SubCalendarEvent>> generateDictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents(List<SubCalendarEvent> ListOfInterferringElements, List<CalendarEvent> UncommitedCalendarEvents) { /* Name:Function takes the list of interferring arrays and used to build a Calendar To "List of SubCalendarEvent" dictionary. */ int i = 0; Dictionary<CalendarEvent, List<SubCalendarEvent>> DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents = new Dictionary<CalendarEvent, List<SubCalendarEvent>>(); int j = 0; for (; i < ListOfInterferringElements.Count; i++) { EventID MyEventID = new EventID(ListOfInterferringElements[i].ID); string ParentID = MyEventID.getLevelID(0);//This gets the parentID of the SubCalendarEventID CalendarEvent UncomittedCalendar=CheckUncommitedForSubCalevent(UncommitedCalendarEvents,ListOfInterferringElements[i]); if (UncomittedCalendar!=null) { if (DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.ContainsKey(UncomittedCalendar)) { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[UncomittedCalendar].Add(ListOfInterferringElements[i]); j++; } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.Add(UncomittedCalendar, new List<SubCalendarEvent>()); DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[UncomittedCalendar].Add(ListOfInterferringElements[i]); j++; } } else { if (AllEventDictionary[ParentID].RepetitionStatus) { CalendarEvent repeatCalEvent = AllEventDictionary[ParentID].getRepeatedCalendarEvent(MyEventID.getStringIDAtLevel(1)); if (DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.ContainsKey(repeatCalEvent)) { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[repeatCalEvent].Add(ListOfInterferringElements[i]); j++; } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.Add(repeatCalEvent, new List<SubCalendarEvent>()); DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[repeatCalEvent].Add(ListOfInterferringElements[i]); j++; } } else { CalendarEvent nonRepeatCalEvent = AllEventDictionary[ParentID]; if (DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.ContainsKey(nonRepeatCalEvent)) { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[nonRepeatCalEvent].Add(ListOfInterferringElements[i]); j++; } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.Add(nonRepeatCalEvent, new List<SubCalendarEvent>()); DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[nonRepeatCalEvent].Add(ListOfInterferringElements[i]); j++; } } } /*catch (Exception e) { if (AllEventDictionary[ParentID].RepetitionStatus) { } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[AllEventDictionary[ParentID]].Add(ListOfInterferringElements[i]); } }*/ } return DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents; }
Dictionary<CalendarEvent, List<SubCalendarEvent>> generateDictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents(List<SubCalendarEvent> ListOfInterferringElements) { /* Name:Function takes the list of interferring arrays and used to build a Calendar To "List of SubCalendarEvent" dictionary. */ int i = 0; Dictionary<CalendarEvent, List<SubCalendarEvent>> DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents = new Dictionary<CalendarEvent, List<SubCalendarEvent>>(); int j = 0; for (; i < ListOfInterferringElements.Count; i++) { EventID MyEventID = new EventID(ListOfInterferringElements[i].ID); string ParentID=MyEventID.getLevelID(0);//This gets the parentID of the SubCalendarEventID //try//Try bock attempts to create new dictionary entry for Calendar event. Else it simply adds an element to the list created by the error { if (AllEventDictionary[ParentID].RepetitionStatus) { CalendarEvent repeatCalEvent=AllEventDictionary[ParentID].getRepeatedCalendarEvent(MyEventID.getStringIDAtLevel(1)); if (DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.ContainsKey(repeatCalEvent)) { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[repeatCalEvent].Add(ListOfInterferringElements[i]); j++; } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.Add(repeatCalEvent,new List<SubCalendarEvent>()); DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[repeatCalEvent].Add(ListOfInterferringElements[i]); j++; } } else { CalendarEvent nonRepeatCalEvent=AllEventDictionary[ParentID]; if (DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.ContainsKey(nonRepeatCalEvent)) { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[nonRepeatCalEvent].Add( ListOfInterferringElements[i]); j++; } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents.Add(nonRepeatCalEvent, new List<SubCalendarEvent>()); DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[nonRepeatCalEvent].Add(ListOfInterferringElements[i]); j++; } } } /*catch (Exception e) { if (AllEventDictionary[ParentID].RepetitionStatus) { } else { DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents[AllEventDictionary[ParentID]].Add(ListOfInterferringElements[i]); } }*/ } return DictionaryWithBothCalendarEventIDAndListOfInterferringSubEvents; }
public Tuple<CustomErrors, Dictionary<string, CalendarEvent>> SetEventAsNow(string EventID,bool Force=false) { CalendarEvent ProcrastinateEvent = getCalendarEvent(EventID); SubCalendarEvent ReferenceSubEvent = getSubCalendarEvent(EventID); EventID SubEventID = new EventID(EventID); bool InitialRigid = ReferenceSubEvent.Rigid; if (!ReferenceSubEvent.shiftEvent(Now - ReferenceSubEvent.Start) && !Force) { return new Tuple<CustomErrors, Dictionary<string, CalendarEvent>>(new CustomErrors(true, "You will be going outside the limits of this event, Is that Ok?",5), AllEventDictionary); } if (ProcrastinateEvent.RepetitionStatus) { ProcrastinateEvent = ProcrastinateEvent.getRepeatedCalendarEvent(SubEventID.getStringIDAtLevel(1)); } Dictionary<string, CalendarEvent> AllEventDictionary_Cpy = new Dictionary<string, CalendarEvent>(); AllEventDictionary_Cpy = AllEventDictionary.ToDictionary(obj => obj.Key, obj => obj.Value.createCopy()); List<SubCalendarEvent> AllValidSubCalEvents = new List<SubCalendarEvent>() { ReferenceSubEvent };// ProcrastinateEvent.AllActiveSubEvents.Where(obj => obj.End > ReferenceSubEvent.Start).ToList(); DateTime StartTime = Now; DateTime EndTime = StartTime.Add(ReferenceSubEvent.ActiveDuration); ; ProcrastinateEvent.DisableSubEvents(AllValidSubCalEvents); TimeSpan TotalActiveDuration = Utility.SumOfActiveDuration(AllValidSubCalEvents); //CalendarEvent(string NameEntry, string StartTime, DateTime StartDateEntry, string EndTime, DateTime EventEndDateEntry, string eventSplit, string PreDeadlineTime, string EventDuration, Repetition EventRepetitionEntry, bool DefaultPrepTimeflag, bool RigidScheduleFlag, string eventPrepTime, bool PreDeadlineFlag,Location EventLocation) CalendarEvent ScheduleUpdated = new CalendarEvent(ProcrastinateEvent.Name, StartTime.ToString("hh:mm tt"), StartTime, EndTime.ToString("hh:mm tt"), EndTime, AllValidSubCalEvents.Count.ToString(), ProcrastinateEvent.PreDeadline.ToString(), TotalActiveDuration.ToString(), new Repetition(), true, true, ProcrastinateEvent.Preparation.ToString(), true, ReferenceSubEvent.myLocation,true, new EventDisplay(),new MiscData(),false); SubCalendarEvent RigidizedEvent =ScheduleUpdated.ActiveSubEvents[0]; RigidizedEvent.shiftEvent(Now - RigidizedEvent.Start, Force);//remember to fix shift force option SubCalendarEvent RigidSubCalendarEvent = new SubCalendarEvent(RigidizedEvent.ID, RigidizedEvent.Start, RigidizedEvent.End, RigidizedEvent.ActiveSlot, true, RigidizedEvent.isEnabled, ReferenceSubEvent.UIParam, ReferenceSubEvent.Notes, ReferenceSubEvent.isComplete, RigidizedEvent.myLocation, RigidizedEvent.getCalendarEventRange); RigidizedEvent.UpdateThis(RigidSubCalendarEvent); string IDOfRigidized = RigidizedEvent.ID; HashSet<SubCalendarEvent> NotDOneYet = getNoneDoneYetBetweenNowAndReerenceStartTIme(); ScheduleUpdated = EvaluateTotalTimeLineAndAssignValidTimeSpots(ScheduleUpdated,NotDOneYet ,null,1); SubCalendarEvent[] UpdatedSubCalevents = ScheduleUpdated.ActiveSubEvents; for (int i = 0; i < AllValidSubCalEvents.Count; i++)//updates the subcalevents { bool Rigid = AllValidSubCalEvents[i].Rigid; if (IDOfRigidized == AllValidSubCalEvents[i].ID) { Rigid=InitialRigid; } SubCalendarEvent updatedSubCal = new SubCalendarEvent(AllValidSubCalEvents[i].ID, UpdatedSubCalevents[i].Start, UpdatedSubCalevents[i].End, UpdatedSubCalevents[i].ActiveSlot, Rigid, AllValidSubCalEvents[i].isEnabled, AllValidSubCalEvents[i].UIParam, AllValidSubCalEvents[i].Notes, AllValidSubCalEvents[i].isComplete, UpdatedSubCalevents[i].myLocation, ProcrastinateEvent.RangeTimeLine); ProcrastinateEvent.updateSubEvent(updatedSubCal.SubEvent_ID, updatedSubCal); } ProcrastinateEvent.EnableSubEvents(AllValidSubCalEvents); if (ScheduleUpdated.ErrorStatus) { LogStatus(ScheduleUpdated, "Set as now"); } Tuple<CustomErrors, Dictionary<string, CalendarEvent>> retValue = new Tuple<CustomErrors, Dictionary<string, CalendarEvent>>(ScheduleUpdated.Error, AllEventDictionary); //AllEventDictionary = AllEventDictionary_Cpy; //UpdateWithProcrastinateSchedule(AllEventDictionary); return retValue; }
public Tuple<CustomErrors, Dictionary<string, CalendarEvent>> ProcrastinateJustAnEvent(string EventID, TimeSpan RangeOfPush) { CalendarEvent ProcrastinateEvent = getCalendarEvent(EventID); SubCalendarEvent ReferenceSubEvent = getSubCalendarEvent(EventID); EventID SubEventID = new EventID(EventID); DateTime ReferenceStart = Now > ReferenceSubEvent.Start ? Now : ReferenceSubEvent.Start; //BusyTimeLine[] allBusySlots = CompleteSchedule.OccupiedSlots; //IEnumerable<BusyTimeLine> AllLesssTnanRefTime = allBusySlots.Where(obj => obj.End < ReferenceStart); ReferenceStart = UpdateNow(ReferenceStart); DateTime StartTimeOfProcrastinate = ReferenceStart + RangeOfPush; if (StartTimeOfProcrastinate > ReferenceSubEvent.getCalendarEventRange.End) { return new Tuple<CustomErrors, Dictionary<string, CalendarEvent>>(new CustomErrors(true, "Procrastinated deadline event is before end of selected timeline space"), AllEventDictionary); } if (ProcrastinateEvent.RepetitionStatus) { ProcrastinateEvent = ProcrastinateEvent.getRepeatedCalendarEvent(SubEventID.getStringIDAtLevel(1)); } Dictionary<string, CalendarEvent> AllEventDictionary_Cpy = new Dictionary<string, CalendarEvent>(); AllEventDictionary_Cpy = AllEventDictionary.ToDictionary(obj => obj.Key, obj => obj.Value.createCopy()); List<SubCalendarEvent> AllValidSubCalEvents = ProcrastinateEvent.ActiveSubEvents.Where(obj => obj.End > ReferenceSubEvent.Start).ToList(); //ProcrastinateEvent.removeSubCalEvents(AllValidSubCalEvents); ProcrastinateEvent.DisableSubEvents(AllValidSubCalEvents); TimeSpan TotalActiveDuration = Utility.SumOfActiveDuration(AllValidSubCalEvents); //CalendarEvent(string NameEntry, string StartTime, DateTime StartDateEntry, string EndTime, DateTime EventEndDateEntry, string eventSplit, string PreDeadlineTime, string EventDuration, Repetition EventRepetitionEntry, bool DefaultPrepTimeflag, bool RigidScheduleFlag, string eventPrepTime, bool PreDeadlineFlag,Location EventLocation) CalendarEvent ScheduleUpdated = new CalendarEvent(ProcrastinateEvent.Name, StartTimeOfProcrastinate.ToString("hh:mm tt"), StartTimeOfProcrastinate, ProcrastinateEvent.End.ToString("hh:mm tt"), ProcrastinateEvent.End, AllValidSubCalEvents.Count.ToString(), ProcrastinateEvent.PreDeadline.ToString(), TotalActiveDuration.ToString(), new Repetition(), true, ProcrastinateEvent.Rigid, ProcrastinateEvent.Preparation.ToString(), true, ProcrastinateEvent.myLocation, true, new EventDisplay(), new MiscData(), false); HashSet<SubCalendarEvent> NotDoneYet = getNoneDoneYetBetweenNowAndReerenceStartTIme(); ScheduleUpdated = EvaluateTotalTimeLineAndAssignValidTimeSpots(ScheduleUpdated, NotDoneYet); SubCalendarEvent[] UpdatedSubCalevents = ScheduleUpdated.ActiveSubEvents; for (int i = 0; i < AllValidSubCalEvents.Count; i++)//updates the subcalevents { SubCalendarEvent updatedSubCal = new SubCalendarEvent(AllValidSubCalEvents[i].ID, UpdatedSubCalevents[i].Start, UpdatedSubCalevents[i].End, UpdatedSubCalevents[i].ActiveSlot, UpdatedSubCalevents[i].Rigid, AllValidSubCalEvents[i].isEnabled, AllValidSubCalEvents[i].UIParam, AllValidSubCalEvents[i].Notes, AllValidSubCalEvents[i].isComplete, UpdatedSubCalevents[i].myLocation, ProcrastinateEvent.RangeTimeLine); AllValidSubCalEvents[i].UpdateThis(updatedSubCal); } ProcrastinateEvent.EnableSubEvents(AllValidSubCalEvents); if (ScheduleUpdated.ErrorStatus) { LogStatus(ScheduleUpdated, "Procrastinate Single Event"); } Tuple<CustomErrors, Dictionary<string, CalendarEvent>> retValue = new Tuple<CustomErrors, Dictionary<string, CalendarEvent>>(ScheduleUpdated.Error, AllEventDictionary); AllEventDictionary = AllEventDictionary_Cpy; return retValue; }
public void deleteSubCalendarEvent(string EventID) { CalendarEvent referenceCalendarEventWithSubEvent = getCalendarEvent(EventID); SubCalendarEvent ReferenceSubEvent = getSubCalendarEvent(EventID); EventID SubEventID = new EventID(EventID); bool InitialRigid = ReferenceSubEvent.Rigid; if (referenceCalendarEventWithSubEvent.RepetitionStatus) { referenceCalendarEventWithSubEvent = referenceCalendarEventWithSubEvent.getRepeatedCalendarEvent(SubEventID.getStringIDAtLevel(1)); } Dictionary<string, CalendarEvent> AllEventDictionary_Cpy = new Dictionary<string, CalendarEvent>(); AllEventDictionary_Cpy = AllEventDictionary.ToDictionary(obj => obj.Key, obj => obj.Value.createCopy()); List<SubCalendarEvent> AllValidSubCalEvents = new List<SubCalendarEvent>() { ReferenceSubEvent };// ProcrastinateEvent.AllActiveSubEvents.Where(obj => obj.End > ReferenceSubEvent.Start).ToList(); DateTime StartTime = Now; DateTime EndTime = StartTime.Add(ReferenceSubEvent.ActiveDuration); ; referenceCalendarEventWithSubEvent.DisableSubEvents(AllValidSubCalEvents); TimeSpan TotalActiveDuration = Utility.SumOfActiveDuration(AllValidSubCalEvents); //CalendarEvent(string NameEntry, string StartTime, DateTime StartDateEntry, string EndTime, DateTime EventEndDateEntry, string eventSplit, string PreDeadlineTime, string EventDuration, Repetition EventRepetitionEntry, bool DefaultPrepTimeflag, bool RigidScheduleFlag, string eventPrepTime, bool PreDeadlineFlag,Location EventLocation) CalendarEvent ScheduleUpdated = new CalendarEvent(referenceCalendarEventWithSubEvent.Name, referenceCalendarEventWithSubEvent.Start.ToString("hh:mm tt"), referenceCalendarEventWithSubEvent.Start, referenceCalendarEventWithSubEvent.End.ToString("hh:mm tt"), referenceCalendarEventWithSubEvent.End, 1.ToString(), referenceCalendarEventWithSubEvent.PreDeadline.ToString(), ReferenceSubEvent.ActiveDuration.ToString(), new Repetition(), true, ReferenceSubEvent.Rigid, referenceCalendarEventWithSubEvent.Preparation.ToString(), true, ReferenceSubEvent.myLocation, false,new EventDisplay(),new MiscData(),false); ScheduleUpdated.DisableSubEvents(ScheduleUpdated.AllSubEvents); HashSet<SubCalendarEvent> NotDOneYet = getNoneDoneYetBetweenNowAndReerenceStartTIme(); ScheduleUpdated = EvaluateTotalTimeLineAndAssignValidTimeSpots(ScheduleUpdated, NotDOneYet); AllEventDictionary.Remove(ScheduleUpdated.ID);//removes the false calendar event UpdateWithProcrastinateSchedule(AllEventDictionary); }