Ajout d'un badge modération

This commit is contained in:
Jean-Marie Favreau 2025-01-11 13:59:18 +01:00
parent 748b665a59
commit 1b2510c7df
4 changed files with 51 additions and 25 deletions

View File

@ -930,6 +930,32 @@ class Event(models.Model):
else:
return None
def get_nb_not_moderated(first_day, nb_mod_days=21, nb_classes=4):
window_end = first_day + timedelta(days=nb_mod_days)
nb_not_moderated = Event.objects.filter(~Q(status=Event.STATUS.TRASH)). \
filter(Q(start_day__gte=first_day)&Q(start_day__lte=window_end)). \
filter(
Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) |
Q(other_versions__representative__isnull=True)).values("start_day").\
annotate(not_moderated=Count("start_day", filter=Q(moderated_date__isnull=True))). \
annotate(nb_events=Count("start_day")). \
order_by("start_day").values("not_moderated", "nb_events", "start_day")
max_not_moderated = max([x["not_moderated"] for x in nb_not_moderated])
if max_not_moderated == 0:
max_not_moderated = 1
nb_not_moderated_dict = dict([(x["start_day"], (x["not_moderated"], x["nb_events"])) for x in nb_not_moderated])
# add missing dates
date_list = [first_day + timedelta(days=x) for x in range(0, nb_mod_days)]
nb_not_moderated = [{"start_day": d,
"is_today": d == first_day,
"nb_events": nb_not_moderated_dict[d][1] if d in nb_not_moderated_dict else 0,
"not_moderated": nb_not_moderated_dict[d][0] if d in nb_not_moderated_dict else 0} for d in date_list]
nb_not_moderated = [ x | { "note": 0 if x["not_moderated"] == 0 else int((nb_classes - 1) * x["not_moderated"] / max_not_moderated) + 1 } for x in nb_not_moderated]
return [nb_not_moderated[x:x + 7] for x in range(0, len(nb_not_moderated), 7)]
def nb_draft_events():
return Event.objects.filter(status=Event.STATUS.DRAFT).count()

View File

@ -92,6 +92,7 @@
{% if perms.agenda_culturel.view_message %}
{% show_badge_messages "bottom" %}
{% endif %}
{% show_badge_moderate %}
<a class="link" href="{% url 'administration' %}">Administrer {% picto_from_name "settings" %}</a>
</div>
{% endif %}

View File

@ -2,7 +2,9 @@ from django import template
from django.utils.safestring import mark_safe
from django.urls import reverse_lazy
from django.template.defaultfilters import pluralize, linebreaks, urlize
from django.db.models import Q, F
import re
from datetime import date, timedelta, datetime
from agenda_culturel.models import Event
from django.db.models import Q
@ -64,6 +66,26 @@ def picto_visibility(event, visible=True):
return ""
@register.simple_tag
def show_badge_moderate():
first_day = datetime.now()
last_day = first_day + timedelta(days=7)
nb = Event.objects.filter(~Q(status=Event.STATUS.TRASH)). \
filter(Q(start_day__gte=first_day)&Q(start_day__lte=last_day)). \
filter(moderated_date__isnull=True). \
filter(
Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) |
Q(other_versions__representative__isnull=True)).values("start_day").\
count()
return mark_safe('<a href="' + reverse_lazy('moderate') + '" ' +
' data-placement="bottom" '
' data-tooltip="' + str(nb) + ' événements à modérer (7 jours)"' +
' class="badge" aria-label="modérer">' +
picto_from_name("target") + ' ' + str(nb) + '</a>')
@register.simple_tag
def show_badges_events(placement="top"):
nb_drafts = Event.nb_draft_events()

View File

@ -969,32 +969,9 @@ def administration(request):
.count())
nb_all = imported_events.count()
window_end = today + timedelta(days=nb_mod_days)
# get all non moderated events
nb_not_moderated = Event.objects.filter(~Q(status=Event.STATUS.TRASH)). \
filter(Q(start_day__gte=today)&Q(start_day__lte=window_end)). \
filter(
Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) |
Q(other_versions__representative__isnull=True)).values("start_day").\
annotate(not_moderated=Count("start_day", filter=Q(moderated_date__isnull=True))). \
annotate(nb_events=Count("start_day")). \
order_by("start_day").values("not_moderated", "nb_events", "start_day")
max_not_moderated = max([x["not_moderated"] for x in nb_not_moderated])
if max_not_moderated == 0:
max_not_moderated = 1
nb_not_moderated_dict = dict([(x["start_day"], (x["not_moderated"], x["nb_events"])) for x in nb_not_moderated])
# add missing dates
date_list = [today + timedelta(days=x) for x in range(0, nb_mod_days)]
nb_not_moderated = [{"start_day": d,
"is_today": d == today,
"nb_events": nb_not_moderated_dict[d][1] if d in nb_not_moderated_dict else 0,
"not_moderated": nb_not_moderated_dict[d][0] if d in nb_not_moderated_dict else 0} for d in date_list]
nb_not_moderated = [ x | { "note": 0 if x["not_moderated"] == 0 else int((nb_classes - 1) * x["not_moderated"] / max_not_moderated) + 1 } for x in nb_not_moderated]
nb_not_moderated = [nb_not_moderated[x:x + 7] for x in range(0, len(nb_not_moderated), 7)]
nb_not_moderated = Event.get_nb_not_moderated(today, nb_mod_days, nb_classes)
return render(
request,