0001-agendas-read_only-property-for-exception-source-5067.patch
chrono/agendas/models.py | ||
---|---|---|
550 | 550 |
).values('pk') |
551 | 551 |
all_desks_exceptions = TimePeriodException.objects.filter( |
552 | 552 |
Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__in=unavailability_calendar_ids) |
553 |
).select_related('source')
|
|
553 |
) |
|
554 | 554 |
for desk in self.prefetched_desks: |
555 | 555 |
uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()] |
556 | 556 |
desk.prefetched_exceptions = [ |
... | ... | |
1687 | 1687 | |
1688 | 1688 |
@property |
1689 | 1689 |
def read_only(self): |
1690 |
return self.source and self.source.settings_slug or self.unavailability_calendar_id |
|
1690 |
if self.source_id: |
|
1691 |
return True |
|
1692 |
if self.unavailability_calendar_id: |
|
1693 |
return True |
|
1694 |
return False |
|
1691 | 1695 | |
1692 | 1696 |
class Meta: |
1693 | 1697 |
ordering = ['start_datetime'] |
chrono/manager/views.py | ||
---|---|---|
2063 | 2063 |
def get_queryset(self): |
2064 | 2064 |
return self.model.objects.filter( |
2065 | 2065 |
Q(desk=self.desk) | Q(unavailability_calendar__desks=self.desk), end_datetime__gte=now() |
2066 |
).select_related('source')
|
|
2066 |
) |
|
2067 | 2067 | |
2068 | 2068 |
def get_context_data(self, **kwargs): |
2069 | 2069 |
context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs) |
tests/test_agendas.py | ||
---|---|---|
872 | 872 |
assert common_timeperiod.end_time == datetime.time(18, 0) |
873 | 873 | |
874 | 874 | |
875 |
def test_exception_read_only(): |
|
876 |
agenda = Agenda.objects.create(label='Agenda', kind='meetings') |
|
877 |
desk = Desk.objects.create(agenda=agenda, label='Desk') |
|
878 |
unavailability_calendar = UnavailabilityCalendar.objects.create(label='Calendar') |
|
879 | ||
880 |
source1 = TimePeriodExceptionSource.objects.create(desk=desk, ics_url='http://example.com/sample.ics') |
|
881 |
source2 = TimePeriodExceptionSource.objects.create( |
|
882 |
desk=desk, |
|
883 |
ics_filename='sample.ics', |
|
884 |
ics_file=ContentFile(ICS_SAMPLE_WITH_DURATION, name='sample.ics'), |
|
885 |
) |
|
886 |
source3 = TimePeriodExceptionSource.objects.create( |
|
887 |
desk=desk, settings_slug='slug', settings_label='Foo Bar', enabled=True |
|
888 |
) |
|
889 | ||
890 |
exception = TimePeriodException.objects.create( |
|
891 |
desk=desk, |
|
892 |
start_datetime=now() - datetime.timedelta(days=2), |
|
893 |
end_datetime=now() - datetime.timedelta(days=1), |
|
894 |
) |
|
895 |
assert exception.read_only is False |
|
896 | ||
897 |
for source in [source1, source2, source3]: |
|
898 |
exception.source = source |
|
899 |
exception.save() |
|
900 |
assert exception.read_only is True |
|
901 | ||
902 |
exception.source = None |
|
903 |
exception.desk = None |
|
904 |
exception.unavailability_calendar = unavailability_calendar |
|
905 |
exception.save() |
|
906 |
assert exception.read_only is True |
|
907 | ||
908 | ||
875 | 909 |
def test_desk_exceptions_within_two_weeks(): |
876 | 910 |
def set_prefetched_exceptions(desk): |
877 | 911 |
desk.prefetched_exceptions = TimePeriodException.objects.filter( |
878 |
- |