From 885ec81a08060a566422ec05f918b7758dbfc061 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 20 Aug 2025 15:34:49 +1000 Subject: [PATCH] Import update (#10188) * Add field to "update" existing records * Ensure the ID is first * Prevent editing of "ID" field * Extract db instance * Bump API version * Prevent edit of "id" field * Refactoring * Enhanced playwright tests for data importing * Update docs * Update src/backend/InvenTree/importer/models.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/frontend/src/forms/ImporterForms.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix silly AI mistake * Fix for table pagination - Ensure page does not exceed available records * Bug fix for playwright test * Add end-to-end API testing * Fix unit tests * Adjust table page logic * Ensure sensible page size * Simplify playwright test * Simplify test again * Tweak unit test - Importing has invalidated the BOM? * Adjust playwright tests * Further playwright fixes --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../assets/images/admin/import_select_id.png | Bin 0 -> 36712 bytes .../admin/import_session_create_update.png | Bin 0 -> 23574 bytes .../images/admin/import_update_process.png | Bin 0 -> 60447 bytes docs/docs/settings/import.md | 34 +++++ .../InvenTree/InvenTree/api_version.py | 5 +- .../0005_dataimportsession_update_records.py | 22 ++++ src/backend/InvenTree/importer/models.py | 58 ++++++++- src/backend/InvenTree/importer/serializers.py | 1 + .../importer/test_data/part_categories.csv | 6 + src/backend/InvenTree/importer/tests.py | 123 ++++++++++++++++-- src/frontend/playwright.config.ts | 1 - .../importer/ImportDataSelector.tsx | 8 ++ .../importer/ImporterColumnSelector.tsx | 1 + src/frontend/src/forms/ImporterForms.tsx | 18 ++- src/frontend/src/tables/InvenTreeTable.tsx | 25 +++- src/frontend/src/tables/bom/BomTable.tsx | 7 +- .../purchasing/PurchaseOrderLineItemTable.tsx | 7 +- .../tables/settings/ImportSessionTable.tsx | 4 +- src/frontend/tests/fixtures/bom_data.csv | 9 +- src/frontend/tests/pages/pui_part.spec.ts | 7 +- src/frontend/tests/pui_importing.spec.ts | 66 ++++++++-- 21 files changed, 351 insertions(+), 51 deletions(-) create mode 100644 docs/docs/assets/images/admin/import_select_id.png create mode 100644 docs/docs/assets/images/admin/import_session_create_update.png create mode 100644 docs/docs/assets/images/admin/import_update_process.png create mode 100644 src/backend/InvenTree/importer/migrations/0005_dataimportsession_update_records.py create mode 100644 src/backend/InvenTree/importer/test_data/part_categories.csv diff --git a/docs/docs/assets/images/admin/import_select_id.png b/docs/docs/assets/images/admin/import_select_id.png new file mode 100644 index 0000000000000000000000000000000000000000..38d8b797a32546a6aa3a8c00a65cee53f8bdb21c GIT binary patch literal 36712 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 literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/admin/import_session_create_update.png b/docs/docs/assets/images/admin/import_session_create_update.png new file mode 100644 index 0000000000000000000000000000000000000000..31e0aca2d8993a0cbe213e35a4ef3bede279d7ae GIT binary patch literal 23574 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 W%{Xi+t2S?Q`J0`$IEOX9a_^t5^U9Y1 literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/admin/import_update_process.png b/docs/docs/assets/images/admin/import_update_process.png new file mode 100644 index 0000000000000000000000000000000000000000..93c178bd5522242a7e3957ae98cdafb4db4e630c GIT binary patch literal 60447 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 A7ytkO literal 0 HcmV?d00001 diff --git a/docs/docs/settings/import.md b/docs/docs/settings/import.md index 71c3052fe2..c712216217 100644 --- a/docs/docs/settings/import.md +++ b/docs/docs/settings/import.md @@ -76,3 +76,37 @@ Each individual row can be imported, or removed (deleted) by the user. Once all ### Import Completed Once all records have been processed, the import session is considered complete. The import session can be closed, and the imported records are now stored in the database. + +## Updating Existing Records + +The data import process can also be used to update existing records in the database. This requires that the imported data file contains a unique identifier for each record, which can be used to match the records in the database. + +The basic outline of this process is: + +1. Export the existing records to a CSV file. +2. Modify the CSV file to update the records as required. +3. Upload the modified CSV file to the import session. + +!!! note "Mixing Creation and Update" + It is not possible to mix the creation of new records with the updating of existing records in a single import session. If you wish to create new records, you must create a separate import session for that purpose. + +### Create Import Session + +!!! note "Admin Center" + Updating existing records can only be performed when creating a new import session from the [Admin Center](./admin.md#admin-center). + +Create a new import session, and ensure that the *Update Existing Records* option is selected. This will allow the import session to update existing records in the database. + +{{ image("admin/import_session_create_update.png", "Update existing records") }} + +### Map Data Fields + +When mapping the data fields, ensure that the `ID` field is correctly mapped to the corresponding column in the file: + +{{ image("admin/import_select_id.png", "Update existing records") }} + +### Process Data + +When processing the data, each row will be matched against an existing record in the database. If a match is found, the existing record will be updated with the new data from the imported file. + +{{ image("admin/import_update_process.png", "Update existing records") }} diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index ba2be6f219..ead7da69fa 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,14 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 386 +INVENTREE_API_VERSION = 387 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v387 -> 2025-08-19 : https://github.com/inventree/InvenTree/pull/10188 + - Adds "update_records" field to the DataImportSession API + v386 -> 2025-08-11 : https://github.com/inventree/InvenTree/pull/8191 - Adds "consumed" field to the BuildItem API - Adds API endpoint to consume stock against a BuildOrder diff --git a/src/backend/InvenTree/importer/migrations/0005_dataimportsession_update_records.py b/src/backend/InvenTree/importer/migrations/0005_dataimportsession_update_records.py new file mode 100644 index 0000000000..8e18cb3944 --- /dev/null +++ b/src/backend/InvenTree/importer/migrations/0005_dataimportsession_update_records.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.23 on 2025-08-18 13:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("importer", "0004_alter_dataimportsession_model_type"), + ] + + operations = [ + migrations.AddField( + model_name="dataimportsession", + name="update_records", + field=models.BooleanField( + default=False, + help_text="If enabled, existing records will be updated with new data", + verbose_name="Update Existing Records", + ), + ), + ] diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index f1c21ca86d..7dd533d269 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -1,6 +1,7 @@ """Model definitions for the 'importer' app.""" import json +from collections import OrderedDict from typing import Optional from django.contrib.auth.models import User @@ -39,6 +40,8 @@ class DataImportSession(models.Model): field_filters: JSONField for field filter values - optional field API filters """ + ID_FIELD_LABEL = 'id' + class ModelChoices(RenderChoices): """Model choices for data import sessions.""" @@ -118,6 +121,12 @@ class DataImportSession(models.Model): validators=[importer.validators.validate_field_defaults], ) + update_records = models.BooleanField( + default=False, + verbose_name=_('Update Existing Records'), + help_text=_('If enabled, existing records will be updated with new data'), + ) + @property def field_mapping(self) -> dict: """Construct a dict of field mappings for this import session. @@ -351,13 +360,25 @@ class DataImportSession(models.Model): metadata = InvenTreeMetadata() + fields = OrderedDict() + + if self.update_records: + # If we are updating records, ensure the ID field is included + fields[self.ID_FIELD_LABEL] = { + 'label': _('ID'), + 'help_text': _('Existing database identifier for the record'), + 'type': 'integer', + 'required': True, + 'read_only': False, + } + if serializer_class := self.serializer_class: serializer = serializer_class(data={}, importing=True) - fields = metadata.get_serializer_info(serializer) - else: - fields = {} + fields.update(metadata.get_serializer_info(serializer)) + # Cache the available fields against this instance self._available_fields = fields + return fields def required_fields(self) -> dict: @@ -370,6 +391,10 @@ class DataImportSession(models.Model): if info.get('required', False): required[field] = info + elif self.update_records and field == self.ID_FIELD_LABEL: + # If we are updating records, the ID field is required + required[field] = info + return required @@ -630,11 +655,13 @@ class DataImportRow(models.Model): return data - def construct_serializer(self, request=None): + def construct_serializer(self, instance=None, request=None): """Construct a serializer object for this row.""" if serializer_class := self.session.serializer_class: return serializer_class( - data=self.serializer_data(), context={'request': request} + instance=instance, + data=self.serializer_data(), + context={'request': request}, ) def validate(self, commit=False, request=None) -> bool: @@ -654,7 +681,26 @@ class DataImportRow(models.Model): # Row has already been completed return True - serializer = self.construct_serializer(request=request) + if self.session.update_records: + # Extract the ID field from the data + instance_id = self.data.get(self.session.ID_FIELD_LABEL, None) + + if not instance_id: + raise DjangoValidationError( + _('ID is required for updating existing records.') + ) + + try: + instance = self.session.model_class.objects.get(pk=instance_id) + except self.session.model_class.DoesNotExist: + raise DjangoValidationError(_('No record found with the provided ID.')) + except ValueError: + raise DjangoValidationError(_('Invalid ID format provided.')) + + serializer = self.construct_serializer(instance=instance, request=request) + + else: + serializer = self.construct_serializer(request=request) if not serializer: self.errors = { diff --git a/src/backend/InvenTree/importer/serializers.py b/src/backend/InvenTree/importer/serializers.py index ad33d6e6a1..2e428b7e9b 100644 --- a/src/backend/InvenTree/importer/serializers.py +++ b/src/backend/InvenTree/importer/serializers.py @@ -41,6 +41,7 @@ class DataImportSessionSerializer(InvenTreeModelSerializer): 'pk', 'timestamp', 'data_file', + 'update_records', 'model_type', 'available_fields', 'status', diff --git a/src/backend/InvenTree/importer/test_data/part_categories.csv b/src/backend/InvenTree/importer/test_data/part_categories.csv new file mode 100644 index 0000000000..836b3a07a9 --- /dev/null +++ b/src/backend/InvenTree/importer/test_data/part_categories.csv @@ -0,0 +1,6 @@ +ID,Name,Description,Default Location,Default keywords,Level,Parent Category,Parts,Subcategories,Path,Starred,Structural,Icon,Parent default location +23,Category 0,"Part category, level 1",,,0,,0,5,Category 0,False,False,, +1,Electronics,Electronic components and systems,,,0,,135,12,Electronics,False,False,, +17,Furniture,Furniture and associated things,,,0,,22,2,Furniture,False,False,, +2,Mechanical,Mechanical components,,,0,,263,3,Mechanical,False,False,, +20,Paint,"Paints, inks, etc",,,0,,5,0,Paint,False,False,, diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py index 2393feb1cf..97619c70a3 100644 --- a/src/backend/InvenTree/importer/tests.py +++ b/src/backend/InvenTree/importer/tests.py @@ -3,25 +3,23 @@ import os from django.core.files.base import ContentFile +from django.urls import reverse from importer.models import DataImportRow, DataImportSession -from InvenTree.unit_test import AdminTestCase, InvenTreeTestCase +from InvenTree.unit_test import AdminTestCase, InvenTreeAPITestCase, InvenTreeTestCase class ImporterMixin: """Helpers for import tests.""" - def helper_file(self): + def helper_file(self, fn: str) -> ContentFile: """Return test data.""" - fn = os.path.join(os.path.dirname(__file__), 'test_data', 'companies.csv') + file_path = os.path.join(os.path.dirname(__file__), 'test_data', fn) - with open(fn, encoding='utf-8') as input_file: + with open(file_path, encoding='utf-8') as input_file: data = input_file.read() - return data - def helper_content(self): - """Return content file.""" - return ContentFile(self.helper_file(), 'companies.csv') + return ContentFile(data, fn) class ImporterTest(ImporterMixin, InvenTreeTestCase): @@ -33,8 +31,10 @@ class ImporterTest(ImporterMixin, InvenTreeTestCase): n = Company.objects.count() + data_file = self.helper_file('companies.csv') + session = DataImportSession.objects.create( - data_file=self.helper_content(), model_type='company' + data_file=data_file, model_type='company' ) session.extract_columns() @@ -74,13 +74,116 @@ class ImporterTest(ImporterMixin, InvenTreeTestCase): """Test default field values.""" +class ImportAPITest(ImporterMixin, InvenTreeAPITestCase): + """End-to-end tests for the importer API.""" + + def test_import(self): + """Test full import process via the API.""" + from part.models import PartCategory + + N = PartCategory.objects.count() + + url = reverse('api-importer-session-list') + + # Load data file + data_file = self.helper_file('part_categories.csv') + + data = self.post( + url, + {'model_type': 'partcategory', 'data_file': data_file}, + format='multipart', + ).data + + self.assertFalse(data['update_records']) + self.assertEqual(data['model_type'], 'partcategory') + + # No data has been imported yet + self.assertEqual(data['row_count'], 0) + self.assertEqual(data['completed_row_count'], 0) + + field_names = data['available_fields'].keys() + + for fn in ['name', 'default_location', 'description']: + self.assertIn(fn, field_names) + + self.assertEqual(len(data['columns']), 14) + for col in ['Name', 'Parent Category', 'Path']: + self.assertIn(col, data['columns']) + + session_id = data['pk'] + + # Accept the field mappings + url = reverse('api-import-session-accept-fields', kwargs={'pk': session_id}) + + # Initially the user does not have the right permissions + self.post(url, expected_code=403) + + # Assign correct permission to user + self.assignRole('part_category.add') + + self.post(url, expected_code=200) + + session = self.get( + reverse('api-import-session-detail', kwargs={'pk': session_id}) + ).data + + self.assertEqual(session['row_count'], 5) + self.assertEqual(session['completed_row_count'], 0) + + # Fetch each row, and validate it + rows = self.get( + reverse('api-importer-row-list'), data={'session': session_id} + ).data + + self.assertEqual(len(rows), 5) + + row_ids = [] + + for row in rows: + row_ids.append(row['pk']) + self.assertEqual(row['session'], session_id) + self.assertTrue(row['valid']) + self.assertFalse(row['complete']) + + # Validate the rows + url = reverse('api-import-session-accept-rows', kwargs={'pk': session_id}) + + self.post( + url, + { + 'rows': row_ids[1:] # Validate all but the first row + }, + ) + + # Update session information + session = self.get( + reverse('api-import-session-detail', kwargs={'pk': session_id}) + ).data + + self.assertEqual(session['row_count'], 5) + self.assertEqual(session['completed_row_count'], 4) + + for idx, row in enumerate(row_ids): + detail = self.get( + reverse('api-importer-row-detail', kwargs={'pk': row}) + ).data + + self.assertEqual(detail['session'], session_id) + self.assertEqual(detail['complete'], idx > 0) + + # Check that there are new database records + self.assertEqual(PartCategory.objects.count(), N + 4) + + class AdminTest(ImporterMixin, AdminTestCase): """Tests for the admin interface integration.""" def test_admin(self): """Test the admin URL.""" + data_file = self.helper_file('companies.csv') + session = self.helper( model=DataImportSession, - model_kwargs={'data_file': self.helper_content(), 'model_type': 'company'}, + model_kwargs={'data_file': data_file, 'model_type': 'company'}, ) self.helper(model=DataImportRow, model_kwargs={'session_id': session.id}) diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index f73c704958..cb2aeaf47d 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -31,7 +31,6 @@ const BASE_URL: string = IS_CI : 'http://localhost:5173'; console.log('Running Playwright Tests:'); -console.log(`- CI Mode: ${IS_CI}`); console.log('- Base URL:', BASE_URL); export default defineConfig({ diff --git a/src/frontend/src/components/importer/ImportDataSelector.tsx b/src/frontend/src/components/importer/ImportDataSelector.tsx index ada7eac1b2..db0edc3fa3 100644 --- a/src/frontend/src/components/importer/ImportDataSelector.tsx +++ b/src/frontend/src/components/importer/ImportDataSelector.tsx @@ -153,6 +153,10 @@ export default function ImporterDataSelector({ }; } + if (field == 'id') { + continue; // Skip the ID field + } + fields[field] = { ...fieldDef, field_type: fieldDef.type, @@ -225,6 +229,10 @@ export default function ImporterDataSelector({ const editCell = useCallback( (row: any, col: any) => { + if (col.field == 'id') { + return; // Cannot edit the ID field + } + setSelectedRow(row); setSelectedFieldNames([col.field]); editRow.open(); diff --git a/src/frontend/src/components/importer/ImporterColumnSelector.tsx b/src/frontend/src/components/importer/ImporterColumnSelector.tsx index 7f3aa487b0..9ad87056d9 100644 --- a/src/frontend/src/components/importer/ImporterColumnSelector.tsx +++ b/src/frontend/src/components/importer/ImporterColumnSelector.tsx @@ -61,6 +61,7 @@ function ImporterColumn({ return (