<?php
namespace AdminBundle\Admin\Vehicles\Water;
use AdminBundle\Admin\Vehicles\BaseVehicleAdmin;
use AdminBundle\Form\Type\ContentType;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Model;
use CoreBundle\Entity\Vehicles\Group;
use CoreBundle\Entity\Vehicles\RecommendGroup;
use CoreBundle\Model\Vehicles\Vehicle;
use CoreBundle\Model\Vehicles\VehicleType;
use Doctrine\ORM\Query\Expr\Join;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelListType;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\Form\Type\CollectionType;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class VehicleAdmin extends BaseVehicleAdmin
{
const VEHICLE_CHARACTERISTIC_BOAT_ENGINE = "chovnovy_motor";
protected $baseRouteName = 'vehicle-water';
protected $baseRoutePattern = 'vehicle-water-action';
protected function getVehicleType(): int
{
return VehicleType::WATER_TYPE;
}
public function getVariationAdminCode(): string
{
return 'admin.vehicles.water_variation';
}
protected function getModelDealer(Dealer $Dealer)
{
$queryBuilder = $this->getModelManager()
->getEntityManager(Model::class)
->createQueryBuilder('m')
->select('m')
->from('CoreBundle:Model', 'm')
->innerJoin('m.brand', 'b');
if ($Dealer->getUniqueId() == "VIDI_MARINE") {
$queryBuilder->where('b.url in (:brands)')
->setParameter('brands', ['yamaha','buster','yamarin','yamarin-cross','powerboat', 'kolibri']);
} else {
$queryBuilder->where('b = :brand')
->setParameter('brand', $Dealer->getBrand());
}
return $queryBuilder;
}
protected function getEngineBoat (Dealer $Dealer)
{
$queryBuilder = $this->getModelManager()
->getEntityManager(\CoreBundle\Entity\Vehicles\Vehicle::class)
->createQueryBuilder('v')
->select('v')
->from('CoreBundle:Vehicles\Vehicle', 'v')
->join('v.variations', 'vr')
->join('vr.characteristics', 'c')
->join('c.characteristic_value', 'cv')
->where('v.vehicle_type = :vehicle_type')
->andWhere('cv.url = :characteristic')
->setParameter('characteristic', self::VEHICLE_CHARACTERISTIC_BOAT_ENGINE)
->setParameter('vehicle_type', VehicleType::WATER_TYPE)
->groupBy('v')
;
return $queryBuilder;
}
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();
}
$vehicleId = null;
if ($this->getSubject()) {
$vehicleId = $this->getSubject()->getId();
}
$queryBuilder = $this->getModelDealer($Dealer);
$queryBuilderGroup = $this->getModelGrouplDealer($Dealer);
$queryBuilderBoatEngine = $this->getEngineBoat($Dealer);
$formMapper
->tab('Основная информация')
->with('Контент', ['class' => 'col-lg-6'])
->add('content', ContentType::class, ['label' => false], [
'edit' => 'inline',
'sortable' => 'position',
])
->end()
->with('Доп. информация', ['class' => 'col-lg-6'])
->add('adminName', TextType::class, ['label' => 'Внутреннее название', 'required' => false])
->add(
'model',
ModelType::class,
['label' => 'Модель', 'required' => true, 'query' => $queryBuilder]
)
->add('boat_engine', null, ['label' => 'Мотори', 'query_builder' => $queryBuilderBoatEngine], ['admin_code' => $this->getVariationAdminCode()])
/* ->add(
'boat_engine',
ModelType::class,
['label' => 'Вибор двигателя', 'required' => false, 'query' => $queryBuilderBoatEngine],
[
]
)*/
->add('recommend_group', EntityType::class, [
'class' => RecommendGroup::class,
'label' => 'Входит в подборки',
'multiple' => true,
'required' => false,
])
->add('category', null, ['label' => 'Категория', 'required' => true])
->add('group', ModelType::class, ['label' => 'Группа', 'required' => false, 'query' => $queryBuilderGroup])
->add('url', null, ['label' => 'URL'])
->add('image', MediaType::class, [
'provider' => 'sonata.media.provider.image',
'context' => 'dc_site',
'label' => 'Изображение'
])
->add('state', CheckboxType::class, ['label' => 'Отображать на сайте', 'required' => false])
->add('is_new_model', CheckboxType::class, ['label' => 'Новая модель', 'required' => false])
->add(
'is_pre_order',
CheckboxType::class,
['label' => 'Доступно под заказ', 'required' => false, 'value' => 1]
)
->add(
'show_disabled',
CheckboxType::class,
['label' => 'Сохранить активность ссылки(Архивная модель)', 'required' => false]
)
->add('position', NumberType::class, ['label' => 'Позиция'])
->add('test_drive', CheckboxType::class, ['label' => 'Доступна на тест драйв', 'required' => false])
->add(
'credit_available',
CheckboxType::class,
['label' => 'Доступна в кредит', 'required' => false, 'value' => 1]
)
->add(
'school_available',
CheckboxType::class,
['label' => 'Доступна для школы', 'required' => false, 'value' => 1]
)
->add(
'noindex_follow',
CheckboxType::class,
['label' => 'noindex, follow', 'required' => false, 'value' => 1]
)
->end()
->end()
->tab('Видео')
->with('', ['class' => 'col-lg12'])
->add(
'video',
ModelListType::class,
[
'label' => 'Галерея видео',
'btn_list' => false,
'required' => false,
],
[
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position',
'link_parameters' => [
'context' => 'dc_car_video',
'provider' => 'sonata.media.provider.youtube'
],
'admin_code' => 'sonata.media.admin.gallery',
]
)
->end()
->end()
->tab('Прайсы и брошюры')
->with('', ['class' => 'col-lg-12'])
->add('files', CollectionType::class, [
'label' => 'Файлы',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('Особенности')
->with('', ['class' => 'col-lg-12'])
->add('features', CollectionType::class, [
'label' => false,
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('Комплектации')
->with('', ['class' => 'col-lg-12'])
->add('equipments', CollectionType::class, [
'label' => 'Комплектации',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('FAQ')
->with('', ['class' => 'col-lg-12'])
->add('faqs', CollectionType::class, [
'label' => false,
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end();
if ($vehicleId) {
$formMapper->tab('Цены')
->with('', ['class' => 'col-lg-12'])
->add('vehicle_items', CollectionType::class, [
'label' => 'Цены',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end();
}
}
}