Commit e5f7a820 authored by Staś Kycia's avatar Staś Kycia
Browse files

simplified action confirmations

parent 3768c7ae
Loading
Loading
Loading
Loading
+23 −37
Changes for archive/admin.py: 23 added lines, 37 removed lines.
Original line number Diff line number Diff line
from django.contrib import admin, messages
from django.shortcuts import render
from django_admin_action_forms import (
    AdminActionForm,
    AdminActionFormsMixin,
    action_with_form,
)

from .models import ArchivedGroup, ArchivedVoter


class ArchivedVoterAdmin(admin.ModelAdmin):
class RestoreVotersActionForm(AdminActionForm):
    class Meta:
        list_objects = True
        help_text = "Czy na pewno chcesz przywrócić wybranych wyborców?"


class ArchivedVoterAdmin(AdminActionFormsMixin):
    list_display = ["name", "email", "group"]
    exclude = ["token", "token_generation_date", "last_email_date", "is_archived"]
    search_fields = ["name", "email"]
@@ -22,25 +32,10 @@ class ArchivedVoterAdmin(admin.ModelAdmin):

        return queryset, use_distinct

    @admin.action(description="Przywróć")
    def restore(modeladmin, request, queryset):
        if request.POST.get("post") == "yes":
    @action_with_form(RestoreVotersActionForm, description="Przywróć")
    def restore(self, request, queryset, data):
        queryset.update(is_archived=False)
        messages.success(request, "Wyborcy przywróceni")
            return None

        context = admin.site.each_context(request)

        context.update(
            {
                "queryset": queryset,
                "action_checkbox_name": admin.helpers.ACTION_CHECKBOX_NAME,
                "opts": modeladmin.model._meta,
                "title": "Przywracanie wyborców",
            }
        )

        return render(request, "admin/restore_voters_confirmation.html", context)

    actions = [restore]

@@ -51,7 +46,13 @@ class ArchivedVoterAdmin(admin.ModelAdmin):
        return False


class ArchivedGroupAdmin(admin.ModelAdmin):
class RestoreGroupsActionForm(AdminActionForm):
    class Meta:
        list_objects = True
        help_text = "Czy na pewno chcesz przywrócić wybrane klasy? Należący do nich wyborcy nie zostaną przywróceni automatycznie."


class ArchivedGroupAdmin(AdminActionFormsMixin):
    list_display = ["name", "get_class_name"]
    exclude = ["is_archived"]

@@ -59,25 +60,10 @@ class ArchivedGroupAdmin(admin.ModelAdmin):
    def get_class_name(self, obj):
        return obj.class_name

    @admin.action(description="Przywróć")
    def restore(modeladmin, request, queryset):
        if request.POST.get("post") == "yes":
    @action_with_form(RestoreGroupsActionForm, description="Przywróć")
    def restore(self, request, queryset, data):
        queryset.update(is_archived=False)
        messages.success(request, "Klasy przywrócone")
            return None

        context = admin.site.each_context(request)

        context.update(
            {
                "queryset": queryset,
                "action_checkbox_name": admin.helpers.ACTION_CHECKBOX_NAME,
                "opts": modeladmin.model._meta,
                "title": "Przywracanie klas",
            }
        )

        return render(request, "admin/restore_groups_confirmation.html", context)

    actions = [restore]

+0 −48
Changes for archive/templates/admin/restore_groups_confirmation.html: 0 added lines, 48 removed lines.
Original line number Diff line number Diff line
{% extends 'admin/base_site.html' %}
{% load admin_urls %}

{% block title %} {{ title }} | {{ site_title }}{% endblock %}

{% block breadcrumbs %}
    <div class="breadcrumbs">
        <a href="{% url 'admin:index' %}">Strona główna</a>

        &rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>

        &rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>

        &rsaquo; {{ title }}
    </div>
{% endblock %}

{% block content %}
    <div class="delete-confirmation delete-selected-confirmation">

    <p>Czy na pewno chcesz przywrócić wybrane klasy?</p>

    <h2>Podsumowanie</h2>
    <ul>
        <li>Klasy: {{ queryset.count }}</li>
    </ul>

    <h2>Obiekty</h2>

    <ul>{{ queryset|unordered_list }}</ul>

    <form method="post">
        {% csrf_token %}
        <div>

            {% for obj in queryset %}
                <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}">
            {% endfor %}

            <input type="hidden" name="action" value="restore">
            <input type="hidden" name="post" value="yes">
            <input type="submit" value="Tak, na pewno">
            <a role="button" onclick="window.history.back()" class="button cancel-link">Nie, zabierz mnie stąd</a>
        </div>
    </form>
    <br class="clear">
    </div>
{% endblock %}
+0 −48
Changes for archive/templates/admin/restore_voters_confirmation.html: 0 added lines, 48 removed lines.
Original line number Diff line number Diff line
{% extends 'admin/base_site.html' %}
{% load admin_urls %}

{% block title %} {{ title }} | {{ site_title }}{% endblock %}

{% block breadcrumbs %}
    <div class="breadcrumbs">
        <a href="{% url 'admin:index' %}">Strona główna</a>

        &rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>

        &rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>

        &rsaquo; {{ title }}
    </div>
{% endblock %}

{% block content %}
    <div class="delete-confirmation delete-selected-confirmation">

    <p>Czy na pewno chcesz przywrócić wybranych wyborców?</p>

    <h2>Podsumowanie</h2>
    <ul>
        <li>Wyborcy: {{ queryset.count }}</li>
    </ul>

    <h2>Obiekty</h2>

    <ul>{{ queryset|unordered_list }}</ul>

    <form method="post">
        {% csrf_token %}
        <div>

            {% for obj in queryset %}
                <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}">
            {% endfor %}

            <input type="hidden" name="action" value="restore">
            <input type="hidden" name="post" value="yes">
            <input type="submit" value="Tak, na pewno">
            <a role="button" onclick="window.history.back()" class="button cancel-link">Nie, zabierz mnie stąd</a>
        </div>
    </form>
    <br class="clear">
    </div>
{% endblock %}
+12 −36
Changes for mails/admin.py: 12 added lines, 36 removed lines.
Original line number Diff line number Diff line
from django.contrib import admin, messages
from django.core.exceptions import PermissionDenied
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import path, reverse
from django_no_queryset_admin_actions import (
    NoQuerySetAdminActionsMixin,
    no_queryset_action,
)

from .models import Mail, MailStatus
from .tasks import send_mail_batch_task


class MailAdmin(admin.ModelAdmin):
    change_list_template = "admin/change_list_mail.html"
class MailAdmin(NoQuerySetAdminActionsMixin):
    # change_list_template = "admin/change_list_mail.html"
    list_display = ["voter", "status", "error_message", "created_at", "last_try_date"]
    ordering = ["-created_at"]
    actions = ["mark_as_failed"]
@@ -20,42 +20,15 @@ class MailAdmin(admin.ModelAdmin):

    list_filter = ["status"]

    def get_urls(self):
        urls = super().get_urls()

        custom_urls = [
            path(
                "retry_failed/",
                self.admin_site.admin_view(self.retry_failed_view),
                name="retry_failed_mails",
            )
        ]

        return custom_urls + urls

    def retry_failed_view(self, request):
        if not request.user.is_superuser and not request.user.has_perm(
            "mails.can_manage_mails"
        ):
            raise PermissionDenied
        if request.POST.get("post") == "yes":
    @no_queryset_action(description="Ponów nieudane", permissions=["manage_mails"])
    def retry_failed(self, request):
        send_mail_batch_task.enqueue(base_status=MailStatus.ERROR)
        messages.info(
            request,
            "Rozpoczęto wysyłanie ponowne wysyłanie niedostarczonych wiadomości.",
        )
            return HttpResponseRedirect(reverse("admin:mails_mail_changelist"))

        context = admin.site.each_context(request)

        context.update(
            {
                "action_checkbox_name": admin.helpers.ACTION_CHECKBOX_NAME,
                "title": "Ponowne wysyłanie maili",
            }
        )

        return render(request, "admin/retry_failed_mails_confirmation.html", context)
    actions = [retry_failed]

    def has_add_permission(self, request):
        return False
@@ -68,5 +41,8 @@ class MailAdmin(admin.ModelAdmin):
            "mails.can_manage_mails"
        )

    def has_manage_mails_permission(self, request):
        return request.user.has_perm("voters.can_manage_mails")


admin.site.register(Mail, MailAdmin)
+0 −8
Changes for mails/templates/admin/change_list_mail.html: 0 added lines, 8 removed lines.
Original line number Diff line number Diff line
{% extends 'admin/change_list.html' %}

{% block object-tools-items %}
    {{ block.super }}
    <li>
        <a href="{% url 'admin:retry_failed_mails' %}">Ponów nieudane</a>
    </li>
{% endblock %}
Loading