Skip to content
Snippets Groups Projects
Commit f4de84d3 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

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
parent 7536ac88
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,8 @@ from AKModel.availability.models import Availability ...@@ -18,7 +18,8 @@ from AKModel.availability.models import Availability
from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \ from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \
ConstraintViolation ConstraintViolation
from AKModel.urls import get_admin_urls_event_wizard, get_admin_urls_event 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): class EventRelatedFieldListFilter(RelatedFieldListFilter):
...@@ -175,7 +176,7 @@ class AKAdmin(SimpleHistoryAdmin): ...@@ -175,7 +176,7 @@ class AKAdmin(SimpleHistoryAdmin):
list_filter = ['event', WishFilter, ('category', EventRelatedFieldListFilter), ('requirements', EventRelatedFieldListFilter)] list_filter = ['event', WishFilter, ('category', EventRelatedFieldListFilter), ('requirements', EventRelatedFieldListFilter)]
list_editable = ['short_name', 'track', 'interest_counter'] list_editable = ['short_name', 'track', 'interest_counter']
ordering = ['pk'] ordering = ['pk']
actions = ['wiki_export'] actions = ['wiki_export', 'reset_interest', 'reset_interest_counter']
form = AKAdminForm form = AKAdminForm
def is_wish(self, obj): def is_wish(self, obj):
...@@ -193,6 +194,24 @@ class AKAdmin(SimpleHistoryAdmin): ...@@ -193,6 +194,24 @@ class AKAdmin(SimpleHistoryAdmin):
kwargs['initial'] = Event.get_next_active() kwargs['initial'] = Event.get_next_active()
return super(AKAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 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 RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
class Meta: class Meta:
......
...@@ -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: 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" "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"
...@@ -11,7 +11,7 @@ msgstr "" ...@@ -11,7 +11,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"
#: .\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\activate.html:32
#: .\AKModel\templates\admin\AKModel\event_wizard\created_prepare_import.html:48 #: .\AKModel\templates\admin\AKModel\event_wizard\created_prepare_import.html:48
#: .\AKModel\templates\admin\AKModel\event_wizard\finish.html:21 #: .\AKModel\templates\admin\AKModel\event_wizard\finish.html:21
...@@ -21,35 +21,43 @@ msgstr "" ...@@ -21,35 +21,43 @@ msgstr ""
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: .\AKModel\admin.py:134 #: .\AKModel\admin.py:135
msgid "Wish" msgid "Wish"
msgstr "AK-Wunsch" msgstr "AK-Wunsch"
#: .\AKModel\admin.py:140 #: .\AKModel\admin.py:141
msgid "Is wish" msgid "Is wish"
msgstr "Ist ein Wunsch" msgstr "Ist ein Wunsch"
#: .\AKModel\admin.py:141 #: .\AKModel\admin.py:142
msgid "Is not a wish" msgid "Is not a wish"
msgstr "Ist kein Wunsch" msgstr "Ist kein Wunsch"
#: .\AKModel\admin.py:187 #: .\AKModel\admin.py:188
msgid "Export to wiki syntax" msgid "Export to wiki syntax"
msgstr "In Wiki-Syntax exportieren" 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" msgid "AK Details"
msgstr "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" msgid "Mark Constraint Violations as manually resolved"
msgstr "Markiere Constraintverletzungen manuell als behoben" msgstr "Markiere Constraintverletzungen manuell als behoben"
#: .\AKModel\admin.py:341 #: .\AKModel\admin.py:360
msgid "Set to Constraint Violations to level \"violation\"" msgid "Set to Constraint Violations to level \"violation\""
msgstr "Constraintverletzungen auf Level \"Violation\" setzen" 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\"" msgid "Set Constraint Violations to level \"warning\""
msgstr "Constraintverletzungen auf Level \"Warning\" setzen" msgstr "Constraintverletzungen auf Level \"Warning\" setzen"
...@@ -1141,6 +1149,22 @@ msgstr "" ...@@ -1141,6 +1149,22 @@ msgstr ""
msgid "Constraint Violations set to level 'warning'" msgid "Constraint Violations set to level 'warning'"
msgstr "Constraintverletzungen auf Level \"Warning\" gesetzt" 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 #, fuzzy
#~| msgid "Export AK Slides" #~| msgid "Export AK Slides"
#~ msgid "Export Slides" #~ msgid "Export Slides"
......
...@@ -436,3 +436,23 @@ class CVSetLevelWarningView(IntermediateAdminActionView): ...@@ -436,3 +436,23 @@ class CVSetLevelWarningView(IntermediateAdminActionView):
def perform_action(self, entity): def perform_action(self, entity):
entity.level = ConstraintViolation.ViolationLevel.WARNING 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment