agendas: compare all WeekTime attributes by default (#72475)
This commit is contained in:
parent
7ef4bffa95
commit
46b70f6d05
|
@ -1113,16 +1113,13 @@ class VirtualMember(models.Model):
|
|||
WEEKDAYS_LIST = sorted(WEEKDAYS.items(), key=lambda x: x[0])
|
||||
|
||||
|
||||
class WeekTime(collections.namedtuple('WeekTime', ['weekday', 'time'])):
|
||||
class WeekTime(collections.namedtuple('WeekTime', ['weekday', 'weekday_indexes', 'date', 'time'])):
|
||||
"""Representation of a time point in a weekday, ex.: Monday at 5 o'clock."""
|
||||
|
||||
def __new__(cls, weekday, weekday_indexes, date, time):
|
||||
if date:
|
||||
weekday = date.weekday()
|
||||
self = super().__new__(cls, weekday, time)
|
||||
self.weekday_indexes = weekday_indexes
|
||||
self.date = date
|
||||
return self
|
||||
return super().__new__(cls, weekday, weekday_indexes, date, time)
|
||||
|
||||
def __repr__(self):
|
||||
return '%s / %s' % (
|
||||
|
@ -1130,6 +1127,9 @@ class WeekTime(collections.namedtuple('WeekTime', ['weekday', 'time'])):
|
|||
date_format(self.time, 'TIME_FORMAT'),
|
||||
)
|
||||
|
||||
def keep_only_weekday_and_time(self):
|
||||
return WeekTime(weekday=self.weekday, time=self.time, date=None, weekday_indexes=None)
|
||||
|
||||
|
||||
WEEK_CHOICES = [
|
||||
(1, _('First of the month')),
|
||||
|
|
|
@ -64,6 +64,11 @@ class IntervalSet:
|
|||
@classmethod
|
||||
def simple(cls, begin, end=Ellipsis):
|
||||
begin, end = cls._begin_or_interval(begin, end)
|
||||
|
||||
if hasattr(begin, 'keep_only_weekday_and_time'):
|
||||
begin = begin.keep_only_weekday_and_time()
|
||||
end = end.keep_only_weekday_and_time()
|
||||
|
||||
return cls.from_ordered([(begin, end)])
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -1117,6 +1117,48 @@ def test_agenda_get_effective_time_periods(db):
|
|||
assert common_timeperiod.end_time == datetime.time(18, 0)
|
||||
|
||||
|
||||
def test_agenda_get_effective_time_periods_with_date(db):
|
||||
agenda = Agenda.objects.create(label='Test Agenda', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda, label='MT1')
|
||||
desk = Desk.objects.create(label='Test Agenda Desk1', agenda=agenda)
|
||||
TimePeriod.objects.create(
|
||||
date=datetime.date(2022, 1, 1),
|
||||
start_time=datetime.time(10, 0),
|
||||
end_time=datetime.time(18, 0),
|
||||
desk=desk,
|
||||
)
|
||||
TimePeriod.objects.create(
|
||||
date=datetime.date(2022, 1, 8),
|
||||
start_time=datetime.time(10, 0),
|
||||
end_time=datetime.time(18, 0),
|
||||
desk=desk,
|
||||
)
|
||||
|
||||
assert len(list(agenda.get_effective_time_periods())) == 2
|
||||
|
||||
|
||||
def test_agenda_get_effective_time_periods_with_weekday_indexes(db):
|
||||
agenda = Agenda.objects.create(label='Test Agenda', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda, label='MT1')
|
||||
desk = Desk.objects.create(label='Test Agenda Desk1', agenda=agenda)
|
||||
TimePeriod.objects.create(
|
||||
weekday=0,
|
||||
weekday_indexes=[1],
|
||||
start_time=datetime.time(10, 0),
|
||||
end_time=datetime.time(18, 0),
|
||||
desk=desk,
|
||||
)
|
||||
TimePeriod.objects.create(
|
||||
weekday=0,
|
||||
weekday_indexes=[2],
|
||||
start_time=datetime.time(10, 0),
|
||||
end_time=datetime.time(18, 0),
|
||||
desk=desk,
|
||||
)
|
||||
|
||||
assert len(list(agenda.get_effective_time_periods())) == 2
|
||||
|
||||
|
||||
def test_exception_read_only():
|
||||
agenda = Agenda.objects.create(label='Agenda', kind='meetings')
|
||||
desk = Desk.objects.create(agenda=agenda, label='Desk')
|
||||
|
|
Loading…
Reference in New Issue