diff --git a/src/agenda_culturel/templates/agenda_culturel/statistics.html b/src/agenda_culturel/templates/agenda_culturel/statistics.html
index c1bbf1b..11ca602 100644
--- a/src/agenda_culturel/templates/agenda_culturel/statistics.html
+++ b/src/agenda_culturel/templates/agenda_culturel/statistics.html
@@ -25,6 +25,10 @@
+
+ On retrouve une synthèse par mois du tableau précédent, sous forme d'une moyenne du nombre d'événements par jour pour chaque mois.
+
+ {% include "agenda_culturel/statistics_per_month.html" with data=stats_months_by_startday %}
Par jour de création sur l'agenda
Pour chaque date, on retrouve le nombre d'événements qui ont été créé ce jour-là, par import automatique ou par création manuelle.
@@ -34,6 +38,10 @@
+
+ On retrouve une synthèse par mois du tableau précédent, sous forme d'une moyenne du nombre de création d'événements par jour pour chaque mois.
+
+ {% include "agenda_culturel/statistics_per_month.html" with data=stats_months_by_creation %}
Par ville
Nombre d'événements référencés par ville.
diff --git a/src/agenda_culturel/templates/agenda_culturel/statistics_per_month.html b/src/agenda_culturel/templates/agenda_culturel/statistics_per_month.html
new file mode 100644
index 0000000..ae9ae32
--- /dev/null
+++ b/src/agenda_culturel/templates/agenda_culturel/statistics_per_month.html
@@ -0,0 +1,15 @@
+{% load utils_extra %}
+
+
+
+ |
+ {% for v in data %}{{ v.month|date:"M Y" }} | {% endfor %}
+
+
+
+ Nb |
+ {% for v in data %}{{ v.total|per_day:v.month }} | {% endfor %}
+
+
+
+
diff --git a/src/agenda_culturel/templatetags/utils_extra.py b/src/agenda_culturel/templatetags/utils_extra.py
index 8013509..87ae4eb 100644
--- a/src/agenda_culturel/templatetags/utils_extra.py
+++ b/src/agenda_culturel/templatetags/utils_extra.py
@@ -1,4 +1,5 @@
from datetime import date, datetime, timedelta
+import calendar
from string import ascii_uppercase as auc
from urllib.parse import urlparse
@@ -224,3 +225,9 @@ def navigation_links(filter, category):
+ '">ce mois-ci'
)
return mark_safe(result)
+
+
+@register.filter
+def per_day(nb, month):
+ weekday, number_of_days = calendar.monthrange(month.year, month.month)
+ return "%.1f" % (nb / number_of_days)
diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py
index 8c4add4..efb0380 100644
--- a/src/agenda_culturel/views.py
+++ b/src/agenda_culturel/views.py
@@ -16,6 +16,7 @@ from django.core.cache import cache
from django.core.mail import mail_admins
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.db.models import Count, F, Func, OuterRef, Q, Subquery
+from django.db.models.functions import TruncMonth
from django.http import (
Http404,
HttpResponse,
@@ -2674,6 +2675,7 @@ def view_tag(request, t, past=False):
def statistics(request):
stats = {}
+ stats_months = {}
first = {}
last = {}
@@ -2702,12 +2704,17 @@ def statistics(request):
r += after * 7
first[v] = (last[v] - timedelta(days=r)).replace(day=1)
- stats[v] = (
- ev_published.annotate(day=F(v))
- .filter(Q(day__lte=last[v]) & Q(day__gte=first[v]))
- .values("day")
- .annotate(total=Count("day"))
- .order_by("day")
+ ev_days = ev_published.annotate(day=F(v)).filter(
+ Q(day__lte=last[v]) & Q(day__gte=first[v])
+ )
+
+ stats[v] = ev_days.values("day").annotate(total=Count("day")).order_by("day")
+
+ stats_months[v] = (
+ ev_days.annotate(month=TruncMonth("day"))
+ .values("month")
+ .annotate(total=Count("month"))
+ .order_by("month")
)
nb_by_city = (
@@ -2721,6 +2728,8 @@ def statistics(request):
context = {
"stats_by_startday": stats["start_day"],
"stats_by_creation": stats["created_date__date"],
+ "stats_months_by_startday": stats_months["start_day"],
+ "stats_months_by_creation": stats_months["created_date__date"],
"first_by_startday": first["start_day"],
"last_by_startday": last["start_day"],
"first_by_creation": first["created_date__date"],