<?php
namespace AdminBundle\Admin\DCAutoSite;
use AdminBundle\Admin\BaseAdmin;
use AdminBundle\AdminException;
use CoreBundle\Entity\Vehicles\Vehicle;
use DcSiteBundle\Entity\TestDriveRoutes;
use Doctrine\ORM\QueryBuilder;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
class TestDriveAdmin extends BaseAdmin
{
/**
* @var string
*/
protected $baseRouteName = 'test-drive';
/**
* @var string
*/
protected $baseRoutePattern = 'dcsite/test-drive';
public function preUpdate($object): void
{
$object->setIsManual(1);
parent::preUpdate($object);
}
/**
* @param string $context
* @return QueryBuilder|ProxyQueryInterface
* @throws AdminException
*/
public function configureQuery($context = 'list'): ProxyQueryInterface
{
/**
* @var QueryBuilder $query
*/
$query = parent::configureQuery($context);
$query->andWhere($query->getRootAliases()[0] . '.dealer = :dealer');
$query->setParameter('dealer', $this->getUserDealer()->getId());
return $query;
}
/**
* @param RouteCollectionInterface $collection
* @return void
*/
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('delete');
$collection->remove('create');
}
/**
* @param ListMapper $list
* @return void
*/
protected function configureListFields(ListMapper $list): void
{
$list
->addIdentifier('id', null, ['label' => 'Ід'])
->add('name', null, ['label' => 'Назва'])
->add('crm_model_name', null, ['label' => 'Назва моделі'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => []
]
]);
}
/**
* @param FormMapper $formMapper
* @return void
*/
protected function configureFormFields(FormMapper $form): void
{
$query = $this->getModelManager()
->getEntityManager(Vehicle::class)
->createQueryBuilder('v')
->select('v')
->from(Vehicle::class,'v')
->where('v.dealer = :dealer')
->andWhere('v.is_used = 0')
->setParameter('dealer', $this->getUserDealer());
$queryTestDriveRoutes = $this->getModelManager()
->getEntityManager(TestDriveRoutes::class)
->createQueryBuilder('tdr')
->select('tdr')
->from(TestDriveRoutes::class,'tdr')
->where('tdr.dealer = :dealer')
->setParameter('dealer', $this->getUserDealer());
$form
->add('name', null, [
'label' => 'Назва',
'required' => true
])
->add('crm_model_name', null, [
'label' => 'Назва моделі',
'required' => true
])
->add('vehicle', ModelType::class, [
'label' => 'Назва авто',
'required' => true,
'btn_add' => false,
'query' => $query
], [
'admin_code' => 'admin.vehicles.passenger_vehicle'
])
->end()
->with('Доступные маршруты')
->add('test_drive_routes', ModelType::class, [
'label' => 'Маршруты',
'query' => $queryTestDriveRoutes,
'btn_add' => false,
'required' => false,
'multiple' => true,
])
->end()
;
}
}