beesgospel/beesgospel/views.py

101 lines
2.8 KiB
Python

from datetime import date, timedelta
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.urls import reverse_lazy
from django.views.generic import (
CreateView, DeleteView, ListView, TemplateView, UpdateView
)
from .forms import MembreEditForm
from .models import Agenda, Document, Membre
class HomeView(TemplateView):
template_name="index.html"
def get_context_data(self, **kwargs):
return {
**super().get_context_data(**kwargs),
"items": Agenda.objects.filter(
date_heure__date__gte=date.today(), prive=False,
).order_by("date_heure")[:2],
}
class PresentationView(TemplateView):
template_name="presentation.html"
def get_context_data(self, **kwargs):
return {
**super().get_context_data(**kwargs),
"next_event": Agenda.objects.filter(
date_heure__date__gte=date.today(), prive=False,
).order_by("date_heure").first(),
}
class AgendaView(ListView):
model = Agenda
template_name = "agenda.html"
def get_queryset(self):
qs = Agenda.objects.filter(
date_heure__gt=date.today() - timedelta(days=3),
).order_by("date_heure")
if not self.request.user.is_authenticated:
qs = qs.filter(prive=False)
return qs
class MediaView(ListView):
model = Document
template_name = "media.html"
prive = False
def get_queryset(self):
return Document.objects.filter(prive=self.prive).order_by("-quand", "titre")
def get_context_data(self, **kwargs):
return {
**super().get_context_data(**kwargs),
"title": {
False: "Enregistrements, photos et vidéos de la chorale",
True: "Documents privés",
}.get(self.prive)
}
class EspaceMembresView(LoginRequiredMixin, TemplateView):
template_name = "membres/index.html"
class ListeMembresView(LoginRequiredMixin, ListView):
model = Membre
template_name = "membres/liste.html"
def get_queryset(self):
return super().get_queryset().order_by("nom")
class MembreAddView(PermissionRequiredMixin, CreateView):
model = Membre
form_class = MembreEditForm
permission_required = "beesgospel.add_membre"
template_name = "membres/edit.html"
success_url = reverse_lazy("liste-membres")
class MembreEditView(PermissionRequiredMixin, UpdateView):
model = Membre
form_class = MembreEditForm
permission_required = "beesgospel.change_membre"
template_name = "membres/edit.html"
success_url = reverse_lazy("liste-membres")
class MembreDeleteView(PermissionRequiredMixin, DeleteView):
permission_required = "beesgospel.delete_membre"
def form_valid(self, form):
self.object.user.delete()
return super().form_valid(form)