Refs #654 -- API: Status operations on orders resource (#640)

* API: Write operations on orders resource

* Add order API endpoint /extend/
This commit is contained in:
Raphael Michel
2017-10-27 13:31:31 +02:00
committed by GitHub
parent f5c47424f3
commit c16dd0c9b6
12 changed files with 745 additions and 41 deletions

View File

@@ -37,7 +37,8 @@ from pretix.base.services.invoices import (
from pretix.base.services.locking import LockTimeoutException
from pretix.base.services.mail import SendMailException, render_mail
from pretix.base.services.orders import (
OrderChangeManager, OrderError, cancel_order, mark_order_paid,
OrderChangeManager, OrderError, cancel_order, extend_order,
mark_order_paid,
)
from pretix.base.services.stats import order_overview
from pretix.base.signals import register_data_exporters
@@ -453,32 +454,20 @@ class OrderExtend(OrderView):
def post(self, *args, **kwargs):
if self.form.is_valid():
if self.order.status == Order.STATUS_PENDING:
try:
extend_order(
self.order,
new_date=self.form.cleaned_data.get('expires'),
force=self.form.cleaned_data.get('quota_ignore', False),
user=self.request.user
)
messages.success(self.request, _('The payment term has been changed.'))
self.order.log_action('pretix.event.order.expirychanged', user=self.request.user, data={
'expires': self.order.expires,
'state_change': False
})
self.form.save()
else:
try:
with self.order.event.lock() as now_dt:
is_available = self.order._is_still_available(now_dt, count_waitinglist=False)
if is_available is True or self.form.cleaned_data.get('quota_ignore', False) is True:
self.form.save()
self.order.status = Order.STATUS_PENDING
self.order.save()
self.order.log_action('pretix.event.order.expirychanged', user=self.request.user, data={
'expires': self.order.expires,
'state_change': True
})
messages.success(self.request, _('The payment term has been changed.'))
else:
messages.error(self.request, is_available)
return self._redirect_here()
except LockTimeoutException:
messages.error(self.request, _('We were not able to process the request completely as the '
'server was too busy.'))
except OrderError as e:
messages.error(self.request, str(e))
return self._redirect_here()
except LockTimeoutException:
messages.error(self.request, _('We were not able to process the request completely as the '
'server was too busy.'))
return self._redirect_back()
else:
return self.get(*args, **kwargs)