diff --git a/shop/forms.py b/shop/forms.py
index ccdb9209..6d6f41af 100644
--- a/shop/forms.py
+++ b/shop/forms.py
@@ -3,5 +3,5 @@ from .models import Order
class AddToOrderForm(forms.Form):
- quantity = forms.IntegerField()
+ quantity = forms.IntegerField(initial=1)
diff --git a/shop/migrations/0008_auto_20160516_0954.py b/shop/migrations/0008_auto_20160516_0954.py
new file mode 100644
index 00000000..74da78d0
--- /dev/null
+++ b/shop/migrations/0008_auto_20160516_0954.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.6 on 2016-05-16 09:54
+from __future__ import unicode_literals
+
+import datetime
+from django.db import migrations, models
+from django.utils.timezone import utc
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('shop', '0007_auto_20160515_2157'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='orderproductrelation',
+ name='created',
+ field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2016, 5, 16, 9, 53, 59, 584701, tzinfo=utc)),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='orderproductrelation',
+ name='updated',
+ field=models.DateTimeField(auto_now=True, default=datetime.datetime(2016, 5, 16, 9, 54, 3, 23885, tzinfo=utc)),
+ preserve_default=False,
+ ),
+ ]
diff --git a/shop/models.py b/shop/models.py
index e6af683c..3d29b3f6 100644
--- a/shop/models.py
+++ b/shop/models.py
@@ -131,7 +131,7 @@ class Product(CreatedUpdatedModel, UUIDModel):
return now in self.available_in
-class OrderProductRelation(models.Model):
+class OrderProductRelation(CreatedUpdatedModel):
order = models.ForeignKey('shop.Order')
product = models.ForeignKey('shop.Product')
quantity = models.PositiveIntegerField()
diff --git a/shop/templates/order_detail.html b/shop/templates/order_detail.html
index d4df4508..6892be32 100644
--- a/shop/templates/order_detail.html
+++ b/shop/templates/order_detail.html
@@ -5,6 +5,11 @@
Order #{{ order.id }}
+{% if not order.open == None %}
+
{% endif %}
diff --git a/shop/urls.py b/shop/urls.py
index 35c54626..0b5d9048 100644
--- a/shop/urls.py
+++ b/shop/urls.py
@@ -3,7 +3,7 @@ from views import *
urlpatterns = [
url(r'orders/(?P[0-9]+)/pay/creditcard/$', EpayFormView.as_view(), name='epay_form'),
- url(r'epay_callback/', EpayCallbackViev.as_view(), name='epay_callback'),
+ url(r'epay_callback/', EpayCallbackView.as_view(), name='epay_callback'),
url(r'^$', ShopIndexView.as_view(), name='index'),
url(r'products/(?P[-_\w+]+)/$', ProductDetailView.as_view(), name='product_detail'),
url(r'orders/$', OrderListView.as_view(), name='order_list'),
diff --git a/shop/views.py b/shop/views.py
index bfe99a58..4c68d6af 100644
--- a/shop/views.py
+++ b/shop/views.py
@@ -5,6 +5,7 @@ from django.core.urlresolvers import reverse_lazy
from django.db.models import Count, F
from django.http import HttpResponseRedirect, Http404
from django.views.generic import (
+ View,
TemplateView,
ListView,
DetailView,
@@ -78,34 +79,40 @@ class OrderDetailView(LoginRequiredMixin, DetailView):
if payment_method in order.PAYMENT_METHODS:
order.payment_method = payment_method
- else:
- # unknown submit button
- messages.error(self.request, 'Unknown submit button :(')
- return reverse_lazy(
- 'shop:checkout',
- kwargs={'orderid': self.get_object.id}
- )
- # Mark the order as closed
- order.open = None
- order.save()
+ # Mark the order as closed
+ order.open = None
- reverses = {
- Order.CREDIT_CARD: reverse_lazy(
- 'shop:epay_form',
- kwargs={'orderid': order.id}
- ),
- Order.BLOCKCHAIN: reverse_lazy(
- 'shop:coinify_pay',
- kwargs={'orderid': order.id}
- ),
- Order.BANK_TRANSFER: reverse_lazy(
- 'shop:bank_transfer',
- kwargs={'orderid': order.id}
- )
- }
+ reverses = {
+ Order.CREDIT_CARD: reverse_lazy(
+ 'shop:epay_form',
+ kwargs={'orderid': order.id}
+ ),
+ Order.BLOCKCHAIN: reverse_lazy(
+ 'shop:coinify_pay',
+ kwargs={'orderid': order.id}
+ ),
+ Order.BANK_TRANSFER: reverse_lazy(
+ 'shop:bank_transfer',
+ kwargs={'orderid': order.id}
+ )
+ }
- return HttpResponseRedirect(reverses[payment_method])
+ return HttpResponseRedirect(reverses[payment_method])
+
+ if 'update_order' in request.POST:
+ for order_product in order.orderproductrelation_set.all():
+ order_product_id = str(order_product.pk)
+ if order_product_id in request.POST:
+ new_quantity = int(request.POST.get(order_product_id))
+ order_product.quantity = new_quantity
+ order_product.save()
+
+ product_remove = request.POST.get('remove_product')
+ if product_remove:
+ order.orderproductrelation_set.filter(pk=product_remove).delete()
+
+ return super(OrderDetailView, self).get(request, *args, **kwargs)
class ProductDetailView(LoginRequiredMixin, FormView, DetailView):