<?php
namespace AdminBundle\Admin\Insurance;
use AdminBundle\Form\Type\CaseDocumentType;
use AdminBundle\Form\Type\InsuranceSmsType;
use CoreBundle\Entity\User;
use InsuranceBundle\Model\InsuranceCase;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class CaseAdmin extends AbstractAdmin
{
protected ParameterBagInterface $parameterBag;
public function setContainerServices(ParameterBagInterface $parameterBag): void
{
$this->parameterBag = $parameterBag;
}
protected $datagridValues = [
'_page' => 1,
'_sort_order' => 'ASC',
'_sort_by' => 'position',
];
/**
* @param RouteCollection $collection
*/
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('create');
$collection->remove('delete');
}
public function toString($object): string
{
return 'Страховое дела № '.$object->getCaseNumber();
}
/**
* @param \InsuranceBundle\Entity\InsuranceCase $object
*/
public function preUpdate($object): void
{
$cPhone = $object->getContactPhone();
if($cPhone) {
$object->setContactPhone('0'.(int) $cPhone);
}
/** @var UploadedFile $file */
$file = $object->getWMail();
if($file instanceof UploadedFile) {
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$filesDir = $this->parameterBag->get('kernel.project_dir').'/public/uploads/insurance';
$file->move(
$filesDir,
$fileName
);
$object->setWMail($fileName);
}
parent::preUpdate($object);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$em = $this->getModelManager()->getEntityManager(User::class);
$query = $em->createQueryBuilder('u')
->select('u')
->from('CoreBundle:User', 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"ROLE_INSURANCE_AVARKOM"%');
;
$formMapper
->with('Информация о страховом деле', ['class' => 'col-lg-6'])
->add('state', ChoiceType::class, ['label' => 'Статус', 'choices' => array_flip(InsuranceCase::getStatus())])
->add('contact_phone', TextType::class, ['label' => 'Контактный телефон (ОБЯЗАТЕЛЬНО в формате 0671234567)', 'attr' => ['max' => 999999999], 'required' => false])
->add('date_case', DateType::class, ['label' => 'Дата наступления случая', 'widget' => 'single_text', 'attr' => ['readonly' => true]])
->add('user.fullName', TextType::class, ['label' => 'Клиент', 'attr' => ['readonly' => true]])
->add('user.phone', TextType::class, ['label' => 'Номер телефона пользователя', 'attr' => ['readonly' => true]])
->end()
->with(' ', ['class' => 'col-lg-6'])
->add('manager', EntityType::class , ['class' => User::class, 'query_builder' => $query, 'label' => 'Аварийный комиссар'], [
'admin_code' => 'admin.user'
])
->add('contract_number', TextType::class, ['label' => 'Номер договора', 'attr' => ['readonly' => true]])
->add('car.brand', TextType::class, ['label' => 'Марка автомобиля', 'attr' => ['readonly' => true]])
->add('car.model', TextType::class, ['label' => 'Модель автомобиля', 'attr' => ['readonly' => true]])
->add('car.number', TextType::class, ['label' => 'Гос. номер автомобиля', 'attr' => ['readonly' => true]])
->end();
$formMapper->with('Дополнительная информация', ['class' => 'col-lg-12'])
->add('pay_date', DateType::class , ['widget' => 'single_text', 'label' => 'Дата выплаты', 'required' => false, 'attr' => ['style' => 'width: 300px']]);
if($this->getSubject()->getState() == InsuranceCase::STATE_QUARANTEE) {
if($this->getSubject()->getWMail()) {
$formMapper->add('fff', TextType::class, ['label' => 'Гарантийное письмо заргужено', 'attr' => ['style' => 'display:none'] , 'required' => false, 'mapped' => false]);
}
$formMapper->add('w_mail', FileType::class, ['label' => false, 'required' => false, 'data_class' => null]);
}
$formMapper->end();
$formMapper->with('СМС уведомления', ['class' => 'col-lg-12'])
->add('sms', InsuranceSmsType::class, ['label' => false, 'mapped' => false])
->end();
$formMapper->with('Список документов', ['class' => 'col-lg-12'])
->add('documents', CaseDocumentType::class, ['label' => false, 'required' => false])
->end()
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper->addIdentifier('id')
->add('case_number',null, ['label' => '№ страхового дела', 'format' => 'd.m.Y'])
->add('contract_number',null, ['label' => '№ договора', 'format' => 'd.m.Y'])
->add('user.fullName',null, ['label' => 'Ф.И.О. Клиента'])
->add('car.number',null, ['label' => 'Гос. номер автомобиля'])
->add('phone',null, ['label' => 'Контактный телефон'])
->add('date_case',null, ['label' => 'Дата наступления случая', 'format' => 'd.m.Y'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
'print' => [
'template' => '@AdminBundle/CRUD/list__action_print_sticker.html.twig'
],
]
])
;
}
/**
* @param DatagridMapper $datagridMapper]
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('user.phone',null, ['label' => 'Номер телефона'])
->add('contact_phone',null, ['label' => 'Альтернативный номер телефона'])
->add('contract_number',null, ['label' => '№ договора'])
->add('case_number',null, ['label' => '№ страхового дела'])
->add('user.last_name',null, ['label' => 'Фамилия клиента'])
->add('car.number',null, ['label' => 'Гос. номер автомобиля'])
->add('date_case',null, ['label' => 'Дата наступления случая'])
;
}
protected function configure(): void
{
parent::configure(); // TODO: Change the autogenerated stub
$this->setTemplate('edit', '@Admin/admin/CRUD/edit-insurance-case.html.twig');
}
}