<?php
namespace App\Admin;
use App\Entity\DevolucaoAlmoxarifado;
use App\Services\ToolService;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\Form\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
final class DevolucaoAlmoxarifadoAdmin extends AbstractAdmin
{
private $movService;
protected $baseRoutePattern = 'devolucaoalmoxarifado';
protected $baseRouteName = 'admin_app_devolucaoalmoxarifado';
public function __construct($code, $class, $baseControllerName, ToolService $movService)
{
parent::__construct($code, $class, $baseControllerName);
$this->movService = $movService;
}
public function getTemplate($name)
{
if ($name === 'edit' || $name === 'create') {
return 'DevolucaoAlmoxarifado/' . $name . '.html.twig';
}
return parent::getTemplate($name);
}
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('Dados', ['description' => 'Primeiro selecione a saída, depois adicione os itens a devolver'])
->add('saida', ModelType::class, [
'placeholder' => '-- Selecione a Saída --',
'label' => 'Saída do Almoxarifado',
'required' => true,
'expanded' => false,
'multiple' => false,
'btn_add' => false,
'help' => 'IMPORTANTE: Selecione a saída primeiro. Após selecionar, os itens disponíveis para devolução serão filtrados automaticamente.'
])
->add('recebidoPor', TextType::class, [
'label' => 'Recebido por',
'required' => false,
'attr' => ['placeholder' => 'Nome de quem recebeu']
])
->add('devolvidoPor', TextType::class, [
'label' => 'Devolvido por',
'required' => false,
'attr' => ['placeholder' => 'Nome de quem devolveu']
])
->end()
->with('Itens')
->add('itens', CollectionType::class, [
'label' => 'Itens de devolução',
'by_reference' => false,
], [
'edit' => 'inline',
'inline' => 'table'
])
->end();
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('saida')
->add('recebidoPor')
->add('createdAt')
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
]
])
;
}
protected function configureShowFields(\Sonata\AdminBundle\Show\ShowMapper $showMapper)
{
$showMapper
->with('Informações da Devolução')
->add('id', null, ['label' => 'ID'])
->add('saida', null, ['label' => 'Saída do Almoxarifado'])
->add('recebidoPor', null, ['label' => 'Recebido por'])
->add('devolvidoPor', null, ['label' => 'Devolvido por'])
->add('createdAt', null, ['label' => 'Data de Criação', 'format' => 'd/m/Y H:i'])
->end()
->with('Itens Devolvidos')
->add('itens', null, [
'label' => 'Itens',
'template' => 'DevolucaoAlmoxarifado/show_itens.html.twig'
])
->end();
}
public function prePersist($dev)
{
// Setar a devolução em cada item
foreach ($dev->getItens() as $item) {
$item->setDevolucao($dev);
}
$this->movService->registrarDevolucao($dev);
}
public function preUpdate($dev)
{
// Setar a devolução em cada item
foreach ($dev->getItens() as $item) {
$item->setDevolucao($dev);
}
}
}