<?php
declare(strict_types=1);
namespace App\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\DatePickerType;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Form\Type\ModelAutocompleteType;
final class AcessoClienteAdmin extends BaseAdmin
{
public function createQuery($context = 'list')
{
$idFranquia = $this->getUserLogado()->getFranquia()->getId();
if(!$idFranquia){
exit('Nenhuma franquia para este usuário!');
}
$query = parent::createQuery($context);
$query->join($query->getRootAliases()[0].'.cliente', 'cli');
$query->join('cli.franquia', 'fr');
$query->andWhere('fr.id = :idFranquia');
$query->setParameter('idFranquia', $idFranquia);
return $query;
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('email')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('cliente.razaoSocial', null, ['label'=>'Razão Social'])
->add('email', null, ['label'=>'E-mail'])
->add('dataInicial', null, ['label'=>'Data Inicial'])
->add('dataFinal', null, ['label'=>'Data Final'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->add('cliente', ModelType::class, [
'placeholder' => '-- Selecione --',
'label' => 'Cliente',
'required' => true,
'expanded' => false,
'multiple' => false,
'btn_add' => false
])
->add('email', null, ['label'=>'E-mail'])
->add('senha')
->add('os_acessos', ModelAutocompleteType::class, ['property'=>'proposta.numero', 'multiple'=>true, 'btn_add'=>false], [
'admin_code' => 'admin.ordem_de_servico',
])
->add('dataInicial', DatePickerType::class, ['label'=>'Data Inicial', 'required' => false])
->add('dataFinal', DatePickerType::class, ['label'=>'Data Final', 'required' => false])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('email', null, ['label'=>'E-mail'])
->add('senha')
->add('token')
->add('dataInicial', null, ['label'=>'Data Inicial'])
->add('dataFinal', null, ['label'=>'Data Final'])
;
}
public function prePersist($object)
{
/** @var OrdemDeServico $object */
parent::preUpdate($object); // TODO: Change the autogenerated stub
$object->setToken($this->generateToken(40));
return $object;
}
private function generateToken($length = 20)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
}