public string horarioDisponibilidad([FromBody] DatosHorarioDisponibilidadInput data) { ConexionEspol conexionEspol = new ConexionEspol(); string resultado = conexionEspol.horariosPersonas(data.idsPersonas, data.fecha).Result; var datos = JsonConvert.DeserializeObject <List <List <HorarioPersona> > >(resultado); TipoSemana tipoSemana = JsonConvert.DeserializeObject <TipoSemana>(conexionEspol.TipoSemana(data.fecha).Result); DateTime horaInicioRango = new DateTime(data.fecha.Year, data.fecha.Month, data.fecha.Day, 7, 0, 0); //Fecha enviada con 07:00:00 DateTime horaFinRango = new DateTime(data.fecha.Year, data.fecha.Month, data.fecha.Day, 7, 30, 0); DateTime finBusqueda = new DateTime(data.fecha.Year, data.fecha.Month, data.fecha.Day, 20, 30, 0); List <Dictionary <int, DatosHorarioDisponibilidad> > retorno = new List <Dictionary <int, DatosHorarioDisponibilidad> >(); List <DateTime> horas = new List <DateTime>(); Dictionary <int, string> nombresPersonas = new Dictionary <int, string>(); while (horaFinRango <= finBusqueda) { horas.Add(horaInicioRango); var momento = new Dictionary <int, DatosHorarioDisponibilidad>(); for (var i = 1; i < 7; i++) { momento.Add(i, new DatosHorarioDisponibilidad()); } retorno.Add(momento); horaInicioRango = horaInicioRango.AddMinutes(30); horaFinRango = horaFinRango.AddMinutes(30); } foreach (var sublista in datos) { foreach (var item in sublista) { if (!nombresPersonas.ContainsKey(item.idPersona)) { nombresPersonas.Add(item.idPersona, item.nombres + " " + item.apellidos); } List <int> indices = new List <int>(); foreach (var hora in horas) { if (item.horarioHoraInicio.Value.TimeOfDay <= hora.TimeOfDay && hora.TimeOfDay < item.horarioHoraFin.Value.TimeOfDay) { indices.Add(horas.IndexOf(hora)); } } foreach (var i in indices) { var datosMomento = retorno[i][item.horarioDia]; if (!datosMomento.idsPersonas.Contains(item.idPersona)) { datosMomento.numOcupados += 1; datosMomento.nombresPersonas.Add(item.nombres.Trim() + " " + item.apellidos.Trim()); datosMomento.idsPersonas.Add(item.idPersona); } } } } foreach (int idPersona in data.idsPersonas) { if (!nombresPersonas.ContainsKey(idPersona)) { var per = JsonConvert.DeserializeObject <List <ClasePersona> >(conexionEspol.infoPersona(idPersona).Result); if (per.Count > 0) { nombresPersonas.Add(idPersona, per[0].strNombres + " " + per[0].strApellidos); } } var reunionesPersona = new ReunionController(context).ReunionesAsistir(new IdPersona { idPersona = idPersona }); foreach (Reunion reunion in reunionesPersona) { List <int> indices = new List <int>(); foreach (var hora in horas) { if (reunion.fechaInicio <= hora && hora < reunion.fechaFin) { indices.Add(horas.IndexOf(hora)); } } foreach (var i in indices) { var datosMomento = retorno[i][(int)reunion.fechaInicio.DayOfWeek]; if (!datosMomento.idsPersonas.Contains(idPersona)) { datosMomento.numOcupados += 1; datosMomento.nombresPersonas.Add(nombresPersonas.GetValueOrDefault(idPersona)); datosMomento.idsPersonas.Add(idPersona); } } } } return(JsonConvert.SerializeObject(retorno)); }