<?php
/**
* Created by Logics Tecnologia e Serviços LTDA.
* @author: Romeu Godoi <romeu@logics.com.br>
* Date: 12/09/18
* Time: 19:33
* @copyright Copyright (C) 2018 LogicSITE. Todos os Direitos Reservados.
* LogicSITE. Este software é de propriedade exclusiva da LOGICS TEC. E SERV. LTDA
* e seu uso só pode ser dado por usuários licenciados por escrito.
* O uso indevido desta plataforma, ou parte dela estará sujeita a penalidades
* previstas em lei, conforme legislação pertinente.
*/
namespace App\Admin;
use App\Entity\Empresa;
use App\Form\Type\MapType;
use App\Model\ImageCacheDescriber;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\AdminType;
use Sonata\AdminBundle\Form\Type\ModelListType;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\CollectionType;
use Sonata\Form\Validator\ErrorElement;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Sonata\AdminBundle\Form\Type\ModelAutocompleteType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class EmpresaAdmin extends BaseAdmin
{
public function __construct($code, $class, $baseControllerName)
{
parent::__construct($code, $class, $baseControllerName);
$this->imagensUpload = [
new ImageCacheDescriber('logomarcaOriginal', 'logomarca', 'logoFile', 'thumb_400px'),
new ImageCacheDescriber('imagemClientesOriginal', 'imagemClientes', 'imagemClientesFile', 'thumb_400px'),
];
}
/**
* @param ErrorElement $errorElement
* @param Empresa $object
*/
public function validate(ErrorElement $errorElement, $object)
{
parent::validate($errorElement, $object);
$container = $this->getConfigurationPool()->getContainer();
/*
$usuarioAcesso = $this->getForm()->get('usuarioAcesso')->getData();
$senhaAcesso = $this->getForm()->get('senhaAcesso')->getData();
$senhaAcessoRepeat = $this->getForm()->get('senhaAcessoRepeat')->getData();
$um = $container->get('sonata.user.user_manager');
$userByEmail = $um->findUserByEmail($object->getEmail());
$userByUser = $um->findUserByUsername($usuarioAcesso);
if(!$object->getId()) { // No create
if (!empty($usuarioAcesso)) { // Informou o login
if ($userByEmail) {
$errorElement->with('email')->addViolation('Ops! Já existe uma franquia com um representante com este e-mail já cadastrado!');
} else if($userByUser) {
$errorElement->with('usuarioAcesso')->addViolation('Ops! Já existe um usuário com este username informado!');
} else if (empty($senhaAcesso)) {
$errorElement->with('senhaAcesso')->addViolation('Ops! Informe uma senha de acesso!');
} else if(empty($senhaAcessoRepeat)){
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! Confirme a senha de acesso!');
} else if($senhaAcesso != $senhaAcessoRepeat){
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! As senhas não estão iguais!');
} else if(strlen($senhaAcesso) < 6) {
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! Defina uma senha com no mínima 6 caracteres!');
}
} else {
$errorElement->with('usuarioAcesso')->addViolation('Ops! É preciso criar um usuário de acesso para a franquia acessar o sistema!');
}
} else {
if ($userByUser != $object->getUsuarioAdmin()->getUsername()) { // Não permitir a edição do usuário
$errorElement->with('email')->addViolation('Ops! Não é permitido editar o usuário de uma franquia! Entre em contato com o suporte técnico');
} else {
if (!empty($senhaAcesso)) { // Está tentando mudar a senha
if (empty($senhaAcessoRepeat)) {
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! Confirme a senha de acesso!');
} else if ($senhaAcesso != $senhaAcessoRepeat) {
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! As senhas não estão iguais!');
} else if (strlen($senhaAcesso) < 6) {
$errorElement->with('senhaAcessoRepeat')->addViolation('Ops! Defina uma senha com no mínima 6 caracteres!');
}
}
}
}
*/
}
/**
* @param Empresa $object
* @return Empresa
*/
public function prePersist($object)
{
parent::prePersist($object);
$container = $this->getConfigurationPool()->getContainer();
if($object->getUsuarioAdmin()){
$object->getUsuarioAdmin()->setFranquia($object);
}
$object->setLatitude(floatval($this->getRequest()->request->get('latitude_mapa')));
$object->setLongitude(floatval($this->getRequest()->request->get('longitude_mapa')));
$object->setZoomMapa(floatval($this->getRequest()->request->get('zoom_map')));
return $object;
}
/**
* @param Empresa $object
* @return Empresa
*/
public function preUpdate($object)
{
parent::preUpdate($object);
if($object->getUsuarioAdmin()){
$object->getUsuarioAdmin()->setFranquia($object);
}
$object->setLatitude($this->getRequest()->request->get('latitude_mapa'));
$object->setLongitude($this->getRequest()->request->get('longitude_mapa'));
$object->setZoomMapa($this->getRequest()->request->get('zoom_map'));
return $object;
}
protected function configureFormFields(FormMapper $formMapper)
{
/** @var Empresa $empresa */
$empresa = $this->getSubject();
//$imgReq = !is_null($empresa) && is_null($empresa->getId());
$imgReq = false;
$fileFieldOptions = [
'data_class' => null,
'required' => $imgReq,
'label' => 'Logo',
];
if (!is_null($empresa) && $empresa->getLogomarca() != '') {
$fileFieldOptions['help'] = '<img src="' . $empresa->getLogomarca() .
'" class="admin-preview img-thumbnail" style="max-width:150px;max-height:250px;"/>';
}
$imgCli = false;
$fileFieldOptionsCli = [
'data_class' => null,
'required' => $imgCli,
'label' => 'Imagem de clientes',
];
if (!is_null($empresa) && $empresa->getImagemClientes() != '') {
$fileFieldOptionsCli['help'] = '<img src="' . $empresa->getImagemClientes() .
'" class="admin-preview img-thumbnail" style="max-width:150px;max-height:250px;"/>';
}
$formMapper
->tab('Geral')
->with('Informações Gerais', ['class' => 'col-md-4'])
->add('logoFile', FileType::class, $fileFieldOptions)
->add('imagemClientesFile', FileType::class, $fileFieldOptionsCli)
->add('nome')
->add('cnpj', null, ['label' => 'CNPJ'])
->add('status', null, ['label'=>'Habilitada'])
->add('nomeDiretorTecnico', null, ['label' => 'Responsável Técnico'])
->add('isMatriz', null, ['label'=>'Matriz'])
->end()
->with('Contato', array('class' => 'col-md-4'))
->add('email', null, ['label'=>'E-mail','required'=>true])
->add('representante')
->add('telefone', TelType::class, [
'attr' => [
'placeholder' => '(__) ____-____',
'data-inputmask' => "'mask': '(99) 9999-9999'",
]
])
->end()
->with('Acesso Sistema', array('class' => 'col-md-4'))
->add('usuarioAdmin', ModelListType::class, [
'required' => true,
'attr' => ['style'=>'margin-top:10px !important;']
])
->end()
->end()
->tab('Localização')
->with('Endereço', ['class' => 'col-md-4'])
->add('cep', null, [
'label' => 'CEP',
'attr' => [
'class' => 'search_data_api_cep',
'data-inputmask' => "'mask': '99999-999'",
]
])
->add('logradouro', null, ['attr' => ['class' => 'end_log']])
->add('cidade', null, ['attr' => ['class' => 'end_cidade']])
->add('bairro', null, ['attr' => ['class' => 'end_bairro']])
->add('numero', null, ['label' => 'Número'])
->add('complemento')
->add('estado', null, ['attr' => ['class' => 'end_uf']])
->end()
->with('Localização Geométrica', ['class' => 'col-md-8'])
->add('mapa', MapType::class, array('label' => false, 'mapped' => false), array('type' => 'string'))
->add('latitude', TextType::class, ['attr' => ['class' => 'end_lat']])
->add('longitude', TextType::class, ['attr' => ['class' => 'end_lng']])
->end()
->end()
;
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('nome')
->add('email')
->add('logomarca')
->add('logradouro')
->add('cidade')
->add('bairro')
->add('estado')
->add('latitude')
->add('longitude');
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('logomarca', 'string', ['template' => 'CRUD/thumbnail_list.html.twig'])
->addIdentifier('cnpj')
->addIdentifier('nome')
->addIdentifier('email')
->add('_action', 'actions', array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array(),
)
));
}
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->add('logomarca', 'string', ['template' => 'CRUD/thumbnail_show.html.twig'])
->add('id')
->add('nome')
->add('email')
->add('logradouro')
->add('cidade')
->add('bairro')
->add('estado')
->add('latitude')
->add('longitude');
}
}