From 25a998a510a0590f50bea75abdfcce687a23a236 Mon Sep 17 00:00:00 2001 From: Martin Gross Date: Fri, 18 Oct 2019 11:38:26 +0200 Subject: [PATCH] Add order_gracefully_delete signal (#1454) --- doc/development/api/general.rst | 2 +- src/pretix/base/models/orders.py | 2 ++ src/pretix/base/signals.py | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/development/api/general.rst b/doc/development/api/general.rst index 10f510260..edb2deef9 100644 --- a/doc/development/api/general.rst +++ b/doc/development/api/general.rst @@ -20,7 +20,7 @@ Order events There are multiple signals that will be sent out in the ordering cycle: .. automodule:: pretix.base.signals - :members: validate_cart, validate_cart_addons, validate_order, order_fee_calculation, order_paid, order_placed, order_canceled, order_expired, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split + :members: validate_cart, validate_cart_addons, validate_order, order_fee_calculation, order_paid, order_placed, order_canceled, order_expired, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split, order_gracefully_delete Frontend -------- diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 0aa8450f5..7fa5c11e2 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -39,6 +39,7 @@ from pretix.base.models import User from pretix.base.reldate import RelativeDateWrapper from pretix.base.services.locking import NoLockManager from pretix.base.settings import PERSON_NAME_SCHEMES +from pretix.base.signals import order_gracefully_delete from .base import LockModel, LoggedModel from .event import Event, SubEvent @@ -220,6 +221,7 @@ class Order(LockModel, LoggedModel): OrderPosition.all.filter(order=self, addon_to__isnull=False).delete() OrderPosition.all.filter(order=self).delete() OrderFee.all.filter(order=self).delete() + order_gracefully_delete.send(self.event, order=self) self.refunds.all().delete() self.payments.all().delete() self.event.cache.delete('complain_testmode_orders') diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index a6324aec8..9863ed5a6 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -391,6 +391,20 @@ as the first argument. As with all event-plugin signals, the ``sender`` keyword argument will contain the event. """ +order_gracefully_delete = EventPluginSignal( + providing_args=["order"] +) +""" +This signal is sent out every time a test-mode order is being deleted. The order object +is given as the first argument. + +Any plugin receiving this signals is supposed to perform any cleanup necessary at this +point, so that the underlying oder has no more external constraints that would inhibit +the deletion of the order. + +As with all event-plugin signals, the ``sender`` keyword argument will contain the event. +""" + logentry_display = EventPluginSignal( providing_args=["logentry"] )