Default-Sortierung für Assemblies per YAML-Konfiguration einführen

This commit is contained in:
Marcel Diegelmann 2025-03-20 09:55:48 +01:00
parent f0748a2123
commit ca45064bb2
4 changed files with 32 additions and 11 deletions

8
.env
View file

@ -60,6 +60,14 @@ ERROR_PAGE_ADMIN_EMAIL=''
# If this is set to true, solutions to common problems are shown on error pages. Disable this, if you do not want your users to see them... # If this is set to true, solutions to common problems are shown on error pages. Disable this, if you do not want your users to see them...
ERROR_PAGE_SHOW_HELP=1 ERROR_PAGE_SHOW_HELP=1
##################################################################################
# Part table settings
##################################################################################
# Configure which columns will be visible by default in the specific table (and in which order).
# This is a comma separated list of column names. See documentation for available values.
TABLE_ASSEMBLIES_DEFAULT_COLUMNS=quantity,manufacturer,name,description,category
################################################################################### ###################################################################################
# SAML Single sign on-settings # SAML Single sign on-settings

View file

@ -43,6 +43,10 @@ parameters:
###################################################################################################################### ######################################################################################################################
partdb.saml.enabled: '%env(bool:SAML_ENABLED)%' # If this is set to true, SAML authentication is enabled partdb.saml.enabled: '%env(bool:SAML_ENABLED)%' # If this is set to true, SAML authentication is enabled
######################################################################################################################
# Table settings
######################################################################################################################
partdb.table.assemblies.default_columns: '%env(trim:string:TABLE_ASSEMBLIES_DEFAULT_COLUMNS)%' # The default columns in assembly tables and their order
###################################################################################################################### ######################################################################################################################
# Miscellaneous # Miscellaneous

View file

@ -170,6 +170,9 @@ services:
App\DataTables\Helpers\ColumnSortHelper: App\DataTables\Helpers\ColumnSortHelper:
shared: false # Service has a state so not share it between different tables shared: false # Service has a state so not share it between different tables
App\DataTables\AssemblyBomEntriesDataTable:
arguments:
$visible_columns: '%partdb.table.assemblies.default_columns%'
#################################################################################################################### ####################################################################################################################
# Label system # Label system

View file

@ -25,6 +25,7 @@ namespace App\DataTables;
use App\DataTables\Column\EntityColumn; use App\DataTables\Column\EntityColumn;
use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\LocaleDateTimeColumn;
use App\DataTables\Column\MarkdownColumn; use App\DataTables\Column\MarkdownColumn;
use App\DataTables\Helpers\ColumnSortHelper;
use App\DataTables\Helpers\PartDataTableHelper; use App\DataTables\Helpers\PartDataTableHelper;
use App\Entity\Attachments\Attachment; use App\Entity\Attachments\Attachment;
use App\Entity\Parts\Part; use App\Entity\Parts\Part;
@ -41,14 +42,19 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class AssemblyBomEntriesDataTable implements DataTableTypeInterface class AssemblyBomEntriesDataTable implements DataTableTypeInterface
{ {
public function __construct(protected TranslatorInterface $translator, protected PartDataTableHelper $partDataTableHelper, protected EntityURLGenerator $entityURLGenerator, protected AmountFormatter $amountFormatter) public function __construct(
{ protected TranslatorInterface $translator,
protected PartDataTableHelper $partDataTableHelper,
protected EntityURLGenerator $entityURLGenerator,
protected AmountFormatter $amountFormatter,
private string $visible_columns,
private ColumnSortHelper $csh
){
} }
public function configure(DataTable $dataTable, array $options): void public function configure(DataTable $dataTable, array $options): void
{ {
$dataTable $this->csh
//->add('select', SelectColumn::class) //->add('select', SelectColumn::class)
->add('picture', TextColumn::class, [ ->add('picture', TextColumn::class, [
'label' => '', 'label' => '',
@ -62,7 +68,6 @@ class AssemblyBomEntriesDataTable implements DataTableTypeInterface
]) ])
->add('id', TextColumn::class, [ ->add('id', TextColumn::class, [
'label' => $this->translator->trans('part.table.id'), 'label' => $this->translator->trans('part.table.id'),
'visible' => false,
]) ])
->add('quantity', TextColumn::class, [ ->add('quantity', TextColumn::class, [
'label' => $this->translator->trans('assembly.bom.quantity'), 'label' => $this->translator->trans('assembly.bom.quantity'),
@ -97,11 +102,12 @@ class AssemblyBomEntriesDataTable implements DataTableTypeInterface
->add('ipn', TextColumn::class, [ ->add('ipn', TextColumn::class, [
'label' => $this->translator->trans('part.table.ipn'), 'label' => $this->translator->trans('part.table.ipn'),
'orderField' => 'NATSORT(part.ipn)', 'orderField' => 'NATSORT(part.ipn)',
'visible' => false,
'render' => function ($value, AssemblyBOMEntry $context) { 'render' => function ($value, AssemblyBOMEntry $context) {
if($context->getPart() instanceof Part) { if($context->getPart() instanceof Part) {
return $context->getPart()->getIpn(); return $context->getPart()->getIpn();
} }
return '';
} }
]) ])
->add('description', MarkdownColumn::class, [ ->add('description', MarkdownColumn::class, [
@ -142,7 +148,6 @@ class AssemblyBomEntriesDataTable implements DataTableTypeInterface
]) ])
->add('instockAmount', TextColumn::class, [ ->add('instockAmount', TextColumn::class, [
'label' => 'assembly.bom.instockAmount', 'label' => 'assembly.bom.instockAmount',
'visible' => false,
'render' => function ($value, AssemblyBOMEntry $context) { 'render' => function ($value, AssemblyBOMEntry $context) {
if ($context->getPart() !== null) { if ($context->getPart() !== null) {
return $this->partDataTableHelper->renderAmount($context->getPart()); return $this->partDataTableHelper->renderAmount($context->getPart());
@ -153,7 +158,6 @@ class AssemblyBomEntriesDataTable implements DataTableTypeInterface
]) ])
->add('storageLocations', TextColumn::class, [ ->add('storageLocations', TextColumn::class, [
'label' => 'part.table.storeLocations', 'label' => 'part.table.storeLocations',
'visible' => false,
'render' => function ($value, AssemblyBOMEntry $context) { 'render' => function ($value, AssemblyBOMEntry $context) {
if ($context->getPart() !== null) { if ($context->getPart() !== null) {
return $this->partDataTableHelper->renderStorageLocations($context->getPart()); return $this->partDataTableHelper->renderStorageLocations($context->getPart());
@ -164,15 +168,17 @@ class AssemblyBomEntriesDataTable implements DataTableTypeInterface
]) ])
->add('addedDate', LocaleDateTimeColumn::class, [ ->add('addedDate', LocaleDateTimeColumn::class, [
'label' => $this->translator->trans('part.table.addedDate'), 'label' => $this->translator->trans('part.table.addedDate'),
'visible' => false,
]) ])
->add('lastModified', LocaleDateTimeColumn::class, [ ->add('lastModified', LocaleDateTimeColumn::class, [
'label' => $this->translator->trans('part.table.lastModified'), 'label' => $this->translator->trans('part.table.lastModified'),
'visible' => false,
]) ])
; ;
$dataTable->addOrderBy('name', DataTable::SORT_ASCENDING); //Apply the user configured order and visibility and add the columns to the table
$this->csh->applyVisibilityAndConfigureColumns($dataTable, $this->visible_columns,
"TABLE_ASSEMBLIES_DEFAULT_COLUMNS");
$dataTable->addOrderBy('name');
$dataTable->createAdapter(ORMAdapter::class, [ $dataTable->createAdapter(ORMAdapter::class, [
'entity' => Attachment::class, 'entity' => Attachment::class,