public static string GetUserTimeZone(string userId) { using (var db = new TransafeRxEntities()) { var timeZone = db.GetUserTimeZone(userId).SingleOrDefault() ?? "UTC"; return(timeZone); } }
public static void Main(string[] args) { try { using (var db = new TransafeRxEntities()) { db.Database.CommandTimeout = 0; var messages = db.GetMessagesToSend_30().ToList();//db.GetMedAdhMsgs().ToList(); if (messages.Any()) { var twilioClient = new TwilioRestClient(ConfigurationManager.AppSettings["twilio_sid"], ConfigurationManager.AppSettings["twilio_authToken"]); foreach (var message in messages) { try { Twilio.Message tMessage = twilioClient.SendMessage(ConfigurationManager.AppSettings["twilioNbr"], message.MobPhone, message.MsgText); db.UpdateMsgSendQueue(message.mqID); //db.InsertPatientMessageSent(message.UserId, message.MsgText, tMessage.DateCreated, message.MsgID, tMessage.Sid, tMessage.Status, tMessage.ErrorMessage); //db.AddPersonalizedSurveyMessageHistory(message.UserId, message.MsgID); } catch (Exception e) { using (var smtpClient = new SmtpClient(ConfigurationManager.AppSettings["mail_host"])) { string im = (e.InnerException != null) ? e.InnerException.Message : ""; string body = e.Message + ';' + im; var mMsg = new MailMessage("*****@*****.**", ConfigurationManager.AppSettings["SupportEmail"]); mMsg.Subject = "TransafeRx Personalized Msgs In Loop Error Report"; mMsg.Body = body; mMsg.IsBodyHtml = true; smtpClient.Send(mMsg); } //throw; } } } } } catch (Exception ex) { using (var smtpClient = new SmtpClient(ConfigurationManager.AppSettings["mail_host"])) { string im = (ex.InnerException != null) ? ex.InnerException.Message : ""; string body = ex.Message + ';' + im; var mMsg = new MailMessage("*****@*****.**", ConfigurationManager.AppSettings["SupportEmail"]); mMsg.Subject = "TransafeRx Personalized Msgs Report"; mMsg.Body = body; mMsg.IsBodyHtml = true; smtpClient.Send(mMsg); } throw; } }
public static TimeZoneAdjustedDateInfo GetTimeZoneAdjustedDateInfo(string userId, Instant instant) { using (var db = new TransafeRxEntities()) { var timeZone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(db.GetUserTimeZone(userId).SingleOrDefault() ?? "UTC"); return(new TimeZoneAdjustedDateInfo { DateUTC = instant.ToDateTimeUtc(), DateDTO = instant.InZone(timeZone).ToDateTimeOffset(), DateCTZ = timeZone.Id }); } }
public static void Main(string[] args) { using (var db = new TransafeRxEntities()) { try { var deviceTokenUsers = db.GetAllDeviceTokensWithUser().ToList(); //var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, //Shared.Properties.Resources.TransafeRx_DEV_PUSH, Shared.Properties.Settings.Default.ApplePushPW); var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, Shared.Properties.Resources.TransafeRx_PROD_PUSH, Shared.Properties.Settings.Default.ApplePushPW); var apnsBroker = new ApnsServiceBroker(config); apnsBroker.OnNotificationFailed += (notification, aggregateEx) => { aggregateEx.Handle(ex => { if (ex is ApnsNotificationException) { var notificationException = (ApnsNotificationException)ex; var apnsNotification = notificationException.Notification; var statusCode = notificationException.ErrorStatusCode; //Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}"); } else { //Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}"); } return(true); }); }; apnsBroker.OnNotificationSucceeded += (notification) => { Console.WriteLine("Apple Notification Sent!"); }; apnsBroker.Start(); foreach (var user in deviceTokenUsers) { var notifications = db.GetAllUserNotifications(user.UserId).SingleOrDefault(); if (!string.IsNullOrEmpty(user.Token)) { //blood pressure notification if (notifications != null) { if (notifications.BpNotificationTypeId != null) { if (notifications.BpDaysSinceLastNotification.HasValue) { if (notifications.BpDaysSinceLastReading.HasValue) { if (notifications.BpDaysSinceLastReading > notifications.BpNotificationDays && notifications.BpDaysSinceLastNotification >= notifications.BpNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Pressure Reminder\",\"body\":\"" + "Time to take your Blood Pressure!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 1, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Pressure Reminder\",\"body\":\"" + "Time to take your Blood Pressure!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 1, user.TokenId); } } else { if (notifications.BpNotificationDays.HasValue) { if (notifications.BpDaysSinceLastReading.HasValue) { if (notifications.BpDaysSinceLastReading > notifications.BpNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Pressure Reminder\",\"body\":\"" + "Time to take your Blood Pressure!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 1, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Pressure Reminder\",\"body\":\"" + "Time to take your Blood Pressure!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 1, user.TokenId); } } } } } //blood glucose notification if (notifications != null) { if (notifications.BgNotificationTypeId != null) { if (notifications.BgDaysSinceLastNotification.HasValue) { if (notifications.BgDaysSinceLastReading.HasValue) { if (notifications.BgDaysSinceLastReading > notifications.BgNotificationDays && notifications.BgDaysSinceLastNotification >= notifications.BgNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Glucose Reminder\",\"body\":\"" + "Time to take your Blood Glucose!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 2, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Glucose Reminder\",\"body\":\"" + "Time to take your Blood Glucose!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 2, user.TokenId); } } else { if (notifications.BgNotificationDays.HasValue) { if (notifications.BgDaysSinceLastReading.HasValue) { if (notifications.BgDaysSinceLastReading > notifications.BgNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Glucose Reminder\",\"body\":\"" + "Time to take your Blood Glucose!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 2, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Blood Glucose Reminder\",\"body\":\"" + "Time to take your Blood Glucose!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 2, user.TokenId); } } } } } //survey notification if (notifications != null) { if (notifications.SnNotificationTypeId != null) { if (notifications.SnDaysSinceLastNotification.HasValue) { if (notifications.SnDaysSinceLastReading.HasValue) { if (notifications.SnDaysSinceLastReading > notifications.SnNotificationDays && notifications.SnDaysSinceLastNotification >= notifications.SnNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Symptom Survey Reminder\",\"body\":\"" + "Time to take the Symptom Survey!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 3, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Symptom Survey Reminder\",\"body\":\"" + "Time to take the Symptom Survey!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 3, user.TokenId); } } else { if (notifications.SnNotificationDays.HasValue) { if (notifications.SnDaysSinceLastReading.HasValue) { if (notifications.SnDaysSinceLastReading > notifications.SnNotificationDays) { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Symptom Survey Reminder\",\"body\":\"" + "Time to take the Symptom Survey!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 3, user.TokenId); } } else { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = user.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"alarm\",\"alert\":{\"title\":\"Symptom Survey Reminder\",\"body\":\"" + "Time to take the Symptom Survey!" + "\"}}}") }); db.AddNotificationMessage(user.UserId, 3, user.TokenId); } } } } } } } apnsBroker.Stop(); } catch (Exception e) { SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["SMTP"]); MailAddress from = new MailAddress("*****@*****.**"); MailMessage message = new MailMessage(from, to); message.Body = "An error has occured in TransafeRx User Notification Service. Please see below for details.\r\n"; message.Body += "Stack Trace: " + e.StackTrace + "\r\n"; message.Subject = "TransafeRx User Notification Service Error Report"; client.Send(message); message.Dispose(); } } }
public static void Main(string[] args) { using (var db = new TransafeRxEntities()) { try { var deviceTokenUsers = db.GetAllDeviceTokensWithUser().ToList(); //Where(x => x.UserId == "3fd5b550-c517-4ff5-9825-c55b37d50175").ToList(); var allMedicationsNotTaken = db.GetAllMedicationsNotTakenWindow(61).ToList(); //Where(x => x.UserId == "3fd5b550-c517-4ff5-9825-c55b37d50175").ToList(); //var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, //Shared.Properties.Resources.TransafeRx_DEV_PUSH, Shared.Properties.Settings.Default.ApplePushPW); var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, Shared.Properties.Resources.TransafeRx_PROD_PUSH, Shared.Properties.Settings.Default.ApplePushPW); var apnsBroker = new ApnsServiceBroker(config); apnsBroker.OnNotificationFailed += (notification, aggregateEx) => { aggregateEx.Handle(ex => { if (ex is ApnsNotificationException) { var notificationException = (ApnsNotificationException)ex; var apnsNotification = notificationException.Notification; var statusCode = notificationException.ErrorStatusCode; Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}"); } else { Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}"); } return(true); }); }; apnsBroker.OnNotificationSucceeded += (notification) => { Console.WriteLine("Apple Notification Sent!"); }; apnsBroker.Start(); foreach (var medicationNotTaken in allMedicationsNotTaken) { GetAllDeviceTokensWithUser_Result user = deviceTokenUsers.Where(x => x.UserId == medicationNotTaken.UserId).FirstOrDefault(); if (user == null) { continue; } if (user.AdmissionTypeId.HasValue) { if (user.AdmissionTypeId.Value == 1) { db.AddMedicationActivityAdmitted(user.UserId, medicationNotTaken.ScheduleId, medicationNotTaken.UserMedicationId); continue; } } List <GetAllDeviceTokensWithUser_Result> users = deviceTokenUsers.Where(x => x.UserId == medicationNotTaken.UserId).ToList(); //GetAllDeviceTokensWithUser_Result deviceUser = deviceTokenUsers.Where(x => x.UserId == medicationNotTaken.UserId).Last(); foreach (var deviceUser in users) { if (!string.IsNullOrEmpty(deviceUser.Token)) { string reminder = ""; int section = 0; if (medicationNotTaken.ScheduleTime.Hours.Equals(DateTime.Now.Hour)) { section = medicationNotTaken.ScheduleTime.Hours; if (medicationNotTaken.ScheduleTime.Hours < 12) { reminder = String.Format("Time to take your {0} AM medication(s)!", medicationNotTaken.ScheduleTime.Hours); } else if (medicationNotTaken.ScheduleTime.Hours > 12 && medicationNotTaken.ScheduleTime.Hours < 24) { reminder = String.Format("Time to take your {0} PM medication(s)!", (medicationNotTaken.ScheduleTime.Hours - 12)); } else if (medicationNotTaken.ScheduleTime.Hours == 12) { reminder = String.Format("Time to take your 12 PM medication(s)!"); } else { reminder = String.Format("Time to take your {0} AM medication(s)!", (medicationNotTaken.ScheduleTime.Hours - 12)); } try { apnsBroker.QueueNotification(new ApnsNotification { DeviceToken = deviceUser.Token, Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"anticipate.mp3\",\"alert\":{\"title\":\"" + "Medication Reminder" + "\",\"body\":\"" + reminder + "\"}},\"Section\":\"" + section + "\"}") }); db.AddMessage(medicationNotTaken.ScheduleId, null, deviceUser.TokenId); } catch (Exception e) { Console.WriteLine(e.StackTrace); db.AddMessage(medicationNotTaken.ScheduleId, e.StackTrace, deviceUser.TokenId); } } } } } //foreach (var user in deviceTokenUsers) //{ // List<GetAllMedicationsNotTakenWindow_Result> medicationsNotTaken = allMedicationsNotTaken.Where(x => x.UserId == user.UserId).ToList(); // if (user.AdmissionTypeId.HasValue) // { // if (user.AdmissionTypeId.Value == 1) // { // foreach (GetAllMedicationsNotTakenWindow_Result medication in medicationsNotTaken) // { // db.AddMedicationActivityAdmitted(user.UserId, medication.ScheduleId, medication.UserMedicationId); // } // break; // } // } // if (!string.IsNullOrEmpty(user.Token)) // { // string reminder = ""; // int section = 0; // if (medicationsNotTaken.Count > 0) // { // List<GetAllMedicationsNotTakenWindow_Result> MedicationsToTake = new List<GetAllMedicationsNotTakenWindow_Result>(); // foreach (var medication in medicationsNotTaken) // { // if (medication.ScheduleTime.Hours.Equals(DateTime.Now.Hour)) // { // section = medication.ScheduleTime.Hours; // if (medication.ScheduleTime.Hours < 12) // { // reminder = String.Format("Time to take your {0} AM medication(s)!", medication.ScheduleTime.Hours); // } // else if (medication.ScheduleTime.Hours > 12 && medication.ScheduleTime.Hours < 24) // { // reminder = String.Format("Time to take your {0} PM medication(s)!", (medication.ScheduleTime.Hours - 12)); // } // else if(medication.ScheduleTime.Hours == 12) // { // reminder = String.Format("Time to take your 12 PM medication(s)!"); // } // else // { // reminder = String.Format("Time to take your {0} AM medication(s)!", (medication.ScheduleTime.Hours - 12)); // } // MedicationsToTake.Add(medication); // } // } // if (MedicationsToTake.Count() > 0) // { // try // { // apnsBroker.QueueNotification(new ApnsNotification // { // DeviceToken = user.Token, // Payload = JObject.Parse("{\"aps\":{\"content-available\":\"1\",\"sound\":\"anticipate.mp3\",\"alert\":{\"title\":\"" + "Medication Reminder" + "\",\"body\":\"" + reminder + "\"}},\"Section\":\"" + section + "\"}") // }); // foreach (GetAllMedicationsNotTakenWindow_Result medication in MedicationsToTake) // { // db.AddMessage(medication.ScheduleId, null, user.TokenId); // } // } // catch (Exception e) // { // Console.WriteLine(e.StackTrace); // foreach (GetAllMedicationsNotTakenWindow_Result medication in MedicationsToTake) // { // db.AddMessage(medication.ScheduleId, e.StackTrace, user.TokenId); // } // } // } // } // } //} var fbs = new FeedbackService(config); fbs.FeedbackReceived += (string deviceToken, DateTime timestamp) => { //remove token from database //timestamp is time token was expired Console.WriteLine(String.Format("FeedbackReceived: {0} : {1}"), deviceToken, timestamp.ToString()); GetAllDeviceTokensWithUser_Result token = deviceTokenUsers.Where(x => x.Token == deviceToken).FirstOrDefault(); if (token != null) { db.UpdateDeviceTokenExpired(token.TokenId, true); } }; fbs.Check(); apnsBroker.Stop(); } catch (Exception e) { SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["SMTP"]); MailAddress from = new MailAddress("*****@*****.**"); MailMessage message = new MailMessage(from, to); message.Body = "An error has occured in TransafeRx Medication Notification Service. Please see below for details.\r\n"; message.Body += "Stack Trace: " + e.StackTrace + "\r\n"; message.Subject = "TransafeRx Medication Notification Service Error Report"; client.Send(message); message.Dispose(); } } }