Séparation des vues d’affichage d’événements en calendrier

This commit is contained in:
SebF 2025-04-14 18:14:51 +02:00
parent 0c7280f50e
commit a8b10f3899
4 changed files with 178 additions and 161 deletions

View File

@ -17,6 +17,10 @@ from .sitemaps import (
) )
from .models import Event, Place, Organisation, Category from .models import Event, Place, Organisation, Category
from .views import ( from .views import (
# Calendar
day_view,
month_view,
week_view,
# Categorisation rules # Categorisation rules
CategorisationRuleCreateView, CategorisationRuleCreateView,
CategorisationRuleDeleteView, CategorisationRuleDeleteView,
@ -101,9 +105,6 @@ from .views import (
delete_tag, delete_tag,
TagCreateView, TagCreateView,
# TODO pas encore trié # TODO pas encore trié
week_view,
month_view,
day_view,
upcoming_events, upcoming_events,
recent, recent,
administration, administration,
@ -150,6 +151,34 @@ sitemaps = {
} }
urlpatterns = [ urlpatterns = [
# Calendar
path(
"cat:<cat>/jour/<int:year>/<int:month>/<int:day>/",
day_view,
name="day_view_category",
),
path("cat:<cat>/jour/", day_view, name="day_view_category_when"),
path("cat:<cat>/aujourdhui/", day_view, name="aujourdhui_category"),
path("jour/<int:year>/<int:month>/<int:day>/", day_view, name="day_view"),
path("jour/", day_view, name="day_view_when"),
path("aujourdhui/", day_view, name="aujourdhui"),
path(
"cat:<cat>/mois/<int:year>/<int:month>/",
month_view,
name="month_view_category",
),
path("cat:<cat>/ce-mois-ci", month_view, name="ce_mois_ci_category"),
path("mois/<int:year>/<int:month>/", month_view, name="month_view"),
path("ce-mois-ci", month_view, name="ce_mois_ci"),
path(
"cat:<cat>/semaine/<int:year>/<int:week>/",
week_view,
name="week_view_category",
),
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
path("semaine/<int:year>/<int:week>/", week_view, name="week_view"),
path("cette-semaine/", week_view, name="cette_semaine"),
# Categorisation rules # Categorisation rules
path( path(
"catrules/add", "catrules/add",
@ -407,45 +436,18 @@ urlpatterns = [
path("tags/add", TagCreateView.as_view(), name="add_tag"), path("tags/add", TagCreateView.as_view(), name="add_tag"),
# TODO pas encore trié # TODO pas encore trié
path("cat:<cat>/", home, name="home_category"), path("cat:<cat>/", home, name="home_category"),
path(
"cat:<cat>/semaine/<int:year>/<int:week>/",
week_view,
name="week_view_category",
),
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
path(
"cat:<cat>/mois/<int:year>/<int:month>/",
month_view,
name="month_view_category",
),
path(
"cat:<cat>/jour/<int:year>/<int:month>/<int:day>/",
day_view,
name="day_view_category",
),
path("cat:<cat>/jour/", day_view, name="day_view_category_when"),
path("cat:<cat>/a-venir/", upcoming_events, name="a_venir_category"), path("cat:<cat>/a-venir/", upcoming_events, name="a_venir_category"),
path("cat:<cat>/aujourdhui/", day_view, name="aujourdhui_category"),
path( path(
"cat:<cat>/a-venir/<int:year>/<int:month>/<int:day>/", "cat:<cat>/a-venir/<int:year>/<int:month>/<int:day>/",
upcoming_events, upcoming_events,
name="a_venir_jour_category", name="a_venir_jour_category",
), ),
path("cat:<cat>/cette-semaine/", week_view, name="cette_semaine_category"),
path("cat:<cat>/ce-mois-ci", month_view, name="ce_mois_ci_category"),
path("semaine/<int:year>/<int:week>/", week_view, name="week_view"),
path("mois/<int:year>/<int:month>/", month_view, name="month_view"),
path("jour/<int:year>/<int:month>/<int:day>/", day_view, name="day_view"),
path("jour/", day_view, name="day_view_when"),
path("aujourdhui/", day_view, name="aujourdhui"),
path("a-venir/", upcoming_events, name="a_venir"), path("a-venir/", upcoming_events, name="a_venir"),
path( path(
"a-venir/<int:year>/<int:month>/<int:day>/", "a-venir/<int:year>/<int:month>/<int:day>/",
upcoming_events, upcoming_events,
name="a_venir_jour", name="a_venir_jour",
), ),
path("cette-semaine/", week_view, name="cette_semaine"),
path("ce-mois-ci", month_view, name="ce_mois_ci"),
path("recent/", recent, name="recent"), path("recent/", recent, name="recent"),
path("administration/", administration, name="administration"), path("administration/", administration, name="administration"),
path( path(

View File

@ -1,4 +1,6 @@
from .oldviews import * from .oldviews import *
from .calendar_views import *
from .categorisation_rules_view import * from .categorisation_rules_view import *
from .event_duplicate_views import * from .event_duplicate_views import *
from .errors import * from .errors import *

View File

@ -0,0 +1,143 @@
from datetime import date
from django.http import (
HttpResponseRedirect,
)
from django.shortcuts import render
from django.urls import reverse_lazy
from django.utils.timezone import datetime
from . import upcoming_events
from .utils import get_event_qs
from ..calendar import CalendarMonth, CalendarWeek
from ..filters import EventFilter
from ..models import Category
def day_view(request, year=None, month=None, day=None, cat=None):
if year is None or month is None or day is None:
if "when" in request.POST:
when = datetime.strptime(request.POST["when"], "%Y-%m-%d")
year = when.year
month = when.month
day = when.day
request = EventFilter.set_default_values(request)
qs = get_event_qs(request).select_related("exact_location")
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
return HttpResponseRedirect(
reverse_lazy("day_view", args=[year, month, day])
+ "?"
+ filter.get_url()
)
return upcoming_events(request, year, month, day, 0, cat)
def month_view(request, year=None, month=None, cat=None):
now = date.today()
if year is None and month is None:
day = now.day
else:
day = None
if year is None:
year = now.year
if month is None:
month = now.month
request = EventFilter.set_default_values(request)
qs = get_event_qs(request).only(
"title",
"start_day",
"start_time",
"category",
"other_versions",
"recurrences",
"end_day",
"end_time",
"uuids",
"status",
"tags",
)
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
if filter.has_category_parameters():
return HttpResponseRedirect(filter.get_new_url())
cmonth = CalendarMonth(year, month, filter, day=day)
context = {
"calendar": cmonth,
"this_month": day is not None,
"filter": filter,
"category": category,
"init_date": now if cmonth.today_in_calendar() else cmonth.firstdate,
}
return render(request, "agenda_culturel/page-month.html", context)
def week_view(request, year=None, week=None, home=False, cat=None):
now = date.today()
if year is None:
year = now.isocalendar()[0]
if week is None:
week = now.isocalendar()[1]
request = EventFilter.set_default_values(request)
qs = (
get_event_qs(request)
.select_related("exact_location")
.only(
"title",
"start_day",
"start_time",
"category",
"other_versions",
"recurrences",
"end_day",
"end_time",
"uuids",
"status",
"tags",
"local_image",
"image",
"image_alt",
"exact_location",
"description",
)
)
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
if filter.has_category_parameters():
return HttpResponseRedirect(filter.get_new_url())
cweek = CalendarWeek(year, week, filter)
context = {
"year": year,
"week": week,
"calendar": cweek,
"filter": filter,
"category": category,
"init_date": now if cweek.today_in_calendar() else cweek.firstdate,
}
if home:
context["home"] = 1
return render(request, "agenda_culturel/page-week.html", context)

View File

@ -21,7 +21,6 @@ from django.shortcuts import get_object_or_404, render
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from django.utils.html import escape from django.utils.html import escape
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.timezone import datetime
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView from django.views.generic import DetailView
from django.views.generic.edit import ( from django.views.generic.edit import (
@ -32,7 +31,7 @@ from django.views.generic.edit import (
) )
from .utils import get_event_qs from .utils import get_event_qs
from ..calendar import CalendarList, CalendarMonth, CalendarWeek from ..calendar import CalendarList
from ..celery import ( from ..celery import (
import_events_from_url, import_events_from_url,
import_events_from_urls, import_events_from_urls,
@ -131,135 +130,6 @@ to_be_translated = [
] ]
def month_view(request, year=None, month=None, cat=None):
now = date.today()
if year is None and month is None:
day = now.day
else:
day = None
if year is None:
year = now.year
if month is None:
month = now.month
request = EventFilter.set_default_values(request)
qs = get_event_qs(request).only(
"title",
"start_day",
"start_time",
"category",
"other_versions",
"recurrences",
"end_day",
"end_time",
"uuids",
"status",
"tags",
)
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
if filter.has_category_parameters():
return HttpResponseRedirect(filter.get_new_url())
cmonth = CalendarMonth(year, month, filter, day=day)
context = {
"calendar": cmonth,
"this_month": day is not None,
"filter": filter,
"category": category,
"init_date": now if cmonth.today_in_calendar() else cmonth.firstdate,
}
return render(request, "agenda_culturel/page-month.html", context)
def week_view(request, year=None, week=None, home=False, cat=None):
now = date.today()
if year is None:
year = now.isocalendar()[0]
if week is None:
week = now.isocalendar()[1]
request = EventFilter.set_default_values(request)
qs = (
get_event_qs(request)
.select_related("exact_location")
.only(
"title",
"start_day",
"start_time",
"category",
"other_versions",
"recurrences",
"end_day",
"end_time",
"uuids",
"status",
"tags",
"local_image",
"image",
"image_alt",
"exact_location",
"description",
)
)
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
if filter.has_category_parameters():
return HttpResponseRedirect(filter.get_new_url())
cweek = CalendarWeek(year, week, filter)
context = {
"year": year,
"week": week,
"calendar": cweek,
"filter": filter,
"category": category,
"init_date": now if cweek.today_in_calendar() else cweek.firstdate,
}
if home:
context["home"] = 1
return render(request, "agenda_culturel/page-week.html", context)
def day_view(request, year=None, month=None, day=None, cat=None):
if year is None or month is None or day is None:
if "when" in request.POST:
when = datetime.strptime(request.POST["when"], "%Y-%m-%d")
year = when.year
month = when.month
day = when.day
request = EventFilter.set_default_values(request)
qs = get_event_qs(request).select_related("exact_location")
if cat is not None:
category = Category.objects.filter(slug=cat).first()
qs = qs.filter(category=category)
else:
category = None
filter = EventFilter(request.GET, qs, request=request)
return HttpResponseRedirect(
reverse_lazy("day_view", args=[year, month, day])
+ "?"
+ filter.get_url()
)
return upcoming_events(request, year, month, day, 0, cat)
def upcoming_events(request, year=None, month=None, day=None, neighsize=1, cat=None): def upcoming_events(request, year=None, month=None, day=None, neighsize=1, cat=None):
now = date.today() now = date.today()
if year is None: if year is None: