From 0872af5144f40c2fd53313335d8043350a7f353a Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Sat, 23 Nov 2024 16:31:04 +0100 Subject: [PATCH] =?UTF-8?q?On=20peut=20filtrer=20les=20imports=20r=C3=A9cu?= =?UTF-8?q?rrents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agenda_culturel/filters.py | 14 +++++++ .../templates/agenda_culturel/rimports.html | 26 +++++++++++- src/agenda_culturel/views.py | 41 +++++++++++-------- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/src/agenda_culturel/filters.py b/src/agenda_culturel/filters.py index 646d75a..42e7fad 100644 --- a/src/agenda_culturel/filters.py +++ b/src/agenda_culturel/filters.py @@ -477,3 +477,17 @@ class DuplicatedEventsFilter(django_filters.FilterSet): def fixed_qs(self, queryset, name, value): return DuplicatedEvents.not_fixed_qs(queryset, value) + + +class RecurrentImportFilter(django_filters.FilterSet): + + name = django_filters.ModelMultipleChoiceFilter( + label="Filtrer par nom", + field_name="name", + queryset=RecurrentImport.objects.all().order_by("name__unaccent") + ) + + class Meta: + model = RecurrentImport + fields = ["name"] + diff --git a/src/agenda_culturel/templates/agenda_culturel/rimports.html b/src/agenda_culturel/templates/agenda_culturel/rimports.html index c386d12..196617a 100644 --- a/src/agenda_culturel/templates/agenda_culturel/rimports.html +++ b/src/agenda_culturel/templates/agenda_culturel/rimports.html @@ -6,8 +6,11 @@ {% load utils_extra %} {% load rimports_extra %} {% load cat_extra %} +{% load static %} + {% block entete_header %} {% css_categories %} + {% endblock %} {% block configurer-bouton %}{% endblock %} @@ -31,7 +34,14 @@ Ajouter {% picto_from_name "plus-circle" %}

Importations récurrentes {% if status %}{{ status }}{% endif %}

- {% include "agenda_culturel/rimports-info-inc.html" with all=0 %} +

Résumé : {% include "agenda_culturel/rimports-info-inc.html" with all=0 %}

+ +

Filtrer

+
+ {{ filter.form.as_div }}
+ +
+ @@ -87,4 +97,18 @@ {% include "agenda_culturel/side-nav.html" with current="rimports" %} + + + {% endblock %} \ No newline at end of file diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 580968a..c942960 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -46,6 +46,7 @@ from .filters import ( SimpleSearchEventFilter, SearchEventFilter, DuplicatedEventsFilter, + RecurrentImportFilter, ) from .models import ( @@ -1057,33 +1058,35 @@ def cancel_import(request, pk): @login_required(login_url="/accounts/login/") @permission_required("agenda_culturel.view_recurrentimport") def recurrent_imports(request, status=None): + newest = BatchImportation.objects.filter(recurrentImport=OuterRef("pk")).order_by( - "-created_date" - ) - events = RecurrentImport.objects.annotate( - last_run_status=Subquery(newest.values("status")[:1]) - ) + "-created_date") - if status is None: - events_selected = events.all() - else: - events_selected = events.filter(last_run_status=status) - events_selected = events_selected.order_by("-pk") + qs = RecurrentImport.objects.all(). \ + annotate(last_run_status=Subquery(newest.values("status")[:1])). \ + order_by("-pk") - paginator = Paginator(events_selected, 10) - page = request.GET.get("page") - - nb_failed = (events + nb_failed = (qs .filter(last_run_status=BatchImportation.STATUS.FAILED) .count()) - nb_canceled = (events + nb_canceled = (qs .filter(last_run_status=BatchImportation.STATUS.CANCELED) .count()) - nb_running = (events + nb_running = (qs .filter(last_run_status=BatchImportation.STATUS.RUNNING) .count()) - nb_all = events.count() + nb_all = qs.count() + + + if not status is None: + qs = qs.filter(last_run_status=status) + + filter = RecurrentImportFilter(request.GET, queryset=qs) + + paginator = PaginatorFilter(filter, 10, request) + + page = request.GET.get("page") try: response = paginator.page(page) @@ -1093,7 +1096,9 @@ def recurrent_imports(request, status=None): response = paginator.page(paginator.num_pages) return render( - request, "agenda_culturel/rimports.html", {"paginator_filter": response, "nb_all": nb_all, "nb_failed": nb_failed, "nb_canceled": nb_canceled, "nb_running": nb_running, "status": status} + request, "agenda_culturel/rimports.html", {"paginator_filter": response, + "filter": filter, + "nb_all": nb_all, "nb_failed": nb_failed, "nb_canceled": nb_canceled, "nb_running": nb_running, "status": status} )