/// <summary> /// Determina si la compañía especificada tiene habilitado el uso de aplicación móvil /// </summary> /// <param name="id_compania">Id de Compañía</param> /// <returns></returns> public static RetornoOperacion ValidaConfiguracionUsoAplicacionMovil(int id_compania) { //Declarando variable de retorno RetornoOperacion resultado = new RetornoOperacion("La compañía no tiene habilitado el uso de aplicación móvil."); //Cargando referencia de configuración using (DataTable mit = Referencia.CargaReferencias(id_compania, 25, ReferenciaTipo.ObtieneIdReferenciaTipo(id_compania, 25, "Uso Aplicación Móvil", 0, "Configuración"))) { //Si hay resultados if (mit != null) { if (Convert.ToBoolean(mit.Rows[0]["Valor"])) { resultado = new RetornoOperacion("Configuración válida.", true); } } } //Devolviendo resultado return(resultado); }
/// <summary> /// Notificación de cierre de sesión /// </summary> /// <param name="id_sesion_cerrada">Id de Sesión de Usuario que fue terminada</param> /// <returns></returns> public RetornoOperacion NotificacionCierreSesion(int id_sesion_cerrada) { //Inicializando retorno RetornoOperacion resultado = new RetornoOperacion(); //Token del usuario al que se reportará string tokenFCM = ""; //Instanciando sesión using (UsuarioSesion sesion = new UsuarioSesion(id_sesion_cerrada)) { //Validando si se tiene habilitado el uso de apliacación móvil resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(sesion.id_compania_emisor_receptor); if (resultado.OperacionExitosa) { //Recuperando referencias de usuario y compañía using (DataTable mit = Referencia.CargaReferencias(sesion.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(sesion.id_compania_emisor_receptor, 30, "Token FCM", 0, "Configuración"))) tokenFCM = mit != null ? mit.Rows[0]["Valor"].ToString() : ""; //Si se obtuvo el token del usuario correspondiente if (tokenFCM != "") { //Construyendo mensaje var datos = new { Titulo = "¡Sesión Terminada!", Mensaje = "Vuelva a iniciar sesión en este dispositivo.", TipoNotificacion = "CierreSesion" }; //Enviando mensaje vía FCM resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos); } else { resultado = new RetornoOperacion("El token del dispositivo del usuario debe ser actualizado."); } } } //Devolviendo resultado return(resultado); }
/// <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); }
/// <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); }