mamweb/framadate/views.py

93 lines
No EOL
3.6 KiB
Python

from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django.views.generic.list import ListView
from django.views.generic import TemplateView
from .models import *
class FramadateListView(ListView):
model = Framadate
template_name = 'framadate/framadate_list.html'
class NewFramadate(TemplateView):
template_name = 'framadate/new_framadate.html'
def post(self, request, *args, **kwargs):
new_framadate = Framadate.objects.create(name=request.POST['name'])
dates = request.POST.getlist('date')
times = request.POST.getlist('time')
for i in range(len(dates)):
FramadateDate.objects.create(framadate=new_framadate, day=dates[i], time=(times[i] if times[i] else None))
return HttpResponseRedirect("/framadate/" + str(new_framadate.id))
class FramadateDetail(TemplateView):
template_name = 'framadate/framadate_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
addContextForFramadate(context, **kwargs)
return context
class FramadateDetailEdit(TemplateView):
template_name = 'framadate/framadate_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
addContextForFramadate(context, **kwargs)
# data to edit
context["edditing"] = True
context["name"] = NameInFramadate.objects.get(pk=kwargs['name_id'])
return context
def save_all(request, pk):
if request.method != "POST":
return HttpResponse("Not a POST request")
if request.POST.get("name") == "":
return HttpResponseRedirect(reverse('framadate_detail', args=[pk]))
framadate = Framadate.objects.get(pk=pk)
# deleting
if request.POST.get("delete"):
try:
NameInFramadate.objects.get(pk=request.POST['delete_id']).delete()
except:
return HttpResponse("Ups something went wrong, can't delete")
return HttpResponseRedirect(reverse('framadate_detail', args=[pk]))
# new
if not request.POST.get("delete_id"):
new_name = NameInFramadate.objects.create(framadate=framadate, name=request.POST['name'])
for day in framadate.days_set.all():
Record.objects.create(nameInFramadate=new_name, framadateDate=day, choice=(request.POST["choice_" + str(day.id)] if request.POST.get("choice_" + str(day.id)) else 0))
else: # edditing
name_id = request.POST['delete_id']
name = NameInFramadate.objects.get(pk=name_id)
name.name = request.POST['name']
name.save()
for record in name.records_set.all():
record.choice = (request.POST["choice_" + str(record.id)] if request.POST.get("choice_" + str(record.id)) else 0)
record.save()
return HttpResponseRedirect(reverse('framadate_detail', args=[pk]))
def delete_framadate(request, pk):
framadate = Framadate.objects.get(pk=pk)
framadate.delete()
return HttpResponseRedirect("/framadate")
def addContextForFramadate(context, **kwargs):
context['framadate'] = Framadate.objects.get(pk=kwargs['pk'])
context['choices'] = Choice.choices
context['best_dates'] = []
best_dates = []
best = -1
for day in context['framadate'].days_set.all(): # kinda slow?
count = 0
for record in day.records_set.all():
if record.choice == 3:
count += 1
if count > best:
best_dates = [day]
best = count
elif count == best:
best_dates.append(day)
context['best_dates'] = best_dates
context['max_count'] = best