public List <SuitablTimeSlot> SuggestedTime(DateTime SearchTime) { SearchTime = SearchTime.AddHours(9); DateTime SearchEndTime = SearchTime.AddHours(8); List <SuitablTimeSlot> _freeTimeSlots = new List <SuitablTimeSlot>(); while (SearchTime < SearchEndTime) { SuitablTimeSlot _freeTimeSlot = new SuitablTimeSlot(); _freeTimeSlot.StartTime = SearchTime; _freeTimeSlot.Duration = _meeting.Duration; foreach (var user in _invitees) { if (!IsInInterval(SearchTime, _meeting.Duration, user.Obligations)) { if (!_freeTimeSlot.Users.Contains(user)) { _freeTimeSlot.Users.Add(user); } if (!_freeTimeSlots.Contains(_freeTimeSlot)) { _freeTimeSlots.Add(_freeTimeSlot); } } } SearchTime = SearchTime.AddMinutes(60); } _freeTimeSlots.Sort((a, b) => a.Users.Count.CompareTo(b.Users.Count)); // _freeTimeSlots.Sort(); return(_freeTimeSlots); }
static void Main(string[] args) { User u1 = new User(); u1.Id = Guid.NewGuid(); u1.Name = "Ram Kumar"; u1.JobTitle = "Manager"; User u2 = new User(); u2.Id = Guid.NewGuid(); u2.Name = "Sita Kumari"; u2.JobTitle = "Accountant"; u1.Obligations = new List <Obligation> { new Obligation { Id = Guid.NewGuid(), Description = "Sing", StartTime = new DateTime(2018, 9, 11, 14, 0, 0), Duration = 60, Presence = Presence.Vital, }, new Obligation { Id = Guid.NewGuid(), Description = "Work", StartTime = new DateTime(2018, 9, 11, 10, 0, 0), Duration = 60, Presence = Presence.Optional, } }; u2.Obligations = new List <Obligation>() { new Obligation() { Id = Guid.NewGuid(), Description = "Play", StartTime = new DateTime(2018, 9, 11, 12, 0, 0), Duration = 90, Presence = Presence.Optional, } }; Meeting m1 = new Meeting { Id = Guid.NewGuid(), Details = "Meeting for next event", Duration = 60, MinAttendees = 1, MaxAttendees = 4 }; MeetingSchedular ms = new MeetingSchedular(m1); ms.AddInvitee(u1); ms.AddInvitee(u2); // m1.RemoveInvitee(u); List <SuitablTimeSlot> suggestedTimeslots = ms.SuggestedTime(new DateTime(2018, 9, 11)); SuitablTimeSlot ts = suggestedTimeslots.Last(); suggestedTimeslots.ForEach(sts => { Console.WriteLine(sts.StartTime + " " + sts.Users.Count); }); // m1.SendInvitation(); // m1.CheckInvitationStatus(); // m1.updateObligations(); }