Skip to content

Commit

Permalink
Merge pull request compserv#223 from alexander-zw/waitlist-email
Browse files Browse the repository at this point in the history
Email notification for getting off the waitlist
  • Loading branch information
alexander-zw committed Apr 28, 2020
2 parents aff1b43 + 0356cef commit 2c5f039
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 4 deletions.
7 changes: 6 additions & 1 deletion hknweb/events/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ def waitlist_set(self):
return self.rsvp_set.none()
return self.rsvp_set.order_by("created_at")[self.rsvp_limit:]

def newly_off_waitlist_rsvps(self, old_admitted):
""" old_admitted must be a set, not a QuerySet. QuerySets are mutable views into the database. """
new_admitted = set(self.admitted_set())
return new_admitted - old_admitted


class Rsvp(models.Model):
user = models.ForeignKey(User, models.CASCADE, verbose_name="rsvp'd by")
Expand All @@ -62,7 +67,7 @@ class Rsvp(models.Model):
# updated_at = models.DateTimeField(auto_now=True)

def __repr__(self):
return "Rsvp(event={})".format(self.event)
return "Rsvp(event={}, user={})".format(self.event, self.user.username)

def __str__(self):
return self.event.name
Expand Down
24 changes: 24 additions & 0 deletions hknweb/events/templates/events/off_waitlist_email.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ subject }}</title>
</head>
<body>

<p>
You have gotten off the waitlist for the event {{ event_name }}!
Click
<a href="{{ event_link }}">here</a>
to view the event.
</p>

<p>
Have a nice day!
</p>

<img src="{{ img_link }}" alt="cute animal"><br>
<span style="font-size: 0.8em;"> Image source: pexels.com </span>

</body>
</html>
38 changes: 35 additions & 3 deletions hknweb/events/views.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
from django.shortcuts import render, redirect
from django.http import Http404
from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404, reverse
from django.core.mail import EmailMultiAlternatives
from django.conf import settings
from django.template.loader import render_to_string
from django.views import generic

from hknweb.utils import login_and_permission, method_login_and_permission
from hknweb.utils import login_and_permission, method_login_and_permission, get_rand_photo
from .models import Event, EventType, Rsvp
from .forms import EventForm

Expand Down Expand Up @@ -75,11 +78,14 @@ def unrsvp(request, id):
raise Http404()

event = get_object_or_404(Event, pk=id)
rsvp = get_object_or_404(Rsvp, user=request.user, event = event)
rsvp = get_object_or_404(Rsvp, user=request.user, event=event)
if rsvp.confirmed:
messages.error(request, 'Cannot un-rsvp from event you have gone to.')
else:
old_admitted = set(event.admitted_set())
rsvp.delete()
for off_waitlist_rsvp in event.newly_off_waitlist_rsvps(old_admitted):
send_off_waitlist_email(request, off_waitlist_rsvp.user, event)
return redirect(event)

@login_and_permission('events.add_event')
Expand All @@ -105,3 +111,29 @@ class EventUpdateView(generic.edit.UpdateView):
'description', 'rsvp_limit']
template_name_suffix = '_edit'

def form_valid(self, form):
if 'rsvp_limit' in form.changed_data:
messages.success(self.request, "People who rsvp'd or are on the waitlist are not notified"
" when you change the rsvp limit. Be sure to make an announcement!")
return super().form_valid(form)

# Helpers

def send_off_waitlist_email(request, user, event):
subject = '[HKN] You have gotten off the waitlist for your event'

event_link = request.build_absolute_uri(
reverse("events:detail", kwargs={ 'id': event.id }))
html_content = render_to_string(
'events/off_waitlist_email.html',
{
'subject': subject,
'event_name': event.name,
'event_link': event_link,
'img_link': get_rand_photo(),
}
)
msg = EmailMultiAlternatives(subject, subject,
settings.NO_REPLY_EMAIL, [user.email])
msg.attach_alternative(html_content, "text/html")
msg.send()

0 comments on commit 2c5f039

Please sign in to comment.