<?php
namespace AdminBundle\Admin\SubAutoSite;
use ImporterBundle\Entity\Department;
use ImporterBundle\Entity\Worker;
use ImporterBundle\Model\WorkerModel;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Exception\ModelManagerException;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class WorkerAdmin extends BaseImporterAdmin
{
/**
* @param $object
*/
public function prePersist($object): void
{
$dealer = $this->security->getUser()->getSubDealer();
$object->setDealer($dealer);
}
/**
* @param Worker $object
* @throws ModelManagerException
*/
public function postPersist($object): void
{
/* $token = 'token:'.md5($object->getId().'_'.time().'secret_salt_vidi_dfR$%@cfdgvds_'.uniqid());
$object->setToken($token);
$this->getModelManager()->update($object);
$this->sendToken($object);*/
}
/**
* @param RouteCollectionInterface $collection
*/
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('view');
}
/**
* @param string $context
* @return ProxyQueryInterface
*/
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$user = $this->security->getUser();
$dealer = $user->getSubDealer();
$query = parent::configureQuery($context);
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0] . '.dealer', ':dealer')
);
$query->setParameter('dealer', $dealer);
return $query;
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper): void
{
$dealer = $this->security->getUser()->getSubDealer();
$queryBuilder = $this->getModelManager()
->getEntityManager(Department::class)
->createQueryBuilder('d')
->select('d')
->from(Department::class, 'd')
->where('d.dealer = :dealer')
->setParameter('dealer', $dealer);
$formMapper
->with('Сотрудник', ['class' => 'col-lg-6'])
->add('callback_available', CheckboxType::class, [
'label' => 'Отвечает на обратные звонки?',
'required' => false,
])
->add('photo', MediaType::class, [
'label' => 'Фото',
'required' => false,
'provider' => 'sonata.media.provider.image',
'context' => 'dc_site'
])
->add('name_ru', null, ['label' => 'ФИО'])
->add('name_ua', null, ['label' => 'ПIБ'])
->add('department', ModelType::class, ['query' => $queryBuilder, 'label' => 'Отдел'])
->add('position', ChoiceType::class, ['label' => 'Должность', 'choices' => array_flip(WorkerModel::getPositions())])
->add('email', null, ['label' => 'E-mail'])
->add('phone_mobile', null, ['label' => 'Мобильный телефон'])
->add('phone_internal', null, ['label' => 'Внутренний телефон'])
->end()
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper->addIdentifier('id')
->add('name',null, ['label' => 'Имя'])
->add('email',null, ['label' => 'E-mail'])
->add('position','choice', ['label' => 'Должность', 'choices' => WorkerModel::getPositions()])
->add('dealer',null, ['label' => 'Дилерский центр', 'admin_code' => 'admin.sub.contact'])
->add('telegram_id',null, ['label' => 'Telegram ID'])
->add('callback_available',null, ['label' => 'Отвечает на обратные?'])
->add('department', null, ['label' => 'Отдел'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
'delete' => [],
]
])
;
}
}