コード例 #1
0
        private static async Task <CheckedRoom> GetRoomSchedule(GraphServiceClient graphClient, CheckedRoom room, DateTime dateTime, CheckedRoom roomRecent)
        {
            try
            {
                var beginTime = new DateTimeTimeZone
                {
                    DateTime = dateTime.Date.ToString("yyyy-MM-ddTHH:mm:ssZ"),
                    TimeZone = "UTC"
                };

                var endTime = new DateTimeTimeZone
                {
                    DateTime = dateTime.Date.AddDays(0).AddHours(23).ToString("yyyy-MM-ddTHH:mm:ssZ"),
                    TimeZone = "UTC"
                };

                var roomFreeBusy = await graphClient.Users[room.Id].Calendar.GetSchedule(new List <string> {
                    room.Id
                }, endTime, beginTime).Request().PostAsync();

                if (roomFreeBusy.First().ScheduleItems.Count() == 0)
                {
                    roomRecent.Available = true;
                }
                else
                {
                    var orderedRoomSchedules = roomFreeBusy.First().ScheduleItems.Where(r => r.Status != FreeBusyStatus.Free).OrderBy(r => r.Start.DateTime).ToList();

                    var cetTime       = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
                    var scheduleArray = orderedRoomSchedules.ToArray();

                    var roomBusy = false;
                    for (var s = 0; s < scheduleArray.Length; s++)
                    {
                        var beginHour    = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].Start.DateTime), cetTime).Hour;
                        var endHour      = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime).Hour;
                        var hourSchedule = new HourSchedule
                        {
                            Occupied  = true,
                            StartTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].Start.DateTime), cetTime),
                            EndTime   = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime)
                        };

                        for (int t = beginHour; t <= endHour; t++)
                        {
                            if (t == endHour)
                            {
                                if (TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime).Minute > 0)
                                {
                                    roomRecent.DaySchedule[t] = hourSchedule;
                                }
                            }
                            else
                            {
                                roomRecent.DaySchedule[t] = hourSchedule;
                            }
                        }

                        if (DateTime.Parse(scheduleArray[s].Start.DateTime) <= dateTime.ToUniversalTime() &&
                            DateTime.Parse(scheduleArray[s].End.DateTime) > dateTime.ToUniversalTime())
                        {
                            //Event is now
                            roomBusy             = true;
                            roomRecent.Available = false;
                            if (roomRecent.FreeAt < TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime))
                            {
                                //if the end data of current meeting is after the enddate of a previous meeting
                                roomRecent.FreeAt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime);
                            }
                        }
                        if (DateTime.Parse(scheduleArray[s].Start.DateTime) <= dateTime.ToUniversalTime() &&
                            DateTime.Parse(scheduleArray[s].End.DateTime) < dateTime.ToUniversalTime())
                        {
                            //Event has happenend
                            if (!roomBusy)
                            {
                                roomRecent.Available = true;
                            }
                        }
                        if (DateTime.Parse(scheduleArray[s].Start.DateTime) >= dateTime.ToUniversalTime() &&
                            DateTime.Parse(scheduleArray[s].End.DateTime) > dateTime.ToUniversalTime())
                        {
                            //Event needs to happen
                            if (dateTime.Date == DateTime.Now.Date)
                            {
                                //today
                                if (roomRecent.Available && roomRecent.FreeUntil == default(DateTime))
                                {
                                    roomRecent.FreeUntil = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].Start.DateTime), cetTime);
                                }
                            }
                            else
                            {
                                //not today
                                roomRecent.FreeAt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(scheduleArray[s].End.DateTime), cetTime);
                            }
                        }
                    }
                }
                return(roomRecent);
            }
            catch (ServiceException e)
            {
                roomRecent.Available  = false;
                roomRecent.ReservedBy = "Contact Hospitality Team";
                for (int i = 0; i < roomRecent.DaySchedule.Length - 1; i++)
                {
                    roomRecent.DaySchedule[i] = null;
                }
                return(roomRecent);
            }
        }
コード例 #2
0
 public Group()
 {
     day = new HourSchedule[7];
 }