Ajout d'une synthèse par mois
This commit is contained in:
parent
8b20b9fbff
commit
8f752ae7f9
@ -25,6 +25,10 @@
|
||||
<div class="large-table">
|
||||
<div id="cal-heatmap-startday"></div>
|
||||
</div>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
{% include "agenda_culturel/statistics_per_month.html" with data=stats_months_by_startday %}
|
||||
<h2>Par jour de création sur l'agenda</h2>
|
||||
<p>
|
||||
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 @@
|
||||
<div class="large-table">
|
||||
<div id="cal-heatmap-creation"></div>
|
||||
</div>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
{% include "agenda_culturel/statistics_per_month.html" with data=stats_months_by_creation %}
|
||||
<h2>Par ville</h2>
|
||||
<p>Nombre d'événements référencés par ville.</p>
|
||||
<ul>
|
||||
|
@ -0,0 +1,15 @@
|
||||
{% load utils_extra %}
|
||||
<div class="large-table">
|
||||
<table>
|
||||
<thead>
|
||||
<th class="label"></th>
|
||||
{% for v in data %}<th>{{ v.month|date:"M Y" }}</th>{% endfor %}
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="label">Nb</th>
|
||||
{% for v in data %}<th>{{ v.total|per_day:v.month }}</th>{% endfor %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
@ -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</a></li>'
|
||||
)
|
||||
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)
|
||||
|
@ -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"],
|
||||
|
Loading…
x
Reference in New Issue
Block a user