ernestophone.ens.fr/propositions/views.py
2020-01-05 00:32:02 +01:00

96 lines
2.8 KiB
Python

from django.shortcuts import redirect, get_object_or_404
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView, DeleteView, ListView
from django.utils.decorators import method_decorator
from django.http import HttpResponseRedirect
from propositions.models import Prop
from propositions.models import Reponses
class PropositionCreate(LoginRequiredMixin, CreateView):
template_name = "propositions/create.html"
success_url = reverse_lazy("propositions:list")
model = Prop
fields = ["nom", "artiste", "lien"]
def form_valid(self, form):
proposition = form.save(commit=False)
proposition.user = self.request.user.profile
proposition.save()
return HttpResponseRedirect(self.success_url)
class PropositionList(LoginRequiredMixin, ListView):
template_name = "propositions/liste.html"
context_object_name = "propositions"
model = Prop
ordering = ["-nboui", "nbnon", "nom"]
@login_required
def repoui(request, id):
prop = get_object_or_404(Prop, id=id)
participant = request.user.profile
try:
p = Reponses.objects.get(prop=prop, part=participant)
if p.reponse == "oui":
prop.nboui -= 1
else:
prop.nbnon -= 1
p.delete()
except Reponses.DoesNotExist:
pass
rep = Reponses()
rep.prop = prop
rep.part = participant
rep.reponse = "oui"
rep.save()
prop.nboui += 1
prop.save()
return redirect("propositions:list")
class PropDelete(DeleteView):
model = Prop
template_name = "propositions/delete.html"
success_url = reverse_lazy("propositions:list")
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(PropDelete, self).dispatch(*args, **kwargs)
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
if not ((self.object.user == self.request.user.profile)
or self.request.user.profile.is_chef):
return redirect("propositions:list")
else:
self.object.delete()
return HttpResponseRedirect(success_url)
@login_required
def repnon(request, id):
prop = get_object_or_404(Prop, id=id)
participant = request.user.profile
try:
p = Reponses.objects.get(prop=prop, part=participant)
if p.reponse == "oui":
prop.nboui -= 1
else:
prop.nbnon -= 1
p.delete()
except Reponses.DoesNotExist:
pass
rep = Reponses()
rep.prop = prop
rep.part = participant
rep.reponse = "non"
rep.save()
prop.nbnon += 1
prop.save()
return redirect("propositions:list")