<?php
namespace App\Form;
use App\Entity\Otro;
use App\Entity\Ubicacion;
use App\Entity\Unidad;
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\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
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 OtroType extends AbstractType
{
private TokenStorageInterface $token;
public function __construct(TokenStorageInterface $token)
{
$this->token = $token;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
//->add('marbete')
->add('marbete', TextType::class, [
'label' => '* Marbete',
'constraints' => [new NotBlank(['message' => 'El campo "Marbete" no debe estar vacío.'])],
'attr' => [
'class' => 'form-control form-control-sm',
'readonly' => $options['bloquear_edicion']
]
])
//->add('descripcion')
->add('descripcion', TextareaType::class, [
'label' => '* Descripción',
'constraints' => [new NotBlank(['message' => 'El campo "Descripción" no debe estar vacío.'])],
'attr' => [
'class' => 'form-control form-control-sm',
'readonly' => $options['bloquear_edicion']
]
])
//->add('marca')
->add('marca', TextType::class, [
'label' => '* Marca',
'constraints' => [new NotBlank(['message' => 'El campo "Marca" no debe estar vacío.'])],
'attr' => [
'class' => 'form-control form-control-sm',
'readonly' => $options['bloquear_edicion']
]
])
//->add('modelo')
->add('modelo', TextType::class, [
'label' => '* Modelo',
'constraints' => [new NotBlank(['message' => 'El campo "Modelo" no debe estar vacío.'])],
'attr' => [
'class' => 'form-control form-control-sm',
'readonly' => $options['bloquear_edicion']
]
])
//->add('serie')
->add('serie', TextType::class, [
'label' => '* No. serie',
'constraints' => [new NotBlank(['message' => 'El campo "Serie" no debe estar vacío.'])],
'attr' => [
'class' => 'form-control form-control-sm',
'readonly' => $options['bloquear_edicion']
]
])
//->add('uso')
->add('uso', ChoiceType::class, [
'label' => 'Uso',
'required' => true,
'choices' => [
'Educativo' => 1,
'Docente' => 0,
'Administrativo' => 2
],
'placeholder' => 'Seleccione un uso',
'attr' => ['class' => 'form-control form-control-sm'],
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
]
])
//->add('estatus')
->add('estatus', ChoiceType::class, [
'label' => 'Estatus',
'required' => true,
'choices' => [
'En operacion' => 1,
'Descompuesto' => 2,
'Sin instalar' => 3,
'En proceso de baja' => 4,
'Baja' => 5
],
'placeholder' => 'Seleccione un estatus',
'attr' => ['class' => 'form-control form-control-sm'],
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
]
])
//->add('falta')
//->add('factualizacion')
//->add('usuario')
->add('usuario', EntityType::class, [
'label' => 'Resguardatario',
'required' => true,
'class' => Usuario::class,
'choice_label' => function($usuario) {
return $usuario->getNombre() . ' ' . $usuario->getPapellido() . ' ' . $usuario->getSapellido();
},
'constraints' => [
new NotBlank(['message' => 'El campo no debe estar vacío.']),
],
'attr' => [
'class' => 'form-control form-control-sm'
],
'placeholder' => 'Seleccione un usuario',
'query_builder' => function(EntityRepository $entityRepository) use ($options) {
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('u');
$query->where('u.rol >= 3');
$query->andWhere("u.estatus = 'Activo'");
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.']),
],
'placeholder' => 'Seleccione una ubicación',
'query_builder' => function(EntityRepository $entityRepository) use ($options) {
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('a');
$query->where('a.activo = 1');
if ($options['unidad']) {
$query->andWhere('a.unidad = :unidad');
$query->setParameter('unidad', $user->getUnidad());
}
$query->orderBy('a.area', 'ASC');
return $query;
}
])
//->add('ip')
->add('ip', TextType::class, [
'label' => 'Dirección IP',
'required' => false,
'constraints' => [
new Ip(['message' => 'El campo Dirección IP debe ser válido.'])
],
'attr' => [
'class' => 'form-control form-control-sm'
]
])
//->add('mac')
->add('mac', TextType::class, [
'label' => 'Dirección Mac',
'required' => false,
'attr' => [
'class' => 'form-control form-control-sm'
]
])
/*->add('mantenimientoCount', IntegerType::class, [
'label' => 'Número de Mantenimientos',
'required' => false,
'attr' => [
'min' => 0,
],
])*/
;
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
$form = $event->getForm();
if ($options['unidad']) {
$form->add('unidad', EntityType::class, [
'class' => Unidad::class,
'required' => true,
'attr' => [
'class' => 'form-control form-control-sm'
],
'query_builder' => function(EntityRepository $entityRepository){
/** @var Usuario $user */
$user = $this->token->getToken()->getUser();
$query = $entityRepository->createQueryBuilder('u');
$query->andWhere('u.idUni = :unidad');
$query->orderBy('u.nombre', 'ASC');
$query->setParameter('unidad', $user->getUnidad()->getIdUni());
return $query;
}
]);
}
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Otro::class,
'unidad' => false,
'bloquear_edicion' => false
//'mantenimientoCount'=>false,
]);
}
//Para subir formulario
}