a bit more work on still unfinished shop
This commit is contained in:
parent
7955bdfae1
commit
7212cb0081
|
@ -1 +1,7 @@
|
|||
from django import forms
|
||||
|
||||
class CheckoutForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ['payment_method']
|
||||
|
||||
|
|
15
shop/urls.py
15
shop/urls.py
|
@ -1,13 +1,7 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from .views import (
|
||||
ShopIndexView,
|
||||
# EpayView,
|
||||
# EpayCallbackView,
|
||||
)
|
||||
import .views
|
||||
|
||||
urlpatterns = [
|
||||
#url(r'order/$', TicketOrderView.as_view(), name='order'),
|
||||
#url(
|
||||
#r'pay/credit_card/(?P<ticket_id>[a-zA-Z0-9\-]+)/$',
|
||||
#EpayView.as_view(),
|
||||
|
@ -18,10 +12,7 @@ urlpatterns = [
|
|||
#EpayCallbackView,
|
||||
#name='epay_callback'
|
||||
#),
|
||||
#url(
|
||||
#r'detail/(?P<pk>[a-zA-Z0-9\-]+)/$',
|
||||
#TicketDetailView.as_view(),
|
||||
#name='detail'
|
||||
#),
|
||||
url(r'$', ShopIndexView.as_view(), name='index'),
|
||||
url(r'orders/(?P<pk>[0-9]+)/$', OrderDetailView.as_view(), name='order_detail'),
|
||||
url(r'orders/(?P<pk>[0-9]+)/checkout/$', CheckoutView.as_view(), name='checkout'),
|
||||
]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import hashlib
|
||||
|
||||
from django.http import HttpResponseRedirect, Http404
|
||||
from django.views.generic import CreateView, TemplateView, DetailView, View
|
||||
from django.views.generic import CreateView, TemplateView, DetailView, View, FormView
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
|
@ -25,6 +25,74 @@ class ProductDetailView(LoginRequiredMixin, DetailView):
|
|||
context_object_name = 'product'
|
||||
|
||||
|
||||
class CheckoutView(LoginRequiredMixin, DetailView):
|
||||
"""
|
||||
Shows the products contained in an order, and a button to go to the payment
|
||||
"""
|
||||
model = Order
|
||||
template_name = 'shop/order_detail.html'
|
||||
context_object_name = 'order'
|
||||
|
||||
|
||||
class PaymentView(LoginRequiredMixin, FormView):
|
||||
"""
|
||||
One final chance to change payment method (in case another method failed),
|
||||
and a submit button to intiate payment with selected metod
|
||||
"""
|
||||
template_name = 'shop/payment.html'
|
||||
form_class = PaymentMethodForm
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if self.instance.user != self.request.user:
|
||||
raise Http404("Order not found")
|
||||
|
||||
if self.instance.paid:
|
||||
messages.error('This order is already paid for!')
|
||||
return HttpResponseRedirect('shop:order_detail')
|
||||
|
||||
if not self.instance.products:
|
||||
messages.error('This order contains no products!')
|
||||
return HttpResponseRedirect('shop:order_detail')
|
||||
|
||||
return self.render_to_response(self.get_context_data())
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
order = Order.objects.get(pk=kwargs.get('order_id')
|
||||
context = super(CheckoutView, self).get_context_data(**kwargs)
|
||||
context['order'] = order
|
||||
return context
|
||||
|
||||
|
||||
class CoinifyView(TemplateView):
|
||||
template_name = 'shop/coinify_form.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
order = Order.objects.get(pk=kwargs.get('order_id')
|
||||
context = super(CoinifyView, self).get_context_data(**kwargs)
|
||||
context['order'] = order
|
||||
|
||||
coinifyapi = CoinifyAPI(settings.COINIFY_API_KEY, settings.COINIFY_API_SECRET)
|
||||
|
||||
response = coinifyapi.invoice_create(
|
||||
amount,
|
||||
currency,
|
||||
plugin_name='BornHack 2016 webshop',
|
||||
plugin_version='1.0',
|
||||
description='BornHack 2016 order id #%s' % order.id,
|
||||
callback_url=reverse('shop:coinfy_callback', kwargs={'orderid': order.id}),
|
||||
return_url=reverse('shop:order_paid', kwargs={'orderid': order.id}),
|
||||
)
|
||||
|
||||
if not response['success']:
|
||||
api_error = response['error']
|
||||
print "API error: %s (%s)" % (api_error['message'], api_error['code'] )
|
||||
|
||||
invoice = response['data']
|
||||
### change this to pass only needed data when we get that far
|
||||
context['invoice'] = invoice
|
||||
return context
|
||||
|
||||
|
||||
# class EpayView(TemplateView):
|
||||
# template_name = 'tickets/epay_form.html'
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue