public async Task <GetRoomResponse> GetSuggestedMeetings(string token, string nombreLista, string entrevistadorMail, DateTime fecha, int centroId, int?oficinaId, bool ignorarDisponibilidad) { GetRoomResponse response = new GetRoomResponse(); var fechaInicio = DateTime.Parse(fecha.ToUniversalTime().ToString()); var fechaFin = fechaInicio; try { string accessToken = token; FindMeetingTimesRequest findMeetingTimeRequest = new FindMeetingTimesRequest(); var attendees = new List <ApiRooms.Graph.Responses.FindMeetingTimeRequest.Attendee>(); List <string> possivelAttendees = new List <string>(); if (!ignorarDisponibilidad) { possivelAttendees.Add(entrevistadorMail); } foreach (var item in possivelAttendees) { if (!string.IsNullOrEmpty(item)) { attendees.Add(new ApiRooms.Graph.Responses.FindMeetingTimeRequest.Attendee() { emailAddress = new ApiRooms.Graph.Responses.FindMeetingTimeRequest.EmailAddress() { address = item, name = item }, type = "required" }); } } findMeetingTimeRequest.timeConstraint = new TimeConstraint() { timeslots = new List <Timeslot>() { new Timeslot() { start = new ApiRooms.Graph.Responses.FindMeetingTimeRequest.Start() { dateTime = fechaInicio, timeZone = "UTC" }, end = new ApiRooms.Graph.Responses.FindMeetingTimeRequest.End() { dateTime = fechaFin, timeZone = "UTC" } } } }; // Getting the rooms in the list FindRoomsListResponse listaSalas = new FindRoomsListResponse(); GetStringExcludedRoomsResponse excludedRooms = new GetStringExcludedRoomsResponse(); if (!string.IsNullOrEmpty(nombreLista)) { listaSalas = await _roomsService.FindRooms(accessToken, nombreLista); excludedRooms = _roomsService.GetStringExcludedRooms(centroId, oficinaId); } if (excludedRooms.IsValid && !string.IsNullOrEmpty(excludedRooms.StringExcludedRooms)) { listaSalas = FilterListSalas(listaSalas, excludedRooms.StringExcludedRooms); } for (int i = 0; i < listaSalas.value.Count; i++) { if (i < 18 && i < listaSalas.value.Count) { attendees.Add(new ApiRooms.Graph.Responses.FindMeetingTimeRequest.Attendee() { emailAddress = new ApiRooms.Graph.Responses.FindMeetingTimeRequest.EmailAddress() { address = listaSalas.value[i].address }, type = "resource" }); } else { break; } } findMeetingTimeRequest.returnSuggestionReasons = true; findMeetingTimeRequest.isOrganizerOptional = true; findMeetingTimeRequest.maxCandidates = 100; findMeetingTimeRequest.attendees = attendees; // Get the the meeting times var findMeetingTimes = await _roomsService.PostFindMeetingTimes(accessToken, findMeetingTimeRequest); if (findMeetingTimes.emptySuggestionsReason.Equals("AttendeesUnavailable")) { response.IsValid = false; return(response); } List <FindMeetingTimesRowViewModel> suggestions = FilterSuggestions(findMeetingTimes, listaSalas); if (suggestions.Count == 0) { response.IsValid = false; return(response); } response.IsValid = true; response.salas = new List <SelectListItem>(); foreach (var sugg in suggestions) { foreach (var sala in sugg.Salas) { if (sala.Name != null && sala.Email != null) { SelectListItem listaSala = new SelectListItem(); listaSala.Value = sala.Email; listaSala.Text = sala.Name; response.salas.Add(listaSala); } } } } catch (Exception e) { response.IsValid = false; response.ErrorMessage = e.Message; } return(response); }