send request to payment service
This commit is contained in:
parent
9af86cef47
commit
6bd6e68941
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import jsonfield.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lingo', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Transaction',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('start_date', models.DateTimeField(auto_now_add=True)),
|
||||
('end_date', models.DateTimeField(null=True)),
|
||||
('bank_data', jsonfield.fields.JSONField(default=dict, blank=True)),
|
||||
('order_id', models.CharField(max_length=200)),
|
||||
('items', models.ManyToManyField(to='lingo.BasketItem', blank=True)),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
]
|
|
@ -70,6 +70,14 @@ class BasketItem(models.Model):
|
|||
payment_date = models.DateTimeField(null=True)
|
||||
|
||||
|
||||
class Transaction(models.Model):
|
||||
items = models.ManyToManyField(BasketItem, blank=True)
|
||||
start_date = models.DateTimeField(auto_now_add=True)
|
||||
end_date = models.DateTimeField(null=True)
|
||||
bank_data = JSONField(blank=True)
|
||||
order_id = models.CharField(max_length=200)
|
||||
|
||||
|
||||
@register_cell_class
|
||||
class LingoBasketCell(CellBase):
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
{% load i18n %}
|
||||
{% if total %}
|
||||
<h3>{% trans "Basket" %}</h3>
|
||||
<form>
|
||||
<form action="{% url 'lingo-pay' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<ul>
|
||||
{% for item in items %}
|
||||
<li><label><input type="checkbox" value="{{ item.id }}" checked/> {{ item.subject }}: {{ item.amount }} €</label> (<a href="{{ item.source_url}}">voir</a>)</li>
|
||||
<li><label><input type="checkbox" name="item" value="{{ item.id }}" checked/> {{ item.subject }}: {{ item.amount }} €</label> (<a href="{{ item.source_url}}">voir</a>)</li>
|
||||
{% endfor %}
|
||||
<li><strong>{% trans "Total:" %}</strong> {{ total }} €</li>
|
||||
</ul>
|
||||
|
|
|
@ -16,10 +16,11 @@
|
|||
|
||||
from django.conf.urls import patterns, include, url
|
||||
|
||||
from .views import RegiesApiView, AddBasketItemApiView
|
||||
from .views import RegiesApiView, AddBasketItemApiView, PayView
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url('^api/lingo/regies$', RegiesApiView.as_view(), name='api-regies'),
|
||||
url('^api/lingo/add-basket-item$', AddBasketItemApiView.as_view(),
|
||||
name='api-add-basket-item'),
|
||||
url('^lingo/pay$', PayView.as_view(), name='lingo-pay'),
|
||||
)
|
||||
|
|
|
@ -18,11 +18,13 @@ from decimal import Decimal
|
|||
import json
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import HttpResponse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.generic import View, ListView
|
||||
|
||||
from .models import Regie, BasketItem
|
||||
import eopayment
|
||||
|
||||
from .models import Regie, BasketItem, Transaction
|
||||
|
||||
class RegiesApiView(ListView):
|
||||
model = Regie
|
||||
|
@ -78,3 +80,30 @@ class AddBasketItemApiView(View):
|
|||
response = HttpResponse(content_type='application/json')
|
||||
response.write(json.dumps({'result': 'success'}))
|
||||
return response
|
||||
|
||||
class PayView(View):
|
||||
def post(self, request, *args, **kwargs):
|
||||
items = BasketItem.objects.filter(id__in=request.POST.getlist('item'))
|
||||
# XXX: check all items are going to the same regie
|
||||
|
||||
transaction = Transaction()
|
||||
transaction.save()
|
||||
transaction.items = items
|
||||
transaction.save()
|
||||
|
||||
total_amount = sum([x.amount for x in items])
|
||||
|
||||
regie = items[0].regie
|
||||
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
(order_id, kind, data) = payment.request(total_amount,
|
||||
next_url=request.build_absolute_uri('/'))
|
||||
transaction.order_id = order_id
|
||||
transaction.save()
|
||||
|
||||
# XXX: mark basket items as being processed (?)
|
||||
|
||||
if kind == eopayment.URL:
|
||||
return HttpResponseRedirect(data)
|
||||
|
||||
raise NotImplementedError()
|
||||
|
|
Reference in New Issue