Commit 8f8e3a1b authored by Staś Kycia's avatar Staś Kycia
Browse files

replaced statistics with prontable reports

parent f61ab551
Loading
Loading
Loading
Loading
+1 −1
Changes for Procfile: 1 added line, 1 removed line.
Original line number Diff line number Diff line
web: uv run manage.py runserver
worker: uv run manage.py rqworker default email email_batch --job-class django_tasks_rq.Job
worker: uv run manage.py rqworker default email email_batch reports --job-class django_tasks_rq.Job
+43 −8
Changes for elections/admin.py: 43 added lines, 8 removed lines.
Original line number Diff line number Diff line
from django.contrib import admin
from django.contrib import admin, messages
from django.db.models import Q
from django_admin_action_forms import action_with_form, AdminActionFormsMixin
from django_no_queryset_admin_actions import optional_queryset_action, NoQuerySetAdminActionsMixin
from django.shortcuts import render, get_object_or_404
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django_admin_action_forms import AdminActionFormsMixin, action_with_form
from django_no_queryset_admin_actions import (
    NoQuerySetAdminActionsMixin,
    optional_queryset_action,
)

from stats.tasks import generate_report

from .forms import CardPrintoutActionForm, GenerateReportsActionForm
from .models import Election, ElectionContributor, Option


class OptionInline(admin.TabularInline):
    model = Option
    exclude = ["votes"]
@@ -70,7 +77,6 @@ class ElectionContributorInline(admin.TabularInline):
    def has_view_permission(self, request, obj=None):
        return True

from .forms import CardPrintoutActionForm

class ElectionAdmin(NoQuerySetAdminActionsMixin, AdminActionFormsMixin):
    list_display = ["name", "start_date", "end_date", "is_active_status"]
@@ -97,13 +103,38 @@ class ElectionAdmin(NoQuerySetAdminActionsMixin, AdminActionFormsMixin):
    def is_active_status(self, obj):
        return obj.is_active

    @action_with_form(CardPrintoutActionForm, description="Wydrukuj karty papierowe", permissions=["print_cards"])
    @action_with_form(
        CardPrintoutActionForm,
        description="Wydrukuj karty papierowe",
        permissions=["print_cards"],
    )
    @optional_queryset_action()
    def card_printout(self, request, queryset, data):
        election = get_object_or_404(Election, pk=data["election"].id)
        return render(request, "printouts/card.html", context={"election":election, "iterateover":range(data["number_of_cards"]), "go_back_url":reverse("admin:elections_election_changelist"), "print_description":data["print_description"]})
        return render(
            request,
            "printouts/card.html",
            context={
                "election": election,
                "iterateover": range(data["number_of_cards"]),
                "go_back_url": reverse("admin:elections_election_changelist"),
                "print_description": data["print_description"],
            },
        )

    actions = ["card_printout"]
    @action_with_form(
        GenerateReportsActionForm,
        description="Generuj raporty",
        permissions=["print_reports"],
    )
    def generate_reports(self, request, queryset, data):
        for election in queryset:
            generate_report.enqueue(election_id=election.id)
        messages.success(
            request, "Raporty dodane do kolejki. Ich przygotowanie może zająć chwilkę"
        )

    actions = ["card_printout", "generate_reports"]

    def save_model(self, request, obj, form, change):
        if not change:
@@ -162,5 +193,9 @@ class ElectionAdmin(NoQuerySetAdminActionsMixin, AdminActionFormsMixin):
    def has_print_cards_permission(self, request):
        return request.user.has_perm("elections.can_print_cards")

    def has_print_reports_permission(self, request):
        return request.user.has_perm("stats.can_print_reports")


# Register your models here.
admin.site.register(Election, ElectionAdmin)
+11 −1
Changes for elections/forms.py: 11 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -3,10 +3,20 @@ from django_admin_action_forms import AdminActionForm

from elections.models import Election


class CardPrintoutActionForm(AdminActionForm):
    election = forms.ModelChoiceField(Election.objects, label="Głosowanie")
    number_of_cards = forms.IntegerField(label="Liczba kart", min_value=1)
    print_description = forms.BooleanField(label="Drukuj opis", required=False, initial=True)
    print_description = forms.BooleanField(
        label="Drukuj opis", required=False, initial=True
    )

    class Meta:
        confirm_button_text = "Drukuj"


class GenerateReportsActionForm(AdminActionForm):
    class Meta:
        help_text = "Czy na pewno chcesz wygenerować raporty dla tych głosowań? Raz wygenerowanego raportu nie da się usunąć z systemu!"
        confirm_button_text = "Generuj"
        list_objects = True
+11 −0
Changes for hybrid/admin.py: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -146,6 +146,17 @@ class IssueCardAdmin(admin.ModelAdmin):
                + str(election_id)
            )

        if voter.token is None:
            messages.error(
                request,
                "Ta osoba nie ma wygenerowanego tokenu, zatem nie jest uprawniona do głosowania!",
            )
            return HttpResponseRedirect(
                reverse("admin:hybrid_issuecards_changelist")
                + "?election_id="
                + str(election_id)
            )

        if request.POST.get("post") == "yes":
            participation = Participation(
                voter=voter,
+1 −0
Changes for pyproject.toml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ dependencies = [
    "djangorestframework~=3.17.1",
    "gunicorn~=25.2.0",
    "ldap3~=2.9.1",
    "matplotlib>=3.11.0",
    "psycopg[binary]~=3.3.3",
    "tzdata~=2025.3",
    "whitenoise~=6.12.0",
Loading