On visualise les événements importés mais hors imports récurrents

This commit is contained in:
Jean-Marie Favreau 2025-02-07 16:03:04 +01:00
parent 7648d1d794
commit ce7576e9ae
3 changed files with 72 additions and 15 deletions

View File

@ -2,7 +2,7 @@ import django_filters
from django.utils.translation import gettext_lazy as _
from django import forms
from django.contrib.postgres.search import SearchQuery, SearchHeadline
from django.db.models import Count, Q
from django.db.models import Count, Q, F
from datetime import date, timedelta
from urllib.parse import urlparse, parse_qs, urlencode
@ -326,6 +326,18 @@ class EventFilterAdmin(django_filters.FilterSet):
method="filter_by_representative",
widget=forms.CheckboxSelectMultiple)
pure_import = django_filters.MultipleChoiceFilter(
label=_("Pure import"),
choices=[(True, _("Yes")), (False, _("No"))],
method="filter_by_pure_import",
widget=forms.CheckboxSelectMultiple)
in_recurrent_import = django_filters.MultipleChoiceFilter(
label=_("In recurrent import"),
choices=[(True, _("Yes")), (False, _("No"))],
method="filter_by_in_recurrent_import",
widget=forms.CheckboxSelectMultiple)
import_sources = django_filters.ModelChoiceFilter(
label=_("Imported from"),
method="filter_by_source",
@ -336,6 +348,32 @@ class EventFilterAdmin(django_filters.FilterSet):
src = RecurrentImport.objects.get(pk=value.pk).source
return queryset.filter(import_sources__contains=[src])
def filter_by_in_recurrent_import(self, queryset, name, value):
if value is None or len(value) != 1:
return queryset
else:
srcs = RecurrentImport.objects.all().values_list("source")
q = Q(import_sources__overlap=srcs)
if value[0] == 'True':
print(q)
return queryset.filter(q)
else:
return queryset.exclude(q)
def filter_by_pure_import(self, queryset, name, value):
if value is None or len(value) != 1:
return queryset
else:
q = (Q(import_sources__isnull=False) &
(Q(modified_date__isnull=True) |
Q(modified_date__lte=F('imported_date'))))
if value[0] == 'True':
print(q)
return queryset.filter(q)
else:
return queryset.exclude(q)
def filter_by_representative(self, queryset, name, value):
if value is None or len(value) != 1:
return queryset
@ -343,7 +381,7 @@ class EventFilterAdmin(django_filters.FilterSet):
q = (Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) |
Q(other_versions__representative__isnull=True))
if value[0] == True:
if value[0] == 'True':
return queryset.filter(q)
else:
return queryset.exclude(q)

View File

@ -2,13 +2,13 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Jean-Marie Favreau <jeanmarie.favreau@free.fr>, 2023.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: agenda_culturel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-07 11:55+0100\n"
"POT-Creation-Date: 2025-02-07 16:00+0100\n"
"PO-Revision-Date: 2023-10-29 14:16+0000\n"
"Last-Translator: Jean-Marie Favreau <jeanmarie.favreau@free.fr>\n"
"Language-Team: Jean-Marie Favreau <jeanmarie.favreau@free.fr>\n"
@ -98,49 +98,59 @@ msgstr "Choisir une localité"
msgid "Representative version"
msgstr "Version représentative"
#: agenda_culturel/filters.py:325 agenda_culturel/filters.py:395
#: agenda_culturel/filters.py:325 agenda_culturel/filters.py:331
#: agenda_culturel/filters.py:337 agenda_culturel/filters.py:433
msgid "Yes"
msgstr "Oui"
#: agenda_culturel/filters.py:325 agenda_culturel/filters.py:395
#: agenda_culturel/filters.py:325 agenda_culturel/filters.py:331
#: agenda_culturel/filters.py:337 agenda_culturel/filters.py:433
msgid "No"
msgstr "Non"
#: agenda_culturel/filters.py:330
msgid "Pure import"
msgstr "Événement importé"
#: agenda_culturel/filters.py:336
msgid "In recurrent import"
msgstr "Inclut dans un import récurrent"
#: agenda_culturel/filters.py:342
msgid "Imported from"
msgstr "Importé depuis"
#: agenda_culturel/filters.py:359 agenda_culturel/models.py:648
#: agenda_culturel/filters.py:397 agenda_culturel/models.py:648
#: agenda_culturel/models.py:2272
msgid "Status"
msgstr "Status"
#: agenda_culturel/filters.py:360 agenda_culturel/models.py:2058
#: agenda_culturel/filters.py:398 agenda_culturel/models.py:2058
msgid "Closed"
msgstr "Fermé"
#: agenda_culturel/filters.py:360
#: agenda_culturel/filters.py:398
msgid "Open"
msgstr "Ouvert"
#: agenda_culturel/filters.py:364 agenda_culturel/filters.py:365
#: agenda_culturel/filters.py:402 agenda_culturel/filters.py:403
#: agenda_culturel/models.py:2052
msgid "Spam"
msgstr "Spam"
#: agenda_culturel/filters.py:365
#: agenda_culturel/filters.py:403
msgid "Non spam"
msgstr "Non spam"
#: agenda_culturel/filters.py:370 agenda_culturel/models.py:2073
#: agenda_culturel/filters.py:408 agenda_culturel/models.py:2073
msgid "Type"
msgstr "Type"
#: agenda_culturel/filters.py:382
#: agenda_culturel/filters.py:420
msgid "Search"
msgstr "Rechercher"
#: agenda_culturel/filters.py:394
#: agenda_culturel/filters.py:432
msgid "In the past"
msgstr "Dans le passé"

View File

@ -620,11 +620,20 @@ header .remarque {
}
.form.recent, .form.main-filter, .search .form {
#id_status>div, #id_representative>div {
#id_status>div, #id_representative>div, #id_pure_import>div, #id_in_recurrent_import>div {
display: inline-block;
margin-right: 2em;
}
}
.form.recent {
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: .5em;
:last-child, :nth-last-child(4),
button {
grid-column: 1/3;
}
}
#search {
form {