Order details: Display payment information

This commit is contained in:
Raphael Michel
2015-03-20 23:20:12 +01:00
parent 4a72d11c67
commit 5664177bbb
11 changed files with 172 additions and 5 deletions

View File

@@ -1,4 +1,5 @@
from collections import OrderedDict
import json
from django.template import Context
from django.template.loader import get_template
from django.utils.translation import ugettext_lazy as _
@@ -45,3 +46,14 @@ class BankTransfer(BasePaymentProvider):
template = get_template('pretixplugins/banktransfer/pending.html')
ctx = Context({'request': request, 'order': order, 'settings': self.settings})
return template.render(ctx)
def order_control_render(self, request, order) -> str:
if order.payment_info:
payment_info = json.loads(order.payment_info)
payment_info['amount'] /= 100
else:
payment_info = None
template = get_template('pretixplugins/banktransfer/control.html')
ctx = Context({'request': request, 'event': self.event, 'settings': self.settings,
'payment_info': payment_info, 'order': order})
return template.render(ctx)

View File

@@ -0,0 +1,28 @@
{% load i18n %}
{% if payment_info and order.status == "p" %}
<p>{% blocktrans trimmed %}
This order has been paid via bank transfer.
{% endblocktrans %}</p>
<dl class="dl-horizontal">
<dt>{% trans "Bank account" %}</dt>
<dd>{{ payment_info.account }}</dd>
<dt>{% trans "Payer name" %}</dt>
<dd>{{ payment_info.name }}</dd>
<dt>{% trans "Total value" %}</dt>
<dd>{{ payment_info.value }}</dd>
<dt>{% trans "Payment date" %}</dt>
<dd>{{ payment_info.date }}</dd>
<dt>{% trans "Reference" %}</dt>
<dd>{{ payment_info.reference }}</dd>
</dl>
{% else %}
<p>{% blocktrans trimmed %}
This order has been planned to be paid via bank transfer, but no payment has been received yet.
{% endblocktrans %}</p>
<dl class="dl-horizontal">
<dt>{% trans "Reference code" %}</dt>
<dd>{{ event.slug|upper }}{{ order.code }}</dd>
</dl>
{% endif %}

View File

@@ -153,7 +153,7 @@ class Paypal(BasePaymentProvider):
self.init_api()
payment = paypalrestsdk.Payment.find(request.session.get('payment_paypal_id'))
if str(payment.transactions[0].amount.total) != str(order.total) or payment.transactions[1].amount.currency != \
if str(payment.transactions[0].amount.total) != str(order.total) or payment.transactions[0].amount.currency != \
self.event.currency:
messages.error(request, _('We were unable to process your payment. See below for details on how to '
'proceed.'))
@@ -169,7 +169,7 @@ class Paypal(BasePaymentProvider):
messages.warning(request, _('PayPal has not yet approved the payment. We will inform you as soon as the '
'payment completed.'))
order = order.clone()
order.payment_info = str(payment)
order.payment_info = json.dumps(payment.to_dict())
order.save()
return
@@ -179,7 +179,7 @@ class Paypal(BasePaymentProvider):
logger.error('Invalid state: %s' % str(payment))
return
order.mark_paid('paypal', str(payment))
order.mark_paid('paypal', json.dumps(payment.to_dict()))
messages.success(request, _('We successfully received your payment. Thank you!'))
return None
@@ -194,3 +194,13 @@ class Paypal(BasePaymentProvider):
ctx = Context({'request': request, 'event': self.event, 'settings': self.settings,
'retry': retry, 'order': order})
return template.render(ctx)
def order_control_render(self, request, order) -> str:
if order.payment_info:
payment_info = json.loads(order.payment_info)
else:
payment_info = None
template = get_template('pretixplugins/paypal/control.html')
ctx = Context({'request': request, 'event': self.event, 'settings': self.settings,
'payment_info': payment_info, 'order': order})
return template.render(ctx)

View File

@@ -0,0 +1,29 @@
{% load i18n %}
{% if payment_info %}
{% if order.status == "p" %}
<p>{% blocktrans trimmed %}
This order has been paid via PayPal.
{% endblocktrans %}</p>
{% else %}
<p>{% blocktrans trimmed %}
This order has been planned to be paid via PayPal, but the payment has not yet been completed.
{% endblocktrans %}</p>
{% endif %}
<dl class="dl-horizontal">
<dt>{% trans "Payment ID" %}</dt>
<dd>{{ payment_info.id }}</dd>
<dt>{% trans "Payer" %}</dt>
<dd>{{ payment_info.payer.payer_info.email }}</dd>
<dt>{% trans "Last update" %}</dt>
<dd>{{ payment_info.update_time }}</dd>
<dt>{% trans "Total value" %}</dt>
<dd>{{ payment_info.transactions.0.amount.total }}</dd>
<dt>{% trans "Currency" %}</dt>
<dd>{{ payment_info.transactions.0.amount.currency }}</dd>
</dl>
{% else %}
<p>{% blocktrans trimmed %}
This order has been planned to be paid via PayPal, but the payment has not yet been completed.
{% endblocktrans %}</p>
{% endif %}

View File

@@ -1,4 +1,5 @@
from collections import OrderedDict
import json
import logging
from django.contrib import messages
from django.template import Context
@@ -82,3 +83,14 @@ class Stripe(BasePaymentProvider):
ctx = Context({'request': request, 'event': self.event, 'settings': self.settings,
'order': order})
return template.render(ctx)
def order_control_render(self, request, order) -> str:
if order.payment_info:
payment_info = json.loads(order.payment_info)
payment_info['amount'] /= 100
else:
payment_info = None
template = get_template('pretixplugins/stripe/control.html')
ctx = Context({'request': request, 'event': self.event, 'settings': self.settings,
'payment_info': payment_info, 'order': order})
return template.render(ctx)

View File

@@ -0,0 +1,33 @@
{% load i18n %}
{% if payment_info %}
{% if order.status == "p" %}
<p>{% blocktrans trimmed %}
This order has been paid via Stripe.
{% endblocktrans %}</p>
{% else %}
<p>{% blocktrans trimmed %}
This order has been planned to be paid via Stripe, but the payment has not yet been completed.
{% endblocktrans %}</p>
{% endif %}
<dl class="dl-horizontal">
<dt>{% trans "Charge ID" %}</dt>
<dd>{{ payment_info.id }}</dd>
<dt>{% trans "Card type" %}</dt>
<dd>{{ payment_info.source.brand }}</dd>
<dt>{% trans "Card number" %}</dt>
<dd>**** **** **** {{ payment_info.source.last4 }}</dd>
<dt>{% trans "Payer name" %}</dt>
<dd>{{ payment_info.source.name }}</dd>
<dt>{% trans "Total value" %}</dt>
<dd>{{ payment_info.amount|floatformat:2 }}</dd>
<dt>{% trans "Currency" %}</dt>
<dd>{{ payment_info.currency|upper }}</dd>
<dt>{% trans "Status" %}</dt>
<dd>{{ payment_info.status }}</dd>
</dl>
{% else %}
<p>{% blocktrans trimmed %}
This order has been planned to be paid via Stripe, but the payment has not yet been completed.
{% endblocktrans %}</p>
{% endif %}