From df91b8cf4d40fff197d23595044b76909d543767 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 16 May 2020 20:45:10 +1000 Subject: [PATCH] Add function to get all test results as a map - This will be required for pushing out to a test report --- InvenTree/stock/models.py | 27 +++++++++++++++++++++++++++ InvenTree/stock/serializers.py | 19 +++++++++++++++++++ InvenTree/stock/tests.py | 8 ++++++++ 3 files changed, 54 insertions(+) diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index e6571fa89e..4ccbd74b5a 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -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): diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 622f93e620..ad53da200d 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -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 """ diff --git a/InvenTree/stock/tests.py b/InvenTree/stock/tests.py index 2c8640d48a..a2bb4d4bb4 100644 --- a/InvenTree/stock/tests.py +++ b/InvenTree/stock/tests.py @@ -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()) \ No newline at end of file