/// <summary>
        /// Carga los datos iniciales necesarios
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loadform(object sender, EventArgs e)
        {
            GestorUsuarios usuarioDAO = new GestorUsuarios();
            GestorHorarios turnoDAO = new GestorHorarios();

            //Obtiene las areas a las que pertenece el usuario
            List<string> areas = usuarioDAO.getAreasFromUsuario(this.usuario);

            foreach (string area in areas)
            {
                areaCombo.Items.Add(area);
            }

            //Obtiene los horarios ya asignados
            turnos = turnoDAO.horariosHabitualesRegistrados(this.usuario);

            foreach (HorarioHabitualDTO t in turnos)
            {
                this.agregarColumna(t);
            }
        }
        /// <summary>
        /// Elimina el horario seleccionado solo si no esta confirmado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void eliminarButton_Click(object sender, EventArgs e)
        {
            try
            {
                if (asignadoTable.SelectedRows.Count == 0)
                    throw new NoSeleccionoFilaException();

                //Obtengo las celdas de la fila seleccionada
                DataGridViewCellCollection celdas = asignadoTable.SelectedRows[0].Cells;

                //La quinta celda corresponde al valor de confirmacion
                if (celdas[5].Value.ToString().Equals("SI"))
                    throw new EliminacionInvalidaException();

                //Si esta NO confiramda procedo a armar el turnoDTO
                HorarioHabitualDTO turno = new HorarioHabitualDTO();
                turno.Area = celdas[0].Value.ToString();
                turno.Dia = celdas[1].Value.ToString();
                turno.Ingreso = new Horario(celdas[2].Value.ToString());
                turno.Egreso = new Horario(celdas[3].Value.ToString());
                turno.Duracion = new Horario(celdas[4].Value.ToString());
                turno.Confirmado = celdas[5].Value.ToString();

                //Elimino el horario de la BD
                GestorHorarios turnoDAO = new GestorHorarios();
                turnoDAO.eliminarHorariosHabitual(usuario, turno);

                //Carga los horarios restantes en la tabla
                turnos = turnoDAO.horariosHabitualesRegistrados(this.usuario);
                asignadoTable.DataSource = null;
                foreach (HorarioHabitualDTO t in turnos)
                {
                    this.agregarColumna(t);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// Valida el horario ingresado y lo guarda en la base de datos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void guardarButton_Click(object sender, EventArgs e)
        {
            if(areaCombo.SelectedIndex == -1)
            {
                MessageBox.Show("No se seleccionó un área", "Error", MessageBoxButtons.OK , MessageBoxIcon.Error);
                return;
            }

            if (diaCombo.SelectedIndex == -1)
            {
                MessageBox.Show("No se seleccionó un día", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                //este constructor verifica la integridad
                Horario ingreso = new Horario(ingresoText.Text);
                Horario egreso = new Horario(egresoText.Text);

                //el constructor verifica la integridad
                RangoHorario rango = new RangoHorario(ingreso, egreso);

                //el tamaño minimo es 59 minutos
                if (rango.rangoMenor(0, 59))
                    throw new RangoMinimoException();

                //armo la entidad turno DTO
                HorarioHabitualDTO turno = new HorarioHabitualDTO();
                turno.Area = areaCombo.Text;
                turno.Dia = diaCombo.Text;
                turno.Ingreso = ingreso;
                turno.Egreso = egreso;
                turno.Duracion = rango.getDuracion();
                turno.Confirmado = "NO";

                //hay que validar que no se superponga a otros horarios

                foreach (HorarioHabitualDTO t in turnos)
                {
                    if (Fecha.getNumeroDia(t.Dia) == Fecha.getNumeroDia(turno.Dia))
                    {
                        RangoHorario r1 = new RangoHorario(t.Ingreso, t.Egreso);

                        if (r1.rangoSuperpuesto(rango))
                            throw new TurnoSuperpuestoException();

                    }
                }

                //y finalmente guardo el horario
                GestorHorarios gestor = new GestorHorarios();
                gestor.crearHorarioHabitual(this.usuario, turno);

                // y si anda todo bien agrego la columna a la tabla
                this.agregarColumna(turno);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// Para cuando se hace click en cambiar horario 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cambiarHorarioButton_Click(object sender, EventArgs e)
        {
            try
            {
                if (asignadoTable.SelectedRows.Count == 0)
                    throw new NoSeleccionoFilaException();

                //Obtengo las celdas de la fila seleccionada
                DataGridViewCellCollection celdas = asignadoTable.SelectedRows[0].Cells;

                //La quinta celda corresponde al valor de confirmacion
                if (celdas[5].Value.ToString().Equals("NO"))
                    throw new CambioHorarioInvalidoException();

                //Procedo a armar el turnoDTO
                HorarioHabitualDTO turno = new HorarioHabitualDTO();
                turno.Area = celdas[0].Value.ToString();
                turno.Dia = celdas[1].Value.ToString();
                turno.Ingreso = new Horario(celdas[2].Value.ToString());
                turno.Egreso = new Horario(celdas[3].Value.ToString());
                turno.Duracion = new Horario(celdas[4].Value.ToString());
                turno.Confirmado = celdas[5].Value.ToString();

                //Registro la solicitud para el admin
                GestorHorarios horarioDAO = new GestorHorarios();
                horarioDAO.registrarSolicitudCambioHorario(this.usuario, turno);

                //Mensajito
                MessageBox.Show("Solicitud de cambio registrada con éxito.", "Éxito",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (CambioHorarioInvalidoException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (NoSeleccionoFilaException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }