Ajout d'un badge modération
This commit is contained in:
parent
748b665a59
commit
1b2510c7df
@ -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()
|
||||
|
||||
|
@ -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 %}
|
||||
|
@ -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()
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user