95 lines
3.7 KiB
Python
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') |