<?php
namespace App\Form;
use App\Entity\Solicitud;
use App\Entity\Ubicacion;
use App\Entity\Usuario;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Validator\Constraints\Ip;
use Symfony\Component\Validator\Constraints\NotBlank;
class SolicitudType extends AbstractType
{
private TokenStorageInterface $token;
public function __construct(TokenStorageInterface $token)
{
$this->token = $token;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
//->add('tipoEquipo')
->add('tipoEquipo', TextType::class, [
'label' => 'Tipo de equipo: ',
'attr' => [
'class' => 'form-control form-control-sm'
]
])
//->add('idEquipo')
->add('idEquipo', TextType::class, [
'label' => 'Identificador del equipo:',
'attr' => [
'class' => 'form-control form-control-sm'
]
])
//->add('periodo')
->add('periodo', TextType::class, [
'label' => 'Periodo',
'attr' => [
'class' => 'form-control form-control-sm'
]
])
//->add('tipoMantenimiento')
/*->add('tipoMantenimiento', TextType::class, [
'label' => 'Mantenimiento',
'attr' => [
'class' => 'form-control form-control-sm'
]
])*/
->add('tipoMantenimiento', ChoiceType::class, [
'label' => 'Mantenimiento',
'choices' => [
'Mantenimiento Correctivo' => 'MC',
'Soporte Técnico' => 'ST',
],
'attr' => ['class' => 'form-control form-control-sm']
])
->add('falla', TextareaType::class, [
'label' => '* Acción a realizar',
'attr' => [
'class' => 'form-control form-control-sm'
]
])
->add('srealizado', TextareaType::class, [
'label' => 'Servicio realizado',
'attr' => [
'class' => 'form-control form-control-sm',
],
'required' => true,
'constraints' => [
new NotBlank([
'message' => 'El campo no debe estar vacío',
])
],
])
->add('fregistro', DateType::class, [
'label' => 'Fecha de registro',
'required' => false,
])
->add('fatencion', DateType::class, [
'label' => 'Fecha limite de atención',
'required' => false,
])
->add('ffin', DateType::class, [
'label' => 'Fecha limite de atención',
'required' => false,
])
/*->add('fevaluacion')*/
->add('refacciones', ChoiceType::class, [
'label' => 'Uso refacciones',
'choices' => [
'No' => 0,
'Si' => 1,
],
'attr' => ['class' => 'form-control form-control-sm']
])
->add('estatus', ChoiceType::class, [
'label' => 'Estatus',
'required' => true,
'choices' => [
'Pendiente' => 1,
'En Proceso' => 2,
'Atendido' => 3,
],
'attr' => ['class' => 'form-control form-control-sm'],
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
]
])
//->add('usuario')
->add('usuario', EntityType::class, [
'label' => 'Resguardatario',
'required' => true,
'class' => Usuario::class,
'attr' => [
'class' => 'form-control form-control-sm'
],
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
],
'query_builder' => function(EntityRepository $entityRepository) use ($options) {
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('u');
if (!$options['unidad']) {
$query->andWhere('u.unidad = :unidad');
$query->setParameter('unidad', $user->getUnidad());
}
$query->orderBy('u.nombre', 'ASC');
return $query;
}
])
//->add('ubicacion')
->add('ubicacion', EntityType::class, [
'label' => 'Ubicación',
'required' => true,
'class' => Ubicacion::class,
'attr' => [
'class' => 'form-control form-control-sm'
],
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
],
'query_builder' => function(EntityRepository $entityRepository) use ($options) {
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('a');
if (!$options['unidad']) {
$query->andWhere('a.unidad = :unidad');
$query->setParameter('unidad', $user->getUnidad());
}
$query->orderBy('a.area', 'ASC');
return $query;
}
])
//->add('gestor')
->add('gestor', EntityType::class, [
'label' => 'Resguardatario1111',
'class' => Usuario::class,
'attr' => [
'class' => 'form-control form-control-sm'
],
'query_builder' => function(EntityRepository $entityRepository) use ($options) {
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('u');
if (!$options['unidad']) {
$query->andWhere('u.unidad = :unidad');
$query->setParameter('unidad', $user->getUnidad());
}
$query->orderBy('u.nombre', 'ASC');
return $query;
}
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Solicitud::class,
'unidad' => false,
]);
}
//Para subir formulario
}