On affiche le nombre d'événements aux mêmes dates

This commit is contained in:
Jean-Marie Favreau 2023-12-29 17:21:44 +01:00
parent 36a1815a4e
commit e05f4d4869
3 changed files with 26 additions and 8 deletions

View File

@ -54,16 +54,20 @@ class CalendarDay:
class CalendarList: class CalendarList:
def __init__(self, firstdate, lastdate, filter): def __init__(self, firstdate, lastdate, filter=None, exact=False):
self.firstdate = firstdate self.firstdate = firstdate
self.lastdate = lastdate self.lastdate = lastdate
self.now = date.today() self.now = date.today()
self.filter = filter self.filter = filter
# start the first day of the first week if exact:
self.c_firstdate = firstdate + timedelta(days=-firstdate.weekday()) self.c_firstdate = self.firstdate
# end the last day of the last week self.c_lastdate = self.lastdate
self.c_lastdate = lastdate + timedelta(days=6-lastdate.weekday()) else:
# start the first day of the first week
self.c_firstdate = firstdate + timedelta(days=-firstdate.weekday())
# end the last day of the last week
self.c_lastdate = lastdate + timedelta(days=6-lastdate.weekday())
# create a list of CalendarDays # create a list of CalendarDays
@ -85,7 +89,8 @@ class CalendarList:
def fill_calendar_days(self): def fill_calendar_days(self):
if self.filter is None: if self.filter is None:
qs = Event.objects() from .models import Event
qs = Event.objects.all()
else: else:
qs = self.filter.qs qs = self.filter.qs
self.events = qs.filter( self.events = qs.filter(

View File

@ -16,6 +16,7 @@ from django.db.models import Q
from django.template.defaultfilters import date as _date from django.template.defaultfilters import date as _date
from datetime import datetime, time, timedelta from datetime import datetime, time, timedelta
from .calendar import CalendarList
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -178,6 +179,14 @@ class Event(models.Model):
last = self.get_consolidated_end_day() last = self.get_consolidated_end_day()
return [first + timedelta(n) for n in range(int((last - first).days) + 1)] return [first + timedelta(n) for n in range(int((last - first).days) + 1)]
def get_nb_events_same_dates(self):
first = self.start_day
last = self.get_consolidated_end_day()
calendar = CalendarList(first, last, exact=True)
return [(len(d.events), d.date) for dstr, d in calendar.calendar_days.items()]
def is_single_day(self, intuitive=True): def is_single_day(self, intuitive=True):
return self.start_day == self.get_consolidated_end_day(intuitive) return self.start_day == self.get_consolidated_end_day(intuitive)

View File

@ -19,13 +19,17 @@
<!-- TODO: en même temps --> <!-- TODO: en même temps -->
<article> <article>
<head> <head>
{% if event.is_single_day %}
<h2>À la même date</h2> <h2>À la même date</h2>
{% else %}
<h2>Aux mêmes dates</h2>
{% endif %}
</head> </head>
<nav> <nav>
<ul> <ul>
{% for d in event.get_dates %} {% for nbevents_date in event.get_nb_events_same_dates %}
<li> <li>
<a href="{% url 'day_view' d.year d.month d.day %}">{{ d }}</a> <a href="{% url 'day_view' nbevents_date.1.year nbevents_date.1.month nbevents_date.1.day %}">{{ nbevents_date.0 }} événement{{ nbevents_date.0 | pluralize }} le {{ nbevents_date.1 }}</a>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>