From 06373b3e5a16d11233da672658e0dffc649707e3 Mon Sep 17 00:00:00 2001 From: Marcel Diegelmann Date: Tue, 22 Jul 2025 12:20:26 +0200 Subject: [PATCH] Reihenfolge der Tabs in Baugruppenansicht korrigiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Tabs "Details" und "Stückliste" wurden in der Baugruppenansicht vertauscht, um der Nutzererwartung besser zu entsprechen. Zudem wurde die Methode zur rekursiven Ermittlung referenzierter Baugruppen überarbeitet und in der Datentabelle integriert. --- src/DataTables/AssemblyDataTable.php | 5 ++-- src/Entity/AssemblySystem/Assembly.php | 29 +++++++++++++++++++----- templates/assemblies/info/info.html.twig | 24 ++++++++++---------- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/src/DataTables/AssemblyDataTable.php b/src/DataTables/AssemblyDataTable.php index f3854ebc..745a62b6 100644 --- a/src/DataTables/AssemblyDataTable.php +++ b/src/DataTables/AssemblyDataTable.php @@ -109,14 +109,13 @@ final class AssemblyDataTable implements DataTableTypeInterface $this->csh->add('referencedAssemblies', TextColumn::class, [ 'label' => $this->translator->trans('assembly.referencedAssembly.labelp'), 'render' => function ($value, Assembly $context): string { - $assemblies = $context->getReferencedAssemblies(); + $assemblies = $context->getAllReferencedAssembliesRecursive($context); $max = 5; $tmp = ""; for ($i = 0; $i < min($max, count($assemblies)); $i++) { - $url = $this->urlGenerator->infoURL($assemblies[$i]); - $tmp .= sprintf('%s', $url, htmlspecialchars($assemblies[$i]->getName())); + $tmp .= $this->assemblyDataTableHelper->renderName($assemblies[$i]); if ($i < count($assemblies) - 1) { $tmp .= ", "; } diff --git a/src/Entity/AssemblySystem/Assembly.php b/src/Entity/AssemblySystem/Assembly.php index 5ce060d8..cb6e94de 100644 --- a/src/Entity/AssemblySystem/Assembly.php +++ b/src/Entity/AssemblySystem/Assembly.php @@ -393,20 +393,37 @@ class Assembly extends AbstractStructuralDBElement } /** - * Get all referenced assemblies which uses this assembly. + * Get all assemblies and sub-assemblies recursive that are referenced in the assembly bom entries. * - * @return Assembly[] all referenced assemblies which uses this assembly as a one-dimensional array of assembly objects + * @param Assembly $assembly Assembly, which is to be processed recursively. + * @param array $processedAssemblies (optional) a list of the already edited assemblies to avoid circulatory references. + * @return Assembly[] A flat list of all recursively found assemblies. */ - public function getReferencedAssemblies(): array + public function getAllReferencedAssembliesRecursive(Assembly $assembly, array &$processedAssemblies = []): array { $assemblies = []; - foreach($this->bom_entries as $entry) { - if ($entry->getReferencedAssembly() !== null) { - $assemblies[] = $entry->getReferencedAssembly(); + // Avoid circular references + if (in_array($assembly, $processedAssemblies, true)) { + return $assemblies; + } + + // Add the current assembly to the processed + $processedAssemblies[] = $assembly; + + // Iterate by the bom entries of the current assembly + foreach ($assembly->getBomEntries() as $bomEntry) { + if ($bomEntry->getReferencedAssembly() !== null) { + $referencedAssembly = $bomEntry->getReferencedAssembly(); + + $assemblies[] = $referencedAssembly; + + // Continue recursively to process sub-assemblies + $assemblies = array_merge($assemblies, $this->getAllReferencedAssembliesRecursive($referencedAssembly, $processedAssemblies)); } } return $assemblies; } + } diff --git a/templates/assemblies/info/info.html.twig b/templates/assemblies/info/info.html.twig index d787ea08..09817386 100644 --- a/templates/assemblies/info/info.html.twig +++ b/templates/assemblies/info/info.html.twig @@ -64,18 +64,18 @@ {% block card_content %}
-
- {% include "assemblies/info/_part.html.twig" %} -
{% include "assemblies/info/_info.html.twig" %}
+
+ {% include "assemblies/info/_part.html.twig" %} +
{% include "assemblies/info/_builds.html.twig" %}