0002-agendas-move-desk-settings-exceptions-import-to-view.patch
chrono/agendas/models.py | ||
---|---|---|
1132 | 1132 |
ordering = ['label'] |
1133 | 1133 |
unique_together = ['agenda', 'slug'] |
1134 | 1134 | |
1135 |
def save(self, *args, import_exceptions=True, **kwargs):
|
|
1135 |
def save(self, *args, **kwargs): |
|
1136 | 1136 |
assert self.agenda.kind != 'virtual', "a desk can't reference a virtual agenda" |
1137 |
first_created = not self.pk |
|
1138 | 1137 |
if not self.slug: |
1139 | 1138 |
self.slug = generate_slug(self, agenda=self.agenda) |
1140 | 1139 |
super(Desk, self).save(*args, **kwargs) |
1141 |
if first_created and import_exceptions: |
|
1142 |
self.import_timeperiod_exceptions_from_settings(enable=True) |
|
1143 | 1140 | |
1144 | 1141 |
@property |
1145 | 1142 |
def base_slug(self): |
... | ... | |
1179 | 1176 |
if agenda_target: |
1180 | 1177 |
new_desk.agenda = agenda_target |
1181 | 1178 |
# store new desk |
1182 |
new_desk.save(import_exceptions=False)
|
|
1179 |
new_desk.save() |
|
1183 | 1180 | |
1184 | 1181 |
# clone related objects |
1185 | 1182 |
for time_period in self.timeperiod_set.all(): |
chrono/manager/views.py | ||
---|---|---|
582 | 582 |
if self.object.kind == 'meetings': |
583 | 583 |
default_desk = Desk(agenda=self.object, label=_('Desk 1')) |
584 | 584 |
default_desk.save() |
585 |
default_desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
585 | 586 |
return model_form |
586 | 587 | |
587 | 588 |
def get_success_url(self): |
... | ... | |
1797 | 1798 |
model = Desk |
1798 | 1799 |
form_class = NewDeskForm |
1799 | 1800 | |
1801 |
def form_valid(self, form): |
|
1802 |
self.object = form.save() |
|
1803 |
self.object.import_timeperiod_exceptions_from_settings(enable=True) |
|
1804 |
return HttpResponseRedirect(self.get_success_url()) |
|
1805 | ||
1800 | 1806 | |
1801 | 1807 |
agenda_add_desk = AgendaAddDesk.as_view() |
1802 | 1808 |
tests/test_agendas.py | ||
---|---|---|
525 | 525 |
agenda.save() |
526 | 526 |
desk = Desk(label='Test 1 desk', agenda=agenda) |
527 | 527 |
desk.save() |
528 |
desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
528 | 529 | |
529 |
# first save automatically load exceptions |
|
530 | 530 |
source = TimePeriodExceptionSource.objects.get(desk=desk) |
531 | 531 |
assert source.settings_slug == 'holidays' |
532 | 532 |
assert source.enabled |
... | ... | |
555 | 555 |
} |
556 | 556 |
agenda = Agenda(label=u'Test 1 agenda') |
557 | 557 |
agenda.save() |
558 | ||
558 | 559 |
desk1 = Desk(label='Test 1 desk', agenda=agenda) |
559 | 560 |
desk1.save() |
561 |
assert not TimePeriodExceptionSource.objects.filter(desk=desk1).exists() |
|
562 | ||
560 | 563 |
with override_settings(**setting): |
561 | 564 |
desk2 = Desk(label='Test 2 desk', agenda=agenda) |
562 | 565 |
desk2.save() |
566 |
desk2.import_timeperiod_exceptions_from_settings(enable=True) |
|
563 | 567 |
desk3 = Desk(label='Test 3 desk', agenda=agenda) |
564 | 568 |
desk3.save() |
565 |
source3 = TimePeriodExceptionSource.objects.get(desk=desk3) |
|
566 |
source3.disable() |
|
567 | ||
569 |
desk3.import_timeperiod_exceptions_from_settings(enable=False) |
|
568 | 570 |
call_command('sync_desks_timeperiod_exceptions_from_settings') |
569 | 571 |
assert not TimePeriodExceptionSource.objects.get(desk=desk1).enabled |
570 | 572 |
source2 = TimePeriodExceptionSource.objects.get(desk=desk2) |
571 | 573 |
assert source2.enabled |
572 |
source3.refresh_from_db()
|
|
574 |
source3 = TimePeriodExceptionSource.objects.get(desk=desk3)
|
|
573 | 575 |
assert not source3.enabled |
574 | 576 | |
575 | 577 |
exceptions_count = source2.timeperiodexception_set.count() |
... | ... | |
997 | 999 |
def test_desk_duplicate_exception_source_from_settings(): |
998 | 1000 |
agenda = Agenda.objects.create(label='Agenda') |
999 | 1001 |
desk = Desk.objects.create(label='Desk', agenda=agenda) |
1002 |
desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
1000 | 1003 | |
1001 | 1004 |
source = desk.timeperiodexceptionsource_set.get(settings_slug='holidays') |
1002 | 1005 |
assert source.enabled |
tests/test_manager.py | ||
---|---|---|
872 | 872 |
assert agenda.maximal_booking_delay == 56 |
873 | 873 | |
874 | 874 | |
875 |
@override_settings( |
|
876 |
EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},} |
|
877 |
) |
|
878 |
def test_add_agenda_exceptions_from_settings(app, admin_user): |
|
879 |
app = login(app) |
|
880 |
resp = app.get('/manage/', status=200) |
|
881 |
resp = resp.click('New') |
|
882 |
resp.form['label'] = 'Foo bar' |
|
883 |
resp.form['kind'] = 'meetings' |
|
884 |
resp = resp.form.submit().follow() |
|
885 | ||
886 |
agenda = Agenda.objects.get(label='Foo bar') |
|
887 |
assert agenda.desk_set.count() == 1 |
|
888 | ||
889 |
default_desk = agenda.desk_set.first() |
|
890 |
assert default_desk.timeperiodexception_set.exists() |
|
891 |
assert default_desk.timeperiodexceptionsource_set.count() == 1 |
|
892 | ||
893 |
source = default_desk.timeperiodexceptionsource_set.first() |
|
894 |
assert source.enabled |
|
895 | ||
896 |
resp = resp.click('New Desk') |
|
897 |
resp.form['label'] = 'Desk A' |
|
898 |
resp = resp.form.submit().follow() |
|
899 | ||
900 |
desk = Desk.objects.get(slug='desk-a') |
|
901 |
assert desk.timeperiodexception_set.exists() |
|
902 |
assert desk.timeperiodexceptionsource_set.count() == 1 |
|
903 | ||
904 |
source = desk.timeperiodexceptionsource_set.first() |
|
905 |
assert source.enabled |
|
906 | ||
907 | ||
875 | 908 |
def test_add_agenda_as_manager(app, manager_user): |
876 | 909 |
# open /manage/ access to manager_user, and check agenda creation is not |
877 | 910 |
# allowed. |
... | ... | |
2676 | 2709 |
def test_meetings_agenda_time_period_exception_source_from_settings(app, admin_user): |
2677 | 2710 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
2678 | 2711 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
2712 |
desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
2679 | 2713 |
MeetingType(agenda=agenda, label='Blah').save() |
2680 | 2714 |
TimePeriod.objects.create( |
2681 | 2715 |
weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0) |
... | ... | |
2725 | 2759 |
@override_settings( |
2726 | 2760 |
EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},} |
2727 | 2761 |
) |
2728 |
def test_meetings_agenda_time_period_exception_source_external(app, admin_user, freezer):
|
|
2762 |
def test_meetings_agenda_time_period_exception_source_from_settings(app, admin_user, freezer):
|
|
2729 | 2763 |
freezer.move_to('2020-01-01') |
2730 | 2764 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
2731 | 2765 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
2766 |
desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
2732 | 2767 |
MeetingType(agenda=agenda, label='Blah').save() |
2733 | 2768 |
TimePeriod.objects.create( |
2734 | 2769 |
weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0) |
2735 |
- |