mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Subevents: set inactive if non-batch deletion of subevent fails (Z#23204183) (#5374)
* Subevents: Extend fallback for undeletable dates for single deletion (Z#23204183) * Fix useless writes * Update src/pretix/control/views/subevents.py Co-authored-by: Richard Schreiber <schreiber@rami.io> * Update src/pretix/control/views/subevents.py Co-authored-by: Richard Schreiber <schreiber@rami.io> * Fix flow --------- Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
@@ -174,21 +174,38 @@ class SubEventDelete(EventPermissionRequiredMixin, CompatDeleteView):
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
return super().get(request, *args, **kwargs)
|
||||
|
||||
@transaction.atomic
|
||||
def delete(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
success_url = self.get_success_url()
|
||||
|
||||
if not self.object.allow_delete():
|
||||
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
||||
'placed.'))
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
try:
|
||||
with transaction.atomic():
|
||||
if not self.object.allow_delete():
|
||||
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
||||
'placed.'))
|
||||
return HttpResponseRedirect(success_url)
|
||||
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
||||
CartPosition.objects.filter(addon_to__subevent=self.object).delete()
|
||||
self.object.cartposition_set.all().delete()
|
||||
self.object.delete()
|
||||
except ProtectedError:
|
||||
if self.object.active:
|
||||
with transaction.atomic():
|
||||
self.object.log_action(
|
||||
'pretix.subevent.changed', user=self.request.user, data={
|
||||
'active': False
|
||||
},
|
||||
)
|
||||
self.object.active = False
|
||||
self.object.save(update_fields=['active'])
|
||||
messages.error(self.request, pgettext_lazy(
|
||||
'subevent',
|
||||
'The date could not be deleted as some constraints (e.g. data created by plug-ins) did not allow '
|
||||
'it. The date was disabled instead.'
|
||||
))
|
||||
else:
|
||||
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
||||
CartPosition.objects.filter(addon_to__subevent=self.object).delete()
|
||||
self.object.cartposition_set.all().delete()
|
||||
self.object.delete()
|
||||
messages.success(request, pgettext_lazy('subevent', 'The selected date has been deleted.'))
|
||||
|
||||
return HttpResponseRedirect(success_url)
|
||||
|
||||
def get_success_url(self) -> str:
|
||||
|
||||
Reference in New Issue
Block a user