mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Refactor mark_paid out of models
This commit is contained in:
58
src/pretix/base/services/orders.py
Normal file
58
src/pretix/base/services/orders.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.timezone import now
|
||||
from pretix.base.models import Order, Quota
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
def mark_order_paid(order, provider=None, info=None, date=None, manual=None, force=False):
|
||||
"""
|
||||
Marks an order as paid. This clones the order object, sets the payment provider,
|
||||
info and date and returns the cloned order object.
|
||||
|
||||
:param provider: The payment provider that marked this as paid
|
||||
:type provider: str
|
||||
:param info: The information to store in order.payment_info
|
||||
:type info: str
|
||||
:param date: The date the payment was received (if you pass ``None``, the current
|
||||
time will be used).
|
||||
:type date: datetime
|
||||
:param force: Whether this payment should be marked as paid even if no remaining
|
||||
quota is available (default: ``False``).
|
||||
:type force: boolean
|
||||
:raises Quota.QuotaExceededException: if the quota is exceeded and ``force`` is ``False``
|
||||
"""
|
||||
can_be_paid, quotas_locked = order._can_be_paid(keep_locked=True)
|
||||
if not force and can_be_paid is not True:
|
||||
raise Quota.QuotaExceededException(can_be_paid)
|
||||
order = order.clone()
|
||||
order.payment_provider = provider or order.payment_provider
|
||||
order.payment_info = info or order.payment_info
|
||||
order.payment_date = date or now()
|
||||
if manual is not None:
|
||||
order.payment_manual = manual
|
||||
order.status = Order.STATUS_PAID
|
||||
order.save()
|
||||
|
||||
if quotas_locked:
|
||||
for quota in quotas_locked:
|
||||
quota.release()
|
||||
|
||||
from pretix.base.mail import mail
|
||||
mail(
|
||||
order.user, _('Payment received for your order: %(code)s') % {'code': order.code},
|
||||
'pretixpresale/email/order_paid.txt',
|
||||
{
|
||||
'user': order.user,
|
||||
'order': order,
|
||||
'event': order.event,
|
||||
'url': settings.SITE_URL + reverse('presale:event.order', kwargs={
|
||||
'event': order.event.slug,
|
||||
'organizer': order.event.organizer.slug,
|
||||
'order': order.code
|
||||
}),
|
||||
'downloads': order.event.settings.get('ticket_download', as_type=bool)
|
||||
},
|
||||
order.event
|
||||
)
|
||||
return order
|
||||
Reference in New Issue
Block a user