From baaa147fd055837429c8e2c9ab7bdcc7059614a3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 2 May 2023 23:57:40 +1000 Subject: [PATCH] Ignore variant stock when performing stocktake (#4752) * Ignore variant stock when performing stocktake - Including variant stock can cause duplicate counts of items - Causes valuation numbers to be incorrect * Fix unit tests * Further unit test fixes --- InvenTree/part/tasks.py | 4 +++- InvenTree/part/test_api.py | 11 +++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/InvenTree/part/tasks.py b/InvenTree/part/tasks.py index 924914850e..5e3d29d067 100644 --- a/InvenTree/part/tasks.py +++ b/InvenTree/part/tasks.py @@ -151,7 +151,9 @@ def perform_stocktake(target: part.models.Part, user: User, note: str = '', comm """ # Grab all "available" stock items for the Part - stock_entries = target.stock_entries(in_stock=True, include_variants=True) + # We do not include variant stock when performing a stocktake, + # otherwise the stocktake entries will be duplicated + stock_entries = target.stock_entries(in_stock=True, include_variants=False) # Cache min/max pricing information for this Part pricing = target.pricing diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index 1c83be1a4a..935ae5baf3 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -3079,22 +3079,21 @@ class PartStocktakeTest(InvenTreeAPITestCase): from part.tasks import generate_stocktake_report - n_parts = Part.objects.count() - # Initially, no stocktake records are available self.assertEqual(PartStocktake.objects.count(), 0) # Generate stocktake data for all parts (default configuration) generate_stocktake_report() - # There should now be 1 stocktake entry for each part - self.assertEqual(PartStocktake.objects.count(), n_parts) + # At least one report now created + n = PartStocktake.objects.count() + self.assertGreater(n, 0) self.assignRole('stocktake.view') response = self.get(reverse('api-part-stocktake-list'), expected_code=200) - self.assertEqual(len(response.data), n_parts) + self.assertEqual(len(response.data), n) # Stocktake report should be available via the API, also response = self.get(reverse('api-part-stocktake-report-list'), expected_code=200) @@ -3103,7 +3102,7 @@ class PartStocktakeTest(InvenTreeAPITestCase): data = response.data[0] - self.assertEqual(data['part_count'], 14) + self.assertEqual(data['part_count'], 8) self.assertEqual(data['user'], None) self.assertTrue(data['report'].endswith('.csv'))