Skip to content
Snippets Groups Projects
views.py 2.92 KiB
Newer Older
from django.db.models import QuerySet
from django.http import FileResponse, HttpRequest
from django.urls import reverse_lazy
from django.utils.translation import gettext as _
from django.views import View
from django.views.generic.detail import SingleObjectMixin
from django.views.generic.list import ListView
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from .forms import PosterGroupForm, PosterUploadForm
from .models import Poster, PosterGroup
class PosterGroupListView(ListView):
    """Show a list of all poster groups."""
    template_name = "resint/group/list.html"
    model = PosterGroup
class PosterGroupCreateView(AdvancedCreateView):
    """Create a new poster group."""
    model = PosterGroup
    success_url = reverse_lazy("poster_group_list")
    template_name = "resint/group/create.html"
    success_message = _("The poster group has been saved.")
    form_class = PosterGroupForm
class PosterGroupEditView(AdvancedEditView):
    """Edit an existing poster group."""
    model = PosterGroup
    success_url = reverse_lazy("poster_group_list")
    template_name = "resint/group/edit.html"
    success_message = _("The poster group has been saved.")
    form_class = PosterGroupForm
class PosterGroupDeleteView(AdvancedDeleteView):
    """Delete a poster group."""
    model = PosterGroup
    success_url = reverse_lazy("poster_group_list")
    success_message = _("The poster group has been deleted.")
    template_name = "core/pages/delete.html"
class PosterListView(ListView):
    """Show a list of all uploaded posters."""
    template_name = "resint/poster/list.html"
    model = Poster
    def get_queryset(self) -> QuerySet:
        return Poster.objects.all().order_by("-year", "-week")
    def get_context_data(self, **kwargs: Any) -> Dict[str, Any]:
        context = super().get_context_data(**kwargs)
        context["poster_groups"] = PosterGroup.objects.all().order_by("name")
        return context
class PosterUploadView(AdvancedCreateView):
    """Upload a new poster."""
    model = Poster
    success_url = reverse_lazy("poster_index")
    template_name = "resint/poster/upload.html"
    success_message = _("The poster has been uploaded.")
    form_class = PosterUploadForm

class PosterDeleteView(AdvancedDeleteView):
    """Delete an uploaded poster."""

    model = Poster
    success_url = reverse_lazy("poster_index")
    success_message = _("The poster has been deleted.")
    template_name = "core/pages/delete.html"


class PosterCurrentView(SingleObjectMixin, View):
    """Show the poster which is currently valid."""

    model = PosterGroup

    def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> FileResponse:
        group = self.get_object()
        current_poster = group.current_poster
        file = current_poster.pdf if current_poster else group.default_pdf
        return FileResponse(file, content_type="application/pdf")