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")