mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	Fixes for build item allocation rendering
This commit is contained in:
		@@ -16,9 +16,13 @@ Increment thi API version number whenever there is a significant change to the A
 | 
				
			|||||||
v3 -> 2021-05-22:
 | 
					v3 -> 2021-05-22:
 | 
				
			||||||
    - The updated StockItem "history tracking" now uses a different interface
 | 
					    - The updated StockItem "history tracking" now uses a different interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					v4 -> 2021-06-01
 | 
				
			||||||
 | 
					    - BOM items can now accept "variant stock" to be assigned against them
 | 
				
			||||||
 | 
					    - Many slight API tweaks were needed to get this to work properly!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INVENTREE_API_VERSION = 3
 | 
					INVENTREE_API_VERSION = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def inventreeInstanceName():
 | 
					def inventreeInstanceName():
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@ from InvenTree.models import InvenTreeAttachment
 | 
				
			|||||||
import common.models
 | 
					import common.models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import InvenTree.fields
 | 
					import InvenTree.fields
 | 
				
			||||||
 | 
					import InvenTree.helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from stock import models as StockModels
 | 
					from stock import models as StockModels
 | 
				
			||||||
from part import models as PartModels
 | 
					from part import models as PartModels
 | 
				
			||||||
@@ -1280,6 +1281,18 @@ class BuildItem(models.Model):
 | 
				
			|||||||
            # Simply remove the items from stock
 | 
					            # Simply remove the items from stock
 | 
				
			||||||
            item.take_stock(self.quantity, user)
 | 
					            item.take_stock(self.quantity, user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def getStockItemThumbnail(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Return qualified URL for part thumbnail image
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if self.stock_item and self.stock_item.part:
 | 
				
			||||||
 | 
					            return InvenTree.helpers.getMediaUrl(self.stock_item.part.image.thumbnail.url)
 | 
				
			||||||
 | 
					        elif self.bom_item and self.stock_item.sub_part:
 | 
				
			||||||
 | 
					            return InvenTree.helpers.getMediaUrl(self.bom_item.sub_part.image.thumbnail.url)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return InvenTree.helpers.getBlankThumbnail()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    build = models.ForeignKey(
 | 
					    build = models.ForeignKey(
 | 
				
			||||||
        Build,
 | 
					        Build,
 | 
				
			||||||
        on_delete=models.CASCADE,
 | 
					        on_delete=models.CASCADE,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,9 +97,10 @@ class BuildSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
class BuildItemSerializer(InvenTreeModelSerializer):
 | 
					class BuildItemSerializer(InvenTreeModelSerializer):
 | 
				
			||||||
    """ Serializes a BuildItem object """
 | 
					    """ Serializes a BuildItem object """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bom_part = serializers.IntegerField(source='bom_item.sub_part.pk', read_only=True)
 | 
				
			||||||
    part = serializers.IntegerField(source='stock_item.part.pk', read_only=True)
 | 
					    part = serializers.IntegerField(source='stock_item.part.pk', read_only=True)
 | 
				
			||||||
    part_name = serializers.CharField(source='stock_item.part.full_name', read_only=True)
 | 
					    part_name = serializers.CharField(source='stock_item.part.full_name', read_only=True)
 | 
				
			||||||
    part_image = serializers.CharField(source='stock_item.part.image', read_only=True)
 | 
					    part_thumb = serializers.CharField(source='getStockItemThumbnail', read_only=True)
 | 
				
			||||||
    stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True)
 | 
					    stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    quantity = serializers.FloatField()
 | 
					    quantity = serializers.FloatField()
 | 
				
			||||||
@@ -108,11 +109,12 @@ class BuildItemSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
        model = BuildItem
 | 
					        model = BuildItem
 | 
				
			||||||
        fields = [
 | 
					        fields = [
 | 
				
			||||||
            'pk',
 | 
					            'pk',
 | 
				
			||||||
 | 
					            'bom_part',
 | 
				
			||||||
            'build',
 | 
					            'build',
 | 
				
			||||||
            'install_into',
 | 
					            'install_into',
 | 
				
			||||||
            'part',
 | 
					            'part',
 | 
				
			||||||
            'part_name',
 | 
					            'part_name',
 | 
				
			||||||
            'part_image',
 | 
					            'part_thumb',
 | 
				
			||||||
            'stock_item',
 | 
					            'stock_item',
 | 
				
			||||||
            'stock_item_detail',
 | 
					            'stock_item_detail',
 | 
				
			||||||
            'quantity'
 | 
					            'quantity'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -372,7 +372,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
 | 
				
			|||||||
                        data.forEach(function(item) {
 | 
					                        data.forEach(function(item) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            // Group BuildItem objects by part
 | 
					                            // Group BuildItem objects by part
 | 
				
			||||||
                            var part = item.part;
 | 
					                            var part = item.bom_part || item.part;
 | 
				
			||||||
                            var key = parseInt(part);
 | 
					                            var key = parseInt(part);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if (!(key in allocations)) {
 | 
					                            if (!(key in allocations)) {
 | 
				
			||||||
@@ -461,6 +461,16 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
 | 
				
			|||||||
                data: row.allocations,
 | 
					                data: row.allocations,
 | 
				
			||||||
                showHeader: true,
 | 
					                showHeader: true,
 | 
				
			||||||
                columns: [
 | 
					                columns: [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        field: 'part',
 | 
				
			||||||
 | 
					                        title: '{% trans "Part" %}',
 | 
				
			||||||
 | 
					                        formatter: function(value, row) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            var html = imageHoverIcon(row.part_thumb);
 | 
				
			||||||
 | 
					                            html += renderLink(row.part_name, `/part/${value}/`);
 | 
				
			||||||
 | 
					                            return html;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        width: '50%',
 | 
					                        width: '50%',
 | 
				
			||||||
                        field: 'quantity',
 | 
					                        field: 'quantity',
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user