src/Form/EquipoType.php line 362

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\CEstadoUso;
  4. use App\Entity\CMarcas;
  5. use App\Entity\CMaterial;
  6. use App\Entity\Equipo;
  7. use App\Entity\Ubicacion;
  8. use App\Entity\Unidad;
  9. use App\Entity\Usuario;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  12. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormEvent;
  15. use Symfony\Component\Form\FormEvents;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Doctrine\ORM\EntityRepository;
  18. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  19. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  20. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  21. use Symfony\Component\Form\Extension\Core\Type\TextType;
  22. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  23. use Symfony\Component\Validator\Constraints\Ip;
  24. use Symfony\Component\Validator\Constraints\NotBlank;
  25. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  26. use Symfony\Component\Validator\Constraints\Choice;
  27. class EquipoType extends AbstractType
  28. {
  29.     private TokenStorageInterface $token;
  30.     public function __construct(TokenStorageInterface $token)
  31.     {
  32.         $this->token $token;
  33.     }
  34.     public function buildForm(FormBuilderInterface $builder, array $options): void
  35.     {
  36.         $builder
  37.             //->add('marbete')
  38.             ->add('marbete'TextType::class, [
  39.                 'label' => '* Marbete',
  40.                 'constraints' => [new NotBlank(['message' => 'El campo "Marbete" no debe estar vacío.'])],
  41.                 'attr' => [
  42.                     'class' => 'form-control form-control-sm',
  43.                     'readonly' => $options['bloquear_edicion']
  44.                 ]
  45.             ])
  46.             //->add('descripcion')
  47.             ->add('descripcion'TextareaType::class, [
  48.                 'label' => '* Descripción',
  49.                 'required' => true,
  50.                 //'constraints' => [new NotBlank(['message' => 'El campo "Descripción" no debe estar vacío.'])],
  51.                 'attr' => [
  52.                     'class' => 'form-control form-control-sm',
  53.                     //'readonly' => $options['bloquear_edicion']
  54.                 ],
  55.                 'constraints' => [
  56.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  57.                 ],
  58.             ])
  59.             //->add('modelo')
  60.             ->add('modelo'TextType::class, [
  61.                 'label' => '* Modelo',
  62.                 'constraints' => [new NotBlank(['message' => 'El campo "Modelo" no debe estar vacío.'])],
  63.                 'attr' => [
  64.                     'class' => 'form-control form-control-sm',
  65.                     'readonly' => $options['bloquear_edicion']
  66.                 ]
  67.             ])
  68.             //->add('serie')
  69.             ->add('serie'TextType::class, [
  70.                 'label' => '* No. serie',
  71.                 'constraints' => [new NotBlank(['message' => 'El campo "Numero de serie" no debe estar vacío.'])],
  72.                 'attr' => [
  73.                     'class' => 'form-control form-control-sm',
  74.                     'readonly' => $options['bloquear_edicion']
  75.                 ]
  76.             ])
  77.             //->add('procesador') 
  78.             ->add('procesador'TextType::class, [
  79.                 'label' => 'Procesador',
  80.                 'required' => false,
  81.                 //'constraints' => [new NotBlank(['message' => 'El campo "Procesador" no debe estar vacío.'])],
  82.                 'attr' => [
  83.                     'class' => 'form-control form-control-sm'
  84.                 ]
  85.             ])
  86.             //->add('nucleos')
  87.             ->add('nucleos'IntegerType::class, [
  88.                 'label' => 'Núcleos',
  89.                 'constraints' => [new NotBlank(['message' => 'El campo "Núcleos" no debe estar vacío.'])],
  90.                 'attr' => [
  91.                     'class' => 'form-control form-control-sm'
  92.                 ]
  93.             ])
  94.             //->add('cpuVelocidad')
  95.             ->add('cpuVelocidad'NumberType::class, [
  96.                 'label' => 'Velocidad de CPU',
  97.                 'constraints' => [new NotBlank(['message' => 'El campo "CPU" no debe estar vacío.'])],
  98.                 'attr' => [
  99.                     'class' => 'form-control form-control-sm'
  100.                 ]
  101.             ])
  102.             //->add('ram')
  103.             ->add('ram'IntegerType::class, [
  104.                 'label' => 'RAM',
  105.                 'constraints' => [new NotBlank(['message' => 'El campo "RAM" no debe estar vacío.'])],
  106.                 'attr' => [
  107.                     'class' => 'form-control form-control-sm'
  108.                 ]
  109.             ])
  110.             //->add('hhd')
  111.             ->add('hhd'NumberType::class, [
  112.                 'label' => 'HDD',
  113.                 'required' => false,
  114.                 //'constraints' => [new NotBlank(['message' => 'El campo "HDD" no debe estar vacío.'])],
  115.                 'attr' => [
  116.                     'class' => 'form-control form-control-sm'
  117.                 ]
  118.             ])
  119.             //>add('ssd')
  120.             ->add('ssd'NumberType::class, [
  121.                 'label' => 'SSD',
  122.                 'required' => false,
  123.                 //'constraints' => [new NotBlank(['message' => 'El campo "SDD" no debe estar vacío.'])],
  124.                 'attr' => [
  125.                     'class' => 'form-control form-control-sm'
  126.                 ]
  127.             ])
  128.             //->add('monitorMarbete')
  129.             ->add('monitorMarbete'TextType::class, [
  130.                 'label' => 'Marbete',
  131.                 'required' => false,
  132.                 //'constraints' => [new NotBlank(['message' => 'El campo "Marbete de monitor" no debe estar vacío.'])],
  133.                 'attr' => [
  134.                     'class' => 'form-control form-control-sm'
  135.                 ]
  136.             ])
  137.             ->add('monitorMarca'EntityType::class, array(
  138.                 // looks for choices from this entity
  139.                 'label' => '* Marca',
  140.                 'required' => true,
  141.                 'class' => CMarcas::class,
  142.                 'choice_label' => 'marca',
  143.                 'placeholder' => 'Seleccione marca del monitor',
  144.                 'query_builder' => function (EntityRepository $er) {
  145.                     return $er->createQueryBuilder('b')
  146.                         ->orderBy('b.idMarca''ASC');
  147.                 },
  148.                 'attr' => array(
  149.                     'class' => 'form-control form-control-sm',
  150.                     //'readonly' => $options['bloquear_edicion']
  151.                 ),
  152.                 'constraints' => [
  153.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  154.                 ],
  155.             ))
  156.             //->add('monitorModelo')
  157.             ->add('monitorModelo'TextType::class, [
  158.                 'label' => 'Modelo',
  159.                 'required' => false,
  160.                 //'constraints' => [new NotBlank(['message' => 'El campo "Modelo de monitor" no debe estar vacío.'])],
  161.                 'attr' => [
  162.                     'class' => 'form-control form-control-sm'
  163.                 ]
  164.             ])
  165.             //->add('monitorSerie')
  166.             ->add('monitorSerie'TextType::class, [
  167.                 'label' => 'No. serie',
  168.                 'required' => false,
  169.                 //'constraints' => [new NotBlank(['message' => 'El campo "Número de serie del monitor" no debe estar vacío.'])],
  170.                 'attr' => [
  171.                     'class' => 'form-control form-control-sm'
  172.                 ]
  173.             ])
  174.             //->add('monitorTipo')
  175.             ->add('monitorTipo'TextType::class, [
  176.                 'label' => 'Tipo',
  177.                 'required' => false,
  178.                 //'constraints' => [new NotBlank(['message' => 'El campo "Tipo de monitor" no debe estar vacío.'])],
  179.                 'attr' => [
  180.                     'class' => 'form-control form-control-sm'
  181.                 ]
  182.             ])
  183.             //->add('monitorPulgadas')
  184.             ->add('monitorPulgadas'TextType::class, [
  185.                 'label' => 'Pulgadas',
  186.                 'required' => false,
  187.                 //'constraints' => [new NotBlank(['message' => 'El campo "Pulgadas de monitor" no debe estar vacío.'])],
  188.                 'attr' => [
  189.                     'class' => 'form-control form-control-sm'
  190.                 ]
  191.             ])
  192.             //->add('tecladoMarca')
  193.             ->add('tecladoMarca'EntityType::class, array(
  194.                 // looks for choices from this entity
  195.                 'label' => '* Marca',
  196.                 'required' => true,
  197.                 'class' => CMarcas::class,
  198.                 'choice_label' => 'marca',
  199.                 'placeholder' => 'Seleccione marca de teclado',
  200.                 'query_builder' => function (EntityRepository $er) {
  201.                     return $er->createQueryBuilder('b')
  202.                         ->orderBy('b.idMarca''ASC');
  203.                 },
  204.                 'attr' => array(
  205.                     'class' => 'form-control form-control-sm',
  206.                     //'readonly' => $options['bloquear_edicion']
  207.                 ),
  208.                 'constraints' => [
  209.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  210.                 ],
  211.             ))
  212.             //->add('tecladoModelo')
  213.             ->add('tecladoModelo'TextType::class, [
  214.                 'label' => 'Modelo',
  215.                 'required' => false,
  216.                 //'constraints' => [new NotBlank(['message' => 'El campo "Modelo de teclado" no debe estar vacío.'])],
  217.                 'attr' => [
  218.                     'class' => 'form-control form-control-sm'
  219.                 ]
  220.             ])
  221.             //->add('tecladoSerie')
  222.             ->add('tecladoSerie'TextType::class, [
  223.                 'label' => 'No. serie',
  224.                 'required' => false,
  225.                 //'constraints' => [new NotBlank(['message' => 'El campo "Número de serie del teclaod" no debe estar vacío.'])],
  226.                 'attr' => [
  227.                     'class' => 'form-control form-control-sm'
  228.                 ]
  229.             ])
  230.             //->add('mouseMarca')
  231.             ->add('mouseMarca'EntityType::class, array(
  232.                 // looks for choices from this entity
  233.                 'label' => '* Marca',
  234.                 'required' => true,
  235.                 'class' => CMarcas::class,
  236.                 'choice_label' => 'marca',
  237.                 'placeholder' => 'Seleccione marca del mouse',
  238.                 'query_builder' => function (EntityRepository $er) {
  239.                     return $er->createQueryBuilder('b')
  240.                         ->orderBy('b.idMarca''ASC');
  241.                 },
  242.                 'attr' => array(
  243.                     'class' => 'form-control form-control-sm',
  244.                     //'readonly' => $options['bloquear_edicion']
  245.                 ),
  246.                 'constraints' => [
  247.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  248.                 ],
  249.             ))
  250.             //->add('mouseModelo')
  251.             ->add('mouseModelo'TextType::class, [
  252.                 'label' => 'Modelo',
  253.                 'required' => false,
  254.                 //'constraints' => [new NotBlank(['message' => 'El campo "Modelo del mouse" no debe estar vacío.'])],
  255.                 'attr' => [
  256.                     'class' => 'form-control form-control-sm'
  257.                 ]
  258.             ])
  259.             //->add('mouseSerie')
  260.             ->add('mouseSerie'TextType::class, [
  261.                 'label' => 'Serie',
  262.                 'required' => false,
  263.                 //'constraints' => [new NotBlank(['message' => 'El campo "Serie de mouse" no debe estar vacío.'])],
  264.                 'attr' => [
  265.                     'class' => 'form-control form-control-sm'
  266.                 ]
  267.             ])
  268.             //->add('uso')
  269.             ->add('uso'ChoiceType::class, [
  270.                 'label' => 'Uso',
  271.                 'required' => true,
  272.                 'choices'  => [
  273.                     'Educativo' => 1,
  274.                     'Docente' => 2,
  275.                     'Administrativo' => 3
  276.                 ],
  277.                 'placeholder' => 'Seleccione un uso',
  278.                 'attr' => ['class' => 'form-control form-control-sm'],
  279.                 'constraints' => [
  280.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  281.                 ],
  282.             ])
  283.             //->add('funcion')
  284.             ->add('funcion'ChoiceType::class, [
  285.                 'label' => 'Función',
  286.                 'required' => true,
  287.                 'choices'  => [
  288.                     'Escritorio' => 1,
  289.                     'Servidor' => 2
  290.                 ],
  291.                 'placeholder' => 'Seleccione una función',
  292.                 'attr' => ['class' => 'form-control form-control-sm'],
  293.                 'constraints' => [
  294.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  295.                 ],  
  296.             ])
  297.             //->add('funcionDescripcion')
  298.             ->add('funcionDescripcion'TextType::class, [
  299.                 'label' => 'Descripcion de la función',
  300.                 'required' => false,
  301.                 'attr' => [
  302.                     'class' => 'form-control form-control-sm'
  303.                 ]
  304.             ])
  305.             //->add('estatus')
  306.             ->add('estatus'ChoiceType::class, [
  307.                 'label' => 'Estatus',
  308.                 'required' => true,
  309.                 'choices'  => [
  310.                     'En operacion' => 1,
  311.                     'Descompuesto' => 2,
  312.                     'Sin instalar' => 3,
  313.                     'En proceso de baja' => 4,
  314.                     'Baja' => 5
  315.                 ],
  316.                 'placeholder' => 'Seleccione un estatus',
  317.                 'attr' => ['class' => 'form-control form-control-sm'],
  318.                 'constraints' => [
  319.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  320.                 ],
  321.             ])
  322.             //->add('usuario')
  323.             ->add('usuario'EntityType::class, [
  324.                 'label' => 'Resguardatario',
  325.                 'required' => true,
  326.                 'class' => Usuario::class,
  327.                 'choice_label' => function($usuario) {
  328.                     return $usuario->getNombre() . ' ' $usuario->getPapellido() . ' ' $usuario->getSapellido();
  329.                 },
  330.                 'constraints' => [
  331.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  332.                 ],
  333.                 'attr' => [
  334.                     'class' => 'form-control form-control-sm'
  335.                 ],
  336.                 'placeholder' => 'Seleccione un usuario',
  337.                 'query_builder' => function(EntityRepository $entityRepository) use ($options) {
  338.                     /** @var Usuario $user */
  339.                     $user $this->token->getToken()->getUser();
  340.                     $query $entityRepository->createQueryBuilder('u');
  341.                     $query->where('u.rol >= 3');
  342.                     $query->andWhere("u.estatus = 'Activo'");
  343.                     if ($options['unidad']) {
  344.                         $query->andWhere('u.unidad = :unidad');
  345.                         $query->setParameter('unidad'$user->getUnidad());
  346.                     }
  347.                     $query->orderBy('u.nombre''ASC');
  348.                     return $query;
  349.                 }
  350.             ])
  351.             //->add('ubicacion')
  352.             ->add('ubicacion'EntityType::class, [
  353.                 'label' => 'Ubicación',
  354.                 'required' => true,
  355.                 'class' => Ubicacion::class,
  356.                 'attr' => [
  357.                     'class' => 'form-control form-control-sm'
  358.                 ],
  359.                 'constraints' => [
  360.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  361.                 ],
  362.                 'placeholder' => 'Seleccione una ubicación',
  363.                 'query_builder' => function(EntityRepository $entityRepository) use ($options) {
  364.                     /** @var Usuario $user */
  365.                     $user $this->token->getToken()->getUser();
  366.                     $query $entityRepository->createQueryBuilder('a');
  367.                     $query->where('a.activo = 1');
  368.                     if ($options['unidad']) {
  369.                         $query->andWhere('a.unidad = :unidad');
  370.                         $query->setParameter('unidad'$user->getUnidad());
  371.                     }
  372.                     $query->orderBy('a.area''ASC');
  373.                     return $query;
  374.                 }
  375.             ])
  376.             //->add('ip')
  377.             ->add('ip'TextType::class, [
  378.                 'label' => 'Dirección IP',
  379.                 'required' => false,
  380.                 'constraints' => [
  381.                     new Ip(['message' => 'El campo Dirección IP debe ser válido.'])
  382.                 ],
  383.                 'attr' => [
  384.                     'class' => 'form-control form-control-sm'
  385.                 ]
  386.             ])
  387.             ->add('allinone'CheckboxType::class, [
  388.                 'label' => 'All-in-One',
  389.                 'required' => false,
  390.                 'attr' => ['class' => 'form-check-input'], // Opcional, para estilizar con Bootstrap
  391.             ])
  392.             ->add('actualizable'CheckboxType::class, [
  393.                 'label' => 'Actualizable',
  394.                 'required' => false,
  395.                 'attr' => ['class' => 'form-check-input'], // Opcional
  396.             ])
  397.             //->add('mac')
  398.             ->add('mac'TextType::class, [
  399.                 'label' => 'Dirección Mac',
  400.                 'required' => false,
  401.                 'attr' => [
  402.                     'class' => 'form-control form-control-sm'
  403.                 ]
  404.             ])
  405.             ->add('idMaterial'EntityType::class, array(
  406.                 // looks for choices from this entity
  407.                 'label' => '* Material',
  408.                 'required' => true,
  409.                 'class' => CMaterial::class,
  410.                 'choice_label' => 'material',
  411.                 'placeholder' => 'Seleccione material',
  412.                 'query_builder' => function (EntityRepository $er) {
  413.                     return $er->createQueryBuilder('b')
  414.                         ->orderBy('b.material''ASC');
  415.                 },
  416.                 'attr' => array(
  417.                     'class' => 'form-control form-control-sm'
  418.                 ),
  419.                 'constraints' => [
  420.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  421.                 ],
  422.             ))
  423.             ->add('idUso'EntityType::class, array(
  424.                 // looks for choices from this entity
  425.                 'label' => '* Estado de uso',
  426.                 'required' => true,
  427.                 'class' => CEstadoUso::class,
  428.                 'choice_label' => 'estatusUso',
  429.                 'placeholder' => 'Seleccione estado de uso',
  430.                 'query_builder' => function (EntityRepository $er) {
  431.                     return $er->createQueryBuilder('b')
  432.                         ->orderBy('b.estatusUso''ASC');
  433.                 },
  434.                 'attr' => array(
  435.                     'class' => 'form-control form-control-sm'
  436.                 ),
  437.                 'constraints' => [
  438.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  439.                 ],
  440.             ))
  441.             ->add('idMarca'EntityType::class, array(
  442.                 // looks for choices from this entity
  443.                 'label' => '* Marca',
  444.                 'required' => true,
  445.                 'class' => CMarcas::class,
  446.                 'choice_label' => 'marca',
  447.                 'placeholder' => 'Seleccione marca del equipo',
  448.                 'query_builder' => function (EntityRepository $er) {
  449.                     return $er->createQueryBuilder('b')
  450.                         ->orderBy('b.idMarca''ASC');
  451.                 },
  452.                 'attr' => array(
  453.                     'class' => 'form-control form-control-sm',
  454.                     'readonly' => $options['bloquear_edicion']
  455.                 ),
  456.                 'constraints' => [
  457.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  458.                 ],
  459.             ))
  460.             ->add('color'TextType::class, [
  461.                 'label' => '* Color',
  462.                 'required' => true,
  463.                 'attr' => [
  464.                     'class' => 'form-control form-control-sm',
  465.                     //'readonly' => $options['bloquear_edicion']
  466.                 ],
  467.                 'constraints' => [
  468.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  469.                 ],
  470.             ])
  471.             ->add('piso'TextType::class, [
  472.                 'label' => '* Piso',
  473.                 'required' => true,
  474.                 'attr' => [
  475.                     'class' => 'form-control form-control-sm',
  476.                     //'readonly' => $options['bloquear_edicion']
  477.                 ],
  478.                 'constraints' => [
  479.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  480.                 ],
  481.             ])
  482.             ->add('seccionAula'TextType::class, [
  483.                 'label' => '* Sección o aula',
  484.                 'required' => true,
  485.                 'attr' => [
  486.                     'class' => 'form-control form-control-sm',
  487.                     //'readonly' => $options['bloquear_edicion']
  488.                 ],
  489.                 'constraints' => [
  490.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  491.                 ],
  492.             ])
  493.             ->add('numPuertaCubi'TextType::class, [
  494.                 'label' => '* No. de puerta o cubículo',
  495.                 'required' => true,
  496.                 'attr' => [
  497.                     'class' => 'form-control form-control-sm',
  498.                     //'readonly' => $options['bloquear_edicion']
  499.                 ],
  500.                 'constraints' => [
  501.                     new NotBlank(['message' => 'El campo no debe estar vacío.']),
  502.                 ],
  503.             ])
  504.     ;
  505.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
  506.             $form $event->getForm();
  507.             if ($options['unidad']) {
  508.                 $form->add('unidad'EntityType::class, [
  509.                     'class' => Unidad::class,
  510.                     'required' => true,
  511.                     'attr' => [
  512.                         'class' => 'form-control form-control-sm'
  513.                     ],
  514.                     'query_builder' => function(EntityRepository $entityRepository){
  515.                         /** @var Usuario $user */
  516.                         $user $this->token->getToken()->getUser();
  517.                         $query $entityRepository->createQueryBuilder('u');
  518.                         $query->andWhere('u.idUni = :unidad');
  519.                         $query->orderBy('u.nombre''ASC');
  520.                         $query->setParameter('unidad'$user->getUnidad()->getIdUni());
  521.                         return $query;
  522.                     }
  523.                 ]);
  524.             }
  525.         });
  526.     }
  527.     public function configureOptions(OptionsResolver $resolver): void
  528.     {
  529.         $resolver->setDefaults([
  530.             'data_class' => Equipo::class,
  531.             'unidad' => false,
  532.             'bloquear_edicion' => false,
  533.         ]);
  534.     }
  535.     //Para subir formulario
  536. }