From a8b10f38995275d9f02485d47f02736d86f4a56e Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 14 Apr 2025 18:14:51 +0200 Subject: [PATCH] =?UTF-8?q?S=C3=A9paration=20des=20vues=20d=E2=80=99affich?= =?UTF-8?q?age=20d=E2=80=99=C3=A9v=C3=A9nements=20en=20calendrier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agenda_culturel/urls.py | 62 +++++---- src/agenda_culturel/views/__init__.py | 2 + src/agenda_culturel/views/calendar_views.py | 143 ++++++++++++++++++++ src/agenda_culturel/views/oldviews.py | 132 +----------------- 4 files changed, 178 insertions(+), 161 deletions(-) create mode 100644 src/agenda_culturel/views/calendar_views.py diff --git a/src/agenda_culturel/urls.py b/src/agenda_culturel/urls.py index 3ea4e02..d498780 100644 --- a/src/agenda_culturel/urls.py +++ b/src/agenda_culturel/urls.py @@ -17,6 +17,10 @@ from .sitemaps import ( ) from .models import Event, Place, Organisation, Category from .views import ( + # Calendar + day_view, + month_view, + week_view, # Categorisation rules CategorisationRuleCreateView, CategorisationRuleDeleteView, @@ -101,9 +105,6 @@ from .views import ( delete_tag, TagCreateView, # TODO pas encore triƩ - week_view, - month_view, - day_view, upcoming_events, recent, administration, @@ -150,6 +151,34 @@ sitemaps = { } urlpatterns = [ + # Calendar + path( + "cat:/jour////", + day_view, + name="day_view_category", + ), + path("cat:/jour/", day_view, name="day_view_category_when"), + path("cat:/aujourdhui/", day_view, name="aujourdhui_category"), + path("jour////", day_view, name="day_view"), + path("jour/", day_view, name="day_view_when"), + path("aujourdhui/", day_view, name="aujourdhui"), + path( + "cat:/mois///", + month_view, + name="month_view_category", + ), + path("cat:/ce-mois-ci", month_view, name="ce_mois_ci_category"), + path("mois///", month_view, name="month_view"), + path("ce-mois-ci", month_view, name="ce_mois_ci"), + path( + "cat:/semaine///", + week_view, + name="week_view_category", + ), + path("cat:/cette-semaine/", week_view, name="cette_semaine_category"), + path("cat:/cette-semaine/", week_view, name="cette_semaine_category"), + path("semaine///", week_view, name="week_view"), + path("cette-semaine/", week_view, name="cette_semaine"), # Categorisation rules path( "catrules/add", @@ -407,45 +436,18 @@ urlpatterns = [ path("tags/add", TagCreateView.as_view(), name="add_tag"), # TODO pas encore triƩ path("cat:/", home, name="home_category"), - path( - "cat:/semaine///", - week_view, - name="week_view_category", - ), - path("cat:/cette-semaine/", week_view, name="cette_semaine_category"), - path( - "cat:/mois///", - month_view, - name="month_view_category", - ), - path( - "cat:/jour////", - day_view, - name="day_view_category", - ), - path("cat:/jour/", day_view, name="day_view_category_when"), path("cat:/a-venir/", upcoming_events, name="a_venir_category"), - path("cat:/aujourdhui/", day_view, name="aujourdhui_category"), path( "cat:/a-venir////", upcoming_events, name="a_venir_jour_category", ), - path("cat:/cette-semaine/", week_view, name="cette_semaine_category"), - path("cat:/ce-mois-ci", month_view, name="ce_mois_ci_category"), - path("semaine///", week_view, name="week_view"), - path("mois///", month_view, name="month_view"), - path("jour////", 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_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("administration/", administration, name="administration"), path( diff --git a/src/agenda_culturel/views/__init__.py b/src/agenda_culturel/views/__init__.py index 9c383f5..1fbeca5 100644 --- a/src/agenda_culturel/views/__init__.py +++ b/src/agenda_culturel/views/__init__.py @@ -1,4 +1,6 @@ from .oldviews import * + +from .calendar_views import * from .categorisation_rules_view import * from .event_duplicate_views import * from .errors import * diff --git a/src/agenda_culturel/views/calendar_views.py b/src/agenda_culturel/views/calendar_views.py new file mode 100644 index 0000000..3943a31 --- /dev/null +++ b/src/agenda_culturel/views/calendar_views.py @@ -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) diff --git a/src/agenda_culturel/views/oldviews.py b/src/agenda_culturel/views/oldviews.py index 774fdf4..321c5f9 100644 --- a/src/agenda_culturel/views/oldviews.py +++ b/src/agenda_culturel/views/oldviews.py @@ -21,7 +21,6 @@ from django.shortcuts import get_object_or_404, render from django.urls import reverse, reverse_lazy from django.utils.html import escape from django.utils.safestring import mark_safe -from django.utils.timezone import datetime from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView from django.views.generic.edit import ( @@ -32,7 +31,7 @@ from django.views.generic.edit import ( ) from .utils import get_event_qs -from ..calendar import CalendarList, CalendarMonth, CalendarWeek +from ..calendar import CalendarList from ..celery import ( import_events_from_url, 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): now = date.today() if year is None: