mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Moar stuffs:
- Expose part_detail and order_detail to SOLineItem serializer - Update SalesOrder line item table
This commit is contained in:
parent
a2c0c7c76a
commit
617fbf2f02
@ -80,6 +80,7 @@ class SalesOrderLineItemAdmin(ImportExportModelAdmin):
|
|||||||
|
|
||||||
list_display = (
|
list_display = (
|
||||||
'order',
|
'order',
|
||||||
|
'part',
|
||||||
'quantity',
|
'quantity',
|
||||||
'reference'
|
'reference'
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,7 @@ from .models import PurchaseOrder, PurchaseOrderLineItem
|
|||||||
from .serializers import POSerializer, POLineItemSerializer
|
from .serializers import POSerializer, POLineItemSerializer
|
||||||
|
|
||||||
from .models import SalesOrder, SalesOrderLineItem
|
from .models import SalesOrder, SalesOrderLineItem
|
||||||
from .serializers import SalseOrderSerializer, SOLineItemSerializer
|
from .serializers import SalesOrderSerializer, SOLineItemSerializer
|
||||||
|
|
||||||
|
|
||||||
class POList(generics.ListCreateAPIView):
|
class POList(generics.ListCreateAPIView):
|
||||||
@ -196,7 +196,7 @@ class SOList(generics.ListCreateAPIView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = SalesOrder.objects.all()
|
queryset = SalesOrder.objects.all()
|
||||||
serializer_class = SalseOrderSerializer
|
serializer_class = SalesOrderSerializer
|
||||||
|
|
||||||
def get_serializer(self, *args, **kwargs):
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ class SOList(generics.ListCreateAPIView):
|
|||||||
'lines'
|
'lines'
|
||||||
)
|
)
|
||||||
|
|
||||||
queryset = SalseOrderSerializer.annotate_queryset(queryset)
|
queryset = SalesOrderSerializer.annotate_queryset(queryset)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
@ -269,7 +269,7 @@ class SODetail(generics.RetrieveUpdateAPIView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = SalesOrder.objects.all()
|
queryset = SalesOrder.objects.all()
|
||||||
serializer_class = SalseOrderSerializer
|
serializer_class = SalesOrderSerializer
|
||||||
|
|
||||||
def get_serializer(self, *args, **kwargs):
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|
||||||
@ -288,7 +288,7 @@ class SODetail(generics.RetrieveUpdateAPIView):
|
|||||||
|
|
||||||
queryset = queryset.prefetch_related('customer', 'lines')
|
queryset = queryset.prefetch_related('customer', 'lines')
|
||||||
|
|
||||||
queryset = SalseOrderSerializer.annotate_queryset(queryset)
|
queryset = SalesOrderSerializer.annotate_queryset(queryset)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
@ -303,6 +303,32 @@ class SOLineItemList(generics.ListCreateAPIView):
|
|||||||
queryset = SalesOrderLineItem.objects.all()
|
queryset = SalesOrderLineItem.objects.all()
|
||||||
serializer_class = SOLineItemSerializer
|
serializer_class = SOLineItemSerializer
|
||||||
|
|
||||||
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|
||||||
|
try:
|
||||||
|
kwargs['part_detail'] = str2bool(self.request.query_params.get('part_detail', False))
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
kwargs['order_detail'] = str2bool(self.request.query_params.get('order_detail', False))
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
kwargs['context'] = self.get_serializer_context()
|
||||||
|
|
||||||
|
return self.serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
|
def get_queryset(self, *args, **kwargs):
|
||||||
|
|
||||||
|
queryset = super().get_queryset(*args, **kwargs)
|
||||||
|
|
||||||
|
return queryset.prefetch_related(
|
||||||
|
'part',
|
||||||
|
'part__stock_items',
|
||||||
|
'order',
|
||||||
|
)
|
||||||
|
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
|
@ -11,6 +11,7 @@ from django.db.models import Count
|
|||||||
|
|
||||||
from InvenTree.serializers import InvenTreeModelSerializer
|
from InvenTree.serializers import InvenTreeModelSerializer
|
||||||
from company.serializers import CompanyBriefSerializer
|
from company.serializers import CompanyBriefSerializer
|
||||||
|
from part.serializers import PartBriefSerializer
|
||||||
|
|
||||||
from .models import PurchaseOrder, PurchaseOrderLineItem
|
from .models import PurchaseOrder, PurchaseOrderLineItem
|
||||||
from .models import SalesOrder, SalesOrderLineItem
|
from .models import SalesOrder, SalesOrderLineItem
|
||||||
@ -86,7 +87,7 @@ class POLineItemSerializer(InvenTreeModelSerializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class SalseOrderSerializer(InvenTreeModelSerializer):
|
class SalesOrderSerializer(InvenTreeModelSerializer):
|
||||||
"""
|
"""
|
||||||
Serializers for the SalesOrder object
|
Serializers for the SalesOrder object
|
||||||
"""
|
"""
|
||||||
@ -145,6 +146,22 @@ class SalseOrderSerializer(InvenTreeModelSerializer):
|
|||||||
class SOLineItemSerializer(InvenTreeModelSerializer):
|
class SOLineItemSerializer(InvenTreeModelSerializer):
|
||||||
""" Serializer for a SalesOrderLineItem object """
|
""" Serializer for a SalesOrderLineItem object """
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
||||||
|
part_detail = kwargs.pop('part_detail', False)
|
||||||
|
order_detail = kwargs.pop('order_detail', False)
|
||||||
|
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
if part_detail is not True:
|
||||||
|
self.fields.pop('part_detail')
|
||||||
|
|
||||||
|
if order_detail is not True:
|
||||||
|
self.fields.pop('order_detail')
|
||||||
|
|
||||||
|
order_detail = SalesOrderSerializer(source='order', many=False, read_only=True)
|
||||||
|
part_detail = PartBriefSerializer(source='part', many=False, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SalesOrderLineItem
|
model = SalesOrderLineItem
|
||||||
|
|
||||||
@ -154,4 +171,7 @@ class SOLineItemSerializer(InvenTreeModelSerializer):
|
|||||||
'reference',
|
'reference',
|
||||||
'notes',
|
'notes',
|
||||||
'order',
|
'order',
|
||||||
|
'order_detail',
|
||||||
|
'part',
|
||||||
|
'part_detail',
|
||||||
]
|
]
|
||||||
|
@ -32,6 +32,7 @@ $("#so-lines-table").inventreeTable({
|
|||||||
formatNoMatches: function() { return "No matching line items"; },
|
formatNoMatches: function() { return "No matching line items"; },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
order: {{ order.id }},
|
order: {{ order.id }},
|
||||||
|
part_detail: true,
|
||||||
},
|
},
|
||||||
url: "{% url 'api-so-line-list' %}",
|
url: "{% url 'api-so-line-list' %}",
|
||||||
columns: [
|
columns: [
|
||||||
@ -40,6 +41,18 @@ $("#so-lines-table").inventreeTable({
|
|||||||
title: 'ID',
|
title: 'ID',
|
||||||
visible: false,
|
visible: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
sortable: true,
|
||||||
|
field: 'part',
|
||||||
|
title: 'Part',
|
||||||
|
formatter: function(value, row, index, field) {
|
||||||
|
if (row.part) {
|
||||||
|
return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${value}/`);
|
||||||
|
} else {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
sortable: true,
|
sortable: true,
|
||||||
field: 'reference',
|
field: 'reference',
|
||||||
|
@ -61,6 +61,10 @@ purchase_order_urls = [
|
|||||||
url(r'^.*$', views.PurchaseOrderIndex.as_view(), name='po-index'),
|
url(r'^.*$', views.PurchaseOrderIndex.as_view(), name='po-index'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
so_line_urls = [
|
||||||
|
url(r'^new/', views.SOLineItemCreate.as_view(), name='so-line-item-create'),
|
||||||
|
]
|
||||||
|
|
||||||
sales_order_detail_urls = [
|
sales_order_detail_urls = [
|
||||||
|
|
||||||
url(r'^edit/', views.SalesOrderEdit.as_view(), name='so-edit'),
|
url(r'^edit/', views.SalesOrderEdit.as_view(), name='so-edit'),
|
||||||
@ -75,6 +79,8 @@ sales_order_urls = [
|
|||||||
|
|
||||||
url(r'^new/', views.SalesOrderCreate.as_view(), name='so-create'),
|
url(r'^new/', views.SalesOrderCreate.as_view(), name='so-create'),
|
||||||
|
|
||||||
|
url(r'^line/', include(so_line_urls)),
|
||||||
|
|
||||||
# Display detail view for a single SalesOrder
|
# Display detail view for a single SalesOrder
|
||||||
url(r'^(?P<pk>\d+)/', include(sales_order_detail_urls)),
|
url(r'^(?P<pk>\d+)/', include(sales_order_detail_urls)),
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user