0002-agendas-prevent-cascade-deletion-of-custody-holiday-.patch
chrono/agendas/migrations/0133_auto_20220628_1600.py | ||
---|---|---|
1 |
# Generated by Django 2.2.26 on 2022-06-28 14:00 |
|
2 | ||
3 |
import django.db.models.deletion |
|
4 |
from django.db import migrations, models |
|
5 | ||
6 | ||
7 |
class Migration(migrations.Migration): |
|
8 | ||
9 |
dependencies = [ |
|
10 |
('agendas', '0132_sharedcustodysettings_holidays_calendar'), |
|
11 |
] |
|
12 | ||
13 |
operations = [ |
|
14 |
migrations.AlterField( |
|
15 |
model_name='sharedcustodyholidayrule', |
|
16 |
name='holiday', |
|
17 |
field=models.ForeignKey( |
|
18 |
on_delete=django.db.models.deletion.PROTECT, |
|
19 |
to='agendas.TimePeriodExceptionGroup', |
|
20 |
verbose_name='Holiday', |
|
21 |
), |
|
22 |
), |
|
23 |
] |
chrono/agendas/models.py | ||
---|---|---|
3369 | 3369 |
] |
3370 | 3370 | |
3371 | 3371 |
agenda = models.ForeignKey(SharedCustodyAgenda, on_delete=models.CASCADE, related_name='holiday_rules') |
3372 |
holiday = models.ForeignKey(TimePeriodExceptionGroup, verbose_name=_('Holiday'), on_delete=models.CASCADE)
|
|
3372 |
holiday = models.ForeignKey(TimePeriodExceptionGroup, verbose_name=_('Holiday'), on_delete=models.PROTECT)
|
|
3373 | 3373 |
years = models.CharField(_('Years'), choices=YEAR_CHOICES, blank=True, max_length=16) |
3374 | 3374 |
periodicity = models.CharField(_('Periodicity'), choices=PERIODICITY_CHOICES, blank=True, max_length=32) |
3375 | 3375 |
guardian = models.ForeignKey(Person, verbose_name=_('Guardian'), on_delete=models.CASCADE) |
chrono/manager/views.py | ||
---|---|---|
31 | 31 |
from django.core.exceptions import PermissionDenied |
32 | 32 |
from django.db import IntegrityError, transaction |
33 | 33 |
from django.db.models import BooleanField, Count, Max, Min, Q, Value |
34 |
from django.db.models.deletion import ProtectedError |
|
34 | 35 |
from django.http import Http404, HttpResponse, HttpResponseForbidden, HttpResponseRedirect |
35 | 36 |
from django.shortcuts import get_object_or_404, redirect, render |
36 | 37 |
from django.template.defaultfilters import title |
... | ... | |
3561 | 3562 |
def get_success_url(self): |
3562 | 3563 |
return reverse('chrono-manager-unavailability-calendar-list') |
3563 | 3564 | |
3565 |
def delete(self, request, *args, **kwargs): |
|
3566 |
try: |
|
3567 |
return super().delete(request, *args, **kwargs) |
|
3568 |
except ProtectedError: |
|
3569 |
messages.warning( |
|
3570 |
request, _('This calendar cannot be deleted because it is used by shared custody agendas.') |
|
3571 |
) |
|
3572 |
return HttpResponseRedirect(self.get_object().get_absolute_url()) |
|
3573 | ||
3564 | 3574 | |
3565 | 3575 |
unavailability_calendar_delete = UnavailabilityCalendarDeleteView.as_view() |
3566 | 3576 |
tests/manager/test_shared_custody_agenda.py | ||
---|---|---|
290 | 290 |
resp = app.get('/manage/shared-custody/%s/2022/12/' % agenda.pk) |
291 | 291 |
assert 'John Doe (Vacances de Noël)' in resp.text |
292 | 292 | |
293 |
# calendar cannot be deleted |
|
294 |
resp = app.get('/manage/unavailability-calendar/%s/settings' % unavailability_calendar.pk) |
|
295 |
resp = resp.click('Delete') |
|
296 |
resp = resp.form.submit().follow() |
|
297 |
assert 'This calendar cannot be deleted because it is used by shared custody agendas.' in resp.text |
|
298 | ||
293 | 299 | |
294 | 300 |
def test_shared_custody_settings_feature_flag(app, admin_user, settings): |
295 | 301 |
settings.SHARED_CUSTODY_ENABLED = False |
296 |
- |