wieheeftdetapperssleutel/tapperssleutel/views.py
2019-11-12 13:58:30 +01:00

95 lines
3.7 KiB
Python

from datetime import datetime
from django.db.models import Count
from django.forms import modelform_factory
from django.urls import reverse_lazy
from django.views.generic import CreateView, FormView
from tapperssleutel.forms import DateInput, DetailForm
from tapperssleutel.models import Tapper, Kwijtgeraakt
def dictcopy(old_dict):
new_dict = {}
for key, value in old_dict.items():
new_dict[key] = value
return new_dict
class HomePage(CreateView):
model = Kwijtgeraakt
template_name = "home.html"
success_url = reverse_lazy('home')
form_class = modelform_factory(Kwijtgeraakt,
widgets={"date": DateInput},
fields=('tapper', 'date'))
def get_context_data(self, **kwargs):
context = super(HomePage, self).get_context_data(**kwargs)
context['tappers'] = list(Tapper.objects.all().annotate(amount=Count('kwijtgeraakt')).order_by('-amount'))
context['detailform'] = DetailForm()
dates = Kwijtgeraakt.objects.all().order_by('date')
context['tapperlist'] = [x.name for x in Tapper.objects.all()]
context['datelist'] = [x.date.strftime("%Y-%m-%d") for x in dates]
context['tappersdata'] = {}
current_counts = {tapper.name: 0 for tapper in Tapper.objects.all()}
for date in dates:
current_counts[date.tapper.name] += 1
context['tappersdata'][date.date.strftime("%Y-%m-%d")] = dictcopy(current_counts)
# Remove tappers with zero incidents
zero_incidents = []
for tapper, count in current_counts.items():
if count == 0:
zero_incidents.append(tapper)
for date, entry in context['tappersdata'].items():
del entry[tapper]
context['tapperlist'].remove(tapper)
context['tappers'] = [x for x in context['tappers'] if x.name not in zero_incidents]
return context
class DetailPage(FormView):
form_class = DetailForm
template_name = "detail.html"
def get_context_data(self, form, **kwargs):
context = super(DetailPage, self).get_context_data(form=form, **kwargs)
context['tappers'] = Tapper.objects.all().annotate(amount=Count('kwijtgeraakt'))
context['detailform'] = form
context['start_date'] = form.cleaned_data['start_date']
context['end_date'] = form.cleaned_data['end_date']
dates = Kwijtgeraakt.objects.filter(date__gte=form.cleaned_data['start_date'], date__lte=form.cleaned_data['end_date']).order_by('date')
context['tapperlist'] = [x.name for x in Tapper.objects.all()]
context['datelist'] = [x.date.strftime("%Y-%m-%d") for x in dates]
context['tappersdata'] = {}
current_counts = {tapper.name: 0 for tapper in Tapper.objects.all()}
for date in dates:
current_counts[date.tapper.name] += 1
context['tappersdata'][date.date.strftime("%Y-%m-%d")] = dictcopy(current_counts)
# Remove tappers with zero incidents
zero_incidents = []
for tapper, count in current_counts.items():
if count == 0:
zero_incidents.append(tapper)
for date, entry in context['tappersdata'].items():
del entry[tapper]
context['tapperlist'].remove(tapper)
context['tappers'] = [x for x in context['tappers'] if x.name not in zero_incidents]
return context
def form_valid(self, form):
return self.render_to_response(self.get_context_data(form=form))
class NewTapperPage(CreateView):
model = Tapper
fields = ('name', )
template_name = "tapper_form.html"
success_url = reverse_lazy('home')