Editing of an order (remove/update products)
This commit is contained in:
parent
2287e6dda5
commit
373a4cf65b
|
@ -3,5 +3,5 @@ from .models import Order
|
|||
|
||||
|
||||
class AddToOrderForm(forms.Form):
|
||||
quantity = forms.IntegerField()
|
||||
quantity = forms.IntegerField(initial=1)
|
||||
|
||||
|
|
29
shop/migrations/0008_auto_20160516_0954.py
Normal file
29
shop/migrations/0008_auto_20160516_0954.py
Normal file
|
@ -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,
|
||||
),
|
||||
]
|
|
@ -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()
|
||||
|
|
|
@ -5,6 +5,11 @@
|
|||
|
||||
<h1>Order #{{ order.id }}</h1>
|
||||
|
||||
{% if not order.open == None %}
|
||||
<form method="POST" class="form-inline">
|
||||
{% csrf_token %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-bordered table-hover">
|
||||
|
||||
<thead>
|
||||
|
@ -24,7 +29,18 @@
|
|||
<td>
|
||||
{{ order_product.product.name }}
|
||||
<td>
|
||||
{% if not order.open == None %}
|
||||
<input type="number"
|
||||
class="form-control"
|
||||
style="width: 75px;"
|
||||
min=1
|
||||
name="{{ order_product.id }}"
|
||||
value="{{ order_product.quantity }}" />
|
||||
{% bootstrap_button '<i class="glyphicon glyphicon-remove"></i>' button_type="submit" button_class="btn-danger" name="remove_product" value=order_product.pk %}
|
||||
</form>
|
||||
{% else %}
|
||||
{{ order_product.quantity }}
|
||||
{% endif %}
|
||||
<td>
|
||||
{{ order_product.product.price }}
|
||||
<td>
|
||||
|
@ -36,12 +52,17 @@
|
|||
|
||||
</table>
|
||||
|
||||
{% if order.open %}
|
||||
{% if not order.open == None %}
|
||||
|
||||
{% bootstrap_button "Update order" button_type="submit" button_class="btn-primary" name="update_order" %}
|
||||
|
||||
<hr />
|
||||
<h3>Checkout</h3>
|
||||
<form method="POST">
|
||||
{% 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 "<i class='glyphicon glyphicon-credit-card'></i> Credit card" button_type="submit" button_class="btn-primary" name="payment_method" value="credit_card" %}
|
||||
{% bootstrap_button "<i class='glyphicon glyphicon-bitcoin'></i> Blockchain" button_type="submit" button_class="btn-primary" name="payment_method" value="blockchain" %}
|
||||
{% bootstrap_button "<i class='glyphicon glyphicon-piggy-bank'></i> Bank transfer" button_type="submit" button_class="btn-primary" name="payment_method" value="bank_transfer" %}
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ from views import *
|
|||
|
||||
urlpatterns = [
|
||||
url(r'orders/(?P<pk>[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<slug>[-_\w+]+)/$', ProductDetailView.as_view(), name='product_detail'),
|
||||
url(r'orders/$', OrderListView.as_view(), name='order_list'),
|
||||
|
|
|
@ -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,17 +79,9 @@ 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()
|
||||
|
||||
reverses = {
|
||||
Order.CREDIT_CARD: reverse_lazy(
|
||||
|
@ -107,6 +100,20 @@ class OrderDetailView(LoginRequiredMixin, DetailView):
|
|||
|
||||
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):
|
||||
model = Product
|
||||
|
|
Loading…
Reference in a new issue