<?php
namespace AdminBundle\Admin\Vehicles\Moto;
use AdminBundle\Admin\BaseAdmin;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Vehicles\Vehicle;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use CoreBundle\Model\Vehicles\VehicleType;
use Sonata\AdminBundle\Form\Type\ModelType;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class RentVehicleAdmin extends BaseAdmin
{
protected $baseRouteName = 'rent-vehicle-moto';
protected $baseRoutePattern = 'rent-vehicle-moto-action';
protected function getVehicleType(): int {
return VehicleType::MOTO_TYPE;
}
protected function getVehicleAdminCode() {
return 'admin.vehicles.moto_vehicle';
}
protected $datagridValues = [
'_page' => 1,
'_sort_order' => 'ASC',
'_sort_by' => 'id',
];
protected function getVehicleDealer(Dealer $Dealer)
{
return $this->getModelManager()
->getEntityManager(Vehicle::class)
->createQueryBuilder('ve')
->select('ve')
->from('CoreBundle:Vehicles\Vehicle', 've')
->where('ve.vehicle_type = :vehicle_type')
->andWhere('ve.state = :state')
->setParameter('state', true)
->setParameter('vehicle_type', $this->getVehicleType());
}
public function prePersist($object): void
{
$this->updateObject($object);
}
public function preUpdate($object): void
{
$this->updateObject($object);
parent::preUpdate($object);
}
private function updateObject($object)
{
$object->setStateRent((int)$object->getStateRent());
$object->setStateRide((int)$object->getStateRide());
}
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');
}
$queryBuilderVehicle = $this->getVehicleDealer($Dealer);
$formMapper
->with('Основна інформація', ['class' => 'col-lg-6'])
->add('vehicle', ModelType::class, ['label' => 'Модель', 'required' => true, 'query' => $queryBuilderVehicle, 'btn_add' => false], ['admin_code' => 'admin.vehicles.passenger_vehicle'])
->add('price_ride', null, ['label' => 'Цена Райд, грн', 'required' => false])
->add('state_rent', CheckboxType::class, ['label' => 'Відображати на сайті як оренда', 'required' => false])
->add('state_ride', CheckboxType::class, ['label' => 'Відображати на сайті як DAY райд', 'required' => false])
// ->add('vehicle', ModelType::class, ['label' => 'Модель', 'required' => true, 'query' => $queryBuilderVehicle])
->end()
->with('Ціни за оренду', ['class' => 'col-lg-6'])
->add('price_rent_one_day', null, ['label' => 'Ціна Оренди за (1 доба), €', 'required' => false])
->add('price_rent_first_range', null, ['label' => 'Ціна Оренди (2-3 доби), €', 'required' => false])
->add('price_rent_second_range', null, ['label' => 'Ціна Оренди (4-7 діб), €', 'required' => false])
->add('price_rent_third_range', null, ['label' => 'Ціна Оренди (8 діб), €', 'required' => false])
->end()
->end();
}
protected function configureListFields(ListMapper $listMapper): void
{
$this->checkByRole(['ROLE_SUPER_ADMIN', 'ROLE_CONTENT_MANAGER', 'ROLE_DC_MANAGER']);
$listMapper->addIdentifier('id')
->add('vehicle.model', null, ['label' => 'Модель'])
->add('state_rent', 'choice', ['label' => 'Відображати на сайті як Оренда', 'editable' => true, 'choices' => [
1 => 'Да',
0 => 'Нет',
]])
->add('state_ride', 'choice', ['label' => 'Відображати на сайті як DAY райд', 'editable' => true, 'choices' => [
1 => 'Да',
0 => 'Нет',
]])
->add('_action', 'actions', [
'label' => 'Дії',
'actions' => [
'edit' => [],
'delete' => [],
]
]);
}
}