mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Implement (basic) JSON API for company model
- Pagination - Search company name and description - Filter by is_customer and is_supplier
This commit is contained in:
parent
97f05f85de
commit
6c1784b5b9
@ -85,7 +85,9 @@ TEMPLATES = [
|
||||
print(os.path.join(BASE_DIR, 'templates'))
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
'EXCEPTION_HANDLER': 'InvenTree.utils.api_exception_handler'
|
||||
'EXCEPTION_HANDLER': 'InvenTree.utils.api_exception_handler',
|
||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
||||
'PAGE_SIZE': 50,
|
||||
}
|
||||
|
||||
WSGI_APPLICATION = 'InvenTree.wsgi.application'
|
||||
|
@ -11,6 +11,7 @@ from stock.urls import stock_urls
|
||||
|
||||
# from supplier.urls import supplier_api_urls, supplier_api_part_urls
|
||||
from company.urls import company_urls
|
||||
from company.api import company_api_urls
|
||||
|
||||
from build.urls import build_urls
|
||||
|
||||
@ -27,19 +28,21 @@ from users.urls import user_urls
|
||||
admin.site.site_header = "InvenTree Admin"
|
||||
|
||||
apipatterns = [
|
||||
url(r'^company/', include(company_api_urls)),
|
||||
|
||||
|
||||
# Stock URLs
|
||||
url(r'^stock/', include(stock_api_urls)),
|
||||
url(r'^stock-location/', include(stock_api_loc_urls)),
|
||||
#url(r'^stock/', include(stock_api_urls)),
|
||||
#url(r'^stock-location/', include(stock_api_loc_urls)),
|
||||
|
||||
# Part URLs
|
||||
url(r'^part/', include(part_api_urls)),
|
||||
url(r'^part-category/', include(part_cat_api_urls)),
|
||||
#url(r'^part/', include(part_api_urls)),
|
||||
#url(r'^part-category/', include(part_cat_api_urls)),
|
||||
# url(r'^part-param/', include(part_param_urls)),
|
||||
# url(r'^part-param-template/', include(part_param_template_urls)),
|
||||
|
||||
# Part BOM URLs
|
||||
url(r'^bom/', include(bom_api_urls)),
|
||||
#url(r'^bom/', include(bom_api_urls)),
|
||||
|
||||
# Supplier URLs
|
||||
# url(r'^supplier/', include(supplier_api_urls)),
|
||||
@ -64,7 +67,7 @@ apipatterns = [
|
||||
urlpatterns = [
|
||||
|
||||
# API URL
|
||||
# url(r'^api/', include(apipatterns)),
|
||||
url(r'^api/', include(apipatterns)),
|
||||
# url(r'^api-doc/', include_docs_urls(title='InvenTree API')),
|
||||
|
||||
url(r'^part/', include(part_urls)),
|
||||
|
@ -1,208 +1,47 @@
|
||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||
from rest_framework import filters
|
||||
|
||||
from rest_framework import generics, permissions
|
||||
from django.conf.urls import url
|
||||
|
||||
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
|
||||
from .models import Company
|
||||
from .serializers import CompanySerializer
|
||||
|
||||
|
||||
class ManufacturerDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single Manufacturer
|
||||
|
||||
post:
|
||||
Update a Manufacturer
|
||||
class CompanyList(generics.ListCreateAPIView):
|
||||
|
||||
delete:
|
||||
Remove a Manufacturer
|
||||
serializer_class = CompanySerializer
|
||||
queryset = Company.objects.all()
|
||||
permission_classes = [
|
||||
permissions.IsAuthenticatedOrReadOnly,
|
||||
]
|
||||
|
||||
"""
|
||||
filter_backends = [
|
||||
DjangoFilterBackend,
|
||||
filters.SearchFilter,
|
||||
]
|
||||
|
||||
queryset = Manufacturer.objects.all()
|
||||
serializer_class = ManufacturerSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_fields = [
|
||||
'name',
|
||||
'is_customer',
|
||||
'is_supplier',
|
||||
]
|
||||
|
||||
search_fields = [
|
||||
'name',
|
||||
'description',
|
||||
]
|
||||
|
||||
class ManufacturerList(generics.ListCreateAPIView):
|
||||
"""
|
||||
ordering_fields = [
|
||||
'name',
|
||||
]
|
||||
|
||||
get:
|
||||
Return a list of all Manufacturers
|
||||
ordering = 'name'
|
||||
|
||||
post:
|
||||
Create a new Manufacturer
|
||||
|
||||
"""
|
||||
company_api_urls = [
|
||||
|
||||
queryset = Manufacturer.objects.all()
|
||||
serializer_class = ManufacturerSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class CustomerDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single Customer
|
||||
|
||||
post:
|
||||
Update a Customer
|
||||
|
||||
delete:
|
||||
Remove a Customer
|
||||
|
||||
"""
|
||||
|
||||
queryset = Customer.objects.all()
|
||||
serializer_class = CustomerSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class CustomerList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all Cutstomers
|
||||
|
||||
post:
|
||||
Create a new Customer
|
||||
|
||||
"""
|
||||
|
||||
queryset = Customer.objects.all()
|
||||
serializer_class = CustomerSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class SupplierDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single Supplier
|
||||
|
||||
post:
|
||||
Update a supplier
|
||||
|
||||
delete:
|
||||
Remove a supplier
|
||||
|
||||
"""
|
||||
|
||||
queryset = Supplier.objects.all()
|
||||
serializer_class = SupplierSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class SupplierList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all Suppliers
|
||||
|
||||
post:
|
||||
Create a new Supplier
|
||||
|
||||
"""
|
||||
|
||||
queryset = Supplier.objects.all()
|
||||
serializer_class = SupplierSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class SupplierPartDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single SupplierPart
|
||||
|
||||
post:
|
||||
Update a SupplierPart
|
||||
|
||||
delete:
|
||||
Remove a SupplierPart
|
||||
|
||||
"""
|
||||
|
||||
queryset = SupplierPart.objects.all()
|
||||
serializer_class = SupplierPartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class SupplierPartFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = SupplierPart
|
||||
fields = ['supplier', 'part', 'manufacturer']
|
||||
|
||||
|
||||
class SupplierPartList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
List all SupplierParts
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new SupplierPart
|
||||
|
||||
"""
|
||||
|
||||
queryset = SupplierPart.objects.all()
|
||||
serializer_class = SupplierPartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = SupplierPartFilter
|
||||
|
||||
|
||||
class SupplierPriceBreakDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single SupplierPriceBreak
|
||||
|
||||
post:
|
||||
Update a SupplierPriceBreak
|
||||
|
||||
delete:
|
||||
Remove a SupplierPriceBreak
|
||||
|
||||
"""
|
||||
|
||||
queryset = SupplierPriceBreak.objects.all()
|
||||
serializer_class = SupplierPriceBreakSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class PriceBreakFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = SupplierPriceBreak
|
||||
fields = ['part']
|
||||
|
||||
|
||||
class SupplierPriceBreakList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all SupplierPriceBreaks
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new SupplierPriceBreak
|
||||
|
||||
"""
|
||||
|
||||
queryset = SupplierPriceBreak.objects.all()
|
||||
serializer_class = SupplierPriceBreakSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = PriceBreakFilter
|
||||
url(r'^.*$', CompanyList.as_view(), name='api-company-list'),
|
||||
]
|
@ -28,7 +28,7 @@ def rename_company_image(instance, filename):
|
||||
class Company(models.Model):
|
||||
|
||||
name = models.CharField(max_length=100, unique=True,
|
||||
help_text='Company naem')
|
||||
help_text='Company name')
|
||||
|
||||
description = models.CharField(max_length=500)
|
||||
|
||||
|
@ -2,54 +2,10 @@ from rest_framework import serializers
|
||||
|
||||
from part.models import Part
|
||||
|
||||
from .models import Company, SupplierPart, SupplierPriceBreak
|
||||
|
||||
from .models import Company
|
||||
|
||||
class CompanySerializer(serializers.HyperlinkedModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Company
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class SupplierPartSerializer(serializers.ModelSerializer):
|
||||
|
||||
price_breaks = serializers.HyperlinkedRelatedField(many=True,
|
||||
read_only=True,
|
||||
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
|
||||
fields = ['url',
|
||||
'part',
|
||||
'supplier',
|
||||
'SKU',
|
||||
'manufacturer',
|
||||
'MPN',
|
||||
'URL',
|
||||
'description',
|
||||
'single_price',
|
||||
'packaging',
|
||||
'multiple',
|
||||
'minimum',
|
||||
'price_breaks',
|
||||
'lead_time']
|
||||
|
||||
|
||||
class SupplierPriceBreakSerializer(serializers.HyperlinkedModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = SupplierPriceBreak
|
||||
fields = ['url',
|
||||
'part',
|
||||
'quantity',
|
||||
'cost']
|
||||
|
Loading…
Reference in New Issue
Block a user