Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Notificación de un nuevo servicio asignado (nueva asignación a movimiento)
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignación de recurso</param>
        /// <returns></returns>
        public RetornoOperacion NuevoServicioAsignado(int id_movimiento_asignacion_recurso)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Validando asignación del recurso y obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si hay datos suficientes
                    if (resultado.OperacionExitosa)
                    {
                        //Inicializando asignaciones totales
                        int      totalAsignaciones = 0;
                        DateTime cita_inicio       = Fecha.ObtieneFechaEstandarMexicoCentro();

                        //Recuperando asignaciones totales de servicio al usuario
                        using (DataTable mit = MovimientoAsignacionRecurso.CargaServiciosAsignadosAlRecurso(tipoRecurso, idRecurso, false))
                        {
                            //Si hay asignaciones
                            if (mit != null)
                            {
                                totalAsignaciones = mit.Rows.Count;
                                cita_inicio       = Convert.ToDateTime(mit.Rows[0]["CitaOrigen"]);
                            }
                        }

                        //Si hay asignaciones
                        if (totalAsignaciones > 0)
                        {
                            //Definiendo datos del mensaje de la notificación (si hay mas de una asignación, se considera como notificación de baja prioridad dado que existe otra en curso)
                            var datos = new
                            {
                                Titulo           = "¡Nuevo viaje asignado!",
                                Mensaje          = String.Format(totalAsignaciones > 1 ? "Se ha añadido un viaje a la lista de pendientes." : "Inicia el '{0:dd-MM-yyyy HH:mm}'", cita_inicio),
                                TipoNotificacion = totalAsignaciones > 1 ? "NAsignacion" : "NAsignacionActivo"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                        }
                        //Si no hay asignaciones
                        else
                        {
                            resultado = new RetornoOperacion("No se pudo obtener el total de asignaciones.");
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Ejemplo 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);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Notificación de asignación de vale de diesel y depósito de anticipos
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignanción de Recurso</param>
        /// <param name="tipo">Tipo de actualización</param>
        ///<param name="fecha">Fecha Depósito o Fecha de Carga</param>
        ///<param name="cantidad">Cantidad Depositada o Litro</param>
        /// <returns></returns>
        public RetornoOperacion NotificacionDepositoAnticiposYDiesel(int id_movimiento_asignacion_recurso, TipoNotificacionServicio tipo, DateTime fecha, decimal cantidad)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0, idServicio = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso, out idServicio);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si se configuró el uso de aplicación móvil
                    if (resultado.OperacionExitosa)
                    {
                        //Determinando el tipo de actualización realizada
                        switch (tipo)
                        {
                        case TipoNotificacionServicio.Diesel:
                            var datos = new
                            {
                                Titulo           = "¡Vale de diesel asignado!",
                                Mensaje          = string.Format("{0:f2} litros, Carga el {1:dd/MM/yyyy HH:mm}", cantidad, fecha),
                                IdServicio       = idServicio,
                                TipoNotificacion = "NDiesel"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                            break;

                        case TipoNotificacionServicio.AnticipoDepositado:
                            var datos1 = new
                            {
                                Titulo           = "¡Depósito de anticipo confirmado!",
                                Mensaje          = string.Format("{0:c}, a las {1:dd/MM/yyyy HH:mm}", cantidad, fecha),
                                IdServicio       = idServicio,
                                TipoNotificacion = "NDeposito"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos1);
                            break;
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Notificación de cambios en alguna parada de servicio asignado (cambio de citas, nueva parada y eliminar parada)
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignanción de Recurso</param>
        /// <param name="tipo">Tipo de actualización</param>
        /// <returns></returns>
        public RetornoOperacion ActualizaInformacionServicio(int id_movimiento_asignacion_recurso, TipoNotificacionServicio tipo)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si se configuró el uso de aplicación móvil
                    if (resultado.OperacionExitosa)
                    {
                        //Determinando el tipo de actualización realizada
                        switch (tipo)
                        {
                        case TipoNotificacionServicio.NParadaServActual:
                            var datos = new
                            {
                                Titulo           = "¡Parada añadida al viaje actual!",
                                Mensaje          = "El viaje en curso fue modificado, consulte los detalles.",
                                TipoNotificacion = "NParada"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                            break;

                        case TipoNotificacionServicio.EParadaServActual:
                            var datos1 = new
                            {
                                Titulo           = "¡Parada eliminada del viaje actual!",
                                Mensaje          = "El viaje en curso fue modificado, consulte los detalles.",
                                TipoNotificacion = "EParada"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos1);
                            break;

                        case TipoNotificacionServicio.AParadaServActual:
                            var datos2 = new
                            {
                                Titulo           = "¡Parada modificada en viaje actual!",
                                Mensaje          = "El viaje en curso fue modificado, consulte los detalles.",
                                TipoNotificacion = "AParada"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos2);
                            break;

                        case TipoNotificacionServicio.ActualizacionServicio:
                            var datos3 = new
                            {
                                Titulo           = "¡Viaje pendiente actualizado!",
                                Mensaje          = "Un viaje asignado fue modificado, consulte los detalles.",
                                TipoNotificacion = "AAsignacion"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos3);
                            break;
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Notificación de asignación eliminada
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignanción de Recurso</param>
        /// <param name="viaje_activo">True para indicar que la asignación correspondia al viaje inmediato siguiente, de lo contrario false</param>
        /// <returns></returns>
        public RetornoOperacion EliminaAsignacionServicio(int id_movimiento_asignacion_recurso, bool viaje_activo)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si se configuró el uso de aplicación móvil
                    if (resultado.OperacionExitosa)
                    {
                        //Inicializando asignaciones totales
                        int totalAsignaciones = 0;

                        //Recuperando asignaciones totales de servicio al usuario
                        using (DataTable mit = MovimientoAsignacionRecurso.CargaServiciosAsignadosAlRecurso(tipoRecurso, idRecurso, false))
                        {
                            //Si hay asignaciones
                            if (mit != null)
                            {
                                totalAsignaciones = mit.Rows.Count;
                            }
                        }

                        //Definiendo datos del mensaje de la notificación (si no hay asignaciones se informa que no tiene servicios asignados, si queda alguna otra pendiente se informa)
                        //Si hay asignaciones pendientes
                        if (totalAsignaciones > 0)
                        {
                            var datos1 = new
                            {
                                Titulo           = "¡Viaje Reemplazado!",
                                Mensaje          = "El viaje activo fue cambiado, consulte los detalles.",
                                TipoNotificacion = "NAsignacionActivo"
                            };

                            var datos2 = new
                            {
                                Titulo           = "¡Viajes pendientes actualizados!",
                                Mensaje          = "La lista de pendientes fue modificada, consulte los detalles.",
                                TipoNotificacion = "EAsignacion"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, viaje_activo ? datos1 : datos2);
                        }
                        //Si ya no hay asignaciones
                        else
                        {
                            var datos = new
                            {
                                Titulo           = "¡Sin viajes pendientes!",
                                Mensaje          = "Por el momento no tiene viajes asignados.",
                                TipoNotificacion = "EAsignacionActivo"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }