initial commit
This commit is contained in:
182
core/views.py
Normal file
182
core/views.py
Normal file
@@ -0,0 +1,182 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user