diff --git a/AKModel/admin.py b/AKModel/admin.py index 61a590abcd0b1a09f5c5cbdec196aec59090320c..2f49587cc5e05b75b9345c6cee72584e0303b29b 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -19,7 +19,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): @@ -187,7 +188,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): @@ -205,6 +206,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/views.py b/AKModel/views.py index b6311f3fe84afeed90aef0dd6ec4124aadca85ec..a766d896e37153ab7e5d5d340b01e61b33304a1c 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