/// <summary> /// Realiza el firmado del usuario sobre una compañía en particular /// </summary> /// <param name="id_usuario">Id de Usuario Autenticado</param> /// <param name="id_compania">Id de Compañía donde se firmará el usuario</param> /// <param name="tipo_dispositivo">Tipo de dispositivo desde donde se accesa (Consultar TipoDispositivo en contrato de servicio)</param> /// <param name="nombre_dispositivo">Nombre o alias del dispositivo</param> /// <param name="direccion_ip_mac">Dirección ipV6 o MAC del dispositivo</param> /// <param name="codigo_aut">Código de Autenticación</param> /// <param name="token_fcm">Token de dispositivo, registrado para Firebase Cloud Messaging</param> /// <returns></returns> public string IniciaSesion(int id_usuario, int id_compania, string tipo_dispositivo, string nombre_dispositivo, string direccion_ip_mac, string codigo_aut, string token_fcm) { //Declarando objeto de retorno RetornoOperacion result = new RetornoOperacion("No fueron proporcionados todos los valores de parámetros requeridos."); //Validando conjunto de datos requeridos if (id_usuario > 0 && id_compania > 0 && !string.IsNullOrEmpty(tipo_dispositivo) && !string.IsNullOrEmpty(nombre_dispositivo) && !string.IsNullOrEmpty(direccion_ip_mac)) { //Inicializando Bloque Transaccional using (TransactionScope trans = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { //Validando Compania if (Operador.ObtieneOperadorUsuario(id_usuario).id_compania_emisor == id_compania) { //Obteniendo Referencia de Codigo using (DataTable dtRefCodConfirmacion = Referencia.CargaReferencias(id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Codigo Acceso", 0, "Configuración"))) { //Validando que exista la Referencia if (Validacion.ValidaOrigenDatos(dtRefCodConfirmacion)) { //Recorriendo Ciclo foreach (DataRow dr in dtRefCodConfirmacion.Rows) { //Instanciando Referencia using (Referencia referencia = new Referencia(Convert.ToInt32(dr["Id"]))) { //Validando que exista la Referencia if (referencia.habilitar) { //Validando que el Codigo no sea Vacio if (!referencia.valor.Equals("")) { //Validando que no Exceda el Tiempo Permitido if ((Fecha.ObtieneFechaEstandarMexicoCentro() - referencia.fecha).TotalMinutes <= 30) { //Validando que el Codigo sea igual if (referencia.valor.Equals(codigo_aut)) { //Insertamos Sesión del Usuario result = SAT_CL.Seguridad.UsuarioSesion.IniciaSesion(id_usuario, id_compania, (SAT_CL.Seguridad.UsuarioSesion.TipoDispositivo)((byte)convierteCadenaTipoDispositivo(tipo_dispositivo)), direccion_ip_mac, nombre_dispositivo, id_usuario); //Validando Operación Exitosa if (result.OperacionExitosa) { //Obteniendo Sesion generada int idSession = result.IdRegistro; //Editando Referencia result = Referencia.EditaReferencia(referencia.id_referencia, "", id_usuario); //Validando Operación Exitosa if (result.OperacionExitosa) { //Actualizando token de dispositivo result = actualizaTokenFireBaseCloudMessaging(idSession, token_fcm); //Si no hay errores de actualización de token if (result.OperacionExitosa) { //Instanciando Sesión result = new RetornoOperacion(idSession); //Completando Transacción trans.Complete(); } else { result = new RetornoOperacion(-2, string.Format("Error al actualizar Token FCM: {0}.", result.Mensaje), false); } } } } else { //Instanciando Excepción result = new RetornoOperacion(-2, "El Código de Autenticación es Incorrecto.", false); } } else { //Limpiando código previo generado result = Referencia.EditaReferencia(referencia.id_referencia, "", id_usuario); trans.Complete(); //Instanciando Excepción result = new RetornoOperacion(-2, "Se ha excedido el límite de tiempo para ingresar el Código de Autenticación.", false); } } else { //Instanciando Excepción result = new RetornoOperacion(-2, "No se especifico el Código de Autenticación.", false); } } else { //Instanciando Excepción result = new RetornoOperacion(-2, "No existe el Código de Autenticación.", false); } } //Terminando Ciclo break; } } else { //Instanciando Excepción result = new RetornoOperacion(-2, "No existe el Código de Autenticación.", false); } } } else { // result = new RetornoOperacion("El usuario no corresponde a la Compania Asignada."); } } } else { //Instanciando Excepción result = new RetornoOperacion(string.Format("{0} {1} {2} {3} {4}.", id_usuario < 1 ? "Falta id_usuario." : "", id_compania < 1 ? "Falta id_compania." : "", string.IsNullOrEmpty(tipo_dispositivo) ? "Falta tipo_dispositivo." : "", string.IsNullOrEmpty(nombre_dispositivo) ? "Falta nombre_dispositivo." : "", string.IsNullOrEmpty(direccion_ip_mac) ? "Falta direccion_ip_mac." : "")); } //Devolviendo resultado return(result.ToXMLString()); }