Fix BOM table rendering

- Price was not being sent in the PartBriefSerializer!
This commit is contained in:
Oliver Walters 2020-04-28 23:17:15 +10:00
parent df218a5193
commit 087001f29d
5 changed files with 39 additions and 23 deletions

View File

@ -185,26 +185,20 @@ function loadBomTable(table, options) {
if (!options.editable) {
cols.push(
{
field: 'sub_part_detail.total_stock',
field: 'sub_part_detail.stock',
title: 'Available',
searchable: false,
sortable: true,
formatter: function(value, row, index, field) {
var text = "";
if (row.quantity < row.sub_part_detail.total_stock)
{
text = "<span class='label label-success'>" + value + "</span>";
}
else
{
if (!value) {
value = 'No Stock';
}
text = "<span class='label label-warning'>" + value + "</span>";
var url = `/part/${row.sub_part_detail.pk}/stock/`;
var text = value;
if (value == null || value <= 0) {
text = `<span class='label label-warning'>No Stock</span>`;
}
return renderLink(text, row.sub_part_detail.url + "stock/");
return renderLink(text, url);
}
});

View File

@ -468,14 +468,14 @@ class BomList(generics.ListCreateAPIView):
# Do we wish to include extra detail?
try:
part_detail = str2bool(self.request.GET.get('part_detail', None))
sub_part_detail = str2bool(self.request.GET.get('sub_part_detail', None))
kwargs['part_detail'] = str2bool(self.request.GET.get('part_detail', None))
except AttributeError:
part_detail = None
sub_part_detail = None
pass
kwargs['part_detail'] = part_detail
kwargs['sub_part_detail'] = sub_part_detail
try:
kwargs['sub_part_detail'] = str2bool(self.request.GET.get('sub_part_detail', None))
except AttributeError:
pass
# Ensure the request context is passed through!
kwargs['context'] = self.get_serializer_context()
@ -486,6 +486,12 @@ class BomList(generics.ListCreateAPIView):
queryset = BomItem.objects.all()
queryset = self.get_serializer_class().setup_eager_loading(queryset)
return queryset
def filter_queryset(self, queryset):
query = super().filter_queryset(queryset)
# Filter by part?
part = self.request.query_params.get('part', None)

View File

@ -1242,6 +1242,17 @@ class BomItem(models.Model):
child=self.sub_part.full_name,
n=helpers.decimal2string(self.quantity))
def available_stock(self):
"""
Return the available stock items for the referenced sub_part
"""
query = self.sub_part.stock_items.filter(StockModels.StockItem.IN_STOCK_FILTER).aggregate(
available=Coalesce(Sum('quantity'), 0)
)
return query['available']
def get_overage_quantity(self, quantity):
""" Calculate overage quantity
"""

View File

@ -54,6 +54,8 @@ class PartBriefSerializer(InvenTreeModelSerializer):
thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True)
stock = serializers.FloatField(source='total_stock')
class Meta:
model = Part
fields = [
@ -65,6 +67,7 @@ class PartBriefSerializer(InvenTreeModelSerializer):
'assembly',
'purchaseable',
'salable',
'stock',
'virtual',
]
@ -237,6 +240,8 @@ class BomItemSerializer(InvenTreeModelSerializer):
quantity = serializers.FloatField()
available = serializers.FloatField(source='available_stock')
part_detail = PartBriefSerializer(source='part', many=False, read_only=True)
sub_part_detail = PartBriefSerializer(source='sub_part', many=False, read_only=True)
@ -277,6 +282,7 @@ class BomItemSerializer(InvenTreeModelSerializer):
'sub_part',
'sub_part_detail',
'quantity',
'available',
'reference',
'price_range',
'overage',

View File

@ -137,7 +137,6 @@ class StockItem(MPTTModel):
sales_order=None,
build_order=None,
belongs_to=None,
status__in=StockStatus.AVAILABLE_CODES
)
def save(self, *args, **kwargs):