diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index f0944a0b20..0965e51a68 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -84,6 +84,7 @@ require_approval boolean If ``true`` and needs approval by an organizer before it can continue. If ``true`` and the order is canceled, this order has been denied by the event organizer. +url string The full URL to the order confirmation page payments list of objects List of payment processes (see below) refunds list of objects List of refund processes (see below) last_modified datetime Last modification of this object @@ -141,7 +142,7 @@ last_modified datetime Last modificati .. versionchanged:: 3.1: - The ``invoice_address.state`` attribute has been added. When creating orders through the API, + The ``invoice_address.state`` and ``url`` attributes have been added. When creating orders through the API, vouchers are now supported and many fields are now optional. @@ -229,13 +230,18 @@ amount money (string) Payment amount created datetime Date and time of creation of this payment payment_date datetime Date and time of completion of this payment (or ``null``) provider string Identification string of the payment provider +payment_url string The URL where an user can continue with the payment (or ``null``) ===================================== ========================== ======================================================= .. versionchanged:: 2.0 This resource has been added. -.. _order-payment-resource: +.. versionchanged:: 3.1 + + The attribute ``payment_url`` has been added. + +.. _order-refund-resource: Order refund resource --------------------- @@ -296,6 +302,7 @@ List of all orders "status": "p", "testmode": false, "secret": "k24fiuwvu8kxz3y1", + "url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/", "email": "tester@example.org", "locale": "en", "sales_channel": "web", @@ -382,6 +389,7 @@ List of all orders "amount": "23.00", "created": "2017-12-01T10:00:00Z", "payment_date": "2017-12-04T12:13:12Z", + "payment_url": null, "provider": "banktransfer" } ], @@ -440,6 +448,7 @@ Fetching individual orders "status": "p", "testmode": false, "secret": "k24fiuwvu8kxz3y1", + "url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/", "email": "tester@example.org", "locale": "en", "sales_channel": "web", @@ -526,6 +535,7 @@ Fetching individual orders "amount": "23.00", "created": "2017-12-01T10:00:00Z", "payment_date": "2017-12-04T12:13:12Z", + "payment_url": null, "provider": "banktransfer" } ], @@ -1557,6 +1567,7 @@ Order payment endpoints "amount": "23.00", "created": "2017-12-01T10:00:00Z", "payment_date": "2017-12-04T12:13:12Z", + "payment_url": null, "provider": "banktransfer" } ] @@ -1597,6 +1608,7 @@ Order payment endpoints "amount": "23.00", "created": "2017-12-01T10:00:00Z", "payment_date": "2017-12-04T12:13:12Z", + "payment_url": null, "provider": "banktransfer" } diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index a721f995d2..427789ed18 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -313,6 +313,14 @@ class OrderRefundSerializer(I18nAwareModelSerializer): fields = ('local_id', 'state', 'source', 'amount', 'payment', 'created', 'execution_date', 'provider') +class OrderURLField(serializers.URLField): + def to_representation(self, instance: Order): + return build_absolute_uri(self.context['event'], 'presale:event.order', kwargs={ + 'order': instance.code, + 'secret': instance.secret, + }) + + class OrderSerializer(I18nAwareModelSerializer): invoice_address = InvoiceAddressSerializer(allow_null=True) positions = OrderPositionSerializer(many=True, read_only=True) @@ -322,13 +330,15 @@ class OrderSerializer(I18nAwareModelSerializer): refunds = OrderRefundSerializer(many=True, read_only=True) payment_date = OrderPaymentDateField(source='*', read_only=True) payment_provider = OrderPaymentTypeField(source='*', read_only=True) + url = OrderURLField(source='*', read_only=True) class Meta: model = Order fields = ( 'code', 'status', 'testmode', 'secret', 'email', 'locale', 'datetime', 'expires', 'payment_date', 'payment_provider', 'fees', 'total', 'comment', 'invoice_address', 'positions', 'downloads', - 'checkin_attention', 'last_modified', 'payments', 'refunds', 'require_approval', 'sales_channel' + 'checkin_attention', 'last_modified', 'payments', 'refunds', 'require_approval', 'sales_channel', + 'url' ) read_only_fields = ( 'code', 'status', 'testmode', 'secret', 'datetime', 'expires', 'payment_date', diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index 637156a9f8..7daaffa702 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -206,6 +206,7 @@ TEST_ORDER_RES = { "tax_value": "0.05" } ], + "url": "http://example.com/dummy/dummy/order/FOO/k24fiuwvu8kxz3y1/", "payment_provider": "banktransfer", "total": "23.00", "comment": "",