Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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();
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        /// <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);
        }