Reihenfolge der Tabs in Baugruppenansicht korrigiert

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.
This commit is contained in:
Marcel Diegelmann 2025-07-22 12:20:26 +02:00
parent 961b352508
commit 06373b3e5a
3 changed files with 37 additions and 21 deletions

View file

@ -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('<a href="%s">%s</a>', $url, htmlspecialchars($assemblies[$i]->getName()));
$tmp .= $this->assemblyDataTableHelper->renderName($assemblies[$i]);
if ($i < count($assemblies) - 1) {
$tmp .= ", ";
}

View file

@ -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;
}
}

View file

@ -64,18 +64,18 @@
{% block card_content %}
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="part-tab" data-bs-toggle="tab" data-bs-target="#part-tab-pane"
type="button" role="tab" aria-controls="part-tab-pane" aria-selected="true">
<i class="fa-solid fa-list-check fa-fw"></i>
{% trans %}assembly_bom_entry.label{% endtrans %}
<span class="badge bg-secondary">{{ assembly.bomEntries | length }}</span>
<button class="nav-link active" id="info-tab" data-bs-toggle="tab" data-bs-target="#info-tab-pane"
type="button" role="tab" aria-controls="info-tab-pane" aria-selected="true">
<i class="fa-solid fa-circle-info fa-fw"></i>
{% trans %}assembly.info.info.label{% endtrans %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="info-tab" data-bs-toggle="tab" data-bs-target="#info-tab-pane"
type="button" role="tab" aria-controls="info-tab-pane" aria-selected="false">
<i class="fa-solid fa-circle-info fa-fw"></i>
{% trans %}assembly.info.info.label{% endtrans %}
<button class="nav-link" id="part-tab" data-bs-toggle="tab" data-bs-target="#part-tab-pane"
type="button" role="tab" aria-controls="part-tab-pane" aria-selected="false">
<i class="fa-solid fa-list-check fa-fw"></i>
{% trans %}assembly_bom_entry.label{% endtrans %}
<span class="badge bg-secondary">{{ assembly.bomEntries | length }}</span>
</button>
</li>
<li class="nav-item" role="presentation">
@ -98,12 +98,12 @@
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="part-tab-pane" role="tabpanel" aria-labelledby="part-tab" tabindex="0">
{% include "assemblies/info/_part.html.twig" %}
</div>
<div class="tab-pane fade" id="info-tab-pane" role="tabpanel" aria-labelledby="info-tab" tabindex="0">
{% include "assemblies/info/_info.html.twig" %}
</div>
<div class="tab-pane fade show active" id="part-tab-pane" role="tabpanel" aria-labelledby="part-tab" tabindex="0">
{% include "assemblies/info/_part.html.twig" %}
</div>
<div class="tab-pane fade" id="builds-tab-pane" role="tabpanel" aria-labelledby="builds-tab" tabindex="0">
{% include "assemblies/info/_builds.html.twig" %}
</div>