feat: add score export
This commit is contained in:
parent
2d7efeaf09
commit
9accf9714e
|
@ -1 +1 @@
|
||||||
__version__ = "2025.3.0"
|
__version__ = "2025.4.0.dev0"
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: pretalx-musicrate 0.9.0\n"
|
"Project-Id-Version: pretalx-musicrate 0.9.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-11-02 19:23+0100\n"
|
"POT-Creation-Date: 2024-12-09 22:22+0100\n"
|
||||||
"PO-Revision-Date: 2024-02-14 22:30+0100\n"
|
"PO-Revision-Date: 2024-12-09 22:23+0100\n"
|
||||||
"Last-Translator: Luca <Luca@hackerspace-bamberg.de>\n"
|
"Last-Translator: Luca <Luca@hackerspace-bamberg.de>\n"
|
||||||
"Language-Team: Luca <Luca@hackerspace-bamberg.de>\n"
|
"Language-Team: Luca <Luca@hackerspace-bamberg.de>\n"
|
||||||
"Language: de_DE\n"
|
"Language: de_DE\n"
|
||||||
|
@ -16,7 +16,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.4.1\n"
|
"X-Generator: Poedit 3.4.2\n"
|
||||||
|
|
||||||
#: pretalx_musicrate/apps.py:12 pretalx_musicrate/signals.py:59
|
#: pretalx_musicrate/apps.py:12 pretalx_musicrate/signals.py:59
|
||||||
msgid "pretalx-musicrate"
|
msgid "pretalx-musicrate"
|
||||||
|
@ -194,31 +194,35 @@ msgstr "pretalx-musicrate-Einstellungen"
|
||||||
msgid "Export ratings"
|
msgid "Export ratings"
|
||||||
msgstr "Bewertungen exportieren"
|
msgstr "Bewertungen exportieren"
|
||||||
|
|
||||||
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:29
|
#: pretalx_musicrate/templates/pretalx_musicrate/settings.html:16
|
||||||
|
msgid "Export scores"
|
||||||
|
msgstr "Auswertung exportieren"
|
||||||
|
|
||||||
|
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:34
|
||||||
msgid "(not specified)"
|
msgid "(not specified)"
|
||||||
msgstr "(nicht angegeben)"
|
msgstr "(nicht angegeben)"
|
||||||
|
|
||||||
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:42
|
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:47
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr "Zurück"
|
msgstr "Zurück"
|
||||||
|
|
||||||
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:50
|
#: pretalx_musicrate/templates/pretalx_musicrate/submission_base.html:55
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Weiter"
|
msgstr "Weiter"
|
||||||
|
|
||||||
#: pretalx_musicrate/views.py:48
|
#: pretalx_musicrate/views.py:66
|
||||||
msgid "Invalid token"
|
msgid "Invalid token"
|
||||||
msgstr "Ungültiges Token"
|
msgstr "Ungültiges Token"
|
||||||
|
|
||||||
#: pretalx_musicrate/views.py:123
|
#: pretalx_musicrate/views.py:133
|
||||||
msgid "The pretalx-musicrate settings were updated."
|
msgid "The pretalx-musicrate settings were updated."
|
||||||
msgstr "Die pretalx-musicrate-Einstellungen wurden gespeichert."
|
msgstr "Die pretalx-musicrate-Einstellungen wurden gespeichert."
|
||||||
|
|
||||||
#: pretalx_musicrate/views.py:282 pretalx_musicrate/views.py:469
|
#: pretalx_musicrate/views.py:289 pretalx_musicrate/views.py:482
|
||||||
msgid "Saved!"
|
msgid "Saved!"
|
||||||
msgstr "Gespeichert!"
|
msgstr "Gespeichert!"
|
||||||
|
|
||||||
#: pretalx_musicrate/views.py:386
|
#: pretalx_musicrate/views.py:398
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(num_ratings)d of %(num_jurors)d has rated this submission"
|
msgid "%(num_ratings)d of %(num_jurors)d has rated this submission"
|
||||||
msgid_plural "%(num_ratings)d of %(num_jurors)d have rated this submission"
|
msgid_plural "%(num_ratings)d of %(num_jurors)d have rated this submission"
|
||||||
|
|
|
@ -11,4 +11,8 @@
|
||||||
<i class="fa fa-download"></i>
|
<i class="fa fa-download"></i>
|
||||||
{% translate "Export ratings" %}
|
{% translate "Export ratings" %}
|
||||||
</a>
|
</a>
|
||||||
|
<a class="btn btn-success btn-lg btn-block" href="{% url "plugins:pretalx_musicrate:scores" event=request.event.slug %}">
|
||||||
|
<i class="fa fa-download"></i>
|
||||||
|
{% translate "Export scores" %}
|
||||||
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -11,6 +11,7 @@ from .views import (
|
||||||
PresenterView,
|
PresenterView,
|
||||||
QRCodeView,
|
QRCodeView,
|
||||||
RatingView,
|
RatingView,
|
||||||
|
ScoreExportView,
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -33,6 +34,7 @@ urlpatterns = [
|
||||||
EnhancedSubmissionList.as_view(),
|
EnhancedSubmissionList.as_view(),
|
||||||
name="enhanced_list",
|
name="enhanced_list",
|
||||||
),
|
),
|
||||||
|
path("scores/", ScoreExportView.as_view(), name="scores"),
|
||||||
path("<code>/", AssigneeView.as_view(), name="assignee"),
|
path("<code>/", AssigneeView.as_view(), name="assignee"),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
|
|
@ -4,7 +4,7 @@ from hmac import compare_digest
|
||||||
from urllib.parse import parse_qs, urlparse
|
from urllib.parse import parse_qs, urlparse
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db.models import Case, FilteredRelation, Q, Value, When
|
from django.db.models import Case, F, FilteredRelation, Q, Value, When
|
||||||
from django.http import HttpResponse, JsonResponse
|
from django.http import HttpResponse, JsonResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
@ -422,8 +422,7 @@ class ExportView(EventPermissionRequired, View):
|
||||||
request.event.submissions.prefetch_related("answers")
|
request.event.submissions.prefetch_related("answers")
|
||||||
.select_related("submission_type")
|
.select_related("submission_type")
|
||||||
.filter(
|
.filter(
|
||||||
submission_type__in=request.event.pretalx_musicrate_settings.submission_types.all(),
|
submission_type__in=request.event.pretalx_musicrate_settings.submission_types.all()
|
||||||
state=SubmissionStates.SUBMITTED,
|
|
||||||
)
|
)
|
||||||
.only("title", "submission_type__name")
|
.only("title", "submission_type__name")
|
||||||
.order_by("created")
|
.order_by("created")
|
||||||
|
@ -514,3 +513,27 @@ class EnhancedSubmissionList(SubmissionList):
|
||||||
if not self.filter_form.is_valid():
|
if not self.filter_form.is_valid():
|
||||||
return qs
|
return qs
|
||||||
return self.filter_form.filter_queryset(qs)
|
return self.filter_form.filter_queryset(qs)
|
||||||
|
|
||||||
|
|
||||||
|
class ScoreExportView(EventPermissionRequired, View):
|
||||||
|
permission_required = "orga.view_submissions"
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
response = HttpResponse(
|
||||||
|
content_type="text/csv",
|
||||||
|
headers={
|
||||||
|
"Content-Disposition": f'attachment; filename="{request.event.slug}.csv"'
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
csv.writer(response).writerows(
|
||||||
|
request.event.submissions.select_related("score", "submission_type")
|
||||||
|
.filter(
|
||||||
|
submission_type__in=request.event.pretalx_musicrate_settings.submission_types.all()
|
||||||
|
)
|
||||||
|
.exclude(state__in=(SubmissionStates.CANCELED, SubmissionStates.WITHDRAWN))
|
||||||
|
.order_by(F("score__value").desc(nulls_last=True))
|
||||||
|
.values_list("score__value", "title")
|
||||||
|
)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
Loading…
Reference in New Issue