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.utils.translation import gettext_lazy as _
from django import forms from django import forms
from django.contrib.postgres.search import SearchQuery, SearchHeadline 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 datetime import date, timedelta
from urllib.parse import urlparse, parse_qs, urlencode from urllib.parse import urlparse, parse_qs, urlencode
@ -326,6 +326,18 @@ class EventFilterAdmin(django_filters.FilterSet):
method="filter_by_representative", method="filter_by_representative",
widget=forms.CheckboxSelectMultiple) 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( import_sources = django_filters.ModelChoiceFilter(
label=_("Imported from"), label=_("Imported from"),
method="filter_by_source", method="filter_by_source",
@ -336,6 +348,32 @@ class EventFilterAdmin(django_filters.FilterSet):
src = RecurrentImport.objects.get(pk=value.pk).source src = RecurrentImport.objects.get(pk=value.pk).source
return queryset.filter(import_sources__contains=[src]) 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): def filter_by_representative(self, queryset, name, value):
if value is None or len(value) != 1: if value is None or len(value) != 1:
return queryset return queryset
@ -343,7 +381,7 @@ class EventFilterAdmin(django_filters.FilterSet):
q = (Q(other_versions__isnull=True) | q = (Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) | Q(other_versions__representative=F('pk')) |
Q(other_versions__representative__isnull=True)) Q(other_versions__representative__isnull=True))
if value[0] == True: if value[0] == 'True':
return queryset.filter(q) return queryset.filter(q)
else: else:
return queryset.exclude(q) return queryset.exclude(q)

View File

@ -2,13 +2,13 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# Jean-Marie Favreau <jeanmarie.favreau@free.fr>, 2023. # Jean-Marie Favreau <jeanmarie.favreau@free.fr>, 2023.
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: agenda_culturel\n" "Project-Id-Version: agenda_culturel\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2023-10-29 14:16+0000\n"
"Last-Translator: Jean-Marie Favreau <jeanmarie.favreau@free.fr>\n" "Last-Translator: Jean-Marie Favreau <jeanmarie.favreau@free.fr>\n"
"Language-Team: 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" msgid "Representative version"
msgstr "Version représentative" 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" msgid "Yes"
msgstr "Oui" 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" msgid "No"
msgstr "Non" msgstr "Non"
#: agenda_culturel/filters.py:330 #: 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" msgid "Imported from"
msgstr "Importé depuis" 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 #: agenda_culturel/models.py:2272
msgid "Status" msgid "Status"
msgstr "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" msgid "Closed"
msgstr "Fermé" msgstr "Fermé"
#: agenda_culturel/filters.py:360 #: agenda_culturel/filters.py:398
msgid "Open" msgid "Open"
msgstr "Ouvert" 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 #: agenda_culturel/models.py:2052
msgid "Spam" msgid "Spam"
msgstr "Spam" msgstr "Spam"
#: agenda_culturel/filters.py:365 #: agenda_culturel/filters.py:403
msgid "Non spam" msgid "Non spam"
msgstr "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" msgid "Type"
msgstr "Type" msgstr "Type"
#: agenda_culturel/filters.py:382 #: agenda_culturel/filters.py:420
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
#: agenda_culturel/filters.py:394 #: agenda_culturel/filters.py:432
msgid "In the past" msgid "In the past"
msgstr "Dans le passé" msgstr "Dans le passé"

View File

@ -620,11 +620,20 @@ header .remarque {
} }
.form.recent, .form.main-filter, .search .form { .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; display: inline-block;
margin-right: 2em; 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 { #search {
form { form {