diff --git a/src/agenda_culturel/calendar.py b/src/agenda_culturel/calendar.py index 0727377..137462a 100644 --- a/src/agenda_culturel/calendar.py +++ b/src/agenda_culturel/calendar.py @@ -242,7 +242,7 @@ class CalendarList: Q(other_versions__isnull=True) | Q(other_versions__representative=F('pk')) | Q(other_versions__representative__isnull=True) - ).order_by("start_time", "title__unaccent__lower").prefetch_related("exact_location").prefetch_related("category").prefetch_related("other_versions") + ).order_by("start_time", "title__unaccent__lower").prefetch_related("exact_location").prefetch_related("category").prefetch_related("other_versions").prefetch_related("other_versions__representative") firstdate = datetime.fromordinal(self.c_firstdate.toordinal()) if firstdate.tzinfo is None or firstdate.tzinfo.utcoffset(firstdate) is None: diff --git a/src/agenda_culturel/templates/agenda_culturel/page.html b/src/agenda_culturel/templates/agenda_culturel/page.html index 954e5ee..e9167a1 100644 --- a/src/agenda_culturel/templates/agenda_culturel/page.html +++ b/src/agenda_culturel/templates/agenda_culturel/page.html @@ -65,8 +65,7 @@
  • {% if perms.agenda_culturel.view_recurrentimport %} - {% show_badge_rimports "bottom" "failed" %} - {% show_badge_rimports "bottom" "running" %} + {% show_badges_rimports "bottom" %} {% endif %} {% if perms.agenda_culturel.change_event %} {% show_badges_events "bottom" %} diff --git a/src/agenda_culturel/templatetags/rimports_extra.py b/src/agenda_culturel/templatetags/rimports_extra.py index f1842ef..e8e2442 100644 --- a/src/agenda_culturel/templatetags/rimports_extra.py +++ b/src/agenda_culturel/templatetags/rimports_extra.py @@ -2,7 +2,7 @@ from django import template from django.utils.safestring import mark_safe from django.urls import reverse_lazy from django.template.defaultfilters import pluralize -from django.db.models import OuterRef, Subquery +from django.db.models import OuterRef, Subquery, Count from agenda_culturel.models import RecurrentImport, BatchImportation @@ -11,46 +11,54 @@ from .utils_extra import picto_from_name register = template.Library() +import logging + +logger = logging.getLogger(__name__) + + +def badge_rimport(status, nb, suffix, picto, cl, placement): + return ('' + + picto_from_name(picto) + + " " + + str(nb) + + "") @register.simple_tag -def show_badge_rimports(placement, status): +def show_badges_rimports(placement): newest = BatchImportation.objects.filter(recurrentImport=OuterRef("pk")).order_by( "-created_date" ) - nb = ( - RecurrentImport.objects.annotate( + request = RecurrentImport.objects.annotate( last_run_status=Subquery(newest.values("status")[:1]) - ) - .filter(last_run_status=status) - .count() - ) + ).values("last_run_status").annotate(nb_last_run_by_status=Count("last_run_status")) - if status == BatchImportation.STATUS.FAILED: - suffix = 'en erreur' - picto = "alert-triangle" - cl = "error" - else: - suffix = ' en cours' - picto = "refresh-cw" - cl = "simple" - if nb != 0: - return mark_safe( - '' - + picto_from_name(picto) - + " " - + str(nb) - + "" - ) - else: - return "" + nbs = {} + for res in request: + nbs[res["last_run_status"]] = res["nb_last_run_by_status"] + + result = "" + + for status in ["failed", "running"]: + if status in nbs and nbs[status] != 0: + if status == "failed": + suffix = 'en erreur' + picto = "alert-triangle" + cl = "error" + else: + suffix = ' en cours' + picto = "refresh-cw" + cl = "simple" + result += badge_rimport(status, nbs[status], suffix, picto, cl, placement) + + return mark_safe(result) diff --git a/src/agenda_culturel/templatetags/tag_extra.py b/src/agenda_culturel/templatetags/tag_extra.py index 83115fc..be845db 100644 --- a/src/agenda_culturel/templatetags/tag_extra.py +++ b/src/agenda_culturel/templatetags/tag_extra.py @@ -53,7 +53,7 @@ def tag_not_in_db(tag, tags): @register.simple_tag def show_suggested_tags(filter): filter.form.full_clean() - tags = Tag.objects.all().filter(principal=True).order_by("name") + tags = Tag.objects.all().filter(principal=True).order_by("name").prefetch_related("category") result = "Suggestion :" for t in tags: