<?php
namespace AdminBundle\Admin;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\InnerMail;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
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\Form\Extension\Core\Type\CollectionType;
class InnerMailAdmin extends BaseAdmin
{
private $types = [
'feedbackType' => 'Обратная связь',
'serviceType' => 'Запись на сервис',
'testDriveType' => 'Тест-драйв',
'creditType' => 'Кредит',
'orderType' => 'Заказ авто',
'servicesOrderType' => 'Заказ услуг',
'corpSale' => 'Корпоративные продажи',
'buyUsedCar' => 'Заказ авто с пробегом',
'tradeInType' => 'Трейд-ин',
'estimateType' => 'Оценка авто',
'buyPartsType' => 'Заказ запчастей/аксессуаров',
'findPart' => 'Заявка на подбор запчастей',
'vacancyType' => 'Вакансии',
'orderCallType' => 'Обратный звонок',
'insuranceType' => 'Страхование',
'leasingCalculatorType' => 'Лизинговый калькулятор',
'supportType' => 'Поддержка пользователей',
'repairPhoto' => 'Кузовной ремонт по фото',
'repairCalc' => 'Кузовной ремонт из кулькулятора',
'rentType' => 'Аренда техники',
'configuratorOffer' => 'Заявки конфигуратора',
'buyInStock' => 'Покупка авто в наличии',
'insuranceExtend' => 'Продление гарантии',
'tiresConfigurator' => 'Конфигуратор шин',
'onlineConsult' => 'Запись на консультацию',
'qualityControlType' => 'Форма оценки качества',
'serviceCampaingCarType' => 'Авто наличие сервисных кампаний',
'saveDesign' => 'Сохранить дизайн выбранной модели',
'withoutPayOrder' => 'Заказ с корзины без оплати',
'fleetUpdateType' => 'Обновление автопарка',
'replacementCar' => 'Підмінне авто після сервісу',
];
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('dealer', null, ['label' => 'Дилер']);
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('dealer')
->add('_action', null, [
'actions' => [
'edit' => [],
],
]);
}
public function preUpdate($object): void
{
$this->updateObj($object);
}
public function prePersist($object): void
{
$this->updateObj($object);
}
private function updateObj(InnerMail $object)
{
foreach ($this->types as $type => $label) {
$getter = "get$type";
$setter = "set$type";
$mail = $object->$getter();
$toInsert = [];
foreach ($mail as $item) {
if (filter_var($item, FILTER_VALIDATE_EMAIL)) {
$toInsert[] = $item;
}
}
$object->$setter($toInsert);
}
}
protected function configureFormFields(FormMapper $formMapper): void
{
$options = [
'required' => false,
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false,
];
$formMapper
->with('Дилер')
->add('dealer', EntityType::class, ['class' => Dealer::class])
->end();
$formMapper->with(' ', ['class' => 'col-md-4']);
$itemCount = ceil(count($this->types) / 3);
$i = 1;
foreach ($this->types as $type => $label) {
$formMapper->add($type, CollectionType::class, array_merge($options, ['label' => $label,]));
if ($i % $itemCount === 0) {
$formMapper->end();
$formMapper->with(str_repeat(' ', $i), ['class' => 'col-md-4']);
}
$i++;
}
$formMapper->end();
}
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$user = $this->security->getUser();
$dealer = $user->getDealer();
$query = parent::configureQuery($context);
if (!$user->hasRole('ROLE_SUPER_ADMIN')) {
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0] . '.dealer', ':dealer')
);
$query->setParameter('dealer', $dealer);
}
return $query;
}
}