/// <summary> /// Retorna la cantidad de horas que se asignó un usuario /// en un àrea determinada /// </summary> /// <param name="dni"></param> /// <returns></returns> public Horario getHorasAsignadasTotales(string dni, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Obtengo el id del area MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) { idArea = data.GetInt32("idArea"); } else { throw new SQLErrorException("Área"); } data.Close(); //Creo lector =) y efectuo la consulta MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT sec_to_time(sum(time_to_sec(duracion))) AS suma FROM horario_asignado_habitual_duracion as h " + "WHERE usuario = '" + dni + "' AND area = " + idArea + ";", conexionADO); data2 = lectura2.ExecuteReader(); string hora; if (data2.Read()) { hora = data2.GetString("suma"); } else { throw new SQLErrorException("Suma"); } Horario resultado = new Horario(hora); return(resultado); }
/// <summary> /// Retorna la cantidad de horas totales que necesita cumplir un usuario /// en un área determinada. /// </summary> /// <param name="dni">string con el dni del usuario</param> /// <param name="area">nombre del area a la que pertenece el usuario</param> /// <returns></returns> public Horario getHorasNecesarias(string dni, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Obtengo el id del area MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) { idArea = data.GetInt32("idArea"); } else { throw new SQLErrorException("Área"); } data.Close(); //Ahora busco la cantidad total MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT * FROM usuario_area " + "WHERE usuario = '" + dni + "' AND idArea = " + idArea + ";", conexionADO); data2 = lectura2.ExecuteReader(); string hora; if (data2.Read()) { hora = data2.GetString("horasAsignadas"); } else { throw new SQLErrorException("Total asignado"); } Horario resultado = new Horario(hora); return(resultado); }
/// <summary> /// Registra acciones de ingreso para horarios. /// </summary> /// <param name="usuario"></param> /// <param name="fecha"></param> /// <param name="hora"></param> /// <param name="observacion"></param> public void registroIngreso(string usuario, int id, Fecha fecha, Horario hora, String observacion) { //Abro conexión MySqlConnection conexionADO2 = new MySqlConnection(); conexionADO2.ConnectionString = conexionString; conexionADO2.Open(); String myquerystring = "INSERT INTO turno(fecha,ingreso, horario, observacionEntrada) " + "VALUES (" + fecha.getSQLFormat() + ", " + hora.getSQLFormat() + "," + id.ToString() + ", '" + observacion + "');"; //Asigno y ejecuto 3 MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO2; cmd.CommandText = myquerystring; cmd.ExecuteNonQuery(); }
/// <summary> /// Compara la entidad actual con otra pasada por parámetro /// para ver cual es mayor /// </summary> /// <param name="unHorario"></param> /// <returns>true si el horario pasado por parámetro es mayor, sino false</returns> public bool mayorQue(Horario unHorario) { if (this.hora > unHorario.Hora) { return(true); } else if (this.hora == unHorario.Hora) { if (this.minuto > unHorario.Minuto) { return(true); } else if (this.minuto == unHorario.Minuto) { if (this.segundo > unHorario.Segundo) { return(true); } } } return(false); }
/// <summary> /// Compara la entidad actual con otra pasada por parámetro /// para ver cual es mayor /// </summary> /// <param name="unHorario"></param> /// <returns>true si el horario pasado por parámetro es mayor, sino false</returns> public bool mayorQue(Horario unHorario) { if (this.hora > unHorario.Hora) return true; else if (this.hora == unHorario.Hora) { if (this.minuto > unHorario.Minuto) return true; else if (this.minuto == unHorario.Minuto) { if (this.segundo > unHorario.Segundo) return true; } } return false; }
/// <summary> /// Crea un horario extra en la DB /// </summary> /// <param name="usuario"></param> /// <param name="id"></param> /// <param name="fecha"></param> /// <param name="hora"></param> /// <param name="observacion"></param> private void registroIngresoHoraExtra(string usuario,int id,Fecha fecha,Horario hora,string observacion) { //Abro conexión MySqlConnection conexionADO2 = new MySqlConnection(); conexionADO2.ConnectionString = conexionString; conexionADO2.Open(); String myquerystring = "INSERT INTO turno(fecha,ingreso, extra, observacionEntrada) " + "VALUES (" + fecha.getSQLFormat() + ", " + hora.getSQLFormat() + "," + id.ToString() + ", '" + observacion + "');"; //Asigno y ejecuto 3 MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO2; cmd.CommandText = myquerystring; cmd.ExecuteNonQuery(); }
//************************************ //***** Métodos de escritura ********* //************************************ /// <summary> /// Detecta si la accion a registrarse es un ingreso o egreso. /// </summary> /// <param name="usuario"></param> /// <param name="observacion"></param> /// <returns></returns> public int registrarAccion(string usuario, string observacion, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); Fecha fecha; Horario hora; //Conecto mediante NTP para obtener fecha/hora try { // Fuerzo a no utilizar el ntp porque anda mas o menos throw new Exception(); //Servidor NTP externo SNTPClient ntp = new SNTPClient("ar.pool.ntp.org"); //SNTPClient ntp = new SNTPClient("ntp.frsf.utn.edu.ar"); ntp.Connect(false); fecha = new Fecha(ntp.ReceiveTimestamp.Day, ntp.ReceiveTimestamp.Month, ntp.ReceiveTimestamp.Year, ntp.ReceiveTimestamp.DayOfWeek.ToString()); hora = new Horario(ntp.ReceiveTimestamp.Hour, ntp.ReceiveTimestamp.Minute, ntp.ReceiveTimestamp.Second); } catch (Exception ex) { //Si no funciona el ntp obtengo la hora de la base de datos MySqlDataReader dataread; MySqlCommand lecturaF = new MySqlCommand("select NOW() as ahora;" , conexionADO); dataread = lecturaF.ExecuteReader(); dataread.Read(); fecha = new Fecha(dataread.GetDateTime("ahora").Date); hora = new Horario(); hora.setTimeSpan(dataread.GetDateTime("ahora").TimeOfDay); dataread.Close(); } //Veo si es un ingeso o egreso //Creo lector =) y efectuo la consulta MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT * FROM turno_usuario_area t WHERE usuario=" + usuario + " AND fecha = " + fecha.getSQLFormat() + " AND t.egreso IS NULL;", conexionADO); data = lectura.ExecuteReader(); //tipo 0: egreso .. tipo 1: ingreso int tipoAccion = 1; int idTurno = 0; //si existe dato entonces es un egreso if (data.Read()) { //registro el egreso idTurno = data.GetInt32("idTurno"); tipoAccion = 0; } //Cierro el data reader (esa no la sabia) :o data.Close(); //Creo consulta string myquerystring; //Cambio la consulta dependiendo si es ingreso o egreso if (tipoAccion == 1) { //Primero obtengo si hay algun horario asignado para este dia de esa persona int dia = fecha.getDiaDeSemana(); MySqlDataReader data2; string consulta = "SELECT idHorario as id " + "FROM `horario_asignado` as h " + "WHERE " + "h.`usuario` = '" + usuario + "' AND " + "h.`fecha` = " + fecha.getSQLFormat() + " AND " + "h.`activo` = 1 AND " + "h.`confirmado` = 1 AND " + "TIME_TO_SEC(" + hora.getSQLFormat() + ") >= (TIME_TO_SEC(h.`ingreso`) - 1800) AND " + "TIME_TO_SEC(" + hora.getSQLFormat() + ") < TIME_TO_SEC(h.`egreso`);"; MySqlCommand lectura2 = new MySqlCommand(consulta, conexionADO); data2 = lectura2.ExecuteReader(); int id = 0; //Veo si hay horario asignado if (data2.Read()) { id = data2.GetInt32("id"); this.registroIngreso(usuario, id, fecha, hora, observacion); } else { id = this.crearHorarioExtra(usuario, area); this.registroIngresoHoraExtra(usuario, id, fecha, hora, observacion); } data2.Close(); } else { //Para el egreso myquerystring = "UPDATE turno SET egreso = " + hora.getSQLFormat() + ", observacionSalida = '" + observacion + "' WHERE idTurno =" + idTurno + ";"; //Asigno y ejecuto MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO; cmd.CommandText = myquerystring; cmd.ExecuteNonQuery(); } conexionADO.Close(); return tipoAccion; }
//************************************ //***** Métodos de escritura ********* //************************************ /// <summary> /// Detecta si la accion a registrarse es un ingreso o egreso. /// </summary> /// <param name="usuario"></param> /// <param name="observacion"></param> /// <returns></returns> public int registrarAccion(string usuario, string observacion, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); Fecha fecha; Horario hora; //Conecto mediante NTP para obtener fecha/hora try { // Fuerzo a no utilizar el ntp porque anda mas o menos throw new Exception(); //Servidor NTP externo SNTPClient ntp = new SNTPClient("ar.pool.ntp.org"); //SNTPClient ntp = new SNTPClient("ntp.frsf.utn.edu.ar"); ntp.Connect(false); fecha = new Fecha(ntp.ReceiveTimestamp.Day, ntp.ReceiveTimestamp.Month, ntp.ReceiveTimestamp.Year, ntp.ReceiveTimestamp.DayOfWeek.ToString()); hora = new Horario(ntp.ReceiveTimestamp.Hour, ntp.ReceiveTimestamp.Minute, ntp.ReceiveTimestamp.Second); } catch (Exception ex) { //Si no funciona el ntp obtengo la hora de la base de datos MySqlDataReader dataread; MySqlCommand lecturaF = new MySqlCommand("select NOW() as ahora;", conexionADO); dataread = lecturaF.ExecuteReader(); dataread.Read(); fecha = new Fecha(dataread.GetDateTime("ahora").Date); hora = new Horario(); hora.setTimeSpan(dataread.GetDateTime("ahora").TimeOfDay); dataread.Close(); } //Veo si es un ingeso o egreso //Creo lector =) y efectuo la consulta MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT * FROM turno_usuario_area t WHERE usuario=" + usuario + " AND fecha = " + fecha.getSQLFormat() + " AND t.egreso IS NULL;", conexionADO); data = lectura.ExecuteReader(); //tipo 0: egreso .. tipo 1: ingreso int tipoAccion = 1; int idTurno = 0; //si existe dato entonces es un egreso if (data.Read()) { //registro el egreso idTurno = data.GetInt32("idTurno"); tipoAccion = 0; } //Cierro el data reader (esa no la sabia) :o data.Close(); //Creo consulta string myquerystring; //Cambio la consulta dependiendo si es ingreso o egreso if (tipoAccion == 1) { //Primero obtengo si hay algun horario asignado para este dia de esa persona int dia = fecha.getDiaDeSemana(); MySqlDataReader data2; string consulta = "SELECT idHorario as id " + "FROM `horario_asignado` as h " + "WHERE " + "h.`usuario` = '" + usuario + "' AND " + "h.`fecha` = " + fecha.getSQLFormat() + " AND " + "h.`activo` = 1 AND " + "h.`confirmado` = 1 AND " + "TIME_TO_SEC(" + hora.getSQLFormat() + ") >= (TIME_TO_SEC(h.`ingreso`) - 1800) AND " + "TIME_TO_SEC(" + hora.getSQLFormat() + ") < TIME_TO_SEC(h.`egreso`);"; MySqlCommand lectura2 = new MySqlCommand(consulta, conexionADO); data2 = lectura2.ExecuteReader(); int id = 0; //Veo si hay horario asignado if (data2.Read()) { id = data2.GetInt32("id"); this.registroIngreso(usuario, id, fecha, hora, observacion); } else { id = this.crearHorarioExtra(usuario, area); this.registroIngresoHoraExtra(usuario, id, fecha, hora, observacion); } data2.Close(); } else { //Para el egreso myquerystring = "UPDATE turno SET egreso = " + hora.getSQLFormat() + ", observacionSalida = '" + observacion + "' WHERE idTurno =" + idTurno + ";"; //Asigno y ejecuto MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conexionADO; cmd.CommandText = myquerystring; cmd.ExecuteNonQuery(); } conexionADO.Close(); return(tipoAccion); }
/// <summary> /// Retorna la cantidad de horas totales que necesita cumplir un usuario /// en un área determinada. /// </summary> /// <param name="dni">string con el dni del usuario</param> /// <param name="area">nombre del area a la que pertenece el usuario</param> /// <returns></returns> public Horario getHorasNecesarias(string dni, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Obtengo el id del area MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) idArea = data.GetInt32("idArea"); else throw new SQLErrorException("Área"); data.Close(); //Ahora busco la cantidad total MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT * FROM usuario_area " + "WHERE usuario = '" + dni + "' AND idArea = " + idArea + ";", conexionADO); data2 = lectura2.ExecuteReader(); string hora; if (data2.Read()) hora = data2.GetString("horasAsignadas"); else throw new SQLErrorException("Total asignado"); Horario resultado = new Horario(hora); return resultado; }
/// <summary> /// Retorna la cantidad de horas que se asignó un usuario /// en un àrea determinada /// </summary> /// <param name="dni"></param> /// <returns></returns> public Horario getHorasAsignadasTotales(string dni, string area) { //Abro conexión MySqlConnection conexionADO = new MySqlConnection(); conexionADO.ConnectionString = conexionString; conexionADO.Open(); //Obtengo el id del area MySqlDataReader data; MySqlCommand lectura = new MySqlCommand("SELECT idArea FROM area WHERE nombreArea = '" + area + "';", conexionADO); data = lectura.ExecuteReader(); int idArea = 0; if (data.Read()) idArea = data.GetInt32("idArea"); else throw new SQLErrorException("Área"); data.Close(); //Creo lector =) y efectuo la consulta MySqlDataReader data2; MySqlCommand lectura2 = new MySqlCommand("SELECT sec_to_time(sum(time_to_sec(duracion))) AS suma FROM horario_asignado_habitual_duracion as h " + "WHERE usuario = '" + dni +"' AND area = " + idArea + ";", conexionADO); data2 = lectura2.ExecuteReader(); string hora; if (data2.Read()) hora = data2.GetString("suma"); else throw new SQLErrorException("Suma"); Horario resultado = new Horario(hora); return resultado; }