<?php
namespace AdminBundle\Admin\Vehicles\Passenger;
use AdminBundle\Admin\Vehicles\BaseRentVehicleAdmin;
use CoreBundle\Entity\Vehicles\ConfiguratorColor;
use CoreBundle\Entity\Vehicles\Variation;
use CoreBundle\Model\Vehicles\VehicleType;
use Doctrine\ORM\Query\Expr\Join;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
class RentVehicleAdmin extends BaseRentVehicleAdmin
{
protected $baseRouteName = 'rent-vehicle-passenger';
protected $baseRoutePattern = 'rent-vehicle-passenger-action';
protected function getVehicleType(): int {
return VehicleType::PASSENGER_TYPE;
}
protected function getVariationAdminCode() {
return 'admin.vehicles.passenger_variation';
}
protected function getVehicleAdminCode() {
return 'admin.vehicles.passenger_vehicle';
}
public function prePersist($object): void
{
$this->updateObject($object);
}
public function preUpdate($object): void
{
$this->updateObject($object);
parent::preUpdate($object);
}
private function updateObject($object)
{
$object->setState((int)$object->getState());
}
protected function configureFormFields(FormMapper $formMapper): void
{
$this->checkByRole(['ROLE_SUPER_ADMIN', 'ROLE_CONTENT_MANAGER', 'ROLE_DC_MANAGER']);
$User = $this->getUser();
if (!$Dealer = $User->getDealer()) {
throw new AccessDeniedException('User without dealer');
}
$variations = [];
$queryBuildersVariations = $this->getModelManager()
->getEntityManager(Variation::class)
->createQueryBuilder('v')
->select('v')
->from(Variation::class, 'v')
->innerJoin('v.vehicle', 've', Join::WITH, 've.vehicle_type = :vehicleType')->setParameter('vehicleType', $this->getVehicleType())
->where('v.state = :vState')->setParameter('vState', true)
->andWhere('ve.dealer = :dealer')->setParameter('dealer', $Dealer)
->andWhere('ve.state = :veState')->setParameter('veState', true)
->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete', false);
/** @var Variation $item */
foreach ($queryBuildersVariations->getQuery()->getResult() as $item) {
$variations[$item->getVehicle()->getModel()->getTitle() . ' - ' . $item->getTitle()] = $item;
}
$configuratorColor = [];
$queryBuilderConfiguratorColor = $this->getModelManager()
->getEntityManager(ConfiguratorColor::class)
->createQueryBuilder('cc')
->select('cc')
->from(ConfiguratorColor::class, 'cc')
->innerJoin('cc.vehicle', 've', Join::WITH, 've.vehicle_type = :vehicleType')->setParameter('vehicleType', $this->getVehicleType())
->where('ve.dealer = :dealer')->setParameter('dealer', $Dealer)
->andWhere('ve.state = :veState')->setParameter('veState', true)
->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete', false)
->orderBy('cc.name_ru');
/** @var ConfiguratorColor $item */
foreach ($queryBuilderConfiguratorColor->getQuery()->getResult() as $item) {
$configuratorColor[$item->getNameRu()] = $item;
}
$formMapper
->tab('Основная информация')
->with('Доп. информация', ['class' => 'col-lg-6'])
->add('preview', MediaType::class, [
'provider' => 'sonata.media.provider.image',
'context' => 'dc_site',
'label' => 'Изображение'
])
->add('variation',ChoiceType::class, ['label' => 'Выбор вариаци', 'choices' => $variations],['by_reference' => false,'admin_code' => $this->getVehicleAdminCode()])
->add('price', null, ['label' => 'Цена, грн', 'required' => false])
->add('position', IntegerType::class, ['label' => 'Позиция', 'required' => false])
->add('action_price', null, ['label' => 'Акционная цена, грн', 'required' => false])
->add('color', null, ['label' => 'Цвет', 'required' => false])
->add('color_item',ChoiceType::class, ['label' => 'Цвет из конфигуратора', 'required' => false, 'choices' => $configuratorColor])
->add('state', ChoiceType::class, ['label' => 'Отображать на сайте', 'required' => false, 'choices' => array_flip([
1 => 'Да',
0 => 'Нет',
])])
->end();
}
}