0001-manager-add-exception-on-all-desks-42411.patch
chrono/manager/forms.py | ||
---|---|---|
280 | 280 | |
281 | 281 | |
282 | 282 |
class TimePeriodExceptionForm(forms.ModelForm): |
283 |
all_desks = forms.BooleanField(label=_('Apply exception on all desks of the agenda'), required=False) |
|
284 | ||
283 | 285 |
class Meta: |
284 | 286 |
model = TimePeriodException |
285 | 287 |
fields = ['desk', 'start_datetime', 'end_datetime', 'label'] |
... | ... | |
291 | 293 |
'end_datetime': SplitDateTimeField, |
292 | 294 |
} |
293 | 295 | |
296 |
def __init__(self, *args, **kwargs): |
|
297 |
super().__init__(*args, **kwargs) |
|
298 |
if self.instance.pk is not None: |
|
299 |
del self.fields['all_desks'] |
|
300 |
elif 'desk' in self.initial and self.initial['desk'].agenda.desk_set.count() == 1: |
|
301 |
del self.fields['all_desks'] |
|
302 | ||
294 | 303 |
def clean(self): |
295 | 304 |
cleaned_data = super().clean() |
296 | 305 |
chrono/manager/views.py | ||
---|---|---|
1741 | 1741 | |
1742 | 1742 |
def form_valid(self, form): |
1743 | 1743 |
result = super().form_valid(form) |
1744 |
if self.object.has_booking_within_time_slot(): |
|
1745 |
message = _('Exception added. Note: one or several bookings exists within this time slot.') |
|
1746 |
messages.info(self.request, message) |
|
1744 |
exceptions = [self.object] |
|
1745 |
if form.cleaned_data.get('all_desks'): |
|
1746 |
for desk in Desk.objects.filter(agenda=self.object.desk.agenda_id): |
|
1747 |
if desk == self.object.desk: |
|
1748 |
continue |
|
1749 |
exceptions.append( |
|
1750 |
TimePeriodException.objects.create( |
|
1751 |
desk=desk, |
|
1752 |
label=self.object.label, |
|
1753 |
start_datetime=self.object.start_datetime, |
|
1754 |
end_datetime=self.object.end_datetime, |
|
1755 |
) |
|
1756 |
) |
|
1757 |
for exception in exceptions: |
|
1758 |
if exception.has_booking_within_time_slot(): |
|
1759 |
message = ungettext( |
|
1760 |
'Exception added. Note: one or several bookings exists within this time slot.', |
|
1761 |
'Exceptions added. Note: one or several bookings exists within this time slot.', |
|
1762 |
len(exceptions), |
|
1763 |
) |
|
1764 |
messages.info(self.request, message) |
|
1765 |
break |
|
1747 | 1766 |
return result |
1748 | 1767 | |
1749 | 1768 |
tests/test_manager.py | ||
---|---|---|
1933 | 1933 |
assert 'Exception 1' in resp.text |
1934 | 1934 |
assert 'Exception 2' in resp.text |
1935 | 1935 | |
1936 |
# add global time exception |
|
1937 |
# only one desk: no option to apply to all desks |
|
1938 |
resp = app.get('/manage/agendas/%s/desk/%s/add-time-period-exception' % (agenda.pk, desk.pk)) |
|
1939 |
assert 'all_desks' not in resp.context['form'].fields |
|
1940 |
# more than one desk |
|
1941 |
agenda2 = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1942 |
Desk.objects.create(agenda=agenda2, label='Other Desk') # check exception is not created for this one |
|
1943 |
desk2 = Desk.objects.create(agenda=agenda, label='Desk B') |
|
1944 |
event = Event.objects.create( |
|
1945 |
agenda=agenda, places=1, desk=desk2, start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 30)) |
|
1946 |
) |
|
1947 |
Booking.objects.create(event=event) |
|
1948 |
resp = app.get('/manage/agendas/%s/desk/%s/add-time-period-exception' % (agenda.pk, desk.pk)) |
|
1949 |
future = tomorrow + datetime.timedelta(days=35) |
|
1950 |
resp.form['label'] = 'Exception 3' |
|
1951 |
resp.form['start_datetime_0'] = '2017-05-22' |
|
1952 |
resp.form['start_datetime_1'] = '08:00' |
|
1953 |
resp.form['end_datetime_0'] = '2017-05-26' |
|
1954 |
resp.form['end_datetime_1'] = '17:30' |
|
1955 |
resp.form['all_desks'] = True |
|
1956 |
resp = resp.form.submit().follow() |
|
1957 |
assert TimePeriodException.objects.count() == 4 |
|
1958 |
assert 'Exceptions added. Note: one or several bookings exists within this time slot.' in resp.text |
|
1959 | ||
1960 |
exception = TimePeriodException.objects.first() |
|
1961 |
resp = app.get('/manage/time-period-exceptions/%s/edit' % exception.pk) |
|
1962 |
assert 'all_desks' not in resp.context['form'].fields |
|
1963 | ||
1936 | 1964 | |
1937 | 1965 |
def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admin_user): |
1938 | 1966 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
1939 |
- |