Séparation des vues d’affichage d’événements en calendrier
This commit is contained in:
parent
0c7280f50e
commit
a8b10f3899
@ -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(
|
||||||
|
@ -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 *
|
||||||
|
143
src/agenda_culturel/views/calendar_views.py
Normal file
143
src/agenda_culturel/views/calendar_views.py
Normal 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)
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user