diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py
index db7e156..211fc96 100644
--- a/src/agenda_culturel/models.py
+++ b/src/agenda_culturel/models.py
@@ -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()
diff --git a/src/agenda_culturel/templates/agenda_culturel/page.html b/src/agenda_culturel/templates/agenda_culturel/page.html
index fb36823..29e75b3 100644
--- a/src/agenda_culturel/templates/agenda_culturel/page.html
+++ b/src/agenda_culturel/templates/agenda_culturel/page.html
@@ -92,6 +92,7 @@
{% if perms.agenda_culturel.view_message %}
{% show_badge_messages "bottom" %}
{% endif %}
+ {% show_badge_moderate %}
Administrer {% picto_from_name "settings" %}
{% endif %}
diff --git a/src/agenda_culturel/templatetags/event_extra.py b/src/agenda_culturel/templatetags/event_extra.py
index 4dd5be9..6d645d9 100644
--- a/src/agenda_culturel/templatetags/event_extra.py
+++ b/src/agenda_culturel/templatetags/event_extra.py
@@ -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('' +
+ picto_from_name("target") + ' ' + str(nb) + '')
+
+
@register.simple_tag
def show_badges_events(placement="top"):
nb_drafts = Event.nb_draft_events()
diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py
index 18cc88c..e83e2f9 100644
--- a/src/agenda_culturel/views.py
+++ b/src/agenda_culturel/views.py
@@ -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,