diff --git a/src/backoffice/views/program.py b/src/backoffice/views/program.py index f5d18e9b..edded8c0 100644 --- a/src/backoffice/views/program.py +++ b/src/backoffice/views/program.py @@ -12,6 +12,7 @@ from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateVi from camps.mixins import CampViewMixin from program.autoscheduler import AutoScheduler +from program.email import add_event_scheduled_email from program.mixins import AvailabilityMatrixViewMixin from program.models import ( Event, @@ -537,6 +538,7 @@ class EventScheduleView(CampViewMixin, ContentTeamPermissionMixin, FormView): self.request, f"{self.event.title} has been scheduled to begin at {slot.when.lower} at location {slot.event_location.name} successfully!", ) + add_event_scheduled_email(slot) return redirect( reverse( "backoffice:event_detail", diff --git a/src/program/autoscheduler.py b/src/program/autoscheduler.py index aa67a995..73c3bf67 100644 --- a/src/program/autoscheduler.py +++ b/src/program/autoscheduler.py @@ -6,6 +6,8 @@ from conference_scheduler.lp_problem import objective_functions from conference_scheduler.validator import is_valid_schedule, schedule_violations from psycopg2.extras import DateTimeTZRange +from program.email import add_event_scheduled_email + from .models import EventType logger = logging.getLogger("bornhack.%s" % __name__) @@ -281,7 +283,7 @@ class AutoScheduler: # "The Clean Slate protocol sir?" - delete any existing autoscheduled Events # TODO: investigate how this affects the FRAB XML export (for which we added a UUID on - # EventInstance objects). Make sure "favourite" functionality or bookmarks or w/e in + # Slot objects). Make sure "favourite" functionality or bookmarks or w/e in # FRAB clients still work after a schedule "re"apply. We might need a smaller hammer here. deleted = self.camp.event_slots.filter( # get all autoscheduled EventSlots @@ -309,6 +311,7 @@ class AutoScheduler: slot.event = event slot.autoscheduled = True slot.save() + add_event_scheduled_email(slot) scheduled += 1 diff --git a/src/program/email.py b/src/program/email.py index d82a78ba..d28a26fa 100644 --- a/src/program/email.py +++ b/src/program/email.py @@ -168,25 +168,27 @@ def add_event_proposal_accepted_email(event_proposal): ) -def add_event_scheduled_email(eventinstance, action): - formatdict = {"eventinstance": eventinstance, "action": action} - recipients = [speaker.email for speaker in eventinstance.event.speakers.all()] - recipients.append(eventinstance.event.proposal.user.email) +def add_event_scheduled_email(slot): + formatdict = {"slot": slot} + # add all speaker emails + recipients = [speaker.email for speaker in slot.event.speakers.all()] + # also add the submitting users email + recipients.append(slot.event.proposal.user.email) try: - content_team = Team.objects.get(camp=eventinstance.camp, name="Content") + content_team = Team.objects.get(camp=slot.camp, name="Content") except ObjectDoesNotExist as e: logger.info("There is no team with name Content: {}".format(e)) return False # loop over unique recipients and send an email to each for rcpt in set(recipients): - return add_outgoing_email( + add_outgoing_email( responsible_team=content_team, text_template="emails/event_scheduled.txt", html_template="emails/event_scheduled.html", to_recipients=rcpt, formatdict=formatdict, - subject=f"Your {eventinstance.camp.title} event '{eventinstance.event.title}' has been {action}!", + subject=f"Your {slot.camp.title} event '{slot.event.title}' has been scheduled!", hold=True, ) diff --git a/src/program/templates/emails/event_scheduled.html b/src/program/templates/emails/event_scheduled.html index b7d7b9b5..d34d327c 100644 --- a/src/program/templates/emails/event_scheduled.html +++ b/src/program/templates/emails/event_scheduled.html @@ -1,6 +1,6 @@ Hello,

-The {{ eventinstance.camp.title }} event "{{ eventinstance.event.title }}" has been {{ action }} to begin {{ eventinstance.when.lower }} and end at {{ eventinstance.when.upper }}.
+The {{ slot.camp.title }} event "{{ slot.event.title }}" has been scheduled to begin {{ slot.when.lower }} and end at {{ slot.when.upper }}.

Let us know in case this time slot doesn't work for you.

diff --git a/src/program/templates/emails/event_scheduled.txt b/src/program/templates/emails/event_scheduled.txt index 0c22fd0c..3aa08c01 100644 --- a/src/program/templates/emails/event_scheduled.txt +++ b/src/program/templates/emails/event_scheduled.txt @@ -1,6 +1,6 @@ Hello, -The {{ eventinstance.camp.title }} event "{{ eventinstance.event.title }}" has been {% if rescheduled %}re{% endif %}scheduled to begin {{ eventinstance.when.lower }} and end at {{ eventinstance.when.upper }}. +The {{ slot.camp.title }} event "{{ slot.event.title }}" has been scheduled to begin {{ slot.when.lower }} and end at {{ slot.when.upper }}. Let us know in case this time slot doesn't work for you. diff --git a/src/utils/management/commands/bootstrap_devsite.py b/src/utils/management/commands/bootstrap_devsite.py index 44ef0e71..5c07fa2c 100644 --- a/src/utils/management/commands/bootstrap_devsite.py +++ b/src/utils/management/commands/bootstrap_devsite.py @@ -226,7 +226,12 @@ class Command(BaseCommand): dict(year=2018, tagline="scale it", colour="#008026", read_only=True), dict(year=2019, tagline="a new /home", colour="#ffed00", read_only=True), dict(year=2020, tagline="Make Clean", colour="#ff8c00", read_only=False), - dict(year=2021, tagline="Undecided", colour="#e40303", read_only=False), + dict( + year=2021, + tagline="Continuous Delivery", + colour="#e40303", + read_only=False, + ), dict(year=2022, tagline="Undecided", colour="#004dff", read_only=False), ]