Skip to content
Snippets Groups Projects
Commit 7b9a9bf5 authored by Nadja Geisler's avatar Nadja Geisler :sunny:
Browse files

Merge branch '520-akowner' into 'main'

Introduce and link admin view to show all AKs by a given owner

Closes #207

See merge request kif/akplanning!221
parents b3a634fd 58f8d8fe
No related branches found
No related tags found
No related merge requests found
...@@ -159,10 +159,24 @@ class AKOwnerAdmin(PrepopulateWithNextActiveEventMixin, admin.ModelAdmin): ...@@ -159,10 +159,24 @@ class AKOwnerAdmin(PrepopulateWithNextActiveEventMixin, admin.ModelAdmin):
Admin interface for AKOwner Admin interface for AKOwner
""" """
model = AKOwner model = AKOwner
list_display = ['name', 'institution', 'event'] list_display = ['name', 'institution', 'event', 'aks_url']
list_filter = ['event', 'institution'] list_filter = ['event', 'institution']
list_editable = [] list_editable = []
ordering = ['name'] ordering = ['name']
readonly_fields = ['aks_url']
@display(description=_("AKs"))
def aks_url(self, obj):
"""
Define a read-only field to go to the list of all AKs by this user
:param obj: user
:return: AK list page link (HTML)
:rtype: str
"""
return format_html("<a href='{url}'>{text}</a>",
url=reverse_lazy('admin:aks_by_owner', kwargs={'event_slug': obj.event.slug, 'pk': obj.pk}),
text=obj.ak_set.count())
@admin.register(AKCategory) @admin.register(AKCategory)
......
...@@ -2,7 +2,7 @@ msgid "" ...@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-24 23:45+0200\n" "POT-Creation-Date: 2024-04-25 01:29+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -33,47 +33,54 @@ msgstr "Plan veröffentlichen" ...@@ -33,47 +33,54 @@ msgstr "Plan veröffentlichen"
msgid "Unpublish plan" msgid "Unpublish plan"
msgstr "Plan verbergen" msgstr "Plan verbergen"
#: AKModel/admin.py:208 #: AKModel/admin.py:168 AKModel/models.py:360 AKModel/models.py:682
#: AKModel/templates/admin/AKModel/aks_by_user.html:12
#: AKModel/templates/admin/AKModel/status/event_aks.html:10
#: AKModel/views/manage.py:73 AKModel/views/status.py:98
msgid "AKs"
msgstr "AKs"
#: AKModel/admin.py:222
msgid "Wish" msgid "Wish"
msgstr "AK-Wunsch" msgstr "AK-Wunsch"
#: AKModel/admin.py:214 #: AKModel/admin.py:228
msgid "Is wish" msgid "Is wish"
msgstr "Ist ein Wunsch" msgstr "Ist ein Wunsch"
#: AKModel/admin.py:215 #: AKModel/admin.py:229
msgid "Is not a wish" msgid "Is not a wish"
msgstr "Ist kein Wunsch" msgstr "Ist kein Wunsch"
#: AKModel/admin.py:274 #: AKModel/admin.py:288
msgid "Export to wiki syntax" msgid "Export to wiki syntax"
msgstr "In Wiki-Syntax exportieren" msgstr "In Wiki-Syntax exportieren"
#: AKModel/admin.py:291 #: AKModel/admin.py:305
msgid "Cannot export AKs from more than one event at the same time." msgid "Cannot export AKs from more than one event at the same time."
msgstr "Kann nicht AKs von mehreren Events zur selben Zeit exportieren." msgstr "Kann nicht AKs von mehreren Events zur selben Zeit exportieren."
#: AKModel/admin.py:306 AKModel/views/ak.py:99 #: AKModel/admin.py:320 AKModel/views/ak.py:99
msgid "Reset interest in AKs" msgid "Reset interest in AKs"
msgstr "Interesse an AKs zurücksetzen" msgstr "Interesse an AKs zurücksetzen"
#: AKModel/admin.py:316 AKModel/views/ak.py:114 #: AKModel/admin.py:330 AKModel/views/ak.py:114
msgid "Reset AKs' interest counters" msgid "Reset AKs' interest counters"
msgstr "Interessenszähler der AKs zurücksetzen" msgstr "Interessenszähler der AKs zurücksetzen"
#: AKModel/admin.py:415 AKModel/admin.py:429 #: AKModel/admin.py:429 AKModel/admin.py:443
msgid "AK Details" msgid "AK Details"
msgstr "AK-Details" msgstr "AK-Details"
#: AKModel/admin.py:491 AKModel/views/manage.py:99 #: AKModel/admin.py:505 AKModel/views/manage.py:99
msgid "Mark Constraint Violations as manually resolved" msgid "Mark Constraint Violations as manually resolved"
msgstr "Markiere Constraintverletzungen als manuell behoben" msgstr "Markiere Constraintverletzungen als manuell behoben"
#: AKModel/admin.py:500 AKModel/views/manage.py:112 #: AKModel/admin.py:514 AKModel/views/manage.py:112
msgid "Set Constraint Violations to level \"violation\"" msgid "Set Constraint Violations to level \"violation\""
msgstr "Constraintverletzungen auf Level \"Violation\" setzen" msgstr "Constraintverletzungen auf Level \"Violation\" setzen"
#: AKModel/admin.py:509 AKModel/views/manage.py:125 #: AKModel/admin.py:523 AKModel/views/manage.py:125
msgid "Set Constraint Violations to level \"warning\"" msgid "Set Constraint Violations to level \"warning\""
msgstr "Constraintverletzungen auf Level \"Warning\" setzen" msgstr "Constraintverletzungen auf Level \"Warning\" setzen"
...@@ -588,7 +595,7 @@ msgstr "AK präsentieren" ...@@ -588,7 +595,7 @@ msgstr "AK präsentieren"
msgid "Present results of this AK" msgid "Present results of this AK"
msgstr "Die Ergebnisse dieses AKs vorstellen" msgstr "Die Ergebnisse dieses AKs vorstellen"
#: AKModel/models.py:334 AKModel/views/status.py:169 #: AKModel/models.py:334 AKModel/views/status.py:163
msgid "Requirements" msgid "Requirements"
msgstr "Anforderungen" msgstr "Anforderungen"
...@@ -651,12 +658,6 @@ msgstr "Export?" ...@@ -651,12 +658,6 @@ msgstr "Export?"
msgid "Include AK in wiki export?" msgid "Include AK in wiki export?"
msgstr "AK bei Wiki-Export berücksichtigen?" msgstr "AK bei Wiki-Export berücksichtigen?"
#: AKModel/models.py:360 AKModel/models.py:682
#: AKModel/templates/admin/AKModel/status/event_aks.html:10
#: AKModel/views/manage.py:73 AKModel/views/status.py:98
msgid "AKs"
msgstr "AKs"
#: AKModel/models.py:484 #: AKModel/models.py:484
msgid "Name or number of the room" msgid "Name or number of the room"
msgstr "Name oder Nummer des Raums" msgstr "Name oder Nummer des Raums"
...@@ -770,7 +771,7 @@ msgstr "AK-Organachrichten" ...@@ -770,7 +771,7 @@ msgstr "AK-Organachrichten"
msgid "Constraint Violation" msgid "Constraint Violation"
msgstr "Constraintverletzung" msgstr "Constraintverletzung"
#: AKModel/models.py:646 AKModel/views/status.py:117 #: AKModel/models.py:646
msgid "Constraint Violations" msgid "Constraint Violations"
msgstr "Constraintverletzungen" msgstr "Constraintverletzungen"
...@@ -894,7 +895,7 @@ msgstr "Manuell behoben" ...@@ -894,7 +895,7 @@ msgstr "Manuell behoben"
msgid "Mark this violation manually as resolved" msgid "Mark this violation manually as resolved"
msgstr "Markiere diese Verletzung manuell als behoben" msgstr "Markiere diese Verletzung manuell als behoben"
#: AKModel/models.py:728 #: AKModel/models.py:728 AKModel/templates/admin/AKModel/aks_by_user.html:22
#: AKModel/templates/admin/AKModel/requirements_overview.html:27 #: AKModel/templates/admin/AKModel/requirements_overview.html:27
msgid "Details" msgid "Details"
msgstr "Details" msgstr "Details"
...@@ -952,6 +953,19 @@ msgstr "Bestätigen" ...@@ -952,6 +953,19 @@ msgstr "Bestätigen"
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: AKModel/templates/admin/AKModel/aks_by_user.html:8
msgid "AKs by Owner"
msgstr "AKs der Leitung"
#: AKModel/templates/admin/AKModel/aks_by_user.html:26
#: AKModel/templates/admin/AKModel/requirements_overview.html:31
msgid "Edit"
msgstr "Bearbeiten"
#: AKModel/templates/admin/AKModel/aks_by_user.html:33
msgid "This user does not have any AKs currently"
msgstr "Diese Leitung hat aktuell keine AKs"
#: AKModel/templates/admin/AKModel/event_wizard/activate.html:9 #: AKModel/templates/admin/AKModel/event_wizard/activate.html:9
#: AKModel/templates/admin/AKModel/event_wizard/created_prepare_import.html:9 #: AKModel/templates/admin/AKModel/event_wizard/created_prepare_import.html:9
#: AKModel/templates/admin/AKModel/event_wizard/finish.html:9 #: AKModel/templates/admin/AKModel/event_wizard/finish.html:9
...@@ -1018,16 +1032,12 @@ msgstr "" ...@@ -1018,16 +1032,12 @@ msgstr ""
msgid "Requirements Overview" msgid "Requirements Overview"
msgstr "Übersicht Anforderungen" msgstr "Übersicht Anforderungen"
#: AKModel/templates/admin/AKModel/requirements_overview.html:31
msgid "Edit"
msgstr "Bearbeiten"
#: AKModel/templates/admin/AKModel/requirements_overview.html:38 #: AKModel/templates/admin/AKModel/requirements_overview.html:38
msgid "No AKs with this requirement" msgid "No AKs with this requirement"
msgstr "Kein AK mit dieser Anforderung" msgstr "Kein AK mit dieser Anforderung"
#: AKModel/templates/admin/AKModel/requirements_overview.html:45 #: AKModel/templates/admin/AKModel/requirements_overview.html:45
#: AKModel/views/status.py:185 #: AKModel/views/status.py:179
msgid "Add Requirement" msgid "Add Requirement"
msgstr "Anforderung hinzufügen" msgstr "Anforderung hinzufügen"
...@@ -1163,7 +1173,7 @@ msgstr "'%(obj)s' kopiert" ...@@ -1163,7 +1173,7 @@ msgstr "'%(obj)s' kopiert"
msgid "Could not copy '%(obj)s' (%(error)s)" msgid "Could not copy '%(obj)s' (%(error)s)"
msgstr "'%(obj)s' konnte nicht kopiert werden (%(error)s)" msgstr "'%(obj)s' konnte nicht kopiert werden (%(error)s)"
#: AKModel/views/manage.py:35 AKModel/views/status.py:152 #: AKModel/views/manage.py:35 AKModel/views/status.py:146
msgid "Export AK Slides" msgid "Export AK Slides"
msgstr "AK-Folien exportieren" msgstr "AK-Folien exportieren"
...@@ -1231,7 +1241,7 @@ msgstr "Den Plan/die Pläne verbergen von:" ...@@ -1231,7 +1241,7 @@ msgstr "Den Plan/die Pläne verbergen von:"
msgid "Plan unpublished" msgid "Plan unpublished"
msgstr "Plan verborgen" msgstr "Plan verborgen"
#: AKModel/views/manage.py:166 AKModel/views/status.py:136 #: AKModel/views/manage.py:166 AKModel/views/status.py:130
msgid "Edit Default Slots" msgid "Edit Default Slots"
msgstr "Standardslots bearbeiten" msgstr "Standardslots bearbeiten"
...@@ -1286,31 +1296,31 @@ msgstr "Kategorie hinzufügen" ...@@ -1286,31 +1296,31 @@ msgstr "Kategorie hinzufügen"
msgid "Add Room" msgid "Add Room"
msgstr "Raum hinzufügen" msgstr "Raum hinzufügen"
#: AKModel/views/status.py:122 #: AKModel/views/status.py:116
msgid "AKs requiring special attention" msgid "AKs requiring special attention"
msgstr "AKs, die besondere Aufmerksamkeit benötigen" msgstr "AKs, die besondere Aufmerksamkeit benötigen"
#: AKModel/views/status.py:128 #: AKModel/views/status.py:122
msgid "Enter Interest" msgid "Enter Interest"
msgstr "Interesse erfassen" msgstr "Interesse erfassen"
#: AKModel/views/status.py:140 #: AKModel/views/status.py:134
msgid "Manage ak tracks" msgid "Manage ak tracks"
msgstr "AK-Tracks verwalten" msgstr "AK-Tracks verwalten"
#: AKModel/views/status.py:144 #: AKModel/views/status.py:138
msgid "Export AKs as CSV" msgid "Export AKs as CSV"
msgstr "AKs als CSV exportieren" msgstr "AKs als CSV exportieren"
#: AKModel/views/status.py:148 #: AKModel/views/status.py:142
msgid "Export AKs for Wiki" msgid "Export AKs for Wiki"
msgstr "AKs im Wiki-Format exportieren" msgstr "AKs im Wiki-Format exportieren"
#: AKModel/views/status.py:181 #: AKModel/views/status.py:175
msgid "Show AKs for requirements" msgid "Show AKs for requirements"
msgstr "Zu Anforderungen gehörige AKs anzeigen" msgstr "Zu Anforderungen gehörige AKs anzeigen"
#: AKModel/views/status.py:195 #: AKModel/views/status.py:189
msgid "Event Status" msgid "Event Status"
msgstr "Eventstatus" msgstr "Eventstatus"
......
...@@ -4,7 +4,8 @@ from django.urls import include, path ...@@ -4,7 +4,8 @@ from django.urls import include, path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
import AKModel.views.api import AKModel.views.api
from AKModel.views.manage import ExportSlidesView, PlanPublishView, PlanUnpublishView, DefaultSlotEditorView from AKModel.views.manage import ExportSlidesView, PlanPublishView, PlanUnpublishView, DefaultSlotEditorView, \
AKsByUserView
from AKModel.views.ak import AKRequirementOverview, AKCSVExportView, AKWikiExportView, AKMessageDeleteView from AKModel.views.ak import AKRequirementOverview, AKCSVExportView, AKWikiExportView, AKMessageDeleteView
from AKModel.views.event_wizard import NewEventWizardStartView, NewEventWizardPrepareImportView, \ from AKModel.views.event_wizard import NewEventWizardStartView, NewEventWizardPrepareImportView, \
NewEventWizardImportView, NewEventWizardActivateView, NewEventWizardFinishView, NewEventWizardSettingsView NewEventWizardImportView, NewEventWizardActivateView, NewEventWizardFinishView, NewEventWizardSettingsView
...@@ -91,6 +92,8 @@ def get_admin_urls_event(admin_site): ...@@ -91,6 +92,8 @@ def get_admin_urls_event(admin_site):
path('<slug:event_slug>/status/', admin_site.admin_view(EventStatusView.as_view()), name="event_status"), path('<slug:event_slug>/status/', admin_site.admin_view(EventStatusView.as_view()), name="event_status"),
path('<slug:event_slug>/requirements/', admin_site.admin_view(AKRequirementOverview.as_view()), path('<slug:event_slug>/requirements/', admin_site.admin_view(AKRequirementOverview.as_view()),
name="event_requirement_overview"), name="event_requirement_overview"),
path('<slug:event_slug>/aks/owner/<pk>/', admin_site.admin_view(AKsByUserView.as_view()),
name="aks_by_owner"),
path('<slug:event_slug>/ak-csv-export/', admin_site.admin_view(AKCSVExportView.as_view()), path('<slug:event_slug>/ak-csv-export/', admin_site.admin_view(AKCSVExportView.as_view()),
name="ak_csv_export"), name="ak_csv_export"),
path('<slug:slug>/ak-wiki-export/', admin_site.admin_view(AKWikiExportView.as_view()), path('<slug:slug>/ak-wiki-export/', admin_site.admin_view(AKWikiExportView.as_view()),
......
...@@ -8,13 +8,13 @@ from django.contrib import messages ...@@ -8,13 +8,13 @@ from django.contrib import messages
from django.db.models.functions import Now from django.db.models.functions import Now
from django.utils.dateparse import parse_datetime from django.utils.dateparse import parse_datetime
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView from django.views.generic import TemplateView, DetailView
from django_tex.core import render_template_with_context, run_tex_in_directory from django_tex.core import render_template_with_context, run_tex_in_directory
from django_tex.response import PDFResponse from django_tex.response import PDFResponse
from AKModel.forms import SlideExportForm, DefaultSlotEditorForm from AKModel.forms import SlideExportForm, DefaultSlotEditorForm
from AKModel.metaviews.admin import EventSlugMixin, IntermediateAdminView, IntermediateAdminActionView from AKModel.metaviews.admin import EventSlugMixin, IntermediateAdminView, IntermediateAdminActionView, AdminViewMixin
from AKModel.models import ConstraintViolation, Event, DefaultSlot from AKModel.models import ConstraintViolation, Event, DefaultSlot, AKOwner
class UserView(TemplateView): class UserView(TemplateView):
...@@ -236,3 +236,12 @@ class DefaultSlotEditorView(EventSlugMixin, IntermediateAdminView): ...@@ -236,3 +236,12 @@ class DefaultSlotEditorView(EventSlugMixin, IntermediateAdminView):
.format(u=str(updated_count), c=str(created_count), d=str(deleted_count)) .format(u=str(updated_count), c=str(created_count), d=str(deleted_count))
) )
return super().form_valid(form) return super().form_valid(form)
class AKsByUserView(AdminViewMixin, EventSlugMixin, DetailView):
"""
View: Show all AKs of a given user
"""
model = AKOwner
context_object_name = 'owner'
template_name = "admin/AKModel/aks_by_user.html"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment