107 lines
3.5 KiB
Python
107 lines
3.5 KiB
Python
from django.shortcuts import reverse, redirect
|
|
from django.views import generic
|
|
from django.utils import timezone
|
|
|
|
from sujets.models import Sujet
|
|
from .forms import *
|
|
from notes.mixins import NoteFormMixin
|
|
from notes.forms import AutoNoteForm
|
|
# Create your views here.
|
|
from utilisateurs.models import Maraudeur
|
|
from website import decorators as website
|
|
suivi = website.app_config(
|
|
name="suivi",
|
|
groups=[Maraudeur],
|
|
menu=["suivi/menu/sujets.html"],
|
|
admin_menu=["suivi/menu/admin_sujets.html"],
|
|
ajax=False,
|
|
)
|
|
|
|
from maraudes.compte_rendu import CompteRendu
|
|
|
|
def derniers_sujets_rencontres():
|
|
""" Renvoie le 'set' des sujets rencontrés dans les deux dernières maraudes """
|
|
sujets = set()
|
|
|
|
# Issue: Récupère des comptes-rendus, même s'il n'ont pas été rédigé. Ne devrait pas
|
|
# être un souci si on reste à jour, mais sinon...
|
|
for cr in list(CompteRendu.objects.all())[-2:]:
|
|
for obs in cr.get_observations():
|
|
sujets.add(obs.sujet)
|
|
return sujets
|
|
|
|
@suivi
|
|
class IndexView(NoteFormMixin, generic.TemplateView):
|
|
class PageInfo:
|
|
title = "Suivi des bénéficiaires"
|
|
header = "Suivi"
|
|
header_small = "Tableau de bord"
|
|
#NoteFormMixin
|
|
forms = {
|
|
'appel': AppelForm,
|
|
'signalement': SignalementForm,
|
|
}
|
|
def get_initial(self):
|
|
return {'created_date': timezone.localtime(timezone.now()).date(),
|
|
'created_time': timezone.localtime(timezone.now()).time()}
|
|
def get_success_url(self):
|
|
return reverse('suivi:index')
|
|
#TemplateView
|
|
template_name = "suivi/index.html"
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super().get_context_data(*args, **kwargs)
|
|
context['derniers_sujets'] = ", ".join(map(str, derniers_sujets_rencontres()))
|
|
return context
|
|
|
|
@suivi
|
|
class SujetListView(generic.ListView):
|
|
class PageInfo:
|
|
title = "Sujet - Liste des sujets"
|
|
header = "Liste des sujets"
|
|
#ListView
|
|
model = Sujet
|
|
template_name = "sujets/sujet_liste.html"
|
|
paginate_by = 30
|
|
|
|
def post(self, request, **kwargs):
|
|
from watson import search as watson
|
|
search_text = request.POST.get('q')
|
|
results = watson.filter(Sujet, search_text)
|
|
if results.count() == 1:
|
|
return redirect(results[0].get_absolute_url())
|
|
self.queryset = results
|
|
return self.get(request, **kwargs)
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['query_text'] = self.request.POST.get('q', None)
|
|
return context
|
|
|
|
# Import app_config from 'sujets' application, using
|
|
# its admin_menu option
|
|
from sujets.views import sujets
|
|
@sujets
|
|
class SuiviSujetView(NoteFormMixin, generic.DetailView):
|
|
class PageInfo:
|
|
title = "Sujet - {{sujet}}"
|
|
header = "{{sujet}}"
|
|
header_small = "suivi"
|
|
#NoteFormMixin
|
|
forms = {
|
|
'note': AutoNoteForm,
|
|
}
|
|
def get_success_url(self):
|
|
return reverse('suivi:details', kwargs={'pk': self.get_object().pk})
|
|
def get_form_kwargs(self):
|
|
kwargs = super().get_form_kwargs()
|
|
kwargs['sujet'] = self.get_object()
|
|
return kwargs
|
|
#DetailView
|
|
model = Sujet
|
|
template_name = "suivi/details.html"
|
|
context_object_name = "sujet"
|
|
def get_context_data(self, *args, **kwargs):
|
|
context = super().get_context_data(*args, **kwargs)
|
|
context['notes'] = self.object.notes.by_date(reverse=True)
|
|
return context
|