2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-01 11:10:54 +00:00

Metadata API refactor (#4545)

* Add generic metadata API endpoint

(cherry picked from commit 7bbd53fc7647e2bb18d36c8c351e3fc080037ab1)

* Refactor metadata endpoints for build models

(cherry picked from commit 722b44e1259f1c5b046c7bc4328995b8238fc342)

* Update metadata views for company models

* labels

* orders

* part

* report

* stock
This commit is contained in:
Oliver
2023-03-31 10:42:54 +11:00
committed by GitHub
parent 327ecf2156
commit 08d0084e07
8 changed files with 66 additions and 283 deletions

View File

@ -20,11 +20,11 @@ from common.models import InvenTreeSetting
from common.settings import settings
from company.models import SupplierPart
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
ListCreateDestroyAPIView, StatusView)
ListCreateDestroyAPIView, MetadataView, StatusView)
from InvenTree.filters import InvenTreeOrderingFilter
from InvenTree.helpers import DownloadFile, str2bool
from InvenTree.mixins import (CreateAPI, ListAPI, ListCreateAPI,
RetrieveUpdateAPI, RetrieveUpdateDestroyAPI)
RetrieveUpdateDestroyAPI)
from InvenTree.status_codes import (PurchaseOrderStatus, ReturnOrderLineStatus,
ReturnOrderStatus, SalesOrderStatus)
from order.admin import (PurchaseOrderExtraLineResource,
@ -32,7 +32,6 @@ from order.admin import (PurchaseOrderExtraLineResource,
ReturnOrderResource, SalesOrderExtraLineResource,
SalesOrderLineItemResource, SalesOrderResource)
from part.models import Part
from plugin.serializers import MetadataSerializer
from users.models import Owner
@ -385,16 +384,6 @@ class PurchaseOrderIssue(PurchaseOrderContextMixin, CreateAPI):
serializer_class = serializers.PurchaseOrderIssueSerializer
class PurchaseOrderMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating PurchaseOrder metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance for a PurchaseOrder"""
return MetadataSerializer(models.PurchaseOrder, *args, **kwargs)
queryset = models.PurchaseOrder.objects.all()
class PurchaseOrderReceive(PurchaseOrderContextMixin, CreateAPI):
"""API endpoint to receive stock items against a PurchaseOrder.
@ -557,16 +546,6 @@ class PurchaseOrderLineItemDetail(PurchaseOrderLineItemMixin, RetrieveUpdateDest
pass
class PurchaseOrderLineItemMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating PurchaseOrderLineItem metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance for a Company"""
return MetadataSerializer(models.PurchaseOrderLineItem, *args, **kwargs)
queryset = models.PurchaseOrderLineItem.objects.all()
class PurchaseOrderExtraLineList(GeneralExtraLineList, ListCreateAPI):
"""API endpoint for accessing a list of PurchaseOrderExtraLine objects."""
@ -590,16 +569,6 @@ class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI):
serializer_class = serializers.PurchaseOrderExtraLineSerializer
class PurchaseOrderExtraLineItemMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating PurchaseOrderExtraLineItem metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance"""
return MetadataSerializer(models.PurchaseOrderExtraLine, *args, **kwargs)
queryset = models.PurchaseOrderExtraLine.objects.all()
class SalesOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
"""API endpoint for listing (and creating) a SalesOrderAttachment (file upload)"""
@ -873,16 +842,6 @@ class SalesOrderLineItemDetail(SalesOrderLineItemMixin, RetrieveUpdateDestroyAPI
pass
class SalesOrderLineItemMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating SalesOrderLineItem metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance"""
return MetadataSerializer(models.SalesOrderLineItem, *args, **kwargs)
queryset = models.SalesOrderLineItem.objects.all()
class SalesOrderExtraLineList(GeneralExtraLineList, ListCreateAPI):
"""API endpoint for accessing a list of SalesOrderExtraLine objects."""
@ -906,16 +865,6 @@ class SalesOrderExtraLineDetail(RetrieveUpdateDestroyAPI):
serializer_class = serializers.SalesOrderExtraLineSerializer
class SalesOrderExtraLineItemMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating SalesOrderExtraLineItem metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance"""
return MetadataSerializer(models.SalesOrderExtraLine, *args, **kwargs)
queryset = models.SalesOrderExtraLine.objects.all()
class SalesOrderContextMixin:
"""Mixin to add sales order object as serializer context variable."""
@ -951,16 +900,6 @@ class SalesOrderComplete(SalesOrderContextMixin, CreateAPI):
serializer_class = serializers.SalesOrderCompleteSerializer
class SalesOrderMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating SalesOrder metadata."""
def get_serializer(self, *args, **kwargs):
"""Return a metadata serializer for the SalesOrder model"""
return MetadataSerializer(models.SalesOrder, *args, **kwargs)
queryset = models.SalesOrder.objects.all()
class SalesOrderAllocateSerials(SalesOrderContextMixin, CreateAPI):
"""API endpoint to allocation stock items against a SalesOrder, by specifying serial numbers."""
@ -1122,16 +1061,6 @@ class SalesOrderShipmentComplete(CreateAPI):
return ctx
class SalesOrderShipmentMetadata(RetrieveUpdateAPI):
"""API endpoint for viewing / updating SalesOrderShipment metadata."""
def get_serializer(self, *args, **kwargs):
"""Return MetadataSerializer instance"""
return MetadataSerializer(models.SalesOrderShipment, *args, **kwargs)
queryset = models.SalesOrderShipment.objects.all()
class PurchaseOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
"""API endpoint for listing (and creating) a PurchaseOrderAttachment (file upload)"""
@ -1604,7 +1533,7 @@ order_api_urls = [
re_path(r'^cancel/', PurchaseOrderCancel.as_view(), name='api-po-cancel'),
re_path(r'^complete/', PurchaseOrderComplete.as_view(), name='api-po-complete'),
re_path(r'^issue/', PurchaseOrderIssue.as_view(), name='api-po-issue'),
re_path(r'^metadata/', PurchaseOrderMetadata.as_view(), name='api-po-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrder}, name='api-po-metadata'),
re_path(r'^receive/', PurchaseOrderReceive.as_view(), name='api-po-receive'),
# PurchaseOrder detail API endpoint
@ -1621,7 +1550,7 @@ order_api_urls = [
# API endpoints for purchase order line items
re_path(r'^po-line/', include([
path('<int:pk>/', include([
re_path(r'^metadata/', PurchaseOrderLineItemMetadata.as_view(), name='api-po-line-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrderLineItem}, name='api-po-line-metadata'),
re_path(r'^.*$', PurchaseOrderLineItemDetail.as_view(), name='api-po-line-detail'),
])),
re_path(r'^.*$', PurchaseOrderLineItemList.as_view(), name='api-po-line-list'),
@ -1630,7 +1559,7 @@ order_api_urls = [
# API endpoints for purchase order extra line
re_path(r'^po-extra-line/', include([
path('<int:pk>/', include([
re_path(r'^metadata/', PurchaseOrderExtraLineItemMetadata.as_view(), name='api-po-extra-line-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrderExtraLine}, name='api-po-extra-line-metadata'),
re_path(r'^.*$', PurchaseOrderExtraLineDetail.as_view(), name='api-po-extra-line-detail'),
])),
path('', PurchaseOrderExtraLineList.as_view(), name='api-po-extra-line-list'),
@ -1646,7 +1575,7 @@ order_api_urls = [
re_path(r'^shipment/', include([
path(r'<int:pk>/', include([
path('ship/', SalesOrderShipmentComplete.as_view(), name='api-so-shipment-ship'),
re_path(r'^metadata/', SalesOrderShipmentMetadata.as_view(), name='api-so-shipment-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderShipment}, name='api-so-shipment-metadata'),
re_path(r'^.*$', SalesOrderShipmentDetail.as_view(), name='api-so-shipment-detail'),
])),
re_path(r'^.*$', SalesOrderShipmentList.as_view(), name='api-so-shipment-list'),
@ -1659,7 +1588,7 @@ order_api_urls = [
re_path(r'^cancel/', SalesOrderCancel.as_view(), name='api-so-cancel'),
re_path(r'^issue/', SalesOrderIssue.as_view(), name='api-so-issue'),
re_path(r'^complete/', SalesOrderComplete.as_view(), name='api-so-complete'),
re_path(r'^metadata/', SalesOrderMetadata.as_view(), name='api-so-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrder}, name='api-so-metadata'),
# SalesOrder detail endpoint
re_path(r'^.*$', SalesOrderDetail.as_view(), name='api-so-detail'),
@ -1675,7 +1604,7 @@ order_api_urls = [
# API endpoints for sales order line items
re_path(r'^so-line/', include([
path('<int:pk>/', include([
re_path(r'^metadata/', SalesOrderLineItemMetadata.as_view(), name='api-so-line-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderLineItem}, name='api-so-line-metadata'),
re_path(r'^.*$', SalesOrderLineItemDetail.as_view(), name='api-so-line-detail'),
])),
path('', SalesOrderLineItemList.as_view(), name='api-so-line-list'),
@ -1684,7 +1613,7 @@ order_api_urls = [
# API endpoints for sales order extra line
re_path(r'^so-extra-line/', include([
path('<int:pk>/', include([
re_path(r'^metadata/', SalesOrderExtraLineItemMetadata.as_view(), name='api-so-extra-line-metadata'),
re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderExtraLine}, name='api-so-extra-line-metadata'),
re_path(r'^.*$', SalesOrderExtraLineDetail.as_view(), name='api-so-extra-line-detail'),
])),
path('', SalesOrderExtraLineList.as_view(), name='api-so-extra-line-list'),