mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-03 22:55:43 +00:00 
			
		
		
		
	Add function to get all test results as a map
- This will be required for pushing out to a test report
This commit is contained in:
		@@ -922,6 +922,14 @@ class StockItem(MPTTModel):
 | 
			
		||||
        return s
 | 
			
		||||
 | 
			
		||||
    def getTestResults(self, test=None, result=None, user=None):
 | 
			
		||||
        """
 | 
			
		||||
        Return all test results associated with this StockItem.
 | 
			
		||||
 | 
			
		||||
        Optionally can filter results by:
 | 
			
		||||
        - Test name
 | 
			
		||||
        - Test result
 | 
			
		||||
        - User
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        results = self.test_results
 | 
			
		||||
 | 
			
		||||
@@ -939,6 +947,25 @@ class StockItem(MPTTModel):
 | 
			
		||||
 | 
			
		||||
        return results
 | 
			
		||||
 | 
			
		||||
    def testResultMap(self, **kwargs):
 | 
			
		||||
        """
 | 
			
		||||
        Return a map of test-results using the test name as the key.
 | 
			
		||||
        Where multiple test results exist for a given name,
 | 
			
		||||
        the *most recent* test is used.
 | 
			
		||||
 | 
			
		||||
        This map is useful for rendering to a template (e.g. a test report),
 | 
			
		||||
        as all named tests are accessible.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        results = self.getTestResults(**kwargs).order_by('-date')
 | 
			
		||||
 | 
			
		||||
        result_map = {}
 | 
			
		||||
 | 
			
		||||
        for result in results:
 | 
			
		||||
            result_map[result.test] = result
 | 
			
		||||
 | 
			
		||||
        return result_map
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log')
 | 
			
		||||
def before_delete_stock_item(sender, instance, using, **kwargs):
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ from rest_framework import serializers
 | 
			
		||||
from .models import StockItem, StockLocation
 | 
			
		||||
from .models import StockItemTracking
 | 
			
		||||
from .models import StockItemAttachment
 | 
			
		||||
from .models import StockItemTestResult
 | 
			
		||||
 | 
			
		||||
from django.db.models import Sum, Count
 | 
			
		||||
from django.db.models.functions import Coalesce
 | 
			
		||||
@@ -216,6 +217,24 @@ class StockItemAttachmentSerializer(InvenTreeModelSerializer):
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class StockItemTestResultSerializer(InvenTreeModelSerializer):
 | 
			
		||||
    """ Serializer for the StockItemTestResult model """
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = StockItemTestResult
 | 
			
		||||
 | 
			
		||||
        fields = [
 | 
			
		||||
            'pk',
 | 
			
		||||
            'test',
 | 
			
		||||
            'result',
 | 
			
		||||
            'value',
 | 
			
		||||
            'attachment',
 | 
			
		||||
            'notes',
 | 
			
		||||
            'user',
 | 
			
		||||
            'date'
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class StockTrackingSerializer(InvenTreeModelSerializer):
 | 
			
		||||
    """ Serializer for StockItemTracking model """
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -423,3 +423,11 @@ class TestResultTest(StockTest):
 | 
			
		||||
        # Passing tests
 | 
			
		||||
        self.assertEqual(item.getTestResults(result=True).count(), 3)
 | 
			
		||||
        self.assertEqual(item.getTestResults(result=False).count(), 1)
 | 
			
		||||
 | 
			
		||||
        # Result map
 | 
			
		||||
        result_map = item.testResultMap()
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(result_map), 3)
 | 
			
		||||
 | 
			
		||||
        for test in ['Firmware Version', 'Settings Checksum', 'Temperature Test']:
 | 
			
		||||
            self.assertIn(test, result_map.keys())
 | 
			
		||||
		Reference in New Issue
	
	Block a user