urlGenerator = $urlGenerator; $this->translator = $translator; } protected function buildCriteria(QueryBuilder $builder, array $options) { if (isset($options['category'])) { $em = $builder->getEntityManager(); $category = $options['category']; $repo = $em->getRepository(Category::class); $list = $repo->toNodesList($category); $list[] = $category; $builder->andWhere('part.category IN (:cid)')->setParameter('cid', $list); } if (isset($options['tag'])) { $builder->andWhere('part.tags LIKE :tag')->setParameter('tag', '%' . $options['tag'] . '%'); } if (isset($options['search'])) { $builder->AndWhere('part.name LIKE :search')->orWhere('part.description LIKE :search')->orWhere('part.comment LIKE :search') ->setParameter('search', '%' . $options['search'] . '%'); } } /** * @param DataTable $dataTable * @param array $options */ public function configure(DataTable $dataTable, array $options) { $dataTable ->add('name', TextColumn::class, [ 'label' => $this->translator->trans('part.table.name'), 'render' => function ($value, Part $context) { return $this->urlGenerator->infoHTML($context); }, ]) ->add('id', TextColumn::class, [ 'label' => $this->translator->trans('part.table.id'), '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('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') ->createAdapter(ORMAdapter::class, [ 'entity' => Part::class, 'criteria' => [ function (QueryBuilder $builder) use ($options) { $this->buildCriteria($builder, $options); }, new SearchCriteriaProvider() ] ]); } }