示例#1
0
        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));
        }