src/AdminBundle/Admin/Vehicles/Water/VehicleAdmin.php line 27

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\Vehicles\Water;
  3. use AdminBundle\Admin\Vehicles\BaseVehicleAdmin;
  4. use AdminBundle\Form\Type\ContentType;
  5. use CoreBundle\Entity\Dealer;
  6. use CoreBundle\Entity\Model;
  7. use CoreBundle\Entity\Vehicles\Group;
  8. use CoreBundle\Entity\Vehicles\RecommendGroup;
  9. use CoreBundle\Model\Vehicles\Vehicle;
  10. use CoreBundle\Model\Vehicles\VehicleType;
  11. use Doctrine\ORM\Query\Expr\Join;
  12. use Sonata\AdminBundle\Form\FormMapper;
  13. use Sonata\AdminBundle\Form\Type\ModelListType;
  14. use Sonata\AdminBundle\Form\Type\ModelType;
  15. use Sonata\Form\Type\CollectionType;
  16. use Sonata\MediaBundle\Form\Type\MediaType;
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  19. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  20. use Symfony\Component\Form\Extension\Core\Type\TextType;
  21. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  22. class VehicleAdmin extends BaseVehicleAdmin
  23. {
  24.     const VEHICLE_CHARACTERISTIC_BOAT_ENGINE "chovnovy_motor";
  25.     protected $baseRouteName 'vehicle-water';
  26.     protected $baseRoutePattern 'vehicle-water-action';
  27.     protected function getVehicleType(): int
  28.     {
  29.         return VehicleType::WATER_TYPE;
  30.     }
  31.     public function getVariationAdminCode(): string
  32.     {
  33.         return 'admin.vehicles.water_variation';
  34.     }
  35.     protected function getModelDealer(Dealer $Dealer)
  36.     {
  37.         $queryBuilder $this->getModelManager()
  38.             ->getEntityManager(Model::class)
  39.             ->createQueryBuilder('m')
  40.             ->select('m')
  41.             ->from('CoreBundle:Model''m')
  42.             ->innerJoin('m.brand''b');
  43.         if ($Dealer->getUniqueId() == "VIDI_MARINE") {
  44.             $queryBuilder->where('b.url in (:brands)')
  45.                 ->setParameter('brands', ['yamaha','buster','yamarin','yamarin-cross','powerboat''kolibri']);
  46.         } else {
  47.             $queryBuilder->where('b = :brand')
  48.                 ->setParameter('brand'$Dealer->getBrand());
  49.         }
  50.         return $queryBuilder;
  51.     }
  52.     protected function getEngineBoat (Dealer $Dealer)
  53.     {
  54.         $queryBuilder $this->getModelManager()
  55.             ->getEntityManager(\CoreBundle\Entity\Vehicles\Vehicle::class)
  56.             ->createQueryBuilder('v')
  57.             ->select('v')
  58.             ->from('CoreBundle:Vehicles\Vehicle''v')
  59.             ->join('v.variations''vr')
  60.             ->join('vr.characteristics''c')
  61.             ->join('c.characteristic_value''cv')
  62.             ->where('v.vehicle_type = :vehicle_type')
  63.             ->andWhere('cv.url = :characteristic')
  64.             ->setParameter('characteristic'self::VEHICLE_CHARACTERISTIC_BOAT_ENGINE)
  65.             ->setParameter('vehicle_type'VehicleType::WATER_TYPE)
  66.             ->groupBy('v')
  67.         ;
  68.         return $queryBuilder;
  69.     }
  70.     protected function configureFormFields(FormMapper $formMapper): void
  71.     {
  72.         $this->checkByRole(['ROLE_SUPER_ADMIN''ROLE_CONTENT_MANAGER''ROLE_DC_MANAGER']);
  73.         $User $this->getUser();
  74.         if (!$Dealer $User->getDealer()) {
  75.             throw new AccessDeniedException();
  76.         }
  77.         $vehicleId null;
  78.         if ($this->getSubject()) {
  79.             $vehicleId $this->getSubject()->getId();
  80.         }
  81.         $queryBuilder $this->getModelDealer($Dealer);
  82.         $queryBuilderGroup $this->getModelGrouplDealer($Dealer);
  83.         $queryBuilderBoatEngine $this->getEngineBoat($Dealer);
  84.         $formMapper
  85.             ->tab('Основная информация')
  86.             ->with('Контент', ['class' => 'col-lg-6'])
  87.             ->add('content'ContentType::class, ['label' => false], [
  88.                 'edit' => 'inline',
  89.                 'sortable' => 'position',
  90.             ])
  91.             ->end()
  92.             ->with('Доп. информация', ['class' => 'col-lg-6'])
  93.             ->add('adminName'TextType::class, ['label' => 'Внутреннее название''required' => false])
  94.             ->add(
  95.                 'model',
  96.                 ModelType::class,
  97.                 ['label' => 'Модель''required' => true'query' => $queryBuilder]
  98.             )
  99.             ->add('boat_engine'null, ['label' => 'Мотори''query_builder' => $queryBuilderBoatEngine], ['admin_code' => $this->getVariationAdminCode()])
  100.            /* ->add(
  101.                 'boat_engine',
  102.                 ModelType::class,
  103.                 ['label' => 'Вибор двигателя', 'required' => false, 'query' => $queryBuilderBoatEngine],
  104.                 [
  105.                 ]
  106.             )*/
  107.             ->add('recommend_group'EntityType::class, [
  108.                 'class' => RecommendGroup::class,
  109.                 'label' => 'Входит в подборки',
  110.                 'multiple' => true,
  111.                 'required' => false,
  112.             ])
  113.             ->add('category'null, ['label' => 'Категория''required' => true])
  114.             ->add('group'ModelType::class, ['label' => 'Группа''required' => false'query' => $queryBuilderGroup])
  115.             ->add('url'null, ['label' => 'URL'])
  116.             ->add('image'MediaType::class, [
  117.                 'provider' => 'sonata.media.provider.image',
  118.                 'context'  => 'dc_site',
  119.                 'label' => 'Изображение'
  120.             ])
  121.             ->add('state'CheckboxType::class, ['label' => 'Отображать на сайте''required' => false])
  122.             ->add('is_new_model'CheckboxType::class, ['label' => 'Новая модель''required' => false])
  123.             ->add(
  124.                 'is_pre_order',
  125.                 CheckboxType::class,
  126.                 ['label' => 'Доступно под заказ''required' => false'value' => 1]
  127.             )
  128.             ->add(
  129.                 'show_disabled',
  130.                 CheckboxType::class,
  131.                 ['label' => 'Сохранить активность ссылки(Архивная модель)''required' => false]
  132.             )
  133.             ->add('position'NumberType::class, ['label' => 'Позиция'])
  134.             ->add('test_drive'CheckboxType::class, ['label' => 'Доступна на тест драйв''required' => false])
  135.             ->add(
  136.                 'credit_available',
  137.                 CheckboxType::class,
  138.                 ['label' => 'Доступна в кредит''required' => false'value' => 1]
  139.             )
  140.             ->add(
  141.                 'school_available',
  142.                 CheckboxType::class,
  143.                 ['label' => 'Доступна для школы''required' => false'value' => 1]
  144.             )
  145.             ->add(
  146.                 'noindex_follow',
  147.                 CheckboxType::class,
  148.                 ['label' => 'noindex, follow''required' => false'value' => 1]
  149.             )
  150.             ->end()
  151.             ->end()
  152.             ->tab('Видео')
  153.             ->with('', ['class' => 'col-lg12'])
  154.             ->add(
  155.                 'video',
  156.                 ModelListType::class,
  157.                 [
  158.                     'label' => 'Галерея видео',
  159.                     'btn_list' => false,
  160.                     'required' => false,
  161.                 ],
  162.                 [
  163.                     'edit' => 'inline',
  164.                     'inline' => 'table',
  165.                     'sortable' => 'position',
  166.                     'link_parameters' => [
  167.                         'context' => 'dc_car_video',
  168.                         'provider' => 'sonata.media.provider.youtube'
  169.                     ],
  170.                     'admin_code' => 'sonata.media.admin.gallery',
  171.                 ]
  172.             )
  173.             ->end()
  174.             ->end()
  175.             ->tab('Прайсы и брошюры')
  176.             ->with('', ['class' => 'col-lg-12'])
  177.             ->add('files'CollectionType::class, [
  178.                 'label' => 'Файлы',
  179.                 'by_reference' => false,
  180.                 'required' => false,
  181.             ], [
  182.                 'edit' => 'inline',
  183.                 'inline' => 'table',
  184.             ])
  185.             ->end()
  186.             ->end()
  187.             ->tab('Особенности')
  188.             ->with('', ['class' => 'col-lg-12'])
  189.             ->add('features'CollectionType::class, [
  190.                 'label' => false,
  191.                 'by_reference' => false,
  192.                 'required' => false,
  193.             ], [
  194.                 'edit' => 'inline',
  195.                 'inline' => 'table',
  196.             ])
  197.             ->end()
  198.             ->end()
  199.             ->tab('Комплектации')
  200.             ->with('', ['class' => 'col-lg-12'])
  201.             ->add('equipments'CollectionType::class, [
  202.                 'label' => 'Комплектации',
  203.                 'by_reference' => false,
  204.                 'required' => false,
  205.             ], [
  206.                 'edit' => 'inline',
  207.                 'inline' => 'table',
  208.             ])
  209.             ->end()
  210.             ->end()
  211.             ->tab('FAQ')
  212.             ->with('', ['class' => 'col-lg-12'])
  213.             ->add('faqs'CollectionType::class, [
  214.                 'label' => false,
  215.                 'by_reference' => false,
  216.                 'required' => false,
  217.             ], [
  218.                 'edit' => 'inline',
  219.                 'inline' => 'table',
  220.             ])
  221.             ->end()
  222.             ->end();
  223.         if ($vehicleId) {
  224.             $formMapper->tab('Цены')
  225.                 ->with('', ['class' => 'col-lg-12'])
  226.                 ->add('vehicle_items'CollectionType::class, [
  227.                     'label' => 'Цены',
  228.                     'by_reference' => false,
  229.                     'required' => false,
  230.                 ], [
  231.                     'edit' => 'inline',
  232.                     'inline' => 'table',
  233.                 ])
  234.                 ->end()
  235.                 ->end();
  236.         }
  237.     }
  238. }