/// <summary> /// /// </summary> /// <param name="changeId"></param> /// <returns></returns> public bool CreateSingleNotification(string changeId) { bool notificationGenerated = false; ActivityDateChange change = Db.DateChanges.SingleOrDefault(c => c.Id.ToString().Equals(changeId)); //Überprüfen ob die Veranstaltung innerhalb des gegebenen Zeitraums stattfindet DateTime activityDate = change.Date.Begin; DateTime currentDate = DateTime.Now; //Zeitraum für die erstellung der Notification definieren DateTime untilDate = currentDate.AddDays(7); if (DateTime.Compare(currentDate, activityDate) < 0 && DateTime.Compare(activityDate, untilDate) < 0 && change.IsNotificationGenerated == false) { string notificationText = GenerateNotificationText(changeId); GenerateNotificationStates(changeId); // NotificationContent hinterlegen change.NotificationContent = notificationText; change.IsNotificationGenerated = true; Db.SaveChanges(); SendPushNotification(change.NotificationContent, change.Id.ToString()); notificationGenerated = true; } return(notificationGenerated); }
public string CreateNotification(string changeId) { ActivityDateChange change = Db.DateChanges.SingleOrDefault(c => c.Id.ToString().Equals(changeId)); string returnString = "<p style='margin-bottom: 20px;'>Beim Abrufen des ActivityChangeDates ist ein Fehler aufgetreten.</p>"; if (change != null) { DateTime untilDate = DateTime.Now.AddDays(7); var notificationService = new NotificationService(); bool notificationGenerated = notificationService.CreateSingleNotification(changeId); string[] helpString = new string[2]; if (notificationGenerated == true) { helpString [0] = "Notification wurde erfolgreich erstellt und versendet."; } else { if (DateTime.Compare(DateTime.Now, change.Date.Begin) > 0) { helpString[0] = "Die Notification wurde nicht erstellt, da die Veranstaltung in der Vergangenheit liegt."; } else if (DateTime.Compare(change.Date.Begin, untilDate) > 0) { helpString[0] = "Die Notification wurde nicht erstellt, da die Veranstaltung mehr als 7 Tage in der Zukunft liegt."; } else if (change.IsNotificationGenerated) { helpString [0] = "Die Notification wurde nicht erstellt, da sie bereits erstellt worden ist."; } else { helpString[0] = "Beim erstellen der Notification ist ein Fehler aufgetreten."; } } helpString[1] = notificationService.GenerateNotificationText(changeId); returnString = "<span style='font-weight: bold;'>Details:</span></br><p style='margin-bottom: 20px;'>" + helpString[0] + "</p><span style='font-weight: bold;'>NotificationText:</span></br><p style='margin-bottom: 20px;'>" + helpString[1] + "</p>"; } return(returnString); }
internal ActivityDateChange CreateActivityDateStateChange(ActivityDate date, bool hasRoomChange) { var change = new ActivityDateChange { TimeStamp = DateTime.Now, Date = date, NewBegin = date.Begin, NewEnd = date.End, OldBegin = date.Begin, OldEnd = date.End, HasTimeChange = false, HasStateChange = true, HasRoomChange = hasRoomChange }; return(change); }
/// <summary> /// /// </summary> /// <param name="changeId"></param> public void GenerateNotificationStates(string changeId) { ActivityDateChange change = Db.DateChanges.SingleOrDefault(c => c.Id.ToString().Equals(changeId)); // Liste aller in betroffenen Kurs eingetragenen User generieren List <OccurrenceSubscription> subscriptionList = new List <OccurrenceSubscription>(); subscriptionList = change.Date.Activity.Occurrence.Subscriptions.ToList(); // schon bestehende NotificationStates löschen (nur solange die Notifications manuell erzeugt werden) change.NotificationStates.Clear(); //Für jeden User einen notificationState anlegen foreach (OccurrenceSubscription s in subscriptionList) { NotificationState nState = new NotificationState(); nState.ActivityDateChange = change; nState.IsNew = true; nState.UserId = s.UserId; change.NotificationStates.Add(nState); } Db.SaveChanges(); }
/// <summary> /// /// </summary> /// <param name="changeId"></param> /// <returns></returns> public string GenerateNotificationText(string changeId) { ActivityDateChange change = Db.DateChanges.SingleOrDefault(c => c.Id.ToString().Equals(changeId)); string notificationText = ""; // Notification Text erstellen für den Fall einer Raumänderung try { if (change.HasRoomChange && !change.Date.Occurrence.IsCanceled && !change.HasTimeChange && change.Date.Rooms.Count() > 0) { if (change.Date.Rooms.Count() > 1) { List <Room> raumListe = change.Date.Rooms.ToList(); string raumNamen = ""; foreach (Room r in raumListe) { raumNamen = raumNamen + r.Number.ToString() + ", "; } raumNamen = raumNamen.Remove(raumNamen.Length - 2); notificationText = "Die Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.OldBegin.ToString("dd/MM") + " findet in den Räumen " + raumNamen + " statt."; } else { notificationText = "Die Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.OldBegin.ToString("dd/MM") + " findet im Raum " + change.Date.Rooms.FirstOrDefault().Number.ToString() + " statt."; } } // Notification Text erstellen für den Fall einer Terminverschiebung else if (change.HasTimeChange) { if (change.Date.Rooms.Count() > 1) { List <Room> raumListe = change.Date.Rooms.ToList(); string raumNamen = ""; foreach (Room r in raumListe) { raumNamen = raumNamen + r.Number.ToString() + ", "; } raumNamen = raumNamen.Remove(raumNamen.Length - 2); notificationText = "Die Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.OldBegin.ToString("dd/MM") + " wurde auf den " + change.NewBegin.ToString("dd/MM") + " um " + change.NewBegin.ToString("HH:mm") + " Uhr verschoben und findet in den Räumen " + raumNamen + " statt."; } else { notificationText = "Die Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.OldBegin.ToString("dd/MM") + " wurde auf den " + change.NewBegin.ToString("dd/MM") + " um " + change.NewBegin.ToString("HH:mm") + " Uhr verschoben und findet im Raum " + change.Date.Rooms.FirstOrDefault().Number.ToString() + " statt."; } } // Notification Text erstellen im Fall einer Absage else if (change.HasStateChange && change.Date.Occurrence.IsCanceled) { notificationText = "Die Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.Date.Begin.ToString("dd/MM") + " wurde abgesagt."; } // Notification Text erstellen im Fall einer Reaktivierung des Termins else if (change.HasStateChange && !change.Date.Occurrence.IsCanceled) { notificationText = "Die zuvor abgesagte Veranstaltung " + change.Date.Activity.Name.ToString() + " vom " + change.Date.Begin.ToString("dd/MM") + " findet wieder statt."; } else { notificationText = "Es konnte kein Text generiert werden."; } } catch (Exception e) { notificationText = $"FEHLER BEI DER TEXTERSTELLUNG: {e.Message}"; } return(notificationText); }
/// <summary> /// /// </summary> /// <param name="date">Termin mit alten Informationen</param> /// <param name="newBegin">neuer Begin</param> /// <param name="newEnd">neues Ende</param> /// <param name="newRoomIds">Ids der neuen Räume</param> /// <returns>Das Change Objekt</returns> public ActivityDateChange CreateActivityDateChange(ActivityDate date, DateTime newBegin, DateTime newEnd, ICollection <Guid> newRoomIds) { var change = new ActivityDateChange { TimeStamp = DateTime.Now, Date = date, NewBegin = newBegin, NewEnd = newEnd, OldBegin = date.Begin, OldEnd = date.End, HasTimeChange = false }; // was in jedem Fall benötigt wird // die userId muss der Aufrufer (ein Controller) setzen // Hat sich Anfang oder Ende geändert? if (date.Begin != newBegin || date.End != newEnd) { change.HasTimeChange = true; } // Raumänderungen prüfen // nur Räume nicht zeitliche Belegung! change.HasRoomChange = false; // Kopie der neuen Räume var roomIdList = newRoomIds != null ? new List <Guid>(newRoomIds) : new List <Guid>(); // alle bisherigen Räume durchgehen // wenn einer nicht mehr in der neuen Liste ist, dann ist er wohl gelöscht foreach (var room in date.Rooms) { // der bisherige Raum ist auch in der neuen Liste vorhanden if (roomIdList.Contains(room.Id)) { // rausnehmen, muss nicht weiter geprüft werden roomIdList.Remove(room.Id); } else { // raum wurde entfernt // neuen RoomChange anlegen // unabhängig davon, ob sich sonst was am termin geändert hat change.HasRoomChange = true; } } // die in der Liste verbliebenen Räume müssen wohl neu sein foreach (var roomId in roomIdList) { // ein neuer Raum change.HasRoomChange = true; } // statusänderung gibt es hier nicht change.HasStateChange = false; // sollte sich nichts geändert haben, dann auch den change nicht zurückgeben if (!change.HasTimeChange && !change.HasRoomChange) { return(null); } return(change); }