public Turno getSiguienteHorarioDisponible(Turno turno, Profesional profesional)
        {
            GestorTurno gTurnos = new GestorTurno();
            Turno turnoNuevo = null;
            DateTime fecha = turno.Fecha.AddDays(1);
            bool encontrado = false;

            foreach (Matricula matricula in profesional.Matriculas)
            {
                foreach (Horario horario in matricula.Horarios)
                {
                    while (fecha.CompareTo(horario.Desde) > 0 && fecha.CompareTo(horario.Hasta) < 0 && !encontrado)
                    {

                        foreach (HorarioDetalle horarioDet in horario.Detalle)
                        {
                            if (fecha.DayOfWeek.ToString() == horarioDet.Dia.DescIngles)
                            {
                                DateTime hora = horarioDet.HoraDesde;
                                int minutoDiferencia = (int)horarioDet.HoraHasta.Subtract(horarioDet.HoraDesde).TotalMinutes;
                                int cantTurnos = minutoDiferencia / horarioDet.Frecuencia;
                                for (int i = 0; i < cantTurnos; i++)
                                {
                                    turnoNuevo = gTurnos.buscar(horarioDet, fecha, hora);
                                    if (turnoNuevo == null)
                                    {
                                        turnoNuevo = new Turno();
                                        turnoNuevo.Fecha = fecha;
                                        turnoNuevo.Hora = hora;
                                        turnoNuevo.EntidadTurno = turno.EntidadTurno;
                                        turnoNuevo.EstadoTurno = turno.EstadoTurno;
                                        turnoNuevo.HorarioDet = horarioDet;
                                        turnoNuevo.Paciente = turno.Paciente;
                                        turnoNuevo.TipoTurno = turno.TipoTurno;
                                        turnoNuevo.Observacion = turno.Observacion;
                                        gTurnos.guardar(turnoNuevo);
                                        turno.EstadoTurno = gTurnos.getEstadoXCodigo(EstadoTurno.CANCELADO);
                                        gTurnos.guardar(turno);
                                        encontrado = true;
                                    }
                                    if (encontrado) { break; }
                                    hora = hora.AddMinutes(horarioDet.Frecuencia);
                                }
                                if (encontrado) { break; }
                            }
                        }
                        if (encontrado) { break; }
                        fecha = fecha.AddDays(1);
                    }
                    if (encontrado) { break; }
                }
                if (encontrado) { break; }
            }

            return turnoNuevo;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            ConexionBD.esSICWeb = true;
            seleccionarTab("liTurnero");
            gestorTurno = new GestorTurno();
            if (!Page.IsPostBack)
            {
                estaLogueado = (Session["LoginCorrecto"] == "SI");
                if (!estaLogueado)
                {
                    Response.Redirect("Login.aspx");
                }
                else
                {

                    GestorPaciente gPaciente = new GestorPaciente();
                    GestorEspecialidad gEspecialidad = new GestorEspecialidad();
                    GestorTurno gTurno = new GestorTurno();
                    GestorGenerico gg = new GestorGenerico();
                    Paciente paciente = gPaciente.buscar(33428285, 1);

                    if (paciente != null)
                    {
                        Session["Paciente"] = paciente;
                        txtNombreYApellido.Value = paciente.Nombres + " " + paciente.Apellidos;
                        txtDocumento.Value = paciente.NumeroDocumento.ToString();
                        //txtObraSocial

                        Afiliacion afiliacionActual = null;
                        if (paciente.Afiliaciones.Count > 0)
                        {
                            foreach (Afiliacion afiliacion in paciente.Afiliaciones)
                            {
                                if (afiliacion.Baja.CompareTo(new DateTime(2000, 1, 1)) < 0)
                                {
                                    afiliacionActual = afiliacion;
                                }
                            }
                        }
                        if (afiliacionActual != null)
                        {
                            txtObraSocial.Value = afiliacionActual.Plan.ObraSocial.Descripcion;
                            txtPlan.Value = afiliacionActual.Plan.Descripcion;
                        }

                        DataTable table = new DataTable();
                        table.Columns.Add("posicion");
                        table.Columns.Add("fecha");
                        table.Columns.Add("hora");
                        table.Columns.Add("medico");
                        table.Columns.Add("especialidad");

                        turnos = gTurno.buscar(paciente, false);
                        if (turnos != null)
                        {
                            for (int i = 0; i < turnos.Count; i++)
                            {
                                Turno turno = turnos[i];
                                if (turno.EstadoTurno.Codigo != "CAN")
                                {
                                    Especialidad especialidad = gEspecialidad.buscarEspecialidadXHorarioDet(turno.HorarioDet);
                                    table.Rows.Add(i.ToString(), turno.Fecha.ToShortDateString(),
                                                    turno.Hora.TimeOfDay.ToString(),
                                                    turno.EntidadTurno.Profesional.Apellidos + " " + turno.EntidadTurno.Profesional.Nombres,
                                                    especialidad.Descripcion);
                                }

                            }
                        }
                        Session["turnos"] = turnos;

                        dgvTurnosVigentes.Columns[0].Visible = true;
                        dgvTurnosVigentes.DataSource = table;
                        dgvTurnosVigentes.DataBind();
                        dgvTurnosVigentes.Columns[0].Visible = false;

                        DataTable tableAnteriores = new DataTable();
                        tableAnteriores.Columns.Add("fecha");
                        tableAnteriores.Columns.Add("hora");
                        tableAnteriores.Columns.Add("medico");
                        tableAnteriores.Columns.Add("especialidad");
                        tableAnteriores.Columns.Add("asistio");

                        IList<Turno> turnosHistorico = gTurno.buscar(paciente, true);
                        if (turnosHistorico != null)
                        {
                            foreach (Turno turno in turnosHistorico)
                            {
                                Especialidad especialidad = gEspecialidad.buscarEspecialidadXHorarioDet(turno.HorarioDet);

                                string asistio = "";

                                if (turno.EstadoTurno.Codigo == "CAN")
                                {
                                    asistio = "Canceló";
                                }

                                tableAnteriores.Rows.Add(turno.Fecha.ToShortDateString(),
                                                turno.Hora.TimeOfDay.ToString(),
                                                turno.EntidadTurno.Profesional.Apellidos + " " + turno.EntidadTurno.Profesional.Nombres,
                                                especialidad.Descripcion, asistio);
                            }
                        }

                        dgvTurnosAnteriores.DataSource = tableAnteriores;
                        dgvTurnosAnteriores.DataBind();
                    }

                }
            }
        }