src/AdminBundle/Admin/Service/PartAdmin.php line 18

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\Service;
  3. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  4. use Sonata\AdminBundle\Admin\AbstractAdmin;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Route\RouteCollection;
  9. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  10. use Sonata\DoctrineORMAdminBundle\Filter\ChoiceFilter;
  11. use Symfony\Component\Finder\Exception\AccessDeniedException;
  12. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  13. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  14. use Symfony\Component\Security\Core\Security;
  15. class PartAdmin extends AbstractAdmin
  16. {
  17.     protected Security $security;
  18.     public function setContainerServices(Security $security): void
  19.     {
  20.         $this->security $security;
  21.     }
  22.     /**
  23.      * @param RouteCollection $collection
  24.      */
  25.     protected function configureRoutes(RouteCollectionInterface $collection): void
  26.     {
  27.         $collection->remove('view');
  28.         $collection->remove('create');
  29.     }
  30.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  31.     {
  32.         $datagridMapper->add('id');
  33.         $datagridMapper->add('number'null, ['label' => 'Код']);
  34.         $datagridMapper->add('in_regulation',ChoiceFilter::class, ['label' => 'Учавствует в ТО'], [ 'choices' => [
  35.             'Да' => 1,
  36.             'Нет' => 0,
  37.         ]]);
  38.     }
  39.     public function prePersist($object): void
  40.     {
  41.         $this->prePare($object);
  42.     }
  43.     public function preUpdate($object): void
  44.     {
  45.         $this->prePare($object);
  46.         parent::preUpdate($object);
  47.     }
  48.     private function prePare($object) {
  49.         $object->setInRegulation((int) $object->getInRegulation());
  50.     }
  51.     /**
  52.      * @param FormMapper $formMapper
  53.      */
  54.     protected function configureFormFields(FormMapper $formMapper): void
  55.     {
  56.         $formMapper
  57.             ->add('title',null, ['label' => 'Название 1C'])
  58.             ->add('name_ru',null, ['label' => 'Название публичное RU'])
  59.             ->add('name_ua',null, ['label' => 'Название публичное UA'])
  60.             ->add('price',null, ['label' => 'Цена'])
  61.             ->add('in_regulation',CheckboxType::class, ['label' => 'Учавствует в ТО''required' => false])
  62.         ;
  63.     }
  64.     /**
  65.      * @param string $context
  66.      * @return ProxyQueryInterface
  67.      */
  68.     public function configureQuery($context 'list'): ProxyQueryInterface
  69.     {
  70.         $user $this->security->getUser();
  71.         $query parent::configureQuery($context);
  72.         $dealer $user->getDealer();
  73.         if(!$dealer) {
  74.             throw new AccessDeniedException();
  75.         }
  76.         $query->andWhere(
  77.             $query->expr()->eq($query->getRootAliases()[0].'.dealer',':dealer')
  78.         );
  79.         $query->setParameter('dealer'$dealer->getId());
  80.         return $query;
  81.     }
  82.     /**
  83.      * @param ListMapper $listMapper
  84.      */
  85.     protected function configureListFields(ListMapper $listMapper): void
  86.     {
  87.         $listMapper->addIdentifier('id')
  88.             ->add('number',null, ['label' => 'Код'])
  89.             ->add('title'null, ['label' => 'Название 1С'])
  90.             ->add('count'null, ['label' => 'Остаток'])
  91.             ->add('price',null, ['label' => 'Цена'])
  92.             ->add('in_regulation','choice', ['label' => 'Учавствует в ТО''editable' => true'choices' => [
  93.                 => 'Да',
  94.                 => 'Нет',
  95.             ]])
  96.             ->add('_action''actions', [
  97.                 'label' => 'Действия',
  98.                 'actions' => [
  99.                     'edit' => [],
  100.                 ]
  101.             ])
  102.         ;
  103.     }
  104. }