src/AdminBundle/Admin/SubAutoSite/AccessoriesAdmin.php line 22

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\SubAutoSite;
  3. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  4. use ImporterBundle\Entity\Accessories;
  5. use ImporterBundle\Entity\AccessoriesGroup;
  6. use ImporterBundle\Entity\VehicleAccessory;
  7. use FOS\CKEditorBundle\Form\Type\CKEditorType;
  8. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  9. use Sonata\Form\Type\CollectionType;
  10. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  11. use Sonata\MediaBundle\Form\Type\MediaType;
  12. use Symfony\Component\Finder\Exception\AccessDeniedException;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Sonata\AdminBundle\Route\RouteCollection;
  15. use Sonata\AdminBundle\Form\FormMapper;
  16. use Sonata\AdminBundle\Datagrid\ListMapper;
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  19. class AccessoriesAdmin extends BaseImporterAdmin
  20. {
  21.     /**
  22.      * @param RouteCollectionInterface $collection
  23.      */
  24.     protected function configureRoutes(RouteCollectionInterface $collection): void
  25.     {
  26.         $collection->remove('view');
  27.         $collection->remove('delete');
  28.     }
  29.     public function preUpdate($object): void
  30.     {
  31.         $this->preSave($object);
  32.         parent::preUpdate($object);
  33.     }
  34.     /**
  35.      * @param Accessories $object
  36.      */
  37.     public function prePersist($object): void
  38.     {
  39.         $User $this->security->getUser();
  40.         $object->setDealer($User->getSubDealer());
  41.         $this->preSave($object);
  42.     }
  43.     /**
  44.      * @param Accessories $object
  45.      */
  46.     private function preSave($object) {
  47.         $object->setPrice((float) str_replace(',','.',$object->getPrice()));
  48.         /** @var VehicleAccessory $va */
  49.         foreach ($object->getAccessoryVehicles() as $va) {
  50.             $va->setAccessory($object);
  51.         }
  52.     }
  53.     /**
  54.      * @param FormMapper $formMapper
  55.      */
  56.     protected function configureFormFields(FormMapper $formMapper): void
  57.     {
  58.         $formMapper
  59.             ->tab('Основная информация')
  60.             ->with('Описание (RUS)', ['class' => 'col-md-6'])
  61.                 ->add('name_ru'TextType::class, [
  62.                     'required' => true,
  63.                     'label' => 'Название (RUS)'
  64.                 ])
  65.                 ->add('content_ru'CKEditorType::class, [
  66.                     'config_name' => 'default',
  67.                     'required' => false,
  68.                     'label' => 'Контент (RUS)'
  69.                 ])
  70.             ->end()
  71.             ->with('Описание (UA)', ['class' => 'col-md-6'])
  72.                 ->add('name_ua'TextType::class, [
  73.                     'required' => true,
  74.                     'label' => 'Название (UA)'
  75.                 ])
  76.                 ->add('content_ua'CKEditorType::class, [
  77.                     'config_name' => 'default',
  78.                     'required' => false,
  79.                     'label' => 'Контент (UA)'
  80.                 ])
  81.             ->end()
  82.             ->with('Фото', ['class' => 'col-md-6'])
  83.                 ->add('image'MediaType::class, [
  84.                     'provider' => 'sonata.media.provider.image',
  85.                     'context'  => 'dc_site',
  86.                     'label' => 'Фото'
  87.                 ])
  88.             ->end()
  89.             ->with('Дополнительно', ['class' => 'col-md-6'])
  90.                 ->add('group'EntityType::class, [
  91.                     'class' => AccessoriesGroup::class,
  92.                     'required' => true,
  93.                     'label' => 'Категория',
  94.                 ])
  95.                 ->add('price'null, [
  96.                     'required' => true,
  97.                     'label' => 'Цена'
  98.                 ])
  99.                 ->add('priceUsd'null, [
  100.                     'required' => false,
  101.                     'label' => 'Цена в валюте'
  102.                 ])
  103.                 ->add('position'null, [
  104.                     'required' => false,
  105.                     'label' => 'Порядковый номер'
  106.                 ])
  107.                 ->add('catalog_number'null, [ 'label' => 'Каталожный номер'])
  108.                 ->add('avail_count'IntegerType::class, [
  109.                     'required' => false,
  110.                     'label' => 'Доступное количество',
  111.                 ])
  112.             ->end()
  113.             ->end()
  114.             ->tab('Применимость к моделям')
  115.                 ->with('Применимость к моделям', ['class' => 'col-md-8'])
  116.                     ->add('accessory_vehicles',CollectionType::class, [
  117.                         'by_reference' => false,
  118.                         'required' => false,
  119.                         'label' => false
  120.                     ], [
  121.                         'edit' => 'inline',
  122.                         'inline' => 'table'
  123.                     ])
  124.                 ->end()
  125.             ->end()
  126.         ;
  127.     }
  128.     /**
  129.      * @param string $context
  130.      * @return ProxyQueryInterface
  131.      */
  132.     public function configureQuery($context 'list'): ProxyQueryInterface
  133.     {
  134.         $user $this->security->getUser();
  135.         $query parent::configureQuery($context);
  136.         $dealer $user->getSubDealer();
  137.         if(!$dealer) {
  138.             throw new AccessDeniedException();
  139.         }
  140.         $query->andWhere($query->getRootAliases()[0].'.dealer = :dealer');
  141.         $query->setParameter('dealer'$dealer->getId());
  142.         return $query;
  143.     }
  144.     /**
  145.      * @param ListMapper $listMapper
  146.      */
  147.     protected function configureListFields(ListMapper $listMapper): void
  148.     {
  149.         $listMapper->addIdentifier('id')
  150.             ->add('name_ru',null, ['label' => 'Название'])
  151.             ->add('catalog_number',null, ['label' => 'Каталожный номер'])
  152.             ->add('avail_count',null, ['label' => 'Количество'])
  153.             ->add('price',null, ['label' => 'Цена'])
  154.             ->add('priceUsd',null, ['label' => 'Цена в валюте'])
  155.             ->add('recommended','choice', ['label' => 'Рекомендованный''editable' => true'choices' => [
  156.                 => 'Да',
  157.                 => 'Нет',
  158.                 null => 'Нет',
  159.             ]])
  160.             ->add('group.name',null, ['label' => 'Группа'])
  161.             ->add('_action''actions', [
  162.                 'actions' => [
  163.                     'edit' => [],
  164.                 ]
  165.             ])
  166.         ;
  167.     }
  168.     /**
  169.      * @param DatagridMapper $datagridMapper]
  170.      */
  171.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  172.     {
  173.         $User $this->security->getUser();
  174.         if(!$Dealer $User->getSubDealer()) {
  175.             throw new AccessDeniedException('User without sub dealer');
  176.         }
  177.         $datagridMapper
  178.             ->add('group',null, ['label' => 'Группа'])
  179.             ->add('catalog_number',null, ['label' => 'Каталожный номер'])
  180.         ;
  181.     }
  182. }