From 5d432b31d3af3549ab2c9471ccab23f29cd69380 Mon Sep 17 00:00:00 2001 From: JamesRamm Date: Fri, 10 Feb 2017 09:06:35 +0000 Subject: [PATCH] Order view front end --- .gitignore | 2 +- longclaw/orders/api.py | 24 +++++++++++++++ longclaw/orders/serializers.py | 32 ++++++++++++++++++++ longclaw/orders/templates/orders_detail.html | 17 +++++++++++ longclaw/orders/urls.py | 25 +++++++++++++++ 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 longclaw/orders/api.py create mode 100644 longclaw/orders/serializers.py create mode 100644 longclaw/orders/templates/orders_detail.html create mode 100644 longclaw/orders/urls.py diff --git a/.gitignore b/.gitignore index 13c2979..1039b8e 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,4 @@ docs/_build webpack-stats.json -*bundle.js \ No newline at end of file +*bundle.js* \ No newline at end of file diff --git a/longclaw/orders/api.py b/longclaw/orders/api.py new file mode 100644 index 0000000..affbd4c --- /dev/null +++ b/longclaw/orders/api.py @@ -0,0 +1,24 @@ +from django.apps import apps +from django.db import transaction +from rest_framework.decorators import api_view, permission_classes +from rest_framework import permissions, status, viewsets +from rest_framework.response import Response +from longclaw.orders.models import Order +from longclaw.orders.serializers import OrderSerializer + + +@api_view(["POST"]) +@permission_classes([permissions.AllowAny]) +def fulfill_order(request, pk): + ''' Get all basket items + ''' + order = Order.objects.get(id=pk) + order.status = Order.FULFILLED + order.save() + return Response(status=status.HTTP_204_NO_CONTENT) + + +class OrderViewSet(viewsets.ModelViewSet): + serializer_class = OrderSerializer + permission_classes = [permissions.IsAdminUser] + queryset = Order.objects.all() diff --git a/longclaw/orders/serializers.py b/longclaw/orders/serializers.py new file mode 100644 index 0000000..aa34e3e --- /dev/null +++ b/longclaw/orders/serializers.py @@ -0,0 +1,32 @@ +from django.apps import apps +from rest_framework import serializers +from longclaw.orders.models import Order, OrderItem, Address +from longclaw.products.serializers import ProductVariantSerializer + +class AddressSerializer(serializers.ModelSerializer): + + class Meta: + model = Address + fields = "__all__" + +class OrderItemSerializer(serializers.ModelSerializer): + + product = ProductVariantSerializer() + + class Meta: + model = OrderItem + fields = "__all__" + + +class OrderSerializer(serializers.ModelSerializer): + + items = OrderItemSerializer(many=True) + shipping_address = AddressSerializer() + total = serializers.SerializerMethodField() + + class Meta: + model = Order + fields = "__all__" + + def get_total(self, obj): + return obj.total diff --git a/longclaw/orders/templates/orders_detail.html b/longclaw/orders/templates/orders_detail.html new file mode 100644 index 0000000..8d7ae4e --- /dev/null +++ b/longclaw/orders/templates/orders_detail.html @@ -0,0 +1,17 @@ +{% extends "modeladmin/inspect.html" %} +{% load i18n static %} + +{% block content_main %} + +
+ +

{% blocktrans with view.verbose_name as model_name %}Back to {{ model_name }} list{% endblocktrans %}

+ +
+
+ + +{% endblock %} + +{% block footer %} +{% endblock %} diff --git a/longclaw/orders/urls.py b/longclaw/orders/urls.py new file mode 100644 index 0000000..aa92422 --- /dev/null +++ b/longclaw/orders/urls.py @@ -0,0 +1,25 @@ +from django.conf.urls import url +from django.conf import settings + +# signals imported so that the post save receivers run.. +from longclaw.orders import api + +# Bookings +orders = api.OrderViewSet.as_view({ + 'get': 'retrieve', +}) + +urlpatterns = ( + ### VIEWS ### + url( + r'^order/(?P[0-9]+)/$', + orders, + name='orders' + ), + + url( + r'^order/(?P[0-9]+)/fulfill/$', + api.fulfill_order, + name='fulfill_order' + ) +)