mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +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'))
|
print(os.path.join(BASE_DIR, 'templates'))
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
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'
|
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 supplier.urls import supplier_api_urls, supplier_api_part_urls
|
||||||
from company.urls import company_urls
|
from company.urls import company_urls
|
||||||
|
from company.api import company_api_urls
|
||||||
|
|
||||||
from build.urls import build_urls
|
from build.urls import build_urls
|
||||||
|
|
||||||
@ -27,19 +28,21 @@ from users.urls import user_urls
|
|||||||
admin.site.site_header = "InvenTree Admin"
|
admin.site.site_header = "InvenTree Admin"
|
||||||
|
|
||||||
apipatterns = [
|
apipatterns = [
|
||||||
|
url(r'^company/', include(company_api_urls)),
|
||||||
|
|
||||||
|
|
||||||
# Stock URLs
|
# Stock URLs
|
||||||
url(r'^stock/', include(stock_api_urls)),
|
#url(r'^stock/', include(stock_api_urls)),
|
||||||
url(r'^stock-location/', include(stock_api_loc_urls)),
|
#url(r'^stock-location/', include(stock_api_loc_urls)),
|
||||||
|
|
||||||
# Part URLs
|
# Part URLs
|
||||||
url(r'^part/', include(part_api_urls)),
|
#url(r'^part/', include(part_api_urls)),
|
||||||
url(r'^part-category/', include(part_cat_api_urls)),
|
#url(r'^part-category/', include(part_cat_api_urls)),
|
||||||
# url(r'^part-param/', include(part_param_urls)),
|
# url(r'^part-param/', include(part_param_urls)),
|
||||||
# url(r'^part-param-template/', include(part_param_template_urls)),
|
# url(r'^part-param-template/', include(part_param_template_urls)),
|
||||||
|
|
||||||
# Part BOM URLs
|
# Part BOM URLs
|
||||||
url(r'^bom/', include(bom_api_urls)),
|
#url(r'^bom/', include(bom_api_urls)),
|
||||||
|
|
||||||
# Supplier URLs
|
# Supplier URLs
|
||||||
# url(r'^supplier/', include(supplier_api_urls)),
|
# url(r'^supplier/', include(supplier_api_urls)),
|
||||||
@ -64,7 +67,7 @@ apipatterns = [
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
# API URL
|
# API URL
|
||||||
# url(r'^api/', include(apipatterns)),
|
url(r'^api/', include(apipatterns)),
|
||||||
# url(r'^api-doc/', include_docs_urls(title='InvenTree API')),
|
# url(r'^api-doc/', include_docs_urls(title='InvenTree API')),
|
||||||
|
|
||||||
url(r'^part/', include(part_urls)),
|
url(r'^part/', include(part_urls)),
|
||||||
|
@ -1,208 +1,47 @@
|
|||||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||||
|
from rest_framework import filters
|
||||||
|
|
||||||
from rest_framework import generics, permissions
|
from rest_framework import generics, permissions
|
||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
from .models import Supplier, SupplierPart, SupplierPriceBreak
|
from .models import Company
|
||||||
from .models import Manufacturer, Customer
|
from .serializers import CompanySerializer
|
||||||
from .serializers import SupplierSerializer
|
|
||||||
from .serializers import SupplierPartSerializer
|
|
||||||
from .serializers import SupplierPriceBreakSerializer
|
|
||||||
from .serializers import ManufacturerSerializer
|
|
||||||
from .serializers import CustomerSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class ManufacturerDetail(generics.RetrieveUpdateDestroyAPIView):
|
|
||||||
"""
|
|
||||||
|
|
||||||
get:
|
|
||||||
Return a single Manufacturer
|
|
||||||
|
|
||||||
post:
|
class CompanyList(generics.ListCreateAPIView):
|
||||||
Update a Manufacturer
|
|
||||||
|
|
||||||
delete:
|
serializer_class = CompanySerializer
|
||||||
Remove a Manufacturer
|
queryset = Company.objects.all()
|
||||||
|
permission_classes = [
|
||||||
|
permissions.IsAuthenticatedOrReadOnly,
|
||||||
|
]
|
||||||
|
|
||||||
"""
|
filter_backends = [
|
||||||
|
DjangoFilterBackend,
|
||||||
|
filters.SearchFilter,
|
||||||
|
]
|
||||||
|
|
||||||
queryset = Manufacturer.objects.all()
|
filter_fields = [
|
||||||
serializer_class = ManufacturerSerializer
|
'name',
|
||||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
'is_customer',
|
||||||
|
'is_supplier',
|
||||||
|
]
|
||||||
|
|
||||||
|
search_fields = [
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
]
|
||||||
|
|
||||||
class ManufacturerList(generics.ListCreateAPIView):
|
ordering_fields = [
|
||||||
"""
|
'name',
|
||||||
|
]
|
||||||
|
|
||||||
get:
|
ordering = 'name'
|
||||||
Return a list of all Manufacturers
|
|
||||||
|
|
||||||
post:
|
|
||||||
Create a new Manufacturer
|
|
||||||
|
|
||||||
"""
|
company_api_urls = [
|
||||||
|
|
||||||
queryset = Manufacturer.objects.all()
|
url(r'^.*$', CompanyList.as_view(), name='api-company-list'),
|
||||||
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
|
|
@ -28,7 +28,7 @@ def rename_company_image(instance, filename):
|
|||||||
class Company(models.Model):
|
class Company(models.Model):
|
||||||
|
|
||||||
name = models.CharField(max_length=100, unique=True,
|
name = models.CharField(max_length=100, unique=True,
|
||||||
help_text='Company naem')
|
help_text='Company name')
|
||||||
|
|
||||||
description = models.CharField(max_length=500)
|
description = models.CharField(max_length=500)
|
||||||
|
|
||||||
|
@ -2,54 +2,10 @@ from rest_framework import serializers
|
|||||||
|
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
from .models import Company, SupplierPart, SupplierPriceBreak
|
from .models import Company
|
||||||
|
|
||||||
|
|
||||||
class CompanySerializer(serializers.HyperlinkedModelSerializer):
|
class CompanySerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Company
|
model = Company
|
||||||
fields = '__all__'
|
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…
x
Reference in New Issue
Block a user