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),
]