Skip to content
Snippets Groups Projects
Commit 4acf6ff1 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
Pipeline #103959 passed
......@@ -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:
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment