ernestophone.ens.fr/propositions/views.py
2020-01-05 12:03:41 +01:00

74 lines
2.4 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"]
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 reponse(request, id, rep):
proposition = get_object_or_404(Prop, id=id)
participant = request.user.profile
old_answer = Reponses.objects.filter(prop=proposition, part=participant)
if old_answer.exists():
old_answer = old_answer.get()
if old_answer.reponse == "oui":
proposition.nboui -= 1
else:
proposition.nbnon -= 1
old_answer.delete()
Reponses.objects.create(prop=proposition, part=participant, reponse=rep)
if rep == "oui":
proposition.nboui += 1
else:
proposition.nbnon += 1
proposition.save()
return redirect("propositions:list")