/// <summary> /// Agrega una columna a la tabla en base al turno pasado como parámetro /// </summary> /// <param name="turno">Turno registrado</param> private void agregarColumna(HorarioHabitualDTO turno) { //Obtengo la data table DataTable dt = (DataTable)asignadoTable.DataSource; //Pongo autozise para las columnas asignadoTable.ColumnHeadersHeightSizeMode = System.Windows.Forms. DataGridViewColumnHeadersHeightSizeMode.AutoSize; //Creo las columnas si no hay tabla if (dt == null) { asignadoTable.DataSource = null; dt = new DataTable(); //Area dt.Columns.Add("Área", typeof(string)); dt.Columns[0].ReadOnly = true; //Dia dt.Columns.Add("Día", typeof(string)); dt.Columns[1].ReadOnly = true; //Ingreso dt.Columns.Add("Ingreso", typeof(string)); dt.Columns[2].ReadOnly = true; //Egreso dt.Columns.Add("Egreso", typeof(string)); dt.Columns[3].ReadOnly = true; //Duraciòn dt.Columns.Add("Duración", typeof(string)); dt.Columns[4].ReadOnly = true; //Confirmado dt.Columns.Add("Confirmado", typeof(string)); dt.Columns[5].ReadOnly = true; } //Creo la fila DataRow fila = dt.NewRow(); //Cargo los datos fila[0] = turno.Area; fila[1] = turno.Dia; fila[2] = turno.Ingreso; fila[3] = turno.Egreso; fila[4] = turno.Duracion; fila[5] = turno.Confirmado; //Otra forma de cargarlos seria hacer lo siguiente: //dt.Rows.Add("Sistemas", "Martes", "12:30","15:30", "03:00" ,"SI"); dt.Rows.Add(fila); asignadoTable.DataSource = dt; }
//************************************ //***** Métodos de escritura ********* //************************************ /// <summary> /// Asigna el horario habitual pasado por paràmetro como no confirmado /// </summary> /// <param name="usuario">dni del usuario en formato string</param> /// <param name="turno">parametros del turno</param> public void crearHorarioHabitual(string usuario, HorarioHabitualDTO horarioHabitual) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Necesito el ID de area para determinar el perìodo actual que le corresponde //Creo consulta MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + horarioHabitual.Area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) idArea = data.GetInt32("idArea"); else throw new SQLErrorException("Área"); data.Close(); //Obtengo el perìodo actual MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT idPeriodo, nombre, area, inicio, fin, observaciones " + "FROM periodo " + "WHERE inicio < curdate() AND curdate() < fin AND area = " + idArea, conexionADO); data2 = lectura2.ExecuteReader(); int idPeriodo = 0; if (data2.Read()) idPeriodo = data2.GetInt32("idPeriodo"); else throw new SQLErrorException("Periodo"); data2.Close(); // Ahora guardo el horario asignado habitual :D string myquerystring1 = "INSERT INTO horario_asignado_habitual (usuario, dia, ingreso, egreso, area, periodo, confirmado) " + "VALUES ('" + usuario + "'," + Fecha.getNumeroDia(horarioHabitual.Dia) + "," + horarioHabitual.Ingreso.getSQLFormat() + "," + horarioHabitual.Egreso.getSQLFormat() + "," + idArea + "," + idPeriodo + "," + horarioHabitual.confirmadoForSQL() + ");"; //Asigno y ejecuto MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO; cmd.CommandText = myquerystring1; cmd.ExecuteNonQuery(); //Registro la solicitud this.registrarSolicitudNuevoHorario(); }
/// <summary> /// Establece como inactivo el turno pasado como parámetro. /// </summary> /// <param name="usuario"></param> /// <param name="turno"></param> public void eliminarHorariosHabitual(string usuario, HorarioHabitualDTO turno) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Necesito el ID de area para poder eliminar MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + turno.Area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) idArea = data.GetInt32("idArea"); else throw new SQLErrorException("Área"); data.Close(); //Obtengo el perìodo actual para eliminar el horario que //corresponde a este periodo MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT idPeriodo, nombre, area, inicio, fin, observaciones " + "FROM periodo " + "WHERE inicio < curdate() AND curdate() < fin AND area = " + idArea, conexionADO); data2 = lectura2.ExecuteReader(); int idPeriodo = 0; if (data2.Read()) idPeriodo = data2.GetInt32("idPeriodo"); else throw new SQLErrorException("Periodo"); data2.Close(); // Ahora pongo como no activo el horario string myquerystring3 = "UPDATE horario_asignado_habitual " + "SET activo = 0 WHERE " + "area = " + idArea + " AND " + "usuario = '" + usuario + "' AND " + "dia = " + Fecha.getNumeroDia(turno.Dia) + " AND " + "periodo = " + idPeriodo + " AND " + "ingreso = " + turno.Ingreso.getSQLFormat() + " AND " + "egreso = " + turno.Egreso.getSQLFormat() + ";"; //Asigno y ejecuto 3 MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO; cmd.CommandText = myquerystring3; cmd.ExecuteNonQuery(); //Obtengo el id del horario que di de baja. MySqlDataReader data4; MySqlCommand lectura4 = new MySqlCommand("SELECT * " + "FROM horario_asignado_habitual " + "WHERE " + "area = " + idArea + " AND " + "usuario = '" + usuario + "' AND " + "dia = " + Fecha.getNumeroDia(turno.Dia) + " AND " + "periodo = " + idPeriodo + " AND " + "ingreso = " + turno.Ingreso.getSQLFormat() + " AND " + "egreso = " + turno.Egreso.getSQLFormat() + ";" , conexionADO); data4 = lectura4.ExecuteReader(); int idHorario = 0; if (data4.Read()) idHorario = data4.GetInt32("idHorarioHabitual"); else throw new SQLErrorException("ID"); data4.Close(); //Elimino la solicitud de asignaciòn para dicho horario. string myquerystring4 = "DELETE FROM nuevo_horario_habitual " + "WHERE " + "horarioHabitual = " + idHorario + ";"; //Asigno y ejecuto 4 MySqlCommand cmd1 = new MySqlCommand(); cmd1.Connection = conexionADO; cmd1.CommandText = myquerystring4; cmd1.ExecuteNonQuery(); }
/// <summary> /// Crea una solicitud para los administradores para el cambio de horario /// </summary> /// <param name="usuario"></param> /// <param name="turno"></param> public void registrarSolicitudCambioHorario(string usuario, HorarioHabitualDTO turno) { /* Primero debo obtener el id del horario que se desea cambiar. *Para saber cual es el horario, ademas de el usuario y los datos *contenidos en el DTO, debo obtener el IDarea y el periodo actual */ //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Necesito el ID de area MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + turno.Area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) idArea = data.GetInt32("idArea"); else throw new SQLErrorException("Área"); data.Close(); //Obtengo el perìodo actual MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT idPeriodo, nombre, area, inicio, fin, observaciones " + "FROM periodo " + "WHERE inicio < curdate() AND curdate() < fin AND area = " + idArea, conexionADO); data2 = lectura2.ExecuteReader(); int idPeriodo = 0; if (data2.Read()) idPeriodo = data2.GetInt32("idPeriodo"); else throw new SQLErrorException("Periodo"); data2.Close(); //Ahora puedo obtener el id del horario con estos datos MySqlDataReader data3; string comando3 = "SELECT * " + "FROM horario_asignado_habitual WHERE " + "area = " + idArea + " AND " + "usuario = '" + usuario + "' AND " + "dia = " + Fecha.getNumeroDia(turno.Dia) + " AND " + "periodo = " + idPeriodo + " AND " + "ingreso = " + turno.Ingreso.getSQLFormat() + " AND " + "egreso = " + turno.Egreso.getSQLFormat() + ";"; MySqlCommand lectura3 = new MySqlCommand(comando3, conexionADO); data3 = lectura3.ExecuteReader(); int idHorario = 0; if (data3.Read()) idHorario = data3.GetInt32("idHorarioHabitual"); else throw new SQLErrorException("Horario Habitual"); data3.Close(); //Compruebo que no se haya solicitado con anterioridad dicho cambio //Obtengo el perìodo actual MySqlDataReader data4; MySqlCommand lectura4 = new MySqlCommand("SELECT * " + "FROM cambio_horario_habitual " + "WHERE horarioHabitual = " + idHorario + " AND activo = 1;", conexionADO); data4 = lectura4.ExecuteReader(); if (data4.Read()) throw new CambioHorarioInvalidoException(); data4.Close(); // Ahora guardo la solicitud string myquerystring1 = "INSERT INTO cambio_horario_habitual (horarioHabitual) " + "VALUES (" + idHorario.ToString() + ");"; //Asigno y ejecuto MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO; cmd.CommandText = myquerystring1; cmd.ExecuteNonQuery(); }
//********************************** //***** Métodos de lectura ********* //********************************** /// <summary> /// Obtiene los turnos registrados para un usuario... tanto si estan confirmados como si no lo están /// </summary> /// <param name="usuario"></param> /// <returns></returns> public List<HorarioHabitualDTO> horariosHabitualesRegistrados(string usuario) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Creo lector =) y efectuo la consulta MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT * FROM horario_asignado_habitual_duracion as h, area as a WHERE " + "h.usuario = '" + usuario + "' AND " + "h.area = a.idArea;", conexionADO); data = lectura.ExecuteReader(); //armo la lista List<HorarioHabitualDTO> turnos = new List<HorarioHabitualDTO>(); while (data.Read()) { HorarioHabitualDTO t = new HorarioHabitualDTO(); t.Area = data.GetString("nombreArea"); t.Dia = Fecha.getDiaSemana(data.GetInt32("dia")); t.Ingreso = new Horario(data.GetString("ingreso")); t.Egreso = new Horario(data.GetString("egreso")); t.Duracion = new Horario(data.GetString("duracion")); int confirmacion = data.GetInt32("confirmado"); if (confirmacion == 0) t.Confirmado = "NO"; else t.Confirmado = "SI"; turnos.Add(t); } data.Close(); return turnos; }
/// <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> /// 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> /// 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); } }