Skip to content
This repository has been archived by the owner on Jun 15, 2019. It is now read-only.

Commit

Permalink
Adjust sandbox to work with Oscar 0.7
Browse files Browse the repository at this point in the history
  • Loading branch information
codeinthehole committed Apr 30, 2014
1 parent 453bef9 commit d8231cb
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 69 deletions.
64 changes: 33 additions & 31 deletions sandbox/apps/checkout/views.py
@@ -1,4 +1,4 @@
from django.http import HttpResponseRedirect
from django import http
from django.core.urlresolvers import reverse
from django.contrib import messages
from django.conf import settings
Expand All @@ -22,65 +22,67 @@ def get_context_data(self, **kwargs):
ctx['bankcard_form'] = kwargs.get('bankcard_form', BankcardForm())
return ctx

def post(self, request, *args, **kwargs):
def handle_payment_details_submission(self, request):
# Check bankcard form is valid
bankcard_form = BankcardForm(request.POST)
if bankcard_form.is_valid():
return self.render_preview(
request, bankcard_form=bankcard_form)

# Form invalid - re-render
return self.render_payment_details(
request, bankcard_form=bankcard_form)

if request.POST.get('action', '') == 'place_order':
if not bankcard_form.is_valid():
messages.error(request, _("Invalid submission"))
return HttpResponseRedirect(
reverse('checkout:payment-details'))
def handle_place_order_submission(self, request):
bankcard_form = BankcardForm(request.POST)
if bankcard_form.is_valid():
submission = self.build_submission(
bankcard=bankcard_form.bankcard)
payment_kwargs={
'bankcard_form': bankcard_form
})
return self.submit(**submission)

# Check bankcard form is valid
if not bankcard_form.is_valid():
ctx = self.get_context_data(**kwargs)
ctx['bankcard_form'] = bankcard_form
return self.render_to_response(ctx)

# Render preview page (with bankcard details hidden)
return self.render_preview(request, bankcard_form=bankcard_form)
messages.error(request, _("Invalid submission"))
return http.HttpResponseRedirect(
reverse('checkout:payment-details'))

def build_submission(self, **kwargs):
# Ensure the shipping address is part of the payment keyword args
submission = super(PaymentDetailsView, self).build_submission(**kwargs)
if 'bankcard' in kwargs:
submission['payment_kwargs']['bankcard'] = kwargs['bankcard']
# Fraud screening needs access to shipping address
submission['payment_kwargs']['shipping_address'] = submission[
'shipping_address']
return submission

def handle_payment(self, order_number, order_total, **kwargs):
def handle_payment(self, order_number, total, **kwargs):
# Make request to DataCash - if there any problems (eg bankcard
# not valid / request refused by bank) then an exception would be
# raised and handled)
facade = Facade()

# Use The3rdMan - so build a dict of data to pass
email = None
if not self.request.user.is_authenticated():
email = self.checkout_session.get_guest_email()
fraud_data = the3rdman.build_data_dict(
request=self.request,
email=email,
order_number=order_number,
shipping_address=kwargs['shipping_address'])
# email = None
# if not self.request.user.is_authenticated():
# email = self.checkout_session.get_guest_email()
# fraud_data = the3rdman.build_data_dict(
# request=self.request,
# email=email,
# order_number=order_number,
# shipping_address=kwargs['shipping_address'])

# We're not using 3rd-man by default
bankcard = kwargs['bankcard_form'].bankcard
datacash_ref = facade.pre_authorise(
order_number, order_total.incl_tax, kwargs['bankcard'])
order_number, total.incl_tax, bankcard)

# Request was successful - record the "payment source". As this
# request was a 'pre-auth', we set the 'amount_allocated' - if we had
# performed an 'auth' request, then we would set 'amount_debited'.
source_type, _ = SourceType.objects.get_or_create(name='Datacash')
source = Source(source_type=source_type,
currency=settings.DATACASH_CURRENCY,
amount_allocated=order_total.incl_tax,
amount_allocated=total.incl_tax,
reference=datacash_ref)
self.add_payment_source(source)

# Also record payment event
self.add_payment_event('pre-auth', order_total.incl_tax)
self.add_payment_event('pre-auth', total.incl_tax)
3 changes: 0 additions & 3 deletions sandbox/settings.py
Expand Up @@ -217,9 +217,6 @@
LOGIN_REDIRECT_URL = '/accounts/'
APPEND_SLASH = True

DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False,
}

# ==============
# Oscar settings
Expand Down
14 changes: 5 additions & 9 deletions sandbox/templates/checkout/payment_details.html
Expand Up @@ -2,13 +2,9 @@
{% load i18n %}

{% block payment_details_content %}

<form action="{% url 'checkout:preview' %}" class="form-stacked" method="POST">
<table>
{% csrf_token %}
{{ bankcard_form.as_table }}
<tr><td><button type="submit" value="{% trans "Continue" %}" class="btn btn-primary btn-large">{% trans "Continue" %}</button></td></tr>
</table>
</form>

<form action="{% url 'checkout:preview' %}" class="form-stacked" method="POST">
{% csrf_token %}
{% include "partials/form_fields.html" with form=bankcard_form %}
<button type="submit" value="{% trans "Continue" %}" class="btn btn-primary btn-large">{% trans "Continue" %}</button>
</form>
{% endblock %}
45 changes: 20 additions & 25 deletions sandbox/templates/checkout/preview.html
Expand Up @@ -4,32 +4,27 @@

{% block payment_method %}
<div class="span6">
<div class="sub-header">
<h2>Payment</h2>
</div>
<div class="well well-success">
<p>{% blocktrans with amount=order_total.incl_tax|currency:order_total.currency %}{{ amount }} will be debited from your bankcard.{% endblocktrans %}</p>
<div class="alert-actions">
<a href="{% url 'checkout:payment-details' %}" class="btn">{% trans "Change payment details" %}</a>
</div>
</div>
</div>
{% endblock %}
<h3>{% trans "Payment" %}</h3>
<div class="well well-success" data-behaviours="match-height">

{% block place_order %}
<h3>{% trans 'Please review the information below, then click "Place Order"' %}</h3>
<form method="post" action="{% url 'checkout:preview' %}">
{% csrf_token %}
<h4>Bankcard</h4>
<p>{% blocktrans with amount=order_total.incl_tax|currency %}
{{ amount }} will be debited from your bankcard:
{% endblocktrans %}</p>
{% with bankcard=bankcard_form.bankcard %}
<p>
{% trans "Card type" %}: {{ bankcard.card_type }} <br/>
{% trans "Card number" %}: {{ bankcard.obfuscated_number }} <br/>
{% trans "Expiry month" %}: {{ bankcard.expiry_month }}</p>
{% endwith %}

<div style="display:none">
<input type="hidden" name="action" value="place_order" />
{{ bankcard_form.as_p }}
<div class="alert-actions">
<a href="{% url 'checkout:payment-details' %}" class="btn">{% trans "Change payment details" %}</a>
</div>
</div>
</div>
{% endblock %}

<div class="form-actions">
<button id='place-order' type="submit" value="{% trans "Place order" %}"
class="pull-right btn btn-primary btn-large js-disable-on-click"
>{% trans "Place order" %}</button>
</div>
</form>
{% endblock place_order %}
{% block hiddenforms %}
{{ bankcard_form.as_p }}
{% endblock %}
2 changes: 1 addition & 1 deletion sandbox/urls.py
Expand Up @@ -3,7 +3,6 @@
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.views.generic import TemplateView

from apps.app import shop

Expand All @@ -16,6 +15,7 @@
# Include dashboard URLs
(r'^dashboard/datacash/', include(application.urls)),
(r'^datacash/', include('datacash.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
(r'', include(shop.urls)),
)
if settings.DEBUG:
Expand Down

0 comments on commit d8231cb

Please sign in to comment.