public void CalcularHorarios()
        {
            actualizarAgenda();
            cb_hora.DataSource = null;
            Agenda_Diaria dia = null;

            if (cb_anio.SelectedItem != null && cb_mes.SelectedItem != null && cb_dia_mes.SelectedItem != null && agenda != null)
            {
                dia = agenda.Find(elem => elem.dia == (((DateTime)cb_dia_mes.SelectedItem).DayOfWeek));
            }
            if (dia != null)
            {
                horarios = dia.generarHorarios();                                                                        //Genera todos los horarios del dia
                if (((DateTime)cb_dia_mes.SelectedItem).Date == ClinicaFrba.Utils.Fechas.getCurrentDateTime().Date.Date) //Son turnos para hoy, filtrar horarios que pasaron
                {
                    horarios.RemoveAll(horario => (horario < ClinicaFrba.Utils.Fechas.getCurrentDateTime().TimeOfDay));
                }
            }
            List <Turno>    turnos           = Turno.turnosFuturosPorProfesionalYEspecialidad(profesionalElegido.matricula, especialidadElegida.id_especialidad);
            List <TimeSpan> horariosOcupados = turnos.FindAll(t => t.activo && t.fecha_estipulada.Date == ((DateTime)cb_dia_mes.SelectedItem).Date).Select(t => t.fecha_estipulada.TimeOfDay).ToList <TimeSpan>();

            // tantes.Text = horarios.Count().ToString();
            //tacancelar.Text = horariosOcupados.Count().ToString();
            if (horarios != null)
            {
                horarios.RemoveAll(horario => horariosOcupados.Contains(horario));
            }
            //tdespues.Text = horarios.Count().ToString();
            cb_hora.DataSource = horarios;
        }
        private void btn_agregar_Click(object sender, EventArgs e)
        {
            Agenda_Diaria nueva = new Agenda_Diaria();
            Errores       error = new Errores();

            if (cb_dia.SelectedValue == null)
            {
                error.agregarError("Debe seleccionar un dia.");
            }
            if (l_especialidad.SelectedItem == null)
            {
                error.agregarError("La especialidad no puede ser nula.");
            }
            if (!error.huboError())
            {
                nueva = new Agenda_Diaria(((Dia)cb_dia.SelectedItem).dia, profesional.matricula, (int)l_desde_h.Value, (int)l_desde_m.Value, (int)l_hasta_h.Value, (int)l_hasta_m.Value, ((Especialidad)l_especialidad.SelectedItem).id_especialidad);
                if (!nueva.esValida())
                {
                    error.agregarError("La hora de fin debe ser posterior a la de inicio.");
                }
                if (agendas.Sum(elem => elem.horasDiarias()) + nueva.horasDiarias() > 48)
                {
                    error.agregarError("Esta prohibido trabajar mas de 48hs semanales. Si quiere agregar mas horas debe eliminar algunas.");
                }
                if (Agenda_Diaria.seSuperponen(agendas, nueva))
                {
                    error.agregarError("No puede elegir rangos que se superpongan en el mismo dia.");
                }
                if (agendas.Any(elem => elem.dia == nueva.dia && elem.id_especialidad == nueva.id_especialidad))
                {
                    error.agregarError("No se puede trabajar dos veces con la misma especialidad en el mismo dia.");
                }
            }
            if (!error.huboError())
            {
                agendas.Add(nueva);
                actualizarAgenda();
            }
            else
            {
                MessageBox.Show(error.stringErrores(), "Clinica-FRBA ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 public void actualizarAgenda()
 {
     agenda = Agenda_Diaria.getAgendaProfesional(profesionalElegido.matricula, especialidadElegida.id_especialidad, Rango_Atencion.rangoPorDia(profesionalElegido.matricula, especialidadElegida.id_especialidad, (DateTime)cb_dia_mes.SelectedItem));
 }