Skip to content

Commit 4eeb02f

Browse files
committed
changes
1 parent e1a5922 commit 4eeb02f

File tree

1 file changed

+25
-30
lines changed

1 file changed

+25
-30
lines changed

backend/submissions/admin.py

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from django import forms
1212
from django.db.models import F
13+
from django.db import transaction
1314
from django.contrib import admin, messages
1415
from django.utils.html import mark_safe
1516
from django.utils.translation import gettext_lazy as _
@@ -324,42 +325,31 @@ class SubmissionCommentAdmin(admin.ModelAdmin):
324325
list_display = ("submission", "author", "text")
325326

326327

328+
NEW_STATUS_TO_EMAIL_TEMPLATE = {
329+
Submission.STATUS.accepted: EmailTemplateIdentifier.proposal_accepted,
330+
Submission.STATUS.rejected: EmailTemplateIdentifier.proposal_rejected,
331+
Submission.STATUS.waiting_list: EmailTemplateIdentifier.proposal_in_waiting_list,
332+
}
333+
334+
327335
@admin.action(description="Apply and notify status change")
328336
@validate_single_conference_selection
337+
@transaction.atomic
329338
def apply_and_notify_status_change(modeladmin, request, queryset):
330339
conference = queryset.first().conference
331-
count = queryset.count()
340+
objs = list(queryset.select_related("speaker").prefetch_related("type"))
341+
count = len(objs)
332342

333-
for submission in queryset.select_related("speaker").prefetch_related("type"):
343+
for submission in objs:
334344
submission.status = submission.pending_status
335-
submission.save(update_fields=["status"])
336-
337-
match submission.status:
338-
case Submission.STATUS.accepted:
339-
template = EmailTemplateIdentifier.proposal_accepted
340-
placeholders = {
341-
"conference_name": conference.name.localize("en"),
342-
"proposal_title": submission.title.localize("en"),
343-
"proposal_type": submission.type.name,
344-
"speaker_name": get_name(submission.speaker, "there"),
345-
}
346-
case Submission.STATUS.rejected:
347-
template = EmailTemplateIdentifier.proposal_rejected
348-
placeholders = {
349-
"conference_name": conference.name.localize("en"),
350-
"speaker_name": get_name(submission.speaker, "there"),
351-
"proposal_title": submission.title.localize("en"),
352-
"proposal_type": submission.type.name,
353-
}
354-
case Submission.STATUS.waiting_list:
355-
template = EmailTemplateIdentifier.proposal_in_waiting_list
356-
placeholders = {
357-
"conference_name": conference.name.localize("en"),
358-
"speaker_name": get_name(submission.speaker, "there"),
359-
"proposal_title": submission.title.localize("en"),
360-
"proposal_type": submission.type.name,
361-
}
362-
345+
placeholders = {
346+
"conference_name": conference.name.localize("en"),
347+
"proposal_title": submission.title.localize("en"),
348+
"proposal_type": submission.type.name,
349+
"speaker_name": get_name(submission.speaker, "there"),
350+
}
351+
352+
template = NEW_STATUS_TO_EMAIL_TEMPLATE[submission.status]
363353
email_template = EmailTemplate.objects.for_conference(
364354
conference
365355
).get_by_identifier(template)
@@ -368,6 +358,11 @@ def apply_and_notify_status_change(modeladmin, request, queryset):
368358
placeholders=placeholders,
369359
)
370360

361+
Submission.objects.bulk_update(
362+
objs,
363+
["status"],
364+
)
365+
371366
messages.add_message(
372367
request,
373368
messages.SUCCESS,

0 commit comments

Comments
 (0)