diff options
author | Sawyer Bergeron <sawyerbergeron@gmail.com> | 2019-01-28 13:07:05 -0500 |
---|---|---|
committer | Sawyer Bergeron <sawyerbergeron@gmail.com> | 2019-02-25 11:57:22 -0500 |
commit | de9a0666a8856e42d227754f6dc3915f6928af4c (patch) | |
tree | 23507abdad738ab02907305e02e8b59322ee80d3 /src/notifier | |
parent | f54fc52fb6d137aabd00d16cb35a608456ac4bbc (diff) |
Update Inbox Featureset
Inbox now supports marking unread, marking for deletion,
and has a new UI
Change-Id: Ia684056f70ecca31bbd71634f4d1d5415f7e5428
Signed-off-by: Sawyer Bergeron <sawyerbergeron@gmail.com>
Diffstat (limited to 'src/notifier')
-rw-r--r-- | src/notifier/manager.py | 4 | ||||
-rw-r--r-- | src/notifier/migrations/0003_auto_20190123_1741.py | 23 | ||||
-rw-r--r-- | src/notifier/migrations/0004_auto_20190124_2115.py | 23 | ||||
-rw-r--r-- | src/notifier/models.py | 4 | ||||
-rw-r--r-- | src/notifier/views.py | 39 |
5 files changed, 83 insertions, 10 deletions
diff --git a/src/notifier/manager.py b/src/notifier/manager.py index f03c2cc..240cf85 100644 --- a/src/notifier/manager.py +++ b/src/notifier/manager.py @@ -18,13 +18,13 @@ class NotificationHandler(object): @classmethod def notify_new_booking(cls, booking): template = "notifier/new_booking.html" - titles = ["You have a new Booking", "You have been added to a Booking"] + titles = ["You have a new booking (" + str(booking.id) + ")", "You have been added to a booking (" + str(booking.id) + ")"] cls.booking_notify(booking, template, titles) @classmethod def notify_booking_end(cls, booking): template = "notifier/end_booking.html" - titles = ["Your booking has ended", "A booking you collaborate on has ended"] + titles = ["Your booking (" + str(booking.id) + ") has ended", "A booking (" + str(booking.id) + ") that you collaborate on has ended"] cls.booking_notify(booking, template, titles) @classmethod diff --git a/src/notifier/migrations/0003_auto_20190123_1741.py b/src/notifier/migrations/0003_auto_20190123_1741.py new file mode 100644 index 0000000..f491993 --- /dev/null +++ b/src/notifier/migrations/0003_auto_20190123_1741.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1 on 2019-01-23 17:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('notifier', '0002_auto_20181102_1631'), + ] + + operations = [ + migrations.AddField( + model_name='notification', + name='is_html', + field=models.BooleanField(default=True), + ), + migrations.AddField( + model_name='notification', + name='is_read', + field=models.BooleanField(default=True), + ), + ] diff --git a/src/notifier/migrations/0004_auto_20190124_2115.py b/src/notifier/migrations/0004_auto_20190124_2115.py new file mode 100644 index 0000000..306ec7b --- /dev/null +++ b/src/notifier/migrations/0004_auto_20190124_2115.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1 on 2019-01-24 21:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0003_publicnetwork'), + ('notifier', '0003_auto_20190123_1741'), + ] + + operations = [ + migrations.RemoveField( + model_name='notification', + name='is_read', + ), + migrations.AddField( + model_name='notification', + name='read_by', + field=models.ManyToManyField(related_name='read_notifications', to='account.UserProfile'), + ), + ] diff --git a/src/notifier/models.py b/src/notifier/models.py index 5e7c60e..49189e8 100644 --- a/src/notifier/models.py +++ b/src/notifier/models.py @@ -14,7 +14,9 @@ from account.models import UserProfile class Notification(models.Model): title = models.CharField(max_length=150) content = models.TextField() - recipients = models.ManyToManyField(UserProfile) + recipients = models.ManyToManyField(UserProfile, related_name='notifications') + is_html = models.BooleanField(default=True) + read_by = models.ManyToManyField(UserProfile, related_name='read_notifications') def __str__(self): return self.title diff --git a/src/notifier/views.py b/src/notifier/views.py index 4ee757f..3a85eda 100644 --- a/src/notifier/views.py +++ b/src/notifier/views.py @@ -7,27 +7,52 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from notifier.models import Notification from django.shortcuts import render +from notifier.models import Notification +from django.db.models import Q def InboxView(request): if request.user.is_authenticated: user = request.user else: - return render(request, "dashboard/login.html", {'title': 'Authentication Required'}) + return render(request, "dashboard/login.html", + {'title': 'Authentication Required'}) - return render(request, "notifier/inbox.html", {'notifications': Notification.objects.filter(recipients=user.userprofile)}) + return render(request, + "notifier/inbox.html", + {'unread_notifications': Notification.objects.filter(recipients=user.userprofile).order_by('-id').filter(~Q(read_by=user.userprofile)), + 'read_notifications': Notification.objects.filter(recipients=user.userprofile).order_by('-id').filter(read_by=user.userprofile)}) def NotificationView(request, notification_id): + if request.user.is_authenticated: user = request.user else: - return render(request, "dashboard/login.html", {'title': 'Authentication Required'}) + return render(request, + "dashboard/login.html", + {'title': 'Authentication Required'}) notification = Notification.objects.get(id=notification_id) if user.userprofile not in notification.recipients.all(): - return render(request, "dashboard/login.html", {'title': 'Access Denied'}) - - return render(request, "notifier/notification.html", {'notification': notification}) + return render(request, + "dashboard/login.html", {'title': 'Access Denied'}) + + notification.read_by.add(user.userprofile) + notification.save() + if request.method == 'POST': + if 'delete' in request.POST: + # handle deleting + notification.recipients.remove(user.userprofile) + if not notification.recipients.exists(): + notification.delete() + else: + notification.save() + + if 'unread' in request.POST: + notification.read_by.remove(user.userprofile) + notification.save() + + return render(request, + "notifier/notification.html", {'notification': notification}) |