From b5f2c9d311e1347f79b4d8e40a323428543097f6 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 2 Aug 2019 21:44:56 +1000 Subject: [PATCH 1/2] Add API endpoint for purchase orders - List and create purchase orders - List and create purchase order line items --- InvenTree/InvenTree/urls.py | 2 + InvenTree/order/api.py | 92 ++++++++++++++++++++++++++++++++++ InvenTree/order/serializers.py | 48 ++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 InvenTree/order/api.py create mode 100644 InvenTree/order/serializers.py diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index f88609bd81..11f4a4eda5 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -23,6 +23,7 @@ from part.api import part_api_urls, bom_api_urls from company.api import company_api_urls from stock.api import stock_api_urls from build.api import build_api_urls +from order.api import po_api_urls from django.conf import settings from django.conf.urls.static import static @@ -43,6 +44,7 @@ apipatterns = [ url(r'^company/', include(company_api_urls)), url(r'^stock/', include(stock_api_urls)), url(r'^build/', include(build_api_urls)), + url(r'^po/', include(po_api_urls)), # User URLs url(r'^user/', include(user_urls)), diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py new file mode 100644 index 0000000000..e1396cb54c --- /dev/null +++ b/InvenTree/order/api.py @@ -0,0 +1,92 @@ +""" +JSON API for the Order app +""" + +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import generics, permissions + +from django.conf.urls import url + +from .models import PurchaseOrder, PurchaseOrderLineItem +from .serializers import POSerializer, POLineItemSerializer + + +class POList(generics.ListCreateAPIView): + """ API endpoint for accessing a list of Order objects + + - GET: Return list of PO objects (with filters) + - POST: Create a new PurchaseOrder object + """ + + queryset = PurchaseOrder.objects.all() + serializer_class = POSerializer + + permission_classes = [ + permissions.IsAuthenticated, + ] + + filter_backends = [ + DjangoFilterBackend, + ] + + filter_fields = [ + 'supplier', + ] + + +class PODetail(generics.RetrieveUpdateAPIView): + """ API endpoint for detail view of a PurchaseOrder object """ + + queryset = PurchaseOrder.objects.all() + serializer_class = POSerializer + + permission_classes = [ + permissions.IsAuthenticated + ] + + +class POLineItemList(generics.ListCreateAPIView): + """ API endpoint for accessing a list of PO Line Item objects + + - GET: Return a list of PO Line Item objects + - POST: Create a new PurchaseOrderLineItem object + """ + + queryset = PurchaseOrderLineItem.objects.all() + serializer_class = POLineItemSerializer + + permission_classes = [ + permissions.IsAuthenticated, + ] + + filter_backends = [ + DjangoFilterBackend, + ] + + filter_fields = [ + 'order', + 'part' + ] + + +class POLineItemDetail(generics.RetrieveUpdateAPIView): + """ API endpoint for detail view of a PurchaseOrderLineItem object """ + + queryset = PurchaseOrderLineItem + serializer_class = POLineItemSerializer + + permission_classes = [ + permissions.IsAuthenticated, + ] + + +po_api_urls = [ + url(r'^order/(?P\d+)/?$', PODetail.as_view(), name='api-po-detail'), + url(r'^order/?$', POList.as_view(), name='api-po-list'), + + url(r'^line/(?P\d+)/?$', POLineItemDetail.as_view(), name='api-po-line-detail'), + url(r'^line/?$', POLineItemList.as_view(), name='api-po-line-list'), +] diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py new file mode 100644 index 0000000000..c4370015bc --- /dev/null +++ b/InvenTree/order/serializers.py @@ -0,0 +1,48 @@ +""" +JSON serializers for the Order API +""" + +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from InvenTree.serializers import InvenTreeModelSerializer + +from .models import PurchaseOrder, PurchaseOrderLineItem + + +class POSerializer(InvenTreeModelSerializer): + """ Serializes an Order object """ + + class Meta: + model = PurchaseOrder + + fields = [ + 'pk', + 'supplier', + 'reference', + 'description', + 'URL', + 'status', + 'notes', + ] + + read_only_fields = [ + 'reference', + 'status' + ] + + +class POLineItemSerializer(InvenTreeModelSerializer): + + class Meta: + model = PurchaseOrderLineItem + + fields = [ + 'pk', + 'quantity', + 'reference', + 'notes', + 'order', + 'part', + 'received', + ] From 76ed23852a3c1922aab6ce33614ea0d79c468667 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 2 Aug 2019 21:51:24 +1000 Subject: [PATCH 2/2] Fix the travis script to prevent requesting user input (cherry picked from commit 9253ee2c9a1c774bef3ad3f08f02c78778c8dff5) --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 00d049b7a1..58bdad303f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,8 @@ addons: -sqlite3 before_install: - - make install + - make requirements + - make secret - make migrate script: