<?php
declare(strict_types=1);
namespace App\Admin;
use App\Entity\Suporte;
use App\Enums\ModulosSistemaEnum;
use App\Enums\StatusSuporteEnum;
use App\Enums\TipoSuporteEnum;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\DateTimePickerType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Sonata\Form\Type\DatePickerType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface;
final class SuporteAdmin extends BaseAdmin
{
protected $datagridValues = [
'_page' => 1,
'_sort_order' => 'ASC',
'_sort_by' => 'dataEntrega'
];
public function prePersist($object)
{
/** @var Suporte $object */
$object->setUsuario($this->getUserLogado());
$object->setStatus(StatusSuporteEnum::ABERTO);
return $object;
}
public function createQuery($context = 'list')
{
$query = parent::createQuery($context); // TODO: Change the autogenerated stub
$query->andWhere(
$query->expr()->eq($query->getRootAlias().'.isPago', ':isPago')
);
$query->setParameters([
'isPago' => false
]);
return $query;
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('id')
->add('modulo', 'doctrine_orm_choice', [
'field_options' => [
'choices' => ModulosSistemaEnum::getAssociatedValues(),
'expanded' => false, // Se quiser como select
'multiple' => false, // Se quiser permitir múltipla seleção, mude para true
],
'field_type' => ChoiceType::class,
])
->add('descricao')
->add('titulo')
->add('status', 'doctrine_orm_choice', [
'field_options' => [
'choices' => StatusSuporteEnum::getAssociatedValues(),
'expanded' => false,
'multiple' => false,
],
'field_type' => ChoiceType::class,
])
->add('createdAt')
->add('dataEntrega')
->add('horas')
->add('resolvidoEm')
->add('obsResolucao')
->add('tipo', 'doctrine_orm_choice', [
'field_options' => [
'choices' => TipoSuporteEnum::getAssociatedValues(),
'expanded' => false,
'multiple' => false,
],
'field_type' => ChoiceType::class,
])
->add('isPago')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$this->setTemplate('list', 'Suporte/list.html.twig');
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$listMapper->add('id');
$listMapper->add('isPago',null, ['label'=>'PAGO','template'=>'Suporte/isPago.html.twig']);
}
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$listMapper
->add('titulo')
->add('tipo')
->add('modulo')
->add('status',null, ['label'=>'Status','template'=>'Suporte/status_list.html.twig'])
->add('dataEntrega', 'date', [
'label' => 'Previsão de entrega',
'format' => 'd/m/Y',
])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
} else {
$listMapper
->add('titulo')
->add('tipo')
->add('modulo')
->add('status',null, ['label'=>'Status','template'=>'Suporte/status_list.html.twig'])
->add('dataEntrega', 'date', [
'label' => 'Previsão de entrega',
'format' => 'd/m/Y',
])
->add('_action', null, [
'actions' => [
'show' => [],
],
]);
}
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper->add('isPago', null, ['label'=>'Pago']);
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$formMapper
->add('tipo', ChoiceType::class, [
'label' => 'Tipo',
'placeholder' => '-- Selecione --',
'choices' => TipoSuporteEnum::getAssociatedValues(),
])
;
}
$formMapper
->add('modulo', ChoiceType::class, [
'label' => 'Módulo',
'placeholder' => '-- Selecione --',
'choices' => ModulosSistemaEnum::getAssociatedValues(),
])
->add('titulo')
->add('descricao', null, ['label'=>"Descrição", 'required'=>true, 'attr'=>['class'=>'editorHtml']])
//->add('descricao', null, ['attr'=>['style'=>"height:400px;"]])
->add('dataEntrega', DatePickerType::class,['label'=>'Previsão de entrega', 'required'=>false])
->add('horas')
->add('obsResolucao');
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$formMapper->add('status', ChoiceType::class, [
'label' => 'Status',
'placeholder' => '-- Selecione --',
'choices' => StatusSuporteEnum::getAssociatedValues(),
])
;
}
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('modulo')
->add('titulo')
->add('descricao')
->add('status')
->add('createdAt')
->add('dataEntrega')
->add('horas')
->add('resolvidoEm')
->add('obsResolucao')
;
}
}