Files
django-cresus/core/views.py
2017-09-21 13:12:35 +02:00

183 lines
6.2 KiB
Python

from collections import defaultdict
from django.shortcuts import render, redirect
from django.urls import reverse, reverse_lazy
from django.http import HttpResponseRedirect
from django.utils import timezone as tz
from django.utils.dates import MONTHS
from django import views
from django.contrib import messages
from .models import (Enregistrement, Etiquette, EnregistrementRecursif,)
from .forms import EnregistrementForm
# Utils
def get_current_date():
return tz.localtime(tz.now()).date()
def redirect_to_current_month(request):
current_date = get_current_date()
return HttpResponseRedirect(reverse("month-view",
kwargs={
'year': current_date.year,
'month': "%02d" % current_date.month,
}))
# Views
class MonthView(views.generic.ListView):
template_name = "core/index.html"
def get(self, request, year=None, month=None, *args, **kwargs):
self.current_date = get_current_date()
self.year = int(year)
self.month = int(month)
if self.is_in_future:
messages.warning(request, "Trying to go into the future ? Well, you've been teleported back to now...")
return redirect_to_current_month(request)
return super().get(request, *args, **kwargs)
def get_queryset(self):
""" Use custom manager method to get associated data and store it """
qs, data = Enregistrement.objects.get_month_with_data(self.month,
self.year)
self.data = data
return qs
def get_prev_month(self):
""" Get url for previous month (no limit) """
if self.month > 1:
return reverse("month-view",
kwargs={'year': self.year,
'month': "%02d" % (self.month - 1)})
else:
return reverse("month-view",
kwargs={'year': self.year - 1,
'month': 12})
@property
def is_in_future(self):
return (self.year > self.current_date.year
or (self.year == self.current_date.year
and self.month > self.current_date.month))
def get_next_month(self):
""" Get url for next month, but no going into the future ! """
if self.is_in_future or (self.year == self.current_date.year
and self.month == self.current_date.month):
return None
if self.month < 12:
return reverse("month-view",
kwargs={'year': self.year,
'month': "%02d" % (self.month + 1)})
else:
return reverse("month-view",
kwargs={'year': self.year + 1,
'month': "01"})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['mois'], context['month'] = MONTHS[self.month], self.month
context['annee'], context['year'] = self.year, self.year
context['data'] = self.data
context['prev_month_url'] = self.get_prev_month()
context['next_month_url'] = self.get_next_month()
return context
class EnregistrementAddView(views.generic.edit.CreateView):
model = Enregistrement
template_name_suffix = "_add"
form_class = EnregistrementForm
def get_initial(self):
# Build the initial date
date = get_current_date()
try: date = date.replace(int(self.request.GET['year']))
except KeyError: pass
try: date = date.replace(date.year, int(self.request.GET['month']))
except KeyError: pass
# Initials
return {'date': date,
'est_negatif': True,
}
def get_success_url(self):
date = self.object.date
return reverse("month-view",
kwargs={'year': date.year,
'month': "%02d" % date.month})
class EnregistrementUpdateView(views.generic.edit.UpdateView):
model = Enregistrement
template_name_suffix = "_update_form"
fields = "__all__"
def get_success_url(self):
return reverse("month-view",
kwargs={'year': self.object.date.year,
'month': "%02d" % self.object.date.month})
class EnregistrementDeleteView(views.generic.edit.DeleteView):
model = Enregistrement
template_name = "core/confirm_delete.html"
def get_success_url(self):
return reverse("month-view",
kwargs={'year': self.object.date.year,
'month': "%02d" % self.object.date.month})
class EtiquetteListView(views.generic.ListView):
model = Etiquette
template_name = "core/etiquettes.html"
class EtiquetteAddView(views.generic.edit.CreateView):
model = Etiquette
fields = "__all__"
template_name_suffix = "_add_form"
success_url = reverse_lazy('etiquette-list')
class EtiquetteUpdateView(views.generic.edit.UpdateView):
model = Etiquette
fields = "__all__"
template_name_suffix = "_update_form"
success_url = reverse_lazy('etiquette-list')
class EtiquetteDeleteView(views.generic.edit.DeleteView):
model = Etiquette
template_name = "core/confirm_delete.html"
success_url = reverse_lazy("etiquette-list")
class RecursifListView(views.generic.ListView):
model = EnregistrementRecursif
template_name = "core/recursif_list.html"
class RecursifAddView(views.generic.edit.CreateView):
model = EnregistrementRecursif
fields = ('jour', 'description', 'etiquette', 'montant')
template_name_suffix = "_add_form"
success_url = reverse_lazy('recursif-list')
class RecursifUpdateView(views.generic.edit.UpdateView):
model = EnregistrementRecursif
fields = ('jour', 'description', 'etiquette', 'montant')
template_name_suffix = "_update_form"
success_url = reverse_lazy('recursif-list')
class RecursifDeleteView(views.generic.edit.DeleteView):
model = EnregistrementRecursif
template_name = "core/confirm_delete.html"
success_url = reverse_lazy("recursif-list")