From e9bc1be60e0cecd637f568aae81827f8bfb48660 Mon Sep 17 00:00:00 2001 From: MayNiklas Date: Sun, 25 Jan 2026 20:34:26 +0100 Subject: [PATCH] Support dynamic supplier SPNs in BOM import comments Replace hardcoded LCSC SPN handling with dynamic supplier lookup to support all configured suppliers in BOM import. This allows any supplier defined in Part-DB to have their SPN fields recognized and included in the BOM entry comments during BOM import. --- src/Services/ImportExportSystem/BOMImporter.php | 12 ++++++++++-- .../Services/ImportExportSystem/BOMImporterTest.php | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Services/ImportExportSystem/BOMImporter.php b/src/Services/ImportExportSystem/BOMImporter.php index b0762987..eeb509b5 100644 --- a/src/Services/ImportExportSystem/BOMImporter.php +++ b/src/Services/ImportExportSystem/BOMImporter.php @@ -400,9 +400,17 @@ class BOMImporter if (isset($mapped_entry['Manufacturer'])) { $comment_parts[] = 'Manf: ' . $mapped_entry['Manufacturer']; } - if (isset($mapped_entry['LCSC SPN'])) { - $comment_parts[] = 'LCSC: ' . $mapped_entry['LCSC SPN']; + + // Add supplier part numbers dynamically + $suppliers = $this->entityManager->getRepository(\App\Entity\Parts\Supplier::class)->findAll(); + foreach ($suppliers as $supplier) { + $supplierName = $supplier->getName(); + $spnKey = $supplierName . ' SPN'; + if (isset($mapped_entry[$spnKey]) && !empty($mapped_entry[$spnKey])) { + $comment_parts[] = $spnKey . ': ' . $mapped_entry[$spnKey]; + } } + if (isset($mapped_entry['Supplier and ref'])) { $comment_parts[] = $mapped_entry['Supplier and ref']; } diff --git a/tests/Services/ImportExportSystem/BOMImporterTest.php b/tests/Services/ImportExportSystem/BOMImporterTest.php index d486b932..47ddcc24 100644 --- a/tests/Services/ImportExportSystem/BOMImporterTest.php +++ b/tests/Services/ImportExportSystem/BOMImporterTest.php @@ -356,8 +356,11 @@ class BOMImporterTest extends WebTestCase // Create test suppliers for this test $lcscSupplier = new Supplier(); $lcscSupplier->setName('LCSC'); + $mouserSupplier = new Supplier(); + $mouserSupplier->setName('Mouser'); $this->entityManager->persist($lcscSupplier); + $this->entityManager->persist($mouserSupplier); $this->entityManager->flush(); $input = <<assertStringContainsString('MPN: CRCW080510K0FKEA', $bom_entries[0]->getComment()); $this->assertStringContainsString('Manf: Vishay', $bom_entries[0]->getComment()); $this->assertStringContainsString('LCSC SPN: C123456', $bom_entries[0]->getComment()); + $this->assertStringContainsString('Mouser SPN: 123-M10K', $bom_entries[0]->getComment()); + // Check second entry $this->assertEquals('C1', $bom_entries[1]->getMountnames()); $this->assertEquals(1.0, $bom_entries[1]->getQuantity()); $this->assertStringContainsString('LCSC SPN: C789012', $bom_entries[1]->getComment()); + $this->assertStringContainsString('Mouser SPN: 80-CL21A104KOCLRNC', $bom_entries[1]->getComment()); // Clean up $this->entityManager->remove($lcscSupplier); + $this->entityManager->remove($mouserSupplier); $this->entityManager->flush(); }