public async Task <FindRoomsListResponse> FindRooms(string accessToken, string roomList) { string endpoint = "https://graph.microsoft.com/beta/me/findRooms"; if (!string.IsNullOrEmpty(roomList)) { endpoint = endpoint + "(RoomList='" + roomList + "')"; } using (var client = new HttpClient()) { using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint)) { request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); using (var response = await client.SendAsync(request)) { if (response.IsSuccessStatusCode) { string stringResult = await response.Content.ReadAsStringAsync(); FindRoomsListResponse findRoomsListResponse = JsonConvert.DeserializeObject <FindRoomsListResponse>(stringResult); return(findRoomsListResponse); } return(null); } } } }
public async Task <GraphModel> findRoomLists(string accessToken) { string endpoint = "https://graph.microsoft.com/beta/me/findRoomLists"; using (var client = new HttpClient()) { using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint)) { request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); using (var response = await client.SendAsync(request)) { if (response.IsSuccessStatusCode) { string stringResult = await response.Content.ReadAsStringAsync(); FindRoomsListResponse findMeetingTimeResponse = JsonConvert.DeserializeObject <FindRoomsListResponse>(stringResult); var retVal = new GraphModel(); retVal.Salas = new List <Sala>(); foreach (var item in findMeetingTimeResponse.value) { retVal.Salas.Add(new Sala { Name = item.name, Email = item.address }); } return(retVal); } return(null); } } } }
private FindRoomsListResponse FilterListSalas(FindRoomsListResponse listasalas, string excludedRooms) { FindRoomsListResponse salasFiltradas = new FindRoomsListResponse(); salasFiltradas.value = new List <Value>(); foreach (var sala in listasalas.value) { if (!excludedRooms.Contains(sala.name)) { salasFiltradas.value.Add(sala); } } return(salasFiltradas); }
public GetExcludedRoomsResponse GetExcludedRooms(int CentroId, int?OficinaId, FindRoomsListResponse listaSalas) { GetExcludedRoomsResponse response = new GetExcludedRoomsResponse(); response.ExcludedRoomsList = new ExcludedRoomsViewModel(); response.ExcludedRoomsList.ExcludedRooms = new List <ExcludedRoomViewModel>(); response.ExcludedRoomsList.CentroId = CentroId; response.ExcludedRoomsList.OficinaId = OficinaId; BlackListSala blackListSala; if (OficinaId == null) { blackListSala = _blackListSalasRepository.GetOne(x => x.IsActivo && x.CentroId == CentroId && x.OficinaId == null); } else { blackListSala = _blackListSalasRepository.GetOne(x => x.IsActivo && x.CentroId == CentroId && x.OficinaId == OficinaId); } foreach (var sala in listaSalas.value) { if (blackListSala == null) { ExcludedRoomViewModel excluded = new ExcludedRoomViewModel() { name = sala.name, excluded = false }; response.ExcludedRoomsList.ExcludedRooms.Add(excluded); } else { ExcludedRoomViewModel excluded = new ExcludedRoomViewModel() { name = sala.name, excluded = blackListSala.Salas.Contains(sala.name) }; response.ExcludedRoomsList.ExcludedRooms.Add(excluded); } } return(response); }
private List <FindMeetingTimesRowViewModel> FilterSuggestions(FindMeetingTimeResponse findMeetingTimes, FindRoomsListResponse listaTodasSalas) { var retVal = new List <FindMeetingTimesRowViewModel>(); foreach (var suggestion in findMeetingTimes.meetingTimeSuggestions) { var rooms = new List <Sala>(); var attendees = new List <string>(); int personas = 0; foreach (var attendee in suggestion.attendeeAvailability) { if (attendee.attendee.emailAddress.address.Substring(0, 4) == "ROOM") { if (attendee.availability == "free") { var sala = listaTodasSalas.value.Find(m => m.address.Equals(attendee.attendee.emailAddress.address)); rooms.Add(new Sala() { Email = attendee.attendee.emailAddress.address, Name = sala.name }); } } else { personas++; if (attendee.availability == "free") { attendees.Add(attendee.attendee.emailAddress.address); } else { attendees.Clear(); break; } } //COMENTAR EL SIGUIENTE IF PARA QUE DEVUELVA MAS SUGERENCIAS DE SALAS //if (rooms.Count > 0 && attendees.Count == personas) //{ // break; //} } if (rooms.Count > 0 && attendees.Count == personas) { StringBuilder strb = new StringBuilder(); foreach (var item in attendees) { strb.Append(item); strb.Append('#'); } var sugg = new FindMeetingTimesRowViewModel() { Fecha = suggestion.meetingTimeSlot.start.dateTime, Salas = rooms, attendees = strb.ToString() }; retVal.Add(sugg); } } return(retVal); }
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); }
public GetExcludedRoomsResponse GetExcludedRooms(int CentroId, int? OficinaId, FindRoomsListResponse listaSalas) { throw new NotImplementedException(); }