/// <summary> /// Realiza el procedimiento de validación /// registro y carga de la pantalla principal del sistema /// </summary> private void LogIn() { try { // Obtenemos las variables a partir de los controles string usuario_id = Usuario_IDTextBox.Text; string pwd = PasswordTextBox.Text; // Verificamos que no esten vacias if (usuario_id != "" && PasswordTextBox.Text != "") { // Instanciamos un objeto Functions SICASCentralQuerysDataSetTableAdapters.Functions fns = new SICASCentralQuerysDataSetTableAdapters.Functions(); // Validamos la relación usuario y contraseña contra la base de datos // mediante el Método AuthUser del objeto Functios fns if ((int)fns.AuthUser(usuario_id, pwd) > 0) { //usuario_id = "gestor.decobranza3"; // Si los datos de usuario y contraseña son válidos Sesion.Usuario_ID = usuario_id; // Cargamos sus datos de Emprea y Estacion Sesion.Set_Empresa_Estacion(); // Verificar si el usuario tiene permisos a una caja, List<Entities.Usuarios_Cajas> UsuariosCajas = Entities.Usuarios_Cajas.Read(usuario_id); // Obtenemos un objeto Usuario a partir del dato usuario_ir Entities.Usuarios usuario = Entities.Usuarios.Read(usuario_id); // Verificamos los permisos de caja // Si el usuario tiene permisos de caja y además no tiene estación fija if (UsuariosCajas.Count > 0 && Sesion.Estacion_ID != null) { // Si el usuario no tiene estacion fija // lanzamos una excepción if (Sesion.Estacion_ID == null) throw new Exception("El usuario debe tener configurada una estacion"); // Obtenemos las sesiones del usuario que esten activas // y las colocamos la variable sesiones List<Entities.Sesiones> sesiones = Entities.Sesiones.Read("Usuario_ID = @Usuario_ID AND Activo = 1 AND FechaFinal IS NULL", null, DB.Param("@Usuario_ID", usuario_id)); // Verificamos si tiene sesiones activas if (sesiones.Count == 0) { // No tiene sesiones activas // Crear sesion int? caja = null; // Selecccionar una caja // Verificar que estacion tenga cajas activas if (!DB.Exists( "Cajas", DB.Param("Estacion_ID", Sesion.Estacion_ID), DB.Param("Activa", true) ) ) { throw new Exception("No existen cajas activas para la estación"); } // Verificar el número de cajas por usuario if (UsuariosCajas.Count == 1) { // Aqui solo tiene una caja, se obtiene la default caja = UsuariosCajas[0].Caja_ID; } else { // Aquí tiene más de una caja el usuario // En caso de haber más de una caja // El usuario debe seleccionar su caja if (this.ShowSeleccionarCaja(usuario_id) == System.Windows.Forms.DialogResult.OK) { // Obtener la caja seleccionada caja = this.SeleccionarCajaForm.Caja_ID; } else { AppHelper.ThrowException("Debe seleccionar una caja"); } // end else } // end else // Verificar que la caja seleccionada no tenga sesión activa // Obtener las sessiones activas de la caja List<Entities.Sesiones> sesionesCaja = Entities.Sesiones.Read( "Caja_ID = @Caja_ID AND Activo = 1 AND FechaFinal IS NULL", null, DB.Param("@Caja_ID", caja) ); // Verificar el numero de registros if (sesionesCaja.Count > 0) { // Si tiene sesiones activas // Enviar mensaje de error AppHelper.ThrowException( @"El usuario {0} ya ha iniciado sesión en la caja seleccionada o predeterminada No puedes iniciar sesión hasta que el usuario {0} la termine realizando el corte correspondiente.", sesionesCaja[0].Usuario_ID ); } // end if // Crear una nueva sesión y registrarla Entities.Sesiones sesion = new Entities.Sesiones(); sesion.Activo = true; sesion.Caja_ID = caja; // falta poner la caja sesion.Estacion_ID = Sesion.Estacion_ID.Value; // Espera no nulo sesion.FechaFinal = null; sesion.FechaInicial = DB.GetDate(); sesion.HostName = null; sesion.IPAddress = null; sesion.MACAddress = null; sesion.Usuario_ID = usuario_id; sesion.Create(); // Pasar los datos a la sesión global Sesion.Sesion_ID = sesion.Sesion_ID; Sesion.Caja_ID = sesion.Caja_ID; Sesion.Estacion_ID = sesion.Estacion_ID; Sesion.FechaInicial = sesion.FechaInicial; } else { // Ya tiene sesión activa // Pasar los datos a la sesión global Sesion.Sesion_ID = sesiones[0].Sesion_ID; Sesion.Caja_ID = sesiones[0].Caja_ID; Sesion.Estacion_ID = sesiones[0].Estacion_ID; Sesion.FechaInicial = sesiones[0].FechaInicial; } } else if (UsuariosCajas.Count > 0 & Sesion.Estacion_ID == null) { throw new Exception("Los usuarios de caja solo deben tener acceso a una estación"); } Sesion.Activo = true; // Mostrar el formulario principal del sistema forms.SICASForm sicasForm = new forms.SICASForm(); this.Hide(); sicasForm.Show(); RegistrarEntrada(); this.Hide(); // Registramos que se ha actualizado el sistema // llamando al procedimiento AutoUpdater de la clase estática AutoUpdate AutoUpdate.AutoUpdater(); } else { // Enviar error de autenticación throw new Exception("Usuario o contraseña erroneas!"); } } } catch (Exception ex) { // Mostramos el mensaje de error AppHelper.Error(ex.Message); } }