Esempio n. 1
0
        /// <summary>
        /// Realiza la validación de un usuario y asesión activa en dispositivo móvil
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignación de recurso</param>
        /// <param name="id_compania">Id de Compañía donde se encuentra el recurso</param>
        /// <param name="token_fcm">Token de Firebase Cloud Messaging</param>
        /// <returns></returns>
        private RetornoOperacion validaUsuarioSesionActivaRecurso(int id_movimiento_asignacion_recurso, out int id_compania, out int id_recurso, out MovimientoAsignacionRecurso.Tipo tipo_recurso, out string token_fcm)
        {
            //Inicializando retorno
            RetornoOperacion resultado = new RetornoOperacion("Sesión Activa Encontrada.", true);

            //Inicializando parámetros de salida
            id_compania  = id_recurso = 0;
            tipo_recurso = MovimientoAsignacionRecurso.Tipo.Operador;
            token_fcm    = "";

            //Instanciando asignación
            using (MovimientoAsignacionRecurso asignacion = new MovimientoAsignacionRecurso(id_movimiento_asignacion_recurso))
            {
                //Definiendo objeto usuario sin asignar
                Usuario usuario = null;

                //Para el tipo de asignación correspondiente
                switch (asignacion.TipoMovimientoAsignacion)
                {
                case MovimientoAsignacionRecurso.Tipo.Operador:
                    //Instanciando operador
                    using (Operador op = new Operador(asignacion.id_recurso_asignado))
                    {
                        //Obteniendo usuario en cuestión
                        usuario     = Usuario.ObtieneUsuarioAsignadoOperador(op.id_operador);
                        id_compania = op.id_compania_emisor;
                        id_recurso  = op.id_operador;
                    }

                    break;

                case MovimientoAsignacionRecurso.Tipo.Tercero:

                    //TODO: Implementar obtención de token FCM de dispositivo asignado al tercero

                    break;

                case MovimientoAsignacionRecurso.Tipo.Unidad:
                    //TODO: Implementar obtención de token FCM de dispositivo asignado a la unidad
                    break;
                }

                //Validando existencia de usuario
                if (usuario != null)
                {
                    //Validando sesión activa en algún dispositivo
                    if (Validacion.ValidaOrigenDatos(UsuarioSesion.ObtieneSesionesActivasUsuario(usuario.id_usuario, UsuarioSesion.TipoDispositivo.Android)))
                    {
                        //Recuperando referencia del token de usuario
                        using (DataTable mit = Referencia.CargaReferencias(usuario.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(id_compania, 30, "Token FCM", 0, "Configuración")))
                            token_fcm = mit != null ? mit.Rows[0]["Valor"].ToString() : "";

                        //Si no obtuvo el token del usuario correspondiente
                        if (token_fcm == "")
                        {
                            resultado = new RetornoOperacion("El token del dispositivo del usuario debe ser actualizado.");
                        }
                    }
                    //Si no hay sesiones activas
                    else
                    {
                        resultado = new RetornoOperacion("El usuario no cuenta con una sesión activa en dispositivo móvil.");
                    }
                }
                //Si no hay un usuario asiciado
                else
                {
                    resultado = new RetornoOperacion("No hay un usuario asociado al recurso.");
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Esempio n. 2
0
        /// <summary>
        /// Actualiza el token de dispositivo, asignado para servicios FCM
        /// </summary>
        /// <param name="id_usuario_sesion">Id de Sesión de Usuario</param>
        /// <returns></returns>
        private RetornoOperacion actualizaTokenFireBaseCloudMessaging(int id_usuario_sesion, string token)
        {
            //Declarando objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion(id_usuario_sesion);

            //Inicializando bloque transaccional
            using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
            {
                //Instanciando sesión solicitada
                using (UsuarioSesion sesion = new UsuarioSesion(id_usuario_sesion))
                {
                    //Validando estatus de sesión
                    if (sesion.EstatusSesion == UsuarioSesion.Estatus.Activo)
                    {
                        //Obteniendo Referencia de token existente para el registro de usuario de la sesión
                        using (DataTable mitTokenActual = Referencia.CargaReferencias(sesion.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Token FCM", 0, "Configuración")))
                        {
                            //Si existe alguna
                            if (mitTokenActual != null)
                            {
                                //Verificando existencia de esta misma referencia
                                using (Referencia tokenDuplicado = new Referencia(token, ReferenciaTipo.ObtieneIdReferenciaTipo(sesion.id_compania_emisor_receptor, 30, "Token FCM", 0, "Configuración")))
                                {
                                    //Si hay alguna existente que no sea la referencia del token actual a editar
                                    if (tokenDuplicado.id_referencia > 0 && tokenDuplicado.id_referencia != Convert.ToInt32(mitTokenActual.Rows[0]["Id"]))
                                    {
                                        //Verificando si está asignado a un usuario con sesiones móviles activas
                                        if (UsuarioSesion.ObtieneSesionesActivasUsuario(tokenDuplicado.id_registro, UsuarioSesion.TipoDispositivo.Android) != null)
                                        {
                                            //Señalando error
                                            resultado = new RetornoOperacion(String.Format("El Token está asignado a una sesión activa de '{0}', cierre la sesión antes de continuar.", new SAT_CL.Seguridad.Usuario(tokenDuplicado.id_registro).nombre));
                                        }
                                        //Si no hay asignación
                                        else
                                        {
                                            //Borrando el token del usuario anterior
                                            resultado = Referencia.EditaReferencia(tokenDuplicado.id_referencia, "", sesion.id_usuario);
                                        }
                                    }
                                }

                                //Si no hay errores
                                if (resultado.OperacionExitosa)
                                {
                                    //Editando registro previo
                                    resultado = Referencia.EditaReferencia(Convert.ToInt32(mitTokenActual.Rows[0]["Id"]), token, sesion.id_usuario);
                                }
                                else
                                {
                                    resultado = new RetornoOperacion(String.Format("Error al borrar Token anterior: {0}", resultado.Mensaje));
                                }
                            }
                            //Si no existe alguna
                            else
                            {
                                //Insertando nuevo elemento
                                resultado = Referencia.InsertaReferencia(sesion.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(sesion.id_compania_emisor_receptor, 30, "Token FCM", 0, "Configuración"), token, Fecha.ObtieneFechaEstandarMexicoCentro(), sesion.id_usuario);
                            }
                        }
                    }
                    //Si la sesión ya no se encuentra activa
                    else
                    {
                        resultado = new RetornoOperacion("La Sesión ha Expirado.");
                    }
                }

                //Si no hay errores
                if (resultado.OperacionExitosa)
                {
                    scope.Complete();
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Esempio n. 3
0
        /// <summary>
        /// Notificación para pedir ubicación actual al dispositivo
        /// </summary>
        /// <param name="tipo_recurso">Tipo de Recurso</param>
        /// <param name="id_recurso">Id de Entidad acorde al tipo indicado</param>
        /// <returns></returns>
        public RetornoOperacion NotificacionPeticionUbicacion(MovimientoAsignacionRecurso.Tipo tipo_recurso, int id_recurso)
        {
            //Declrando objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion();

            //Inicializando variables auxiliares
            string  tokenFCM   = "";
            int     idCompania = 0;
            Usuario usuario    = null;

            //En base al tipo de recurso
            switch (tipo_recurso)
            {
            case MovimientoAsignacionRecurso.Tipo.Operador:
                //Instanciando el recurso
                using (Operador op = new Operador(id_recurso))
                {
                    //Guardando id de compañía
                    idCompania = op.id_compania_emisor;
                    //Recuperando Usuario correspondiente
                    usuario = Usuario.ObtieneUsuarioAsignadoOperador(op.id_operador);
                }
                break;

            case MovimientoAsignacionRecurso.Tipo.Unidad:
                //Instanciando Unidad
                using (Unidad unidad = new Unidad(id_recurso))
                {
                    //recuperando Id de Compañía
                    idCompania = unidad.id_compania_emisor;

                    //Instanciando tipo de unidad
                    using (UnidadTipo tipo = new UnidadTipo(unidad.id_tipo_unidad))
                    {
                        //Si la unidad es motriz
                        if (tipo.bit_motriz)
                        {
                            //Determiando la propiedad de unidad
                            //Si no es propia
                            if (unidad.bit_no_propia)
                            {
                            }
                            //Si lo es
                            else
                            {
                                //Buscando asignación de operador activa
                                int idOperador = AsignacionOperadorUnidad.ObtieneOperadorAsignadoAUnidad(id_recurso);
                                //Recuperando Usuario correspondiente
                                usuario = Usuario.ObtieneUsuarioAsignadoOperador(idOperador);
                            }
                        }
                    }
                }
                break;
            }

            //Si hay compañía y usuario
            if (idCompania > 0 && usuario != null)
            {
                //Validando configuración de notificaciones
                resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                //Si se configuró el uso de aplicación móvil
                if (resultado.OperacionExitosa)
                {
                    //Validando sesión activa en algún dispositivo
                    if (Validacion.ValidaOrigenDatos(UsuarioSesion.ObtieneSesionesActivasUsuario(usuario.id_usuario, UsuarioSesion.TipoDispositivo.Android)))
                    {
                        //Recuperando referencia del token de usuario
                        using (DataTable mit = Referencia.CargaReferencias(usuario.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(idCompania, 30, "Token FCM", 0, "Configuración")))
                            tokenFCM = mit != null ? mit.Rows[0]["Valor"].ToString() : "";

                        //Si se obtuvo el token del usuario correspondiente
                        if (tokenFCM != "")
                        {
                            //Armando mensaje de petición
                            var datos = new
                            {
                                Titulo           = "Comando de Ubicación",
                                Mensaje          = "N/D",
                                TipoNotificacion = "Ubicacion"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Alta, datos);
                        }
                        //Si no hay token
                        else
                        {
                            resultado = new RetornoOperacion("El token del dispositivo del usuario debe ser actualizado.");
                        }
                    }
                    //Si no hay sesión activa
                    else
                    {
                        resultado = new RetornoOperacion("El usuario no cuenta con una sesión activa en dispositivo móvil.");
                    }
                }
            }
            //Si no hay compañía o usuario
            else
            {
                resultado = new RetornoOperacion("No se localizó la compañía o el usuario asignado al recurso.");
            }

            //Si el resultado es correcto
            if (resultado.OperacionExitosa)
            {
                resultado = new RetornoOperacion("Petición enviada correctamente, el tiempo de respuesta puede variar de un dispositivo a otro y verse afectado por la calidad de datos móviles.", true);
            }

            //Devolviendo resultado
            return(resultado);
        }