src/AdminBundle/Admin/Vehicles/Passenger/RentVehicleAdmin.php line 16

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\Vehicles\Passenger;
  3. use AdminBundle\Admin\Vehicles\BaseRentVehicleAdmin;
  4. use CoreBundle\Entity\Vehicles\ConfiguratorColor;
  5. use CoreBundle\Entity\Vehicles\Variation;
  6. use CoreBundle\Model\Vehicles\VehicleType;
  7. use Doctrine\ORM\Query\Expr\Join;
  8. use Sonata\AdminBundle\Form\FormMapper;
  9. use Sonata\MediaBundle\Form\Type\MediaType;
  10. use Symfony\Component\Finder\Exception\AccessDeniedException;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  13. class RentVehicleAdmin extends BaseRentVehicleAdmin
  14. {
  15.     protected $baseRouteName 'rent-vehicle-passenger';
  16.     protected $baseRoutePattern 'rent-vehicle-passenger-action';
  17.     protected function getVehicleType(): int {
  18.         return VehicleType::PASSENGER_TYPE;
  19.     }
  20.     protected function getVariationAdminCode() {
  21.         return 'admin.vehicles.passenger_variation';
  22.     }
  23.     protected function getVehicleAdminCode() {
  24.         return 'admin.vehicles.passenger_vehicle';
  25.     }
  26.     public function prePersist($object): void
  27.     {
  28.         $this->updateObject($object);
  29.     }
  30.     public function preUpdate($object): void
  31.     {
  32.         $this->updateObject($object);
  33.         parent::preUpdate($object);
  34.     }
  35.     private function updateObject($object)
  36.     {
  37.         $object->setState((int)$object->getState());
  38.     }
  39.     protected function configureFormFields(FormMapper $formMapper): void
  40.     {
  41.         $this->checkByRole(['ROLE_SUPER_ADMIN''ROLE_CONTENT_MANAGER''ROLE_DC_MANAGER']);
  42.         $User $this->getUser();
  43.         if (!$Dealer $User->getDealer()) {
  44.             throw new AccessDeniedException('User without dealer');
  45.         }
  46.         $variations = [];
  47.         $queryBuildersVariations $this->getModelManager()
  48.             ->getEntityManager(Variation::class)
  49.             ->createQueryBuilder('v')
  50.             ->select('v')
  51.             ->from(Variation::class, 'v')
  52.             ->innerJoin('v.vehicle''ve'Join::WITH've.vehicle_type = :vehicleType')->setParameter('vehicleType'$this->getVehicleType())
  53.             ->where('v.state = :vState')->setParameter('vState'true)
  54.             ->andWhere('ve.dealer = :dealer')->setParameter('dealer'$Dealer)
  55.             ->andWhere('ve.state = :veState')->setParameter('veState'true)
  56.             ->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete'false);
  57.         /** @var Variation $item */
  58.         foreach ($queryBuildersVariations->getQuery()->getResult() as $item) {
  59.             $variations[$item->getVehicle()->getModel()->getTitle() . ' - ' $item->getTitle()] = $item;
  60.         }
  61.         $configuratorColor = [];
  62.         $queryBuilderConfiguratorColor $this->getModelManager()
  63.             ->getEntityManager(ConfiguratorColor::class)
  64.             ->createQueryBuilder('cc')
  65.             ->select('cc')
  66.             ->from(ConfiguratorColor::class, 'cc')
  67.             ->innerJoin('cc.vehicle''ve'Join::WITH've.vehicle_type = :vehicleType')->setParameter('vehicleType'$this->getVehicleType())
  68.             ->where('ve.dealer = :dealer')->setParameter('dealer'$Dealer)
  69.             ->andWhere('ve.state = :veState')->setParameter('veState'true)
  70.             ->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete'false)
  71.             ->orderBy('cc.name_ru');
  72.         /** @var ConfiguratorColor $item */
  73.         foreach ($queryBuilderConfiguratorColor->getQuery()->getResult() as $item) {
  74.             $configuratorColor[$item->getNameRu()] = $item;
  75.         }
  76.         $formMapper
  77.             ->tab('Основная информация')
  78.             ->with('Доп. информация', ['class' => 'col-lg-6'])
  79.             ->add('preview'MediaType::class, [
  80.                 'provider' => 'sonata.media.provider.image',
  81.                 'context'  => 'dc_site',
  82.                 'label' => 'Изображение'
  83.             ])
  84.             ->add('variation',ChoiceType::class, ['label' => 'Выбор вариаци''choices' => $variations],['by_reference' => false,'admin_code' => $this->getVehicleAdminCode()])
  85.             ->add('price'null, ['label' => 'Цена, грн''required' => false])
  86.             ->add('position'IntegerType::class, ['label' => 'Позиция''required' => false])
  87.             ->add('action_price'null, ['label' => 'Акционная цена, грн''required' => false])
  88.             ->add('color'null, ['label' => 'Цвет''required' => false])
  89.             ->add('color_item',ChoiceType::class, ['label' => 'Цвет из конфигуратора''required' => false'choices' => $configuratorColor])
  90.             ->add('state'ChoiceType::class, ['label' => 'Отображать на сайте''required' => false'choices' => array_flip([
  91.                 => 'Да',
  92.                 => 'Нет',
  93.             ])])
  94.             ->end();
  95.     }
  96. }