<?php
namespace AdminBundle\Admin\SubAutoSite;
use CoreBundle\Entity\User;
use CoreBundle\Entity\Vehicles\Vehicle;
use ImporterBundle\Model\Post;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
class ActionsAdmin extends NewsAdmin
{
protected $baseRouteName = 'admin_vendor_adminbundle_importer_actionsadmin';
protected $baseRoutePattern = 'importer/action';
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$query = parent::configureQuery($context);
/** @var User $User */
$User = $this->security->getUser();
$query->where($query->getRootAliases()[0].'.post_type = '. Post::POST_TYPE_ACTIONS);
if(!$User->getSubDealer()) {
throw new AccessDeniedException('User without sub dealer');
}
$query->andWhere($query->getRootAliases()[0].'.dealer = '.$User->getSubDealer()->getId());
return $query;
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper): void
{
$dealerOfSubDealer = $this-security->getUser()->getSubDealer()->getBrand()->getDealer()->first();
$carsQuery = $this->em
->getRepository(Vehicle::class)
->createQueryBuilder('c')
->where('c.dealer = :dealer')->setParameter('dealer', $dealerOfSubDealer)
->andWhere('c.is_used = 0')
;
$formMapper
->tab('Основная информация')
->with(' ', ['class' => 'col-lg-6 without-box-heder'])
->add('state', CheckboxType::class, ['label' => 'Показывать на сайте', 'required' => false])
->add('action_chapter', ChoiceType::class, ['label' => 'Раздел', 'choices' => [
'Акции сервиса' => Post::ACTION_TYPE_SERVICE,
'Акции авто' => Post::ACTION_TYPE_CAR
]])
->add('date_start', DateType::class, [
'label' => 'Начало акции',
'widget' => 'single_text'
])
->add('date_end', DateType::class, [
'label' => 'Конец акции',
'widget' => 'single_text'
])
->add('vehicles', EntityType::class, [
'class' => Vehicle::class,
'label' => 'Техника',
'multiple' => true,
'required' => false,
'query_builder' => $carsQuery,
], [ 'admin_code' => 'admin.vehicles.passenger_vehicle'])
->end()
->end()
;
parent::configureFormFields($formMapper);
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
parent::configureListFields($listMapper);
$listMapper->remove('_action');
$listMapper->add('date_end', null, ['label' => 'Дата окончания акции', 'format' => 'd-m-Y']);
$listMapper->add('action_chapter','choice', ['label' => 'Раздел', 'choices' => [
Post::ACTION_TYPE_CAR => 'Акции авто',
Post::ACTION_TYPE_SERVICE => 'Акции сервиса',
]])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
]
])
;
}
/**
* @param \CoreBundle\Entity\Post $object
*/
public function prePersist($object): void
{
parent::prePersist($object);
$object->setPostType(Post::POST_TYPE_ACTIONS);
}
}