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 %} +
+ {% csrf_token %} +{% endif %} + @@ -24,7 +29,18 @@
{{ order_product.product.name }} + {% if not order.open == None %} + + {% bootstrap_button '' button_type="submit" button_class="btn-danger" name="remove_product" value=order_product.pk %} + + {% else %} {{ order_product.quantity }} + {% endif %} {{ order_product.product.price }} @@ -36,12 +52,17 @@
-{% if order.open %} +{% if not order.open == None %} + + {% bootstrap_button "Update order" button_type="submit" button_class="btn-primary" name="update_order" %} + +
+

Checkout

{% csrf_token %} - {% bootstrap_button "Credit card" button_type="submit" button_class="btn-primary" name="payment_method" value="credit_card" %} - {% bootstrap_button "Blockchain" button_type="submit" button_class="btn-primary" name="payment_method" value="blockchain" %} - {% bootstrap_button "Bank transfer" button_type="submit" button_class="btn-primary" name="payment_method" value="bank_transfer" %} + {% bootstrap_button " Credit card" button_type="submit" button_class="btn-primary" name="payment_method" value="credit_card" %} + {% bootstrap_button " Blockchain" button_type="submit" button_class="btn-primary" name="payment_method" value="blockchain" %} + {% bootstrap_button " Bank transfer" button_type="submit" button_class="btn-primary" name="payment_method" value="bank_transfer" %}
{% 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):