mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-03 22:55:43 +00:00 
			
		
		
		
	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
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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'))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user