Added some additional columns to part list.

They are hidden by default but can be shown by a colvis button.
This commit is contained in:
Jan Böhmer 2019-09-06 18:25:24 +02:00
parent 16139d1afd
commit 720e1cd04e
10 changed files with 310 additions and 70 deletions

View file

@ -684,3 +684,7 @@ table.dataTable {
.tab-content>form>.active { .tab-content>form>.active {
display: block; display: block;
} }
.dataTables_length {
display: inline-flex;
}

View file

@ -511,7 +511,12 @@ class AjaxUI {
var promise = $('#part_list').initDataTables(settings, var promise = $('#part_list').initDataTables(settings,
{ {
"fixedHeader": { header: $(window).width() >= 768, //Only enable fixedHeaders on devices with big screen. Fixes scrolling issues on smartphones. "fixedHeader": { header: $(window).width() >= 768, //Only enable fixedHeaders on devices with big screen. Fixes scrolling issues on smartphones.
headerOffset: $("#navbar").height()} headerOffset: $("#navbar").height()},
"buttons": [ {
"extend": 'colvis',
'className': 'mr-2 btn-light',
"text": "<i class='fa fa-cog'></i>"
}]
}); });
//Register links. //Register links.

View file

@ -8,15 +8,16 @@ datatables:
lengthMenu : [10, 25, 50, 100, 250, 500, 1000, 2500] lengthMenu : [10, 25, 50, 100, 250, 500, 1000, 2500]
pageLength: 50 pageLength: 50
#dom: "<'row' <'col-sm-12' tr>><'row' <'col-sm-6'l><'col-sm-6 text-right'pif>>" #dom: "<'row' <'col-sm-12' tr>><'row' <'col-sm-6'l><'col-sm-6 text-right'pif>>"
dom: " <'row'<'col mb-2' l> <'col mb-2'<'pull-right' p>>> dom: " <'row'<'col mb-2 input-group' B l> <'col mb-2' <'pull-right' p>>>
<'card border-primary' <'card'
<'#part-card-header.card-header bg-primary text-white'>
rt rt
<'card-footer card-footer-table text-muted' i > <'card-footer card-footer-table text-muted' i >
> >
<'row'<'col mt-2' l> <'col mt-2'<'pull-right' p>>>" <'row'<'col mt-2' l> <'col mt-2'<'pull-right' p>>>"
pagingType: 'simple_numbers' pagingType: 'simple_numbers'
searching: true searching: true
stateSave: true
template_parameters: template_parameters:
# Example classes to integrate nicely with Bootstrap 3.x # Example classes to integrate nicely with Bootstrap 3.x

View file

@ -54,7 +54,7 @@ class PartListsController extends AbstractController
return $table->getResponse(); return $table->getResponse();
} }
return $this->render('parts_list.html.twig', ['datatable' => $table]); return $this->render('Parts/lists/category_list.html.twig', ['datatable' => $table]);
} }
/** /**

View file

@ -35,9 +35,13 @@ use App\Services\EntityURLGenerator;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider; use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider;
use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter; use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter;
use Omines\DataTablesBundle\Column\BoolColumn;
use Omines\DataTablesBundle\Column\DateTimeColumn;
use Omines\DataTablesBundle\Column\MapColumn;
use Omines\DataTablesBundle\Column\TextColumn; use Omines\DataTablesBundle\Column\TextColumn;
use Omines\DataTablesBundle\DataTable; use Omines\DataTablesBundle\DataTable;
use Omines\DataTablesBundle\DataTableTypeInterface; use Omines\DataTablesBundle\DataTableTypeInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class PartsDataTable implements DataTableTypeInterface class PartsDataTable implements DataTableTypeInterface
{ {
@ -45,10 +49,12 @@ class PartsDataTable implements DataTableTypeInterface
* @var EntityURLGenerator * @var EntityURLGenerator
*/ */
protected $urlGenerator; protected $urlGenerator;
protected $translator;
public function __construct(EntityURLGenerator $urlGenerator) public function __construct(EntityURLGenerator $urlGenerator, TranslatorInterface $translator)
{ {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->translator = $translator;
} }
protected function buildCriteria(QueryBuilder $builder, array $options) protected function buildCriteria(QueryBuilder $builder, array $options)
@ -79,16 +85,84 @@ class PartsDataTable implements DataTableTypeInterface
*/ */
public function configure(DataTable $dataTable, array $options) public function configure(DataTable $dataTable, array $options)
{ {
$dataTable//->add("id", TextColumn::class) $dataTable
->add('name', TextColumn::class, ['label' => 'name.label', ->add('name', TextColumn::class, [
'label' => $this->translator->trans('part.table.name'),
'render' => function ($value, Part $context) { 'render' => function ($value, Part $context) {
return $this->urlGenerator->infoHTML($context); return $this->urlGenerator->infoHTML($context);
}, ]) },
->add('description', TextColumn::class, ['label' => 'description.label']) ])
->add('category', TextColumn::class, ['field' => 'category.name', 'label' => 'category.label']) ->add('id', TextColumn::class, [
->add('amountSum', TextColumn::class, ['label' => 'instock.label_short']) 'label' => $this->translator->trans('part.table.id'),
->add('minamount', TextColumn::class, ['label' => 'mininstock.label_short']) 'visible' => false
])
->add('description', TextColumn::class, [
'label' => $this->translator->trans('part.table.description'),
])
->add('category', TextColumn::class, [
'field' => 'category.name',
'label' => $this->translator->trans('part.table.category')
])
//->add('footprint', TextColumn::class, ['field' => 'footprint.name'])
//->add('manufacturer', TextColumn::class, ['field' => 'manufacturer.name' ])
//->add('amountSum', TextColumn::class, ['label' => 'instock.label_short'])
->add('amount', TextColumn::class, [
'label' => $this->translator->trans('part.table.amount'),
'propertyPath' => 'amountSum'
])
->add('minamount', TextColumn::class, [
'label' => $this->translator->trans('part.table.minamount')
])
//->add('storelocation', TextColumn::class, ['field' => 'storelocation.name', 'label' => 'storelocation.label']) //->add('storelocation', TextColumn::class, ['field' => 'storelocation.name', 'label' => 'storelocation.label'])
->add('addedDate', DateTimeColumn::class, [
'label' => $this->translator->trans('part.table.addedDate'),
'visible' => false
])
->add('lastModified', DateTimeColumn::class, [
'label' => $this->translator->trans('part.table.lastModified'),
'visible' => false
])
->add('needs_review', BoolColumn::class, [
'label' => $this->translator->trans('part.table.needsReview'),
'trueValue' => $this->translator->trans('true'),
'falseValue' => $this->translator->trans('false'),
'nullValue' => '',
'visible' => false
])
->add('favorite', BoolColumn::class, [
'label' => $this->translator->trans('part.table.favorite'),
'trueValue' => $this->translator->trans('true'),
'falseValue' => $this->translator->trans('false'),
'nullValue' => '',
'visible' => false
])
->add('manufacturing_status', MapColumn::class, [
'label' => $this->translator->trans('part.table.manufacturingStatus'),
'visible' => false,
'default' => $this->translator->trans('m_status.unknown'),
'map' => [
'' => $this->translator->trans('m_status.unknown'),
'announced' => $this->translator->trans('m_status.announced'),
'active' => $this->translator->trans('m_status.active'),
'nrfnd' => $this->translator->trans('m_status.nrfnd'),
'eol' => $this->translator->trans('m_status.eol'),
'discontinued' => $this->translator->trans('m_status.discontinued')
]
])
->add('manufacturer_product_number', TextColumn::class, [
'label' => $this->translator->trans('part.table.mpn'),
'visible' => false
])
->add('mass', TextColumn::class, [
'label' => $this->translator->trans('part.table.mass'),
'visible' => false
])
->add('tags', TextColumn::class, [
'label' => $this->translator->trans('part.table.tags'),
'visible' => false
])
->addOrderBy('name') ->addOrderBy('name')
->createAdapter(ORMAdapter::class, [ ->createAdapter(ORMAdapter::class, [
'entity' => Part::class, 'entity' => Part::class,

View file

@ -0,0 +1,20 @@
{% extends "base.html.twig" %}
{% block content %}
{# Set the title for the table here. It will be inserted into the table later.#}
<div style="display:none;" id="part-card-header-src">Test</div>
<div id="part_list" class="table-responsive" data-datatable data-settings='{{ datatable_settings(datatable) }}'>
<div class="card-body">
<div class="card">
<div class="card-body">
<h4>{% trans %}part_list.loading.caption{% endtrans %}</h4>
<h6>{% trans %}part_list.loading.message{% endtrans %}</h6>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1722,6 +1722,74 @@ Element 3</target>
<source>flash.info</source> <source>flash.info</source>
<target state="translated">Info</target> <target state="translated">Info</target>
</trans-unit> </trans-unit>
<trans-unit id="t2EE5cB" resname="part.table.name">
<source>part.table.name</source>
<target state="translated">Name</target>
</trans-unit>
<trans-unit id="eshqdG." resname="part.table.id">
<source>part.table.id</source>
<target state="translated">ID</target>
</trans-unit>
<trans-unit id="zKnTKYw" resname="part.table.description">
<source>part.table.description</source>
<target state="translated">Beschreibung</target>
</trans-unit>
<trans-unit id="2eOA0az" resname="part.table.category">
<source>part.table.category</source>
<target state="translated">Kategorie</target>
</trans-unit>
<trans-unit id="rD.1skI" resname="part.table.amount">
<source>part.table.amount</source>
<target state="translated">Menge</target>
</trans-unit>
<trans-unit id="Mv9g23S" resname="part.table.minamount">
<source>part.table.minamount</source>
<target state="translated">Min.Menge</target>
</trans-unit>
<trans-unit id="pw75u4x" resname="part.table.addedDate">
<source>part.table.addedDate</source>
<target state="translated">Hinzugefügt</target>
</trans-unit>
<trans-unit id="eDb7mzC" resname="part.table.lastModified">
<source>part.table.lastModified</source>
<target state="translated">Zuletzt bearbeitet</target>
</trans-unit>
<trans-unit id="DJ9YTs_" resname="part.table.needsReview">
<source>part.table.needsReview</source>
<target state="translated">Review benötigt</target>
</trans-unit>
<trans-unit id="tb6kG2x" resname="true">
<source>true</source>
<target state="translated">wahr</target>
</trans-unit>
<trans-unit id=".LzxZZC" resname="false">
<source>false</source>
<target state="translated">falsch</target>
</trans-unit>
<trans-unit id="TSiqJH6" resname="part.table.favorite">
<source>part.table.favorite</source>
<target state="translated">Favorit</target>
</trans-unit>
<trans-unit id="n0h1ozV" resname="part.table.manufacturingStatus">
<source>part.table.manufacturingStatus</source>
<target state="translated">Status</target>
</trans-unit>
<trans-unit id="HTkvjkE" resname="part.table.mpn">
<source>part.table.mpn</source>
<target state="translated">MPN</target>
</trans-unit>
<trans-unit id="q_AsQoZ" resname="part.table.mass">
<source>part.table.mass</source>
<target state="translated">Gewicht</target>
</trans-unit>
<trans-unit id="" resname="part.table.tags">
<source>part.table.tags</source>
<target state="translated">Tags</target>
</trans-unit>
<trans-unit id="pVVBLyB" resname="datatable.datatable.lengthMenu">
<source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target>
</trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>

View file

@ -1693,6 +1693,74 @@ Element 3</target>
<source>flash.info</source> <source>flash.info</source>
<target state="translated">Info</target> <target state="translated">Info</target>
</trans-unit> </trans-unit>
<trans-unit id="t2EE5cB" resname="part.table.name">
<source>part.table.name</source>
<target state="translated">Name</target>
</trans-unit>
<trans-unit id="eshqdG." resname="part.table.id">
<source>part.table.id</source>
<target state="translated">Id</target>
</trans-unit>
<trans-unit id="zKnTKYw" resname="part.table.description">
<source>part.table.description</source>
<target state="translated">Description</target>
</trans-unit>
<trans-unit id="2eOA0az" resname="part.table.category">
<source>part.table.category</source>
<target state="translated">Category</target>
</trans-unit>
<trans-unit id="rD.1skI" resname="part.table.amount">
<source>part.table.amount</source>
<target state="translated">Amount</target>
</trans-unit>
<trans-unit id="Mv9g23S" resname="part.table.minamount">
<source>part.table.minamount</source>
<target state="translated">Min. Amount</target>
</trans-unit>
<trans-unit id="pw75u4x" resname="part.table.addedDate">
<source>part.table.addedDate</source>
<target state="translated">Created at</target>
</trans-unit>
<trans-unit id="eDb7mzC" resname="part.table.lastModified">
<source>part.table.lastModified</source>
<target state="translated">Last modified</target>
</trans-unit>
<trans-unit id="DJ9YTs_" resname="part.table.needsReview">
<source>part.table.needsReview</source>
<target state="translated">Needs review</target>
</trans-unit>
<trans-unit id="tb6kG2x" resname="true">
<source>true</source>
<target state="translated">true</target>
</trans-unit>
<trans-unit id=".LzxZZC" resname="false">
<source>false</source>
<target state="translated">false</target>
</trans-unit>
<trans-unit id="TSiqJH6" resname="part.table.favorite">
<source>part.table.favorite</source>
<target state="translated">Favorite</target>
</trans-unit>
<trans-unit id="n0h1ozV" resname="part.table.manufacturingStatus">
<source>part.table.manufacturingStatus</source>
<target state="translated">Status</target>
</trans-unit>
<trans-unit id="HTkvjkE" resname="part.table.mpn">
<source>part.table.mpn</source>
<target state="translated">MPN</target>
</trans-unit>
<trans-unit id="q_AsQoZ" resname="part.table.mass">
<source>part.table.mass</source>
<target state="translated">Mass</target>
</trans-unit>
<trans-unit id="" resname="part.table.tags">
<source>part.table.tags</source>
<target state="translated">Tags</target>
</trans-unit>
<trans-unit id="pVVBLyB" resname="datatable.datatable.lengthMenu">
<source>datatable.datatable.lengthMenu</source>
<target>_MENU_</target>
</trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>