74 lines
2.4 KiB
Python
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 Answer
|
|
|
|
|
|
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 answer(request, id, rep):
|
|
proposition = get_object_or_404(Prop, id=id)
|
|
user = request.user
|
|
|
|
old_answer = Answer.objects.filter(proposition=proposition, user=user)
|
|
if old_answer.exists():
|
|
old_answer = old_answer.get()
|
|
if old_answer.answer == Answer.YES:
|
|
proposition.nboui -= 1
|
|
else:
|
|
proposition.nbnon -= 1
|
|
old_answer.delete()
|
|
|
|
Answer.objects.create(proposition=proposition, user=user, answer=rep)
|
|
if rep == Answer.YES:
|
|
proposition.nboui += 1
|
|
else:
|
|
proposition.nbnon += 1
|
|
proposition.save()
|
|
|
|
return redirect("propositions:list")
|