mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 15:15:42 +00:00 
			
		
		
		
	Fixes to the way ManufacturerPart is saved, manufacturer table filtering and test units
This commit is contained in:
		@@ -94,6 +94,7 @@ class ManufacturerPartList(generics.ListCreateAPIView):
 | 
				
			|||||||
    queryset = ManufacturerPart.objects.all().prefetch_related(
 | 
					    queryset = ManufacturerPart.objects.all().prefetch_related(
 | 
				
			||||||
        'part',
 | 
					        'part',
 | 
				
			||||||
        'manufacturer',
 | 
					        'manufacturer',
 | 
				
			||||||
 | 
					        'supplier_parts',
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serializer_class = ManufacturerPartSerializer
 | 
					    serializer_class = ManufacturerPartSerializer
 | 
				
			||||||
@@ -141,6 +142,12 @@ class ManufacturerPartList(generics.ListCreateAPIView):
 | 
				
			|||||||
        if part is not None:
 | 
					        if part is not None:
 | 
				
			||||||
            queryset = queryset.filter(part=part)
 | 
					            queryset = queryset.filter(part=part)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by supplier part?
 | 
				
			||||||
 | 
					        supplier_part = params.get('supplier_part', None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if supplier_part is not None:
 | 
				
			||||||
 | 
					            queryset = queryset.filter(supplier_parts=supplier_part)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Filter by 'active' status of the part?
 | 
					        # Filter by 'active' status of the part?
 | 
				
			||||||
        active = params.get('active', None)
 | 
					        active = params.get('active', None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,3 +20,20 @@
 | 
				
			|||||||
    part: 5
 | 
					    part: 5
 | 
				
			||||||
    manufacturer: 7
 | 
					    manufacturer: 7
 | 
				
			||||||
    MPN: 'MPN789'
 | 
					    MPN: 'MPN789'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Supplier parts linked to Manufacturer parts
 | 
				
			||||||
 | 
					- model: company.supplierpart
 | 
				
			||||||
 | 
					  pk: 10
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    part: 3
 | 
				
			||||||
 | 
					    manufacturer_part: 2
 | 
				
			||||||
 | 
					    supplier: 2
 | 
				
			||||||
 | 
					    SKU: 'MPN456-APPEL'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: company.supplierpart
 | 
				
			||||||
 | 
					  pk: 11
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    part: 3
 | 
				
			||||||
 | 
					    manufacturer_part: 2
 | 
				
			||||||
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    SKU: 'MPN456-ZERG'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,20 +52,3 @@
 | 
				
			|||||||
    part: 2
 | 
					    part: 2
 | 
				
			||||||
    supplier: 2
 | 
					    supplier: 2
 | 
				
			||||||
    SKU: 'ZERGM312'
 | 
					    SKU: 'ZERGM312'
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Supplier parts linked to Manufacturer parts
 | 
					 | 
				
			||||||
- model: company.supplierpart
 | 
					 | 
				
			||||||
  pk: 10
 | 
					 | 
				
			||||||
  fields:
 | 
					 | 
				
			||||||
    part: 3
 | 
					 | 
				
			||||||
    manufacturer_part: 2
 | 
					 | 
				
			||||||
    supplier: 2
 | 
					 | 
				
			||||||
    SKU: 'MPN456-APPEL'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- model: company.supplierpart
 | 
					 | 
				
			||||||
  pk: 11
 | 
					 | 
				
			||||||
  fields:
 | 
					 | 
				
			||||||
    part: 3
 | 
					 | 
				
			||||||
    manufacturer_part: 2
 | 
					 | 
				
			||||||
    supplier: 3
 | 
					 | 
				
			||||||
    SKU: 'MPN456-ZERG'
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -338,7 +338,7 @@ class ManufacturerPart(models.Model):
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def create(cls, part, manufacturer, mpn, link, description):
 | 
					    def create(cls, part, manufacturer, mpn, description, link=None):
 | 
				
			||||||
        """ Check if ManufacturerPart instance does not already exist
 | 
					        """ Check if ManufacturerPart instance does not already exist
 | 
				
			||||||
            then create it
 | 
					            then create it
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -415,8 +415,7 @@ class SupplierPart(models.Model):
 | 
				
			|||||||
                manufacturer_part = ManufacturerPart.create(part=self.part,
 | 
					                manufacturer_part = ManufacturerPart.create(part=self.part,
 | 
				
			||||||
                                                            manufacturer=manufacturer,
 | 
					                                                            manufacturer=manufacturer,
 | 
				
			||||||
                                                            mpn=MPN,
 | 
					                                                            mpn=MPN,
 | 
				
			||||||
                                                            description=self.description,
 | 
					                                                            description=self.description)
 | 
				
			||||||
                                                            link=self.link)
 | 
					 | 
				
			||||||
                self.manufacturer_part = manufacturer_part
 | 
					                self.manufacturer_part = manufacturer_part
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                # Update ManufacturerPart (if ID exists)
 | 
					                # Update ManufacturerPart (if ID exists)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -162,6 +162,8 @@ class SupplierPartSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    MPN = serializers.StringRelatedField(source='manufacturer_part.MPN')
 | 
					    MPN = serializers.StringRelatedField(source='manufacturer_part.MPN')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    manufacturer_part = ManufacturerPartSerializer(read_only=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = SupplierPart
 | 
					        model = SupplierPart
 | 
				
			||||||
        fields = [
 | 
					        fields = [
 | 
				
			||||||
@@ -175,6 +177,7 @@ class SupplierPartSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
            'manufacturer',
 | 
					            'manufacturer',
 | 
				
			||||||
            'MPN',
 | 
					            'MPN',
 | 
				
			||||||
            'manufacturer_detail',
 | 
					            'manufacturer_detail',
 | 
				
			||||||
 | 
					            'manufacturer_part',
 | 
				
			||||||
            'description',
 | 
					            'description',
 | 
				
			||||||
            'link',
 | 
					            'link',
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
@@ -190,25 +193,10 @@ class SupplierPartSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
        MPN = self.initial_data.get('MPN', None)
 | 
					        MPN = self.initial_data.get('MPN', None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if manufacturer_id or MPN:
 | 
					        if manufacturer_id or MPN:
 | 
				
			||||||
            # Get SupplierPart data
 | 
					            kwargs = {'manufacturer': manufacturer_id,
 | 
				
			||||||
            part = validated_data.get('part', None)
 | 
					                      'MPN': MPN,
 | 
				
			||||||
            description = validated_data.get('description', None)
 | 
					                      }
 | 
				
			||||||
            link = validated_data.get('link', None)
 | 
					            supplier_part.save(**kwargs)
 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Get manufacturer
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                manufacturer = Company.objects.get(pk=int(manufacturer_id))
 | 
					 | 
				
			||||||
            except Company.DoesNotExist:
 | 
					 | 
				
			||||||
                manufacturer = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Create ManufacturerPart
 | 
					 | 
				
			||||||
            manufacturer_part = ManufacturerPart.create(part=part,
 | 
					 | 
				
			||||||
                                                        manufacturer=manufacturer,
 | 
					 | 
				
			||||||
                                                        mpn=MPN,
 | 
					 | 
				
			||||||
                                                        description=description,
 | 
					 | 
				
			||||||
                                                        link=link)
 | 
					 | 
				
			||||||
            supplier_part.manufacturer_part = manufacturer_part
 | 
					 | 
				
			||||||
            supplier_part.save()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return supplier_part
 | 
					        return supplier_part
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@
 | 
				
			|||||||
        "{% url 'api-manufacturer-part-list' %}",
 | 
					        "{% url 'api-manufacturer-part-list' %}",
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            params: {
 | 
					            params: {
 | 
				
			||||||
                part: {{ part.id }},
 | 
					                supplier_part: {{ part.id }},
 | 
				
			||||||
                part_detail: true,
 | 
					                part_detail: true,
 | 
				
			||||||
                manufacturer_detail: true,
 | 
					                manufacturer_detail: true,
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user