diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index 7b94439c97..2b5528cf5e 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -7,24 +7,14 @@ from rest_framework.decorators import api_view admin.site.site_header = "InvenTree Admin" - -@api_view() -def Inventree404(self): - """ Supplied URL is invalid - """ - content = {'detail': 'Malformed API URL'} - return Response(content, status=status.HTTP_404_NOT_FOUND) - - apipatterns = [ url(r'^stock/', include('stock.urls')), url(r'^part/', include('part.urls')), url(r'^supplier/', include('supplier.urls')), + url(r'^manufacturer/', include('supplier.manufacturer_urls')), + url(r'^customer/', include('supplier.customer_urls')), url(r'^track/', include('track.urls')), url(r'^project/', include('project.urls')), - - # Any other URL - url(r'', Inventree404) ] urlpatterns = [ diff --git a/InvenTree/supplier/customer_urls.py b/InvenTree/supplier/customer_urls.py new file mode 100644 index 0000000000..870bba1a31 --- /dev/null +++ b/InvenTree/supplier/customer_urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import url, include + +from . import views + +urlpatterns = [ + # Customer detail + url(r'^(?P[0-9]+)/?$', views.CustomerDetail.as_view(), name='customer-detail'), + + # List customers + url(r'^\?.*/?$', views.CustomerList.as_view()), + url(r'^$', views.CustomerList.as_view()) +] diff --git a/InvenTree/supplier/manufacturer_urls.py b/InvenTree/supplier/manufacturer_urls.py new file mode 100644 index 0000000000..56a74c8106 --- /dev/null +++ b/InvenTree/supplier/manufacturer_urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import url, include + +from . import views + +urlpatterns = [ + # Manufacturer detail + url(r'^(?P[0-9]+)/?$', views.ManufacturerDetail.as_view(), name='manufacturer-detail'), + + # List manufacturers + url(r'^\?.*/?$', views.ManufacturerList.as_view()), + url(r'^$', views.ManufacturerList.as_view()) +] diff --git a/InvenTree/supplier/serializers.py b/InvenTree/supplier/serializers.py index 9b80d33445..517ea940d2 100644 --- a/InvenTree/supplier/serializers.py +++ b/InvenTree/supplier/serializers.py @@ -1,6 +1,10 @@ from rest_framework import serializers +from part.models import Part + from .models import Supplier, SupplierPart, SupplierPriceBreak +from .models import Manufacturer +from .models import Customer class SupplierSerializer(serializers.HyperlinkedModelSerializer): @@ -10,14 +14,38 @@ class SupplierSerializer(serializers.HyperlinkedModelSerializer): fields = '__all__' +class ManufacturerSerializer(serializers.HyperlinkedModelSerializer): + + class Meta: + model = Manufacturer + fields = '__all__' + + +class CustomerSerializer(serializers.HyperlinkedModelSerializer): + + class Meta: + model = Customer + fields = '__all__' + + class SupplierPartSerializer(serializers.ModelSerializer): price_breaks = serializers.HyperlinkedRelatedField(many=True, read_only=True, - view_name='price_break-detail') + view_name='supplierpricebreak-detail') + + part = serializers.HyperlinkedRelatedField(view_name='part-detail', + queryset = Part.objects.all()) + + supplier = serializers.HyperlinkedRelatedField(view_name='supplier-detail', + queryset = Supplier.objects.all()) + + manufacturer = serializers.HyperlinkedRelatedField(view_name='manufacturer-detail', + queryset = Manufacturer.objects.all()) class Meta: model = SupplierPart + #extra_kwargs = {'url': {'view_name': 'supplier-part-detail'}} fields = ['url', 'part', 'supplier', diff --git a/InvenTree/supplier/urls.py b/InvenTree/supplier/urls.py index 28eb7c1699..5efac75d31 100644 --- a/InvenTree/supplier/urls.py +++ b/InvenTree/supplier/urls.py @@ -3,14 +3,14 @@ from django.conf.urls import url, include from . import views partpatterns = [ - url(r'^(?P[0-9]+)/?$', views.SupplierPartDetail.as_view(), name='supplier-part-detail'), + url(r'^(?P[0-9]+)/?$', views.SupplierPartDetail.as_view(), name='supplierpart-detail'), url(r'^\?.*/?$', views.SupplierPartList.as_view()), url(r'^$', views.SupplierPartList.as_view()) ] pricepatterns = [ - url(r'^(?P[0-9]+)/?$', views.SupplierPriceBreakDetail.as_view(), name='price-break-detail'), + url(r'^(?P[0-9]+)/?$', views.SupplierPriceBreakDetail.as_view(), name='supplierpricebreak-detail'), url(r'^\?.*/?$', views.SupplierPriceBreakList.as_view()), url(r'^$', views.SupplierPriceBreakList.as_view()) @@ -19,13 +19,13 @@ pricepatterns = [ urlpatterns = [ # Supplier part information - url(r'part/?', include(partpatterns)), + url(r'part/', include(partpatterns)), # Supplier price information - url(r'price/?', include(pricepatterns)), + url(r'price/', include(pricepatterns)), # Display details of a supplier - url(r'^(?P[0-9]+)/?$', views.SupplierDetail.as_view(), name='supplier-detail'), + url(r'^(?P[0-9]+)/$', views.SupplierDetail.as_view(), name='supplier-detail'), # List suppliers url(r'^\?.*/?$', views.SupplierList.as_view()), diff --git a/InvenTree/supplier/views.py b/InvenTree/supplier/views.py index e6fa2e628b..a12a7f5124 100644 --- a/InvenTree/supplier/views.py +++ b/InvenTree/supplier/views.py @@ -1,9 +1,40 @@ from rest_framework import generics, permissions from .models import Supplier, SupplierPart, SupplierPriceBreak +from .models import Manufacturer, Customer from .serializers import SupplierSerializer from .serializers import SupplierPartSerializer from .serializers import SupplierPriceBreakSerializer +from .serializers import ManufacturerSerializer +from .serializers import CustomerSerializer + + +class ManufacturerDetail(generics.RetrieveUpdateDestroyAPIView): + + queryset = Manufacturer.objects.all() + serializer_class = ManufacturerSerializer + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + +class ManufacturerList(generics.ListCreateAPIView): + + queryset = Manufacturer.objects.all() + serializer_class = ManufacturerSerializer + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + +class CustomerDetail(generics.RetrieveUpdateDestroyAPIView): + + queryset = Customer.objects.all() + serializer_class = CustomerSerializer + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + +class CustomerList(generics.ListCreateAPIView): + + queryset = Customer.objects.all() + serializer_class = CustomerSerializer + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) class SupplierDetail(generics.RetrieveUpdateDestroyAPIView):