added sujet list view filter to extract persons met in last 30 days

This commit is contained in:
artus40
2017-10-24 13:20:34 +02:00
parent 030f7021ee
commit abc48874e7

View File

@@ -10,6 +10,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from utilisateurs.mixins import MaraudeurMixin from utilisateurs.mixins import MaraudeurMixin
from maraudes.models import Maraude, CompteRendu from maraudes.models import Maraude, CompteRendu
from maraudes.notes import Observation
from .models import Sujet, Note from .models import Sujet, Note
from .forms import SujetCreateForm, AutoNoteForm, SelectSujetForm from .forms import SujetCreateForm, AutoNoteForm, SelectSujetForm
from .mixins import NoteFormMixin from .mixins import NoteFormMixin
@@ -111,8 +112,27 @@ class SujetListView(ListView):
return qs.exclude(pk__in=excluded_set) return qs.exclude(pk__in=excluded_set)
def rencontre_dans_le_mois(qs):
""" Renvoie les sujets du queryset pour lesquelles une observation a été enregistrée
au cours des 30 derniers jours """
DAYS_NUMBER = 30
LIMIT_DATE = timezone.now().date() - datetime.timedelta(DAYS_NUMBER)
included_set = set()
for sujet in qs:
# Try to find an observation in the range
most_recent_obs = Observation.objects.filter(sujet=sujet).order_by("-created_date").first()
if most_recent_obs and most_recent_obs.created_date >= LIMIT_DATE:
included_set.add(sujet.pk)
return qs.filter(pk__in=included_set)
filters = [ filters = [
("Rencontré(e)s cette année", lambda qs: qs.filter(premiere_rencontre__year=timezone.now().date().year)), ("Connu(e)s cette année",
lambda qs: qs.filter(
premiere_rencontre__year=timezone.now().date().year)
),
("Rencontré(e)s dans le mois", rencontre_dans_le_mois),
("Statistiques incomplètes", info_completed_filter), ("Statistiques incomplètes", info_completed_filter),
] ]