<?php
namespace App\Form\Mantenimiento;
use App\Entity\Mantenimiento\PedidoReparacion;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Mantenimiento\SectorPlanta;
use App\Entity\Equipos\Maquinaria;
use App\Entity\Mantenimiento\Departamento;
use App\Entity\Mantenimiento\SolicitantePedidoReparacion;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Validator\Constraints\Image;
use Symfony\Component\Validator\Constraints\File;
class PedidoReparacionType extends AbstractType
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$user = $options['user'];
$builder
->add('detalle')
->add('tipo')
->add('fecha', \Symfony\Component\Form\Extension\Core\Type\DateType::class, [
'widget' => 'single_text',
'required' => true,
'data' => new \DateTime(),
])
->add('departamento',
EntityType::class, [ 'class' => Departamento::class,
'required' => !$options['depto'],
'choices' => $user->getDepartamentos()->toArray() ])
->add('sector',
EntityType::class,
[
'class' => SectorPlanta::class,
'choices' => $user->getAllSectoresActivos(),
]
)
->add('solicitante',
EntityType::class,
[
'class' => SolicitantePedidoReparacion::class,
'required' => false,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('s')
->andWhere('s.activo = :activo')
->setParameter('activo', true)
->orderBy('s.nombre', 'ASC');
}
])
->add('equipo',
EntityType::class,
[
'class' => Maquinaria::class,
'required' => false,
'group_by' => function($choice, $key, $value) {
if ($choice->getSector())
{
return $choice->getSector() . '';
}
return 'Sin Sector';
},
'query_builder' => function (EntityRepository $er) use ($user): QueryBuilder {
return $er->createQueryBuilder('u')
->andWhere('u.sector IN (:sectores)')
->setParameter('sectores', $user->getSectores())
->orderBy('u.nombre', 'ASC');
}
]
)
->add('archivoImagen', FileType::class, [
'label' => 'Imagen del Pedido',
'mapped' => false, // MUY IMPORTANTE: No mapear directamente a Doctrine
'required' => false,
])
;
if ($this->security->isGranted('ROLE_DIAGRAMA_TAREAS'))
{
/* $builder
->add('observacionResponsable')
->add('responsables');*/
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => PedidoReparacion::class,
'depto' => false
])
->setRequired('user')
->setRequired('depto');
}
}