<?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 Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use App\Enums\UnidadeMedidaEnum;
use Sonata\Form\Type\DatePickerType;
use Knp\Menu\ItemInterface as MenuItemInterface;
use App\Services\ToolService;
final class EquipamentoAdmin extends AbstractAdmin {
/** @var ToolService */
private $toolService;
protected $classnameLabel = 'Equipamento';
public function __construct($code, $class, $baseControllerName, ToolService $toolService)
{
parent::__construct($code, $class, $baseControllerName);
$this->toolService = $toolService;
}
protected function configureTabMenu(MenuItemInterface $menu, $action, $admin = null): void
{
if (!$admin) {
return;
}
if ($action === 'list') {
$menu->addChild('Relatórios', [
'dropdown' => true,
'icon' => 'fa fa-file-text-o'
]);
$menu['Relatórios']->addChild('Equipamentos Fora do Almoxarifado', [
'uri' => $this->getRouteGenerator()->generate('equipamento_relatorio_fora_almoxarifado'),
'icon' => 'fa fa-external-link'
]);
}
}
public function prePersist($object)
{
$object->setCreatedAt(new \DateTime('now'));
parent::prePersist($object);
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('id')
->add('codigo')
->add('franquia')
->add('titulo')
->add('isCalibravel')
->add('marca')
->add('modelo')
->add('capacidade')
->add('serie')
->add('createdAt')
->add('ultimaCalibracao')
->add('descricao')
->add('unidadeMedidaCapacidade')
->add('capacidadeMaxima')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$this->setTemplate('list', 'Equipamento/list.html.twig');
$listMapper
->add('codigo', null, ['label'=>'Código'])
->add('titulo', null, ['label'=>'Título'])
->add('quantidade', 'string', ['label' => 'Quantidade'])
->add('disponivel', 'string', [
'label' => 'Qtd. Disponível',
'template' => 'Equipamento/list_disponivel.html.twig'
])
->add('isCalibravel', null, ['label'=>'Calibrável'])
->add('marca', null, ['label'=>'Marca'])
->add('modelo', null, ['label'=>'Modelo'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->with('Informações I', ['class' => 'col-md-4'])
->add('franquia', null, ['label'=>'Franquia'])
->add('isCalibravel', null, ['label'=>'Calibrável'])
->add('codigo', null, ['label'=>'Código'])
->add('titulo', null, ['label'=>'Título'])
->add('marca', null, ['label'=>'Marca'])
->add('modelo', null, ['label'=>'Modelo'])
->add('serie', null, ['label'=>'Série'])
->add('cadastradoPor', null, ['label'=>'Cadastrado por'])
->end()
->with('Informações II', ['class' => 'col-md-4'])
->add('faixaOperacao', null, ['label'=>'Faixa de Operação'])
->add('localEquipamento', null, ['label'=>'Local do equipamento'])
->add('periodicidadeCalibragem', null, ['label'=>'Periodicidade calibração'])
->add('pontosCalibracao', null, ['label'=>'Pontos de calibração'])
->add('pontosQualificacao', null, ['label'=>'Pontos de qualificação'])
->add('dataProximaCalibragem', DatePickerType::class, ['label'=> 'Data da próxima calibração'])
->end()
->with('Informações III', ['class' => 'col-md-4'])
->add('ema', null, ['label'=>'E.M.A'])
->add('descricao', null, ['label'=>'Descrição'])
->add('unidadeMedidaCapacidade', ChoiceType::class, [
'label' => 'Unidade de medida',
'choices' => UnidadeMedidaEnum::getAssociatedValues(),
])
->add('capacidade', null, ['label'=>'Capacidade'])
->add('capacidadeMaxima', null, ['label'=>'Capacidade Máxima', 'attr'=>['type'=>'number','min'=>0]])
->add('resolucao', null, ['label'=>'Resolução'])
->add('quantidade', null, ['label'=>'Quantidade'])
->end()
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('codigo', null, ['label'=>'Código'])
->add('titulo', null, ['label'=>'Título'])
->add('quantidade', null, ['label'=>'Quantidade'])
->add('isCalibravel', null, ['label'=>'Calibrável'])
->add('marca', null, ['label'=>'Marca'])
->add('modelo', null, ['label'=>'Modelo'])
->add('capacidade', null, ['label'=>'Capacidade'])
->add('serie', null, ['label'=>'Série'])
->add('descricao', null, ['label'=>'Descrição'])
->add('unidadeMedidaCapacidade', null, ['label'=>'Unidade de medida'])
->add('capacidadeMaxima', null, ['label'=>'Capacidade Máxima'])
->add('resolucao', null, ['label'=>'Resolução'])
;
}
}