Skip to content

Commit 07d4ffa

Browse files
author
Marcel Diegelmann
committed
Assembly-Filter und -Tab ergänzen
Fügt Unterstützung für Assembly-Filter in der Suche sowie ein neues Tab für Assemblies in der Filteransicht hinzu. Anpassungen beinhalten Änderungen an Datenbankabfragen, Formularen und Templates.
1 parent 980657e commit 07d4ffa

File tree

7 files changed

+75
-3
lines changed

7 files changed

+75
-3
lines changed

src/Controller/PartListsController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ private function searchRequestToFilter(Request $request): PartSearchFilter
330330
$filter->setSupplier($request->query->getBoolean('supplier'));
331331
$filter->setManufacturer($request->query->getBoolean('manufacturer'));
332332
$filter->setFootprint($request->query->getBoolean('footprint'));
333-
333+
$filter->setAssembly($request->query->getBoolean('assembly'));
334334

335335
$filter->setRegex($request->query->getBoolean('regex'));
336336

src/DataTables/Filters/PartFilter.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
use App\DataTables\Filters\Constraints\Part\ParameterConstraint;
3737
use App\DataTables\Filters\Constraints\Part\TagsConstraint;
3838
use App\DataTables\Filters\Constraints\TextConstraint;
39+
use App\Entity\AssemblySystem\Assembly;
3940
use App\Entity\Attachments\AttachmentType;
4041
use App\Entity\Parts\Category;
4142
use App\Entity\Parts\Footprint;
@@ -107,6 +108,14 @@ class PartFilter implements FilterInterface
107108
public readonly TextConstraint $bomName;
108109
public readonly TextConstraint $bomComment;
109110

111+
/*************************************************
112+
* Assembly
113+
*************************************************/
114+
115+
public readonly EntityConstraint $assembly;
116+
public readonly NumberConstraint $assemblyBomQuantity;
117+
public readonly TextConstraint $assemblyBomName;
118+
110119
/*************************************************
111120
* Bulk Import Job tab
112121
*************************************************/
@@ -180,6 +189,10 @@ public function __construct(NodesListBuilder $nodesListBuilder)
180189
$this->bomName = new TextConstraint('_projectBomEntries.name');
181190
$this->bomComment = new TextConstraint('_projectBomEntries.comment');
182191

192+
$this->assembly = new EntityConstraint($nodesListBuilder, Assembly::class, '_assemblyBomEntries.assembly');
193+
$this->assemblyBomQuantity = new NumberConstraint('_assemblyBomEntries.quantity');
194+
$this->assemblyBomName = new TextConstraint('_assemblyBomEntries.name');
195+
183196
// Bulk Import Job filters
184197
$this->inBulkImportJob = new BulkImportJobExistsConstraint();
185198
$this->bulkImportJobStatus = new BulkImportJobStatusConstraint();

src/DataTables/Filters/PartSearchFilter.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class PartSearchFilter implements FilterInterface
6666
/** @var bool Use Internal Part number for searching */
6767
protected bool $ipn = true;
6868

69+
/** @var bool Use assembly name for searching */
70+
protected bool $assembly = true;
71+
6972
public function __construct(
7073
/** @var string The string to query for */
7174
protected string $keyword
@@ -113,6 +116,9 @@ protected function getFieldsToSearch(): array
113116
if ($this->ipn) {
114117
$fields_to_search[] = 'part.ipn';
115118
}
119+
if ($this->assembly) {
120+
$fields_to_search[] = '_assembly.name';
121+
}
116122

117123
return $fields_to_search;
118124
}
@@ -304,5 +310,14 @@ public function setComment(bool $comment): PartSearchFilter
304310
return $this;
305311
}
306312

313+
public function isAssembly(): bool
314+
{
315+
return $this->assembly;
316+
}
307317

318+
public function setAssembly(bool $assembly): PartSearchFilter
319+
{
320+
$this->assembly = $assembly;
321+
return $this;
322+
}
308323
}

src/DataTables/PartsDataTable.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,13 @@ private function addJoins(QueryBuilder $builder): QueryBuilder
474474
//Do not group by many-to-* relations, as it would restrict the COUNT having clauses to be maximum 1
475475
//$builder->addGroupBy('_projectBomEntries');
476476
}
477+
if (str_contains($dql, '_assembly.')) {
478+
$builder->leftJoin('part.assembly_bom_entries', '_assemblyBomEntries');
479+
$builder->leftJoin('_assemblyBomEntries.assembly', '_assembly');
480+
}
481+
if (str_contains($dql, '_assemblyBomEntries')) {
482+
$builder->leftJoin('part.assembly_bom_entries', '_assemblyBomEntries');
483+
}
477484
if (str_contains($dql, '_jobPart')) {
478485
$builder->leftJoin('part.bulkImportJobParts', '_jobPart');
479486
$builder->leftJoin('_jobPart.job', '_bulkImportJob');

src/Form/Filters/PartFilterType.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use App\DataTables\Filters\Constraints\Part\BulkImportPartStatusConstraint;
2626
use App\DataTables\Filters\Constraints\Part\ParameterConstraint;
2727
use App\DataTables\Filters\PartFilter;
28+
use App\Entity\AssemblySystem\Assembly;
2829
use App\Entity\Attachments\AttachmentType;
2930
use App\Entity\InfoProviderSystem\BulkImportJobStatus;
3031
use App\Entity\InfoProviderSystem\BulkImportPartStatus;
@@ -313,6 +314,26 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
313314

314315
}
315316

317+
/**************************************************************************
318+
* Assembly tab
319+
**************************************************************************/
320+
if ($this->security->isGranted('read', Assembly::class)) {
321+
$builder
322+
->add('assembly', StructuralEntityConstraintType::class, [
323+
'label' => 'assembly.label',
324+
'entity_class' => Assembly::class
325+
])
326+
->add('assemblyBomQuantity', NumberConstraintType::class, [
327+
'label' => 'assembly.bom.quantity',
328+
'min' => 0,
329+
'step' => "any",
330+
])
331+
->add('assemblyBomName', TextConstraintType::class, [
332+
'label' => 'assembly.bom.name',
333+
])
334+
;
335+
}
336+
316337
/**************************************************************************
317338
* Bulk Import Job tab
318339
**************************************************************************/

templates/components/search.macro.html.twig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@
6161
<label for="search_footprint" class="form-check-label justify-content-start">{% trans %}footprint.label{% endtrans %}</label>
6262
</div>
6363
{% endif %}
64+
<div class="form-check">
65+
<input type="checkbox" class="form-check-input" id="search_assembly" name="assembly" value="1" {{ stimulus_controller('elements/localStorage_checkbox') }}>
66+
<label for="search_assembly" class="form-check-label justify-content-start">{% trans %}assembly.label{% endtrans %}</label>
67+
</div>
6468
<hr>
6569
<div class="form-check">
6670
<input type="checkbox" class="form-check-input" id="regex" name="regex" value="1" {{ stimulus_controller('elements/localStorage_checkbox') }}>
@@ -102,4 +106,4 @@
102106
{{ _self.settings_drodown(is_navbar) }}
103107
{% endif %}
104108
</form>
105-
{% endmacro %}
109+
{% endmacro %}

templates/parts/lists/_filter.html.twig

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
<button class="nav-link" id="filter-projects-tab" data-bs-toggle="tab" data-bs-target="#filter-projects"><i class="fas fa-archive fa-fw"></i> {% trans %}project.labelp{% endtrans %}</button>
3232
</li>
3333
{% endif %}
34+
{% if filterForm.assembly is defined %}
35+
<li class="nav-item" role="presentation">
36+
<button class="nav-link" id="filter-assemblies-tab" data-bs-toggle="tab" data-bs-target="#filter-assemblies"><i class="fas fa-archive fa-fw"></i> {% trans %}assembly.labelp{% endtrans %}</button>
37+
</li>
38+
{% endif %}
3439
{% if filterForm.inBulkImportJob is defined %}
3540
<li class="nav-item" role="presentation">
3641
<button class="nav-link" id="filter-bulk-import-tab" data-bs-toggle="tab" data-bs-target="#filter-bulk-import"><i class="fas fa-download fa-fw"></i> {% trans %}part.edit.tab.bulk_import{% endtrans %}</button>
@@ -132,6 +137,13 @@
132137
{{ form_row(filterForm.bomComment) }}
133138
</div>
134139
{% endif %}
140+
{% if filterForm.assembly is defined %}
141+
<div class="tab-pane pt-3" id="filter-assemblies" role="tabpanel" aria-labelledby="filter-assemblies-tab" tabindex="0">
142+
{{ form_row(filterForm.assembly) }}
143+
{{ form_row(filterForm.assemblyBomQuantity) }}
144+
{{ form_row(filterForm.assemblyBomName) }}
145+
</div>
146+
{% endif %}
135147
{% if filterForm.inBulkImportJob is defined %}
136148
<div class="tab-pane pt-3" id="filter-bulk-import" role="tabpanel" aria-labelledby="filter-bulk-import-tab" tabindex="0">
137149
{{ form_row(filterForm.inBulkImportJob) }}
@@ -163,4 +175,4 @@
163175
{{ form_end(filterForm) }}
164176
</div>
165177
</div>
166-
</div>
178+
</div>

0 commit comments

Comments
 (0)