<?php
namespace AdminBundle\Admin\Filters;
use DateTime;
use AdminBundle\Admin\BaseAdmin;
use CoreBundle\Model\Api\AutoRia\AutoRia;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use CoreBundle\Entity\Brand;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class VehicleFilterAdmin extends BaseAdmin
{
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$user = $this->getUser();
$query = parent::configureQuery($context);
$dealer = $user->getDealer();
if(!$dealer) {
throw new AccessDeniedException();
}
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0].'.dealer', ':dealer')
);
$query->setParameter('dealer', $dealer->getId());
return $query;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper->addIdentifier('id')
->add('brand.name',null, [
'label' => 'Бренд',
'sortable' => true,
])
->add('dealer.id',null, [
'label' => 'Дилер Id',
'sortable' => true,
])
->add('year_from',null, ['label' => 'Рік з'])
->add('year_to', null, ['label' => 'Рік по'])
->add('mileage_from', null, ['label' => 'Пробіг з'])
->add('mileage_to', null, ['label' => 'Пробіг по'])
->add('region', null, ['label' => 'Район'])
->add('count', null, ['label' => 'Кількість записів'])
->add('_action', 'actions', [
'label' => 'Дія',
'actions' => [
'edit' => [],
]
])
;
}
protected function configureShowFields(ShowMapper $show): void
{
$show
->add('brand',null, ['label' => 'Message'])
->add('year_from',null, ['label' => 'Context'])
->add('year_to',null, ['label' => 'Level'])
->add('mileage_from',null, ['label' => 'Level name'])
->add('mileage_to',null, ['label' => 'Domain'])
->add('region',null, ['label' => 'Created At'])
->add('count',null, ['label' => 'Created At']);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$fuelTypes = $this->autoRia->getFuelTypes();
$transmissionTypes = $this->autoRia->getTransmissionTypes();
$queryBuilder = $this->getModelManager()
->getEntityManager(Brand::class)
->createQueryBuilder('b')
->select('b')
->from('CoreBundle:Brand', 'b');
$formMapper
->with('Контент', ['class' => 'col-lg-6']);
if($this->getSubject()){
$isNew = !$this->getSubject()->getId();
} else {
$isNew = true;
}
$formMapper->add('brand', ModelType::class, ['label' => 'Бренд', 'query' => $queryBuilder]);
$formMapper->add('model', ChoiceType::class, ['label' => 'Модель', 'multiple' => true, 'choices' => []]);
$formMapper->add('year_from',null, ['label' => 'Рік з'])
->add('year_to', null, ['label' => 'Рік по']);
$formMapper->add('mileage_from',null, ['label' => 'Пробіг з в тис.'])
->add('mileage_to', null, ['label' => 'Пробіг по в тис.']);
$formMapper->add('price_from',null, ['label' => 'Ціна з в USD'])
->add('price_to', null, ['label' => 'Ціна по в USD']);
$formMapper->add('fuel_type', ChoiceType::class, ['label' => 'Тип палива', 'multiple' => true, 'choices' => array_column($fuelTypes, 'id', 'title')]);
$formMapper->add('type_drive', ChoiceType::class, ['label' => 'Тип приводу', 'multiple' => true, 'choices' => array_column($transmissionTypes, 'id', 'title')]);
$formMapper->add('region', ChoiceType::class, ['label' => 'Район', 'choices' => array_flip(AutoRia::getState())]);
$formMapper->add('city', ChoiceType::class, ['label' => 'Город', 'multiple' => true, 'choices' => []]);
$formMapper->add('count',null, ['label' => 'Кількість записів']);
$data = [
'label' => 'Відбирати об\'яви з дати',
'widget' => 'single_text',
];
if($isNew) {
$data['data'] = new DateTime();
}
$formMapper->add('from_date', DateType::class, $data);
$formMapper->add(
'is_usa',
CheckboxType::class,
['label' => 'Active', 'required' => false]
);
$formMapper->add(
'was_accident',
CheckboxType::class,
['label' => 'Active', 'required' => false]
);
$formMapper->add(
'is_commercial',
CheckboxType::class,
['label' => 'Active', 'required' => false]
);
$formMapper->add(
'state',
CheckboxType::class,
['label' => 'Active', 'required' => false]
);
$formMapper->end();
}
protected function configure(): void
{
parent::configure(); // TODO: Change the autogenerated stub
$this->setTemplate('edit', '@Admin\CRUD\VehicleFilter\vehicle-filter-create_edit.html.twig');
}
}