/// <summary> /// Notifica a Notiway que un mensaje fue leido /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario y el Id del mensaje</param> public void NotiwayNewsReadNotification(NotiwayNewsReadNotificationRequest request) { String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); LogRequest(request); var sessionId = GetSessionId(request, out errorMessage); if (errorMessage != ErrorMessagesMnemonics.None) { return; } var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); var platformId = Convert.ToInt32(String.IsNullOrEmpty(request.Platform) ? ConfigurationManager.AppSettings["DefaultPlatform"] : request.Platform); if (countryId == 14 && platformId == 1) { countryId = 1; platformId = 4; } try { using (var db = new Movilway.API.Data.Notiway.NotiwayEntities()) { ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[" + sessionId + "] " + "Actualizando registro ...") ); db.Database.ExecuteSqlCommand( QUERY_AUDIT_READ, new SqlParameter("@CountryP", countryId), new SqlParameter("@PlatformP", platformId), new SqlParameter("@LoginP", request.AuthenticationData.Username), new SqlParameter("@ScheduleP", request.ScheduleId), new SqlParameter("@DeviceTypeP", request.DeviceType) ); } ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[" + sessionId + "] " + "Hecho") ); } catch (Exception e) { ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(_methodName) .Message("[AUDITORIA] [" + sessionId + "] " + "Error actualizando auditoria de mensaje") .Exception(e) ); } }
/// <summary> /// Escribe en base de datos la auditoria para cada mensaje enviado /// </summary> /// <param name="SessionId">ID de la sesion que genero los mensajes (solo para log)</param> /// <param name="CountryId">ID del pais al que pertenece el usuario</param> /// <param name="PlatformId">ID de la plataforma al que pertenece el usuario</param> /// <param name="Login">Login del usuario</param> /// <param name="DeviceType">ID del tipo de acceso</param> /// <param name="MarkAsReaded">Incrementar el contador de lecturas para el mensaje automaticamente</param> /// <param name="messages">Lista de mensajes enviados que se escribiran en los datos de auditoria</param> private void writeAudit(String SessionId, int CountryId, int PlatformId, String Login, int DeviceType, bool MarkAsReaded, List <NotiwayNews> messages) { String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); if (messages != null && messages.Count > 0) { ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[AUDITORIA] [" + SessionId + "] " + "Total mensajes a ser actualizados en auditoria: " + messages.Count) ); try { using (var db = new Movilway.API.Data.Notiway.NotiwayEntities()) { db.Database.ExecuteSqlCommand( QUERY_AUDIT_BULK, new SqlParameter("@CountryP", CountryId), new SqlParameter("@PlatformP", PlatformId), new SqlParameter("@LoginP", Login), new SqlParameter("@ScheduleListP", String.Join(",", messages.Select(s => s.ScheduleId).ToList())), new SqlParameter("@DeviceTypeP", DeviceType), new SqlParameter("@MarkAsReadP", MarkAsReaded ? "1" : "0") ); } ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[AUDITORIA] [" + SessionId + "] " + "Hecho") ); } catch (Exception e) { ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(_methodName) .Message("[AUDITORIA] [" + SessionId + "] " + "Error actualizando auditoria de mensajes") .Exception(e) ); } } }
/// <summary> /// Obtiene la lista de mensajes pendientes a ser enviados para el usuario que realiza la peticion /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario</param> /// <returns>Un objeto <c>GetNotiwayMessageListResponse</c> que contiene la lista de mensajes pendientes</returns> public GetNotiwayNewsListResponse GetNotiwayNewsList(GetNotiwayNewsListRequest request) { String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); LogRequest(request); GetNotiwayNewsListResponse response = new GetNotiwayNewsListResponse(); var sessionId = GetSessionId(request, response, out errorMessage); if (errorMessage != ErrorMessagesMnemonics.None) { return(response); } var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); var platformId = Convert.ToInt32(String.IsNullOrEmpty(request.Platform) ? ConfigurationManager.AppSettings["DefaultPlatform"] : request.Platform); if (countryId == 14 && platformId == 1) { countryId = 1; platformId = 4; } using (var db = new Movilway.API.Data.Notiway.NotiwayEntities()) { ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[" + sessionId + "] " + "Obteniendo lista de mensajes ...") ); var list = db.Database.SqlQuery <NotiwayQuerySelectItem>( QUERY_SELECT, new SqlParameter("@CountryP", countryId), new SqlParameter("@PlatformP", platformId), new SqlParameter("@LoginP", request.AuthenticationData.Username), new SqlParameter("@DeviceTypeP", request.DeviceType), new SqlParameter("@OnlyUnreadP", request.OnlyUnread ? "1" : "0") ); foreach (var item in list) { NotiwayNews aux = new NotiwayNews() { NewsId = item.MessageId , ScheduleId = item.MessageScheduleId , ExpirationDate = item.ExpirationDate.ToString("yyyy-MM-dd") , Title = item.Title , Abstract = item.Abstract , Type = item.MessageTypeId , FirstDeliveryDate = item.FirstDeliveryDate.ToString("yyyy-MM-dd") , LastReadDate = ((item.LastReadDate != null && item.LastReadDate.HasValue) ? (item.LastReadDate.Value.ToString("yyyy-MM-dd")) : "") }; if (request.DeviceType == PosWebDeviceTypeId) { // POS WEB aux.Detail = String.IsNullOrEmpty(item.Detail) ? "" : item.Detail; aux.ImageURL = String.IsNullOrEmpty(item.ImageURL) ? "" : item.ImageURL; } response.NewsList.Add(aux); } ProviderLogger.InfoLow(() => TagValue.New() .MethodName(_methodName) .Message("[" + sessionId + "] " + "Total mensajes a ser enviados: " + response.NewsList.Count) ); try { ThreadPool.QueueUserWorkItem(unused => writeAudit(sessionId, countryId, platformId, request.AuthenticationData.Username, request.DeviceType, request.MarkAsReaded, response.NewsList)); } catch (Exception e) { ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(_methodName) .Message("Error iniciando hilo de escritura mensajes de auditoria") .Exception(e) ); } } response.ResponseCode = 0; response.ResponseMessage = "Exito"; response.Quantity = response.NewsList.Count; LogResponse(response); return(response); }