agendas: read_only property for exception & source (#50672)
This commit is contained in:
parent
72d0d0ea0e
commit
61c88e2246
|
@ -550,7 +550,7 @@ class Agenda(models.Model):
|
|||
).values('pk')
|
||||
all_desks_exceptions = TimePeriodException.objects.filter(
|
||||
Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__in=unavailability_calendar_ids)
|
||||
).select_related('source')
|
||||
)
|
||||
for desk in self.prefetched_desks:
|
||||
uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()]
|
||||
desk.prefetched_exceptions = [
|
||||
|
@ -1687,7 +1687,11 @@ class TimePeriodException(models.Model):
|
|||
|
||||
@property
|
||||
def read_only(self):
|
||||
return self.source and self.source.settings_slug or self.unavailability_calendar_id
|
||||
if self.source_id:
|
||||
return True
|
||||
if self.unavailability_calendar_id:
|
||||
return True
|
||||
return False
|
||||
|
||||
class Meta:
|
||||
ordering = ['start_datetime']
|
||||
|
|
|
@ -2063,7 +2063,7 @@ class TimePeriodExceptionListView(ManagedDeskMixin, ListView):
|
|||
def get_queryset(self):
|
||||
return self.model.objects.filter(
|
||||
Q(desk=self.desk) | Q(unavailability_calendar__desks=self.desk), end_datetime__gte=now()
|
||||
).select_related('source')
|
||||
)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
|
||||
|
|
|
@ -872,6 +872,40 @@ def test_agenda_get_effective_time_periods(db):
|
|||
assert common_timeperiod.end_time == datetime.time(18, 0)
|
||||
|
||||
|
||||
def test_exception_read_only():
|
||||
agenda = Agenda.objects.create(label='Agenda', kind='meetings')
|
||||
desk = Desk.objects.create(agenda=agenda, label='Desk')
|
||||
unavailability_calendar = UnavailabilityCalendar.objects.create(label='Calendar')
|
||||
|
||||
source1 = TimePeriodExceptionSource.objects.create(desk=desk, ics_url='http://example.com/sample.ics')
|
||||
source2 = TimePeriodExceptionSource.objects.create(
|
||||
desk=desk,
|
||||
ics_filename='sample.ics',
|
||||
ics_file=ContentFile(ICS_SAMPLE_WITH_DURATION, name='sample.ics'),
|
||||
)
|
||||
source3 = TimePeriodExceptionSource.objects.create(
|
||||
desk=desk, settings_slug='slug', settings_label='Foo Bar', enabled=True
|
||||
)
|
||||
|
||||
exception = TimePeriodException.objects.create(
|
||||
desk=desk,
|
||||
start_datetime=now() - datetime.timedelta(days=2),
|
||||
end_datetime=now() - datetime.timedelta(days=1),
|
||||
)
|
||||
assert exception.read_only is False
|
||||
|
||||
for source in [source1, source2, source3]:
|
||||
exception.source = source
|
||||
exception.save()
|
||||
assert exception.read_only is True
|
||||
|
||||
exception.source = None
|
||||
exception.desk = None
|
||||
exception.unavailability_calendar = unavailability_calendar
|
||||
exception.save()
|
||||
assert exception.read_only is True
|
||||
|
||||
|
||||
def test_desk_exceptions_within_two_weeks():
|
||||
def set_prefetched_exceptions(desk):
|
||||
desk.prefetched_exceptions = TimePeriodException.objects.filter(
|
||||
|
|
Loading…
Reference in New Issue