Exemplo n.º 1
0
        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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
                    }
                }
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 public GetExcludedRoomsResponse GetExcludedRooms(int CentroId, int? OficinaId, FindRoomsListResponse listaSalas)
 {
     throw new NotImplementedException();
 }