mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	[bug] Remove 'project_code' from optional fields (#10646)
* Remove 'project_code' from optional fields - enable_filter overrides field options - Field does not auto-describe as a related field any more - Breaks front-end forms * Unit tests * Include fix for currency - Ref: https://github.com/inventree/InvenTree/pull/10645 * Cleanup import * Adjust unit tests
This commit is contained in:
		| @@ -33,7 +33,6 @@ from generic.states.fields import InvenTreeCustomStatusSerializerMixin | ||||
| from InvenTree.mixins import DataImportExportSerializerMixin | ||||
| from InvenTree.serializers import ( | ||||
|     FilterableCharField, | ||||
|     FilterableIntegerField, | ||||
|     FilterableSerializerMixin, | ||||
|     InvenTreeDecimalField, | ||||
|     InvenTreeModelSerializer, | ||||
| @@ -164,17 +163,6 @@ class BuildSerializer( | ||||
|         filter_name='project_code_detail', | ||||
|     ) | ||||
|  | ||||
|     project_code = enable_filter( | ||||
|         FilterableIntegerField( | ||||
|             allow_null=True, | ||||
|             required=False, | ||||
|             label=_('Project Code'), | ||||
|             help_text=_('Project code for this build order'), | ||||
|         ), | ||||
|         True, | ||||
|         filter_name='project_code_detail', | ||||
|     ) | ||||
|  | ||||
|     @staticmethod | ||||
|     def annotate_queryset(queryset): | ||||
|         """Add custom annotations to the BuildSerializer queryset, performing database queries as efficiently as possible. | ||||
|   | ||||
| @@ -1086,6 +1086,51 @@ class BuildListTest(BuildAPITest): | ||||
|  | ||||
|     url = reverse('api-build-list') | ||||
|  | ||||
|     def test_api_options(self): | ||||
|         """Test OPTIONS endpoint for the Build list API.""" | ||||
|         data = self.options(self.url, expected_code=200).data | ||||
|  | ||||
|         self.assertEqual(data['name'], 'Build List') | ||||
|         actions = data['actions']['POST'] | ||||
|  | ||||
|         for field_name in [ | ||||
|             'pk', | ||||
|             'title', | ||||
|             'part', | ||||
|             'part_detail', | ||||
|             'project_code', | ||||
|             'project_code_detail', | ||||
|             'quantity', | ||||
|         ]: | ||||
|             self.assertIn(field_name, actions) | ||||
|  | ||||
|         # Specific checks for certain fields | ||||
|         for field_name in ['part', 'project_code', 'take_from']: | ||||
|             field = actions[field_name] | ||||
|             self.assertEqual(field['type'], 'related field') | ||||
|  | ||||
|             for key in ['model', 'api_url', 'pk_field']: | ||||
|                 self.assertIn(key, field) | ||||
|  | ||||
|     def test_detail_fields(self): | ||||
|         """Test inclusion of detail fields.""" | ||||
|         # Test without extra detail fields | ||||
|         for val in [True, False]: | ||||
|             response = self.get( | ||||
|                 self.url, | ||||
|                 data={'part_detail': val, 'project_code_detail': val, 'limit': 1}, | ||||
|                 expected_code=200, | ||||
|             ) | ||||
|  | ||||
|             data = response.data['results'][0] | ||||
|  | ||||
|             if val: | ||||
|                 self.assertIn('part_detail', data) | ||||
|                 self.assertIn('project_code_detail', data) | ||||
|             else: | ||||
|                 self.assertNotIn('part_detail', data) | ||||
|                 self.assertNotIn('project_code_detail', data) | ||||
|  | ||||
|     def test_get_all_builds(self): | ||||
|         """Retrieve *all* builds via the API.""" | ||||
|         builds = self.get(self.url) | ||||
| @@ -1195,7 +1240,6 @@ class BuildListTest(BuildAPITest): | ||||
|             self.url, | ||||
|             [ | ||||
|                 'part_detail', | ||||
|                 ('project_code_detail', 'project_code'), | ||||
|                 'project_code_detail', | ||||
|                 ('user_detail', 'responsible_detail'), | ||||
|                 ('user_detail', 'issued_by_detail'), | ||||
|   | ||||
| @@ -11,7 +11,6 @@ import structlog | ||||
| from moneyed import CURRENCIES | ||||
|  | ||||
| import InvenTree.helpers | ||||
| import InvenTree.ready | ||||
|  | ||||
| logger = structlog.get_logger('inventree') | ||||
|  | ||||
| @@ -20,9 +19,6 @@ def currency_code_default(create: bool = True): | ||||
|     """Returns the default currency code (or USD if not specified).""" | ||||
|     from common.settings import get_global_setting | ||||
|  | ||||
|     if InvenTree.ready.isRunningMigrations(): | ||||
|         return ''  # pragma: no cover | ||||
|  | ||||
|     try: | ||||
|         code = get_global_setting( | ||||
|             'INVENTREE_DEFAULT_CURRENCY', create=create, cache=True | ||||
|   | ||||
		Reference in New Issue
	
	Block a user