Part-Übersicht sowie -Detailansicht um Assembly Information erweitern

This commit is contained in:
Marcel Diegelmann 2025-06-24 11:07:20 +02:00
parent ecbc8b4e80
commit bba619797e
16 changed files with 156 additions and 9 deletions

View file

@ -39,6 +39,7 @@ use App\DataTables\Filters\PartSearchFilter;
use App\DataTables\Helpers\ColumnSortHelper;
use App\DataTables\Helpers\PartDataTableHelper;
use App\Doctrine\Helpers\FieldHelper;
use App\Entity\AssemblySystem\Assembly;
use App\Entity\Parts\ManufacturingStatus;
use App\Entity\Parts\Part;
use App\Entity\Parts\PartLot;
@ -240,6 +241,34 @@ final class PartsDataTable implements DataTableTypeInterface
]);
}
//Add a assembly column to list where the part is used, when the user has the permission to see the assemblies
if ($this->security->isGranted('read', Assembly::class)) {
$this->csh->add('assemblies', TextColumn::class, [
'label' => $this->translator->trans('assembly.labelp'),
'render' => function ($value, Part $context): string {
//Only show the first 5 assembly names
$assemblies = $context->getAssemblies();
$tmp = "";
$max = 5;
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()));
if ($i < count($assemblies) - 1) {
$tmp .= ", ";
}
}
if (count($assemblies) > $max) {
$tmp .= ", + ".(count($assemblies) - $max);
}
return $tmp;
}
]);
}
$this->csh
->add('edit', IconLinkColumn::class, [
'label' => $this->translator->trans('part.table.edit'),

View file

@ -0,0 +1,31 @@
{% import "components/attachments.macro.html.twig" as attachments %}
{% import "helper.twig" as helper %}
<table class="table table-striped table-sm table-hover table-responsive-sm">
<thead>
<tr>
<th></th>
<th>{% trans %}entity.info.name{% endtrans %}</th>
<th>{% trans %}description.label{% endtrans %}</th>
<th>{% trans %}assembly.bom.quantity{% endtrans %}</th>
</tr>
</thead>
<tbody>
{% for bom_entry in part.assemblyBomEntries %}
{# @var bom_entry App\Entity\Assembly\AssemblyBOMEntry #}
<tr>
<td>{% if bom_entry.assembly.masterPictureAttachment is not null %}{{ attachments.attachment_icon(bom_entry.assembly.masterPictureAttachment, attachment_manager) }}{% endif %}</td>
<td><a href="{{ path('assembly_info', {'id': bom_entry.assembly.iD}) }}">{{ bom_entry.assembly.name }}</a></td> {# Name #}
<td>{{ bom_entry.assembly.description|format_markdown }}</td> {# Description #}
<td>{{ bom_entry.quantity | format_amount(part.partUnit) }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<a class="btn btn-success" {% if not is_granted('@assemblies.edit') %}disabled{% endif %}
href="{{ path('assembly_add_parts_no_id', {"parts": part.id, "_redirect": uri_without_host(app.request)}) }}">
<i class="fa-solid fa-magnifying-glass-plus fa-fw"></i>
{% trans %}part.info.add_part_to_assembly{% endtrans %}
</a>

View file

@ -109,15 +109,20 @@
{% trans %}vendor.partinfo.history{% endtrans %}
</a>
</li>
{% if part.projectBomEntries is not empty %}
<li class="nav-item">
<a class="nav-link" id="projects-tab" data-bs-toggle="tab" href="#projects" role="tab">
<i class="fas fa-archive fa-fw"></i>
{% trans %}project.labelp{% endtrans %}
<span class="badge bg-secondary">{{ part.projectBomEntries | length }}</span>
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link" id="projects-tab" data-bs-toggle="tab" href="#projects" role="tab">
<i class="fas fa-archive fa-fw"></i>
{% trans %}project.labelp{% endtrans %}
<span class="badge bg-secondary">{{ part.projectBomEntries | length }}</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" id="assemblies-tab" data-bs-toggle="tab" href="#assemblies" role="tab">
<i class="fas fa-archive fa-fw"></i>
{% trans %}assembly.labelp{% endtrans %}
<span class="badge bg-secondary">{{ part.assemblyBomEntries | length }}</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" id="tools-tab" data-bs-toggle="tab" href="#tools" role="tab">
<i class="fas fa-tools"></i>
@ -167,6 +172,10 @@
{% include "parts/info/_projects.html.twig" %}
</div>
<div class="tab-pane fade" id="assemblies" role="tabpanel" aria-labelledby="assemblies-tab">
{% include "parts/info/_assemblies.html.twig" %}
</div>
<div class="tab-pane fade" id="history" role="tabpanel" aria-labelledby="history-tab">
{% include "parts/info/_history.html.twig" %}
</div>

View file

@ -14092,6 +14092,12 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz
<target>Přidat součásti do sestavy</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Přidat tuto součástku do sestavy</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12809,6 +12809,12 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver
<target>Tilføj dele til samlingen</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Tilføj denne del til en samling</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -13542,6 +13542,12 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön
<target>Bauteile zur Baugruppe hinzufügen</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Dieses Bauteil zu einer Baugruppe hinzufügen</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -1823,6 +1823,12 @@
<target>Προσθήκη εξαρτημάτων στη συναρμολόγηση</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Προσθέστε αυτό το εξάρτημα σε μια συναρμολόγηση</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -13543,6 +13543,12 @@ Please note, that you can not impersonate a disabled user. If you try you will g
<target>Add parts to assembly</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Add this part to an assembly</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12981,6 +12981,12 @@ Por favor ten en cuenta que no puedes personificar a un usuario deshabilitado. S
<target>Añadir piezas al ensamblaje</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Agregar esta parte a un ensamblaje</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -9385,6 +9385,12 @@ exemple de ville</target>
<target>Ajouter des pièces à l'assemblage</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Ajouter cette pièce à un assemblage</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12959,6 +12959,12 @@ Notare che non è possibile impersonare un utente disattivato. Quando si prova a
<target>Aggiungi componenti al gruppo</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Aggiungi questa parte a un assemblaggio</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -9122,6 +9122,12 @@ Exampletown</target>
<target>アセンブリに部品を追加</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>このパーツをアセンブリに追加</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -1012,6 +1012,12 @@
<target>Onderdelen toevoegen aan assemblage</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Dit onderdeel aan een assemblage toevoegen</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12836,6 +12836,12 @@ Należy pamiętać, że nie możesz udawać nieaktywnych użytkowników. Jeśli
<target>Dodaj części do zespołu</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Dodaj tę część do zespołu</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12936,6 +12936,12 @@
<target>Добавить детали в сборку</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>Добавить эту часть в сборку</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>

View file

@ -12821,6 +12821,12 @@ Element 3</target>
<target>添加零件到组件</target>
</segment>
</unit>
<unit id="u7iO1dE" name="part.info.add_part_to_assembly">
<segment state="translated">
<source>part.info.add_part_to_assembly</source>
<target>将此零件添加到装配体中</target>
</segment>
</unit>
<unit id="1zsGacg3" name="assembly.bom.project">
<segment>
<source>assembly.bom.project</source>