From f4de84d334408d1153a1f53977990986b0cf1ce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Sun, 2 Oct 2022 14:57:06 +0200 Subject: [PATCH] Implement admin actions for AKs Add two admin actions to reset interest and interest counter of AKs -- each including a preview/confirmation step This implements #153 --- AKModel/admin.py | 23 ++++++++++- AKModel/locale/de_DE/LC_MESSAGES/django.po | 44 +++++++++++++++++----- AKModel/views.py | 20 ++++++++++ 3 files changed, 75 insertions(+), 12 deletions(-) diff --git a/AKModel/admin.py b/AKModel/admin.py index 4675d842..33374fc5 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -18,7 +18,8 @@ from AKModel.availability.models import Availability from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \ ConstraintViolation from AKModel.urls import get_admin_urls_event_wizard, get_admin_urls_event -from AKModel.views import CVMarkResolvedView, CVSetLevelViolationView, CVSetLevelWarningView +from AKModel.views import CVMarkResolvedView, CVSetLevelViolationView, CVSetLevelWarningView, AKResetInterestView, \ + AKResetInterestCounterView class EventRelatedFieldListFilter(RelatedFieldListFilter): @@ -175,7 +176,7 @@ class AKAdmin(SimpleHistoryAdmin): list_filter = ['event', WishFilter, ('category', EventRelatedFieldListFilter), ('requirements', EventRelatedFieldListFilter)] list_editable = ['short_name', 'track', 'interest_counter'] ordering = ['pk'] - actions = ['wiki_export'] + actions = ['wiki_export', 'reset_interest', 'reset_interest_counter'] form = AKAdminForm def is_wish(self, obj): @@ -193,6 +194,24 @@ class AKAdmin(SimpleHistoryAdmin): kwargs['initial'] = Event.get_next_active() return super(AKAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) + def get_urls(self): + urls = [ + path('reset-interest/', AKResetInterestView.as_view(), name="ak-reset-interest"), + path('reset-interest-counter/', AKResetInterestCounterView.as_view(), name="ak-reset-interest-counter"), + ] + urls.extend(super().get_urls()) + return urls + + def reset_interest(self, request, queryset): + selected = queryset.values_list('pk', flat=True) + return HttpResponseRedirect(f"{reverse_lazy('admin:ak-reset-interest')}?pks={','.join(str(pk) for pk in selected)}") + reset_interest.short_description = _("Reset interest in AKs") + + def reset_interest_counter(self, request, queryset): + selected = queryset.values_list('pk', flat=True) + return HttpResponseRedirect(f"{reverse_lazy('admin:ak-reset-interest-counter')}?pks={','.join(str(pk) for pk in selected)}") + reset_interest_counter.short_description = _("Reset AKs' interest counters") + class RoomForm(AvailabilitiesFormMixin, forms.ModelForm): class Meta: diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po index 25980a44..e8656afa 100644 --- a/AKModel/locale/de_DE/LC_MESSAGES/django.po +++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-28 01:20+0200\n" +"POT-Creation-Date: 2022-10-02 15:00+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: .\AKModel\admin.py:58 .\AKModel\admin.py:60 +#: .\AKModel\admin.py:59 .\AKModel\admin.py:61 #: .\AKModel\templates\admin\AKModel\event_wizard\activate.html:32 #: .\AKModel\templates\admin\AKModel\event_wizard\created_prepare_import.html:48 #: .\AKModel\templates\admin\AKModel\event_wizard\finish.html:21 @@ -21,35 +21,43 @@ msgstr "" msgid "Status" msgstr "Status" -#: .\AKModel\admin.py:134 +#: .\AKModel\admin.py:135 msgid "Wish" msgstr "AK-Wunsch" -#: .\AKModel\admin.py:140 +#: .\AKModel\admin.py:141 msgid "Is wish" msgstr "Ist ein Wunsch" -#: .\AKModel\admin.py:141 +#: .\AKModel\admin.py:142 msgid "Is not a wish" msgstr "Ist kein Wunsch" -#: .\AKModel\admin.py:187 +#: .\AKModel\admin.py:188 msgid "Export to wiki syntax" msgstr "In Wiki-Syntax exportieren" -#: .\AKModel\admin.py:281 +#: .\AKModel\admin.py:208 .\AKModel\views.py:442 +msgid "Reset interest in AKs" +msgstr "Interesse an AKs zurücksetzen" + +#: .\AKModel\admin.py:213 .\AKModel\views.py:452 +msgid "Reset AKs' interest counters" +msgstr "Interessenszähler der AKs zurücksetzen" + +#: .\AKModel\admin.py:300 msgid "AK Details" msgstr "AK-Details" -#: .\AKModel\admin.py:336 .\AKModel\views.py:412 +#: .\AKModel\admin.py:355 .\AKModel\views.py:412 msgid "Mark Constraint Violations as manually resolved" msgstr "Markiere Constraintverletzungen manuell als behoben" -#: .\AKModel\admin.py:341 +#: .\AKModel\admin.py:360 msgid "Set to Constraint Violations to level \"violation\"" msgstr "Constraintverletzungen auf Level \"Violation\" setzen" -#: .\AKModel\admin.py:346 .\AKModel\views.py:432 +#: .\AKModel\admin.py:365 .\AKModel\views.py:432 msgid "Set Constraint Violations to level \"warning\"" msgstr "Constraintverletzungen auf Level \"Warning\" setzen" @@ -1141,6 +1149,22 @@ msgstr "" msgid "Constraint Violations set to level 'warning'" msgstr "Constraintverletzungen auf Level \"Warning\" gesetzt" +#: .\AKModel\views.py:444 +msgid "Interest of the following AKs will be set to not filled (-1):" +msgstr "Interesse an den folgenden AKs wird auf nicht ausgefüllt (-1) gesetzt:" + +#: .\AKModel\views.py:445 +msgid "Reset of interest in AKs successful." +msgstr "Zurücksetzen des Interesses an den AKs erfolgreich." + +#: .\AKModel\views.py:454 +msgid "Interest counter of the following AKs will be set to 0:" +msgstr "Interessensbekundungszähler der folgenden AKs wird auf 0 gesetzt:" + +#: .\AKModel\views.py:455 +msgid "AKs' interest counters set back to 0." +msgstr "Interessensbekundungszähler der AKs auf 0 gesetzt." + #, fuzzy #~| msgid "Export AK Slides" #~ msgid "Export Slides" diff --git a/AKModel/views.py b/AKModel/views.py index b6311f3f..a766d896 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -436,3 +436,23 @@ class CVSetLevelWarningView(IntermediateAdminActionView): def perform_action(self, entity): entity.level = ConstraintViolation.ViolationLevel.WARNING + + +class AKResetInterestView(IntermediateAdminActionView): + title = _("Reset interest in AKs") + model = AK + confirmation_message = _("Interest of the following AKs will be set to not filled (-1):") + success_message = _("Reset of interest in AKs successful.") + + def perform_action(self, entity): + entity.interest = -1 + + +class AKResetInterestCounterView(IntermediateAdminActionView): + title = _("Reset AKs' interest counters") + model = AK + confirmation_message = _("Interest counter of the following AKs will be set to 0:") + success_message = _("AKs' interest counters set back to 0.") + + def perform_action(self, entity): + entity.interest_counter = 0 -- GitLab