/// <summary> /// Cargar DataViewGrid con resultados de consulta con los parámetros /// especificados en la Entidad "busqueda" /// </summary> /// <param name="busqueda">Entidad EBitacora</param> private void CargarTablaBitacora(EBitacora busqueda) { busqueda.FechaInicio = fechaInicio.Value.Date; busqueda.FechaFin = fechaFin.Value.Date; busqueda.LoginUsuario = txtbLogin.Text; busqueda.Accion = txtbAccion.Text; busqueda.TipoEvento = txtbTipoDeEvento.Text; busqueda.Descripcion = txtbDescripcion.Text; if (busqueda.FechaInicioFinValida()) { try { // Limpiar datos y refrescar el DataViewGrid GridBitacora.DataSource = null; GridBitacora.Rows.Clear(); GridBitacora.Refresh(); DataView infoPerfiles = new ReporteNeg().ConsultarBitacora(busqueda); GridBitacora.DataSource = infoPerfiles; } catch (Exception ex) { // Capturar e informar de excepción inesperada MainForm.NotificarExcepcion("Cargar tabla de bitácora", ex); } } else { MessageBox.Show(this, "Las fechas que ha ingresado no están en el orden correcto o son mayores que hoy.", "Error de espacio-tiempo"); } }
// Eliminar perfil public bool EliminarPerfil(EPerfil perfil) { try { if (perfilDAL.EliminarPerfil(perfil.IdPerfil) != 0) { // Notificar cambio a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = perfil.LoginUsuario; entrada.Accion = "Eliminar perfil"; entrada.TipoEvento = "Eliminar"; entrada.Descripcion = "Se ha eliminado la informacion del perfil '" + perfil.Nombre + "'."; entrada.Entidad = perfil.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
// Intentar login desde el cliente public bool IntentarIngreso(string login, string pass) { try { // Comprobación de formato del login mediante RegEx Regex regex = new Regex(@"[a-zA-ZñÑ\s]"); if (regex.IsMatch(login)) { login = login.ToLower(); DataTable datos; if (login.Equals("admin")) datos = loginDAL.VerificarUsuario(login, pass); else datos = loginDAL.VerificarUsuario(login, new Encriptacion().EncriptarSHA512(pass)); if (datos.Rows.Count != 0 && Convert.ToBoolean(datos.Rows[0][1])) { // Notificar ingreso a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = login; entrada.Accion = "Ingresar al sistema"; entrada.TipoEvento = "Ingresar"; entrada.Descripcion = "El usuario '" + login + "' con el perfil '" + datos.Rows[0][2] + "' ha ingresado al sistema."; entrada.Entidad = "Sistema"; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { // Notificar ingreso a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = login; entrada.Accion = "Ingresar al sistema"; entrada.TipoEvento = "Ingresar"; entrada.Descripcion = "El usuario '" + login + "' ha tratado de ingresar al " + "sistema pero se presentó el siguiente error: nombre y contraseña " + "no se encuentran en el sistema."; entrada.Entidad = "Sistema"; new ReporteNeg().RegistrarBitacora(entrada); return false; } } return false; } catch { return false; } }
// Registrar entrada en la bitácora public int RegistrarBitacora(EBitacora entrada) { SqlCommand comando = CrearComandoProc("CON_BitacoraRegistrar"); comando.Parameters.AddWithValue("@Usuario", entrada.LoginUsuario); comando.Parameters.AddWithValue("@Accion", entrada.Accion); comando.Parameters.AddWithValue("@TipoEvento", entrada.TipoEvento); comando.Parameters.AddWithValue("@Descripcion", entrada.Descripcion); comando.Parameters.AddWithValue("@Entidad", entrada.Entidad); return EjecutarComando(comando); }
// Consultar bitácora public DataTable ConsultarBitacora(EBitacora entrada) { SqlCommand comando = CrearComandoProc("CON_BitacoraConsultar"); comando.Parameters.AddWithValue("@FechaInicio", entrada.FechaInicio); comando.Parameters.AddWithValue("@FechaFin", entrada.FechaFin); comando.Parameters.AddWithValue("@Usuario", entrada.LoginUsuario); comando.Parameters.AddWithValue("@Accion", entrada.Accion); comando.Parameters.AddWithValue("@TipoEvento", entrada.TipoEvento); comando.Parameters.AddWithValue("@Descripcion", entrada.Descripcion); return EjecutarComandoDataTable(comando); }
/// <summary> /// Crear un registro en bitácora a partir de una entrada válida /// </summary> /// <param name="entrada">Entidad Bitácora con información para /// nueva entrada</param> /// <returns>true - en caso de éxito tras el registro</returns> public bool RegistrarBitacora(EBitacora entrada) { try { if (reporteDAL.RegistrarBitacora(entrada) != 0) return true; else return false; } catch { return false; } }
/// <summary> /// Cambia el estado de la curso y actualiza el historial + validaciones /// </summary> /// <param name="curso"></param> /// <returns>true - si el procedimiento tuvo éxito</returns> public bool CambiarEstadoCurso(ECurso curso, string anterior, string nuevo) { try { if (anterior.Equals("Planificado") && nuevo.Equals("Abierto") || anterior.Equals("Curso en pausa") && nuevo.Equals("Abierto") || anterior.Equals("Matrícula incompleta") && nuevo.Equals("Abierto") || anterior.Equals("Abierto") && !nuevo.Equals("Abierto")) { if (cursosDAL.CambiarEstadoCurso(curso) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = curso.LoginUsuario; entrada.Accion = "Cambiar estado de curso"; entrada.TipoEvento = "Modificar"; entrada.Descripcion = "El estado del curso '" + curso.Nombre + "' fue cambiado de '" + anterior + "' a '" + nuevo + "'."; entrada.Entidad = curso.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } else { return false; } } catch { return false; } }
/// <summary> /// Cambia el estado de la oferta y actualiza el historial /// </summary> /// <param name="oferta"></param> /// <returns>true - si el procedimiento tuvo éxito</returns> public bool CambiarEstadoOferta(EOferta oferta, string anterior, string nuevo) { try { if (anterior.Equals("En matrícula") && !nuevo.Equals("En matrícula") || !anterior.Equals("En matrícula") && nuevo.Equals("En matrícula")) { if (ofertasDAL.CambiarEstadoOferta(oferta) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = oferta.LoginUsuario; entrada.Accion = "Cambiar estado de oferta"; entrada.TipoEvento = "Modificar"; entrada.Descripcion = "El estado de la oferta '" + oferta.Nombre + "' fue cambiado de '" + anterior + "' a '" + nuevo + "'."; entrada.Entidad = oferta.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } else { return false; } } catch { return false; } }
// Registrar un nuevo usuario desde la lógica de negocio public bool RegistrarUsuario(EUsuario usuario) { try { usuario.Contrasena = new Encriptacion().EncriptarSHA512(usuario.Contrasena); if (userDAL.RegistrarUsuario(usuario) != 0) { EBitacora entrada = new EBitacora(); entrada.LoginUsuario = usuario.LoginUsuario; entrada.Accion = "Registrar usuario"; entrada.TipoEvento = "Registrar"; entrada.Descripcion = "Se ha registrado el usuario '" + usuario.Nombre + "' con la siguiente información: " + "Login = '******', " + "Perfil = '" + usuario.NombrePerfil + "', " + "Nombre = '" + usuario.Nombre + "'."; entrada.Entidad = usuario.Login; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
// Modificar un nuevo usuario desde la logica de negocio public bool ModificarUsuario(EUsuario usuario) { try { if (userDAL.ModificarUsuario(usuario) != 0) { EBitacora entrada = new EBitacora(); entrada.LoginUsuario = usuario.LoginUsuario; entrada.Accion = "Registrar usuario"; entrada.TipoEvento = "Registrar"; entrada.Descripcion = "Se ha modificado el usuario '" + usuario.Nombre + "' con la siguiente información: " + "Login = '******', " + "Perfil = '" + usuario.NombrePerfil + "', " + "Nombre = '" + usuario.Nombre + "', " + "Activo = '" + BoolToWord(usuario.Activo) + "'."; entrada.Entidad = usuario.Login; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
/// <summary> /// Recibir excepciones si las hay de otras partes del programa /// y registrarlas en la bitácora de forma segura /// </summary> /// <param name="ex"></param> public static void NotificarExcepcion(string accion, Exception ex) { try { EBitacora error = new EBitacora(); error.LoginUsuario = sesion.Login; error.Accion = accion; error.TipoEvento = "Excepción"; error.Descripcion = "Se ha presentado un error grave. Detalles del error: " + "StackTrace: " + ex.StackTrace + " / " + "Mensaje: " + ex.Message; error.Entidad = "No disponible"; new ReporteNeg().RegistrarBitacora(error); try { SoundPlayer snd = new SoundPlayer(Resources.voz_crash); snd.Play(); } catch { } // Mostrar MessageBox y notificar visiblemente al usuario MessageBox.Show("Se ha presentado un error inesperado. " + "Por favor, contacte a su administrador.", "Error grave"); } catch // Aquí se revienta { // Mostrar MessageBox y notificar visiblemente al usuario MessageBox.Show("El programa ha sufrido un error irrecuperable. " + "Por favor, contacte a su administrador.", "Excepción fatal"); } }
/// <summary> /// Obtener DataView de Bitácora a partir de DataTable /// </summary> /// <param name="entrada">Consulta con parámetros buscados por el usuario</param> /// <returns>IEnumerable donde cada elemento es una fila de la tabla retornada</returns> public DataView ConsultarBitacora(EBitacora entrada) { DataTable tabla = reporteDAL.ConsultarBitacora(entrada); return tabla.AsDataView(); }
/// <summary> /// Matricular un nuevo participante en línea /// </summary> /// <param name="part"></param> /// <returns></returns> public bool MatricularParticipanteEnLinea(EParticipante part) { try { if (matriculaDAL.MatricularParticipanteEnLinea(part) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = part.Usuario; entrada.Accion = "Registrar participante"; entrada.TipoEvento = "Registrar"; entrada.Descripcion = "Se ha registrado al participante en línea: " + "Curso = " + part.NombreCurso + ", " + "Identificación = " + part.Identificacion + ", " + "Nombre = " + part.Nombre + ", " + "Teléfono = " + part.Telefono + ", " + "Correo electrónico = " + part.Correo + ", " + "Observaciones = " + part.Observaciones + ", " + "Tipos de apoyo requeridos = " + part.TipoApoyo + "."; entrada.Entidad = part.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
// Actualizar datos de perfil existente public bool ModificarPerfil(EPerfil perfil) { try { if (perfilDAL.ModificarPerfil(perfil) != 0) { // Notificar cambio a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = perfil.LoginUsuario; entrada.Accion = "Modificar perfil"; entrada.TipoEvento = "Modificar"; entrada.Descripcion = "Se ha modificado el perfil '" + perfil.Nombre + "' con la siguiente información: " + GenerarStringDescripcion(perfil); entrada.Entidad = perfil.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
/// <summary> /// Registrar curso /// </summary> /// <param name="curso"></param> /// <returns></returns> public bool RegistrarCurso(ECurso curso) { try { if (cursosDAL.RegistrarCurso(curso) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = curso.LoginUsuario; entrada.Accion = "Registrar curso"; entrada.TipoEvento = "Registrar"; entrada.Descripcion = "Se ha registrado el curso '" + curso.Nombre + "' con la siguiente información: " + "Oferta = " + curso.NombreOferta + ", " + "Estado = " + curso.NombreEstado + ", " + "Código = " + curso.Codigo + ", " + "Tipo = " + curso.NombreTipo + ", " + "Sede = " + curso.NombreSede + ", " + "Facilitador = " + curso.Facilitador + ", " + "Población meta = " + curso.PoblacionMeta + ", " + "Horario = " + curso.Horario + ", " + "Número de grupo = " + curso.NumeroGrupo + ", " + "Lista de espera = " + GetSiNo(curso.ListaDeEspera) + ", " + "Curso requisito de = " + curso.CursoRequisitoDe + ", " + "Requisitos y observaciones = " + curso.Observaciones + ", " + "Total = " + curso.Total.ToString() + ", " + "Matrícula presencial = " + GetSiNo(curso.MatriculaPresencial) + ", " + "Matrícula telefónica = " + GetSiNo(curso.MatriculaTelefonica) + ", " + "Cantidad presencial y telefónica = " + curso.CantidadPresTel.ToString() + ", " + "Matrícula en línea = " + GetSiNo(curso.MatriculaEnLinea) + ", " + "Cantidad en línea = " + curso.CantidadEnLinea + "."; entrada.Entidad = curso.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
/// <summary> /// Eliminar un curso seleccionado desde la tabla /// </summary> /// <param name="curso"></param> /// <returns></returns> public bool EliminarCurso(ECurso curso) { try { if (cursosDAL.EliminarCurso(curso.Codigo) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = curso.LoginUsuario; entrada.Accion = "Eliminar curso"; entrada.TipoEvento = "Eliminar"; entrada.Descripcion = "Se ha eliminado la información del curso '" + curso.Nombre + "'."; entrada.Entidad = curso.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
/// <summary> /// Registra una oferta /// </summary> /// <param name="oferta"></param> /// <returns>true - si el procedimiento tuvo éxito</returns> public bool RegistrarOferta(EOferta oferta) { try { if (ofertasDAL.RegistrarOferta(oferta) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = oferta.LoginUsuario; entrada.Accion = "Registrar oferta"; entrada.TipoEvento = "Registrar"; entrada.Descripcion = "Se ha registrado la oferta '" + oferta.Nombre + "' con la siguiente información: " + "estado = " + oferta.Estado + ", " + "Sede = " + oferta.Sede + ", " + "Fecha y hora de matrícula = " + oferta.FechaRegistro + ", " + "Observaciones = " + oferta.Observacion; entrada.Entidad = oferta.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }
/// <summary> /// Elimina una oferta de la base de datos a partir de su ID /// </summary> /// <param name="oferta"></param> /// <returns>true - si el procedimiento tuvo éxito</returns> public bool EliminarOferta(EOferta oferta) { try { if (ofertasDAL.EliminarOferta(oferta.IdOferta) != 0) { // Notificar a bitácora EBitacora entrada = new EBitacora(); entrada.LoginUsuario = oferta.LoginUsuario; entrada.Accion = "Eliminar oferta"; entrada.TipoEvento = "Eliminar"; entrada.Descripcion = "Se ha eliminado la información de la oferta '" + oferta.Nombre + "'."; entrada.Entidad = oferta.Nombre; new ReporteNeg().RegistrarBitacora(entrada); return true; } else { return false; } } catch { return false; } }