src/Form/UnidadFiltroType.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Equipo;
  4. use App\Entity\Impresora;
  5. use App\Entity\Otro;
  6. use App\Entity\Red;
  7. use App\Entity\Unidad;
  8. use App\Entity\Usuario;
  9. use Doctrine\ORM\EntityRepository;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Component\Form\AbstractType;
  12. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  13. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Component\Form\FormEvent;
  16. use Symfony\Component\Form\FormEvents;
  17. use Symfony\Component\OptionsResolver\OptionsResolver;
  18. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  19. class UnidadFiltroType extends AbstractType
  20. {
  21.     private TokenStorageInterface $token;
  22.     public function __construct(TokenStorageInterface $token)
  23.     {
  24.         $this->token $token;
  25.     }
  26.     public function buildForm(FormBuilderInterface $builder, array $options): void
  27.     {
  28.         $builder
  29.             ->add('filtro'HiddenType::class, ['data' => true])
  30.         ;
  31.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
  32.             $form $event->getForm();
  33.             /** @var Usuario $user */
  34.             $user $this->token->getToken()->getUser();
  35.             if ($options['unidad']) {
  36.                  // Si el rol es mayor a 2, solo mostrar la unidad del usuario
  37.                 if ($user->getRol()->getIdRol() > 2) {
  38.                     $form->add('unidad'EntityType::class, [
  39.                         'class' => Unidad::class,
  40.                         'attr' => ['class' => 'form-control'],
  41.                         'label' => 'Unidad',
  42.                         'query_builder' => function (EntityRepository $er) use ($user) {
  43.                             // Verifica si el rol es mayor a 2
  44.                                 // Si el rol es mayor a 2, solo mostrar la unidad del usuario
  45.                                 return $er->createQueryBuilder('u')
  46.                                     ->where('u.idUni = :unidadId')
  47.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  48.                                     ->orderBy('u.nombre''ASC');
  49.                         }
  50.                     ]);
  51.                 } else {// Si el rol es 2 o menor, mostrar todas las unidades
  52.                     $form->add('unidad'EntityType::class, [
  53.                         'class' => Unidad::class,
  54.                         'attr' => ['class' => 'form-control'],
  55.                         'label' => 'Unidad',
  56.                         'placeholder' => 'Todas',
  57.                         'query_builder' => function (EntityRepository $er) use ($user) {
  58.                             // Verifica si el rol es mayor a 2
  59.                                 // Si el rol es 2 o menor, mostrar todas las unidades
  60.                                 return $er->createQueryBuilder('u')
  61.                                     ->orderBy('u.nombre''ASC');
  62.                         }
  63.                     ]);
  64.                     
  65.                 }  
  66.                 /*if($options['tipo'] == 'equipo') {
  67.                     $form->add('marca', EntityType::class, [
  68.                         'required' => false,
  69.                         'label' => 'Marca',
  70.                         'class' => Equipo::class,
  71.                         'choice_label' => 'marca',
  72.                         'placeholder' => 'Todas',
  73.                         'attr' => [
  74.                             'class' => 'form-control',
  75.                             'style' => 'width: 130px;',
  76.                             'data-live-search' => 'true',
  77.                         ],
  78.                         'query_builder' => function(EntityRepository $er) {
  79.                             return $er->createQueryBuilder('e')
  80.                                 ->groupBy('e.marca')
  81.                                 ->orderBy('e.marca', 'ASC');
  82.                         }
  83.                     ]);
  84.                 }*/
  85.                 if ($options['tipo'] == 'equipo') {
  86.                     $form->add('marca'EntityType::class, [
  87.                         'required' => false,
  88.                         'label' => 'Marca',
  89.                         'class' => Equipo::class,
  90.                         'choice_label' => 'marca',
  91.                         'placeholder' => 'Todas',
  92.                         'attr' => [
  93.                             'class' => 'form-control',
  94.                             'style' => 'width: 130px;',
  95.                             'data-live-search' => 'true',
  96.                         ],
  97.                         'query_builder' => function (EntityRepository $er) use ($user) {
  98.                             // Verifica si el rol del usuario es mayor a 2
  99.                             if ($user->getRol()->getIdRol() > 2) {
  100.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  101.                                 return $er->createQueryBuilder('e')
  102.                                     ->where('e.unidad = :unidadId'// Filtra por unidad
  103.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  104.                                     ->groupBy('e.marca')
  105.                                     ->orderBy('e.marca''ASC');
  106.                             } else {
  107.                                 // Si el rol es 2 o menor, mostrar todas las marcas
  108.                                 return $er->createQueryBuilder('e')
  109.                                     ->groupBy('e.marca')
  110.                                     ->orderBy('e.marca''ASC');
  111.                             }
  112.                         }
  113.                     ]);
  114.                 }
  115.                 /*if($options['tipo'] == 'otro') {
  116.                     $form->add('marca', EntityType::class, [
  117.                         'required' => false,
  118.                         'label' => 'Marca',
  119.                         'class' => Otro::class,
  120.                         'choice_label' => 'marca',
  121.                         'placeholder' => 'Todas',
  122.                         'attr' => [
  123.                             'class' => 'form-control',
  124.                             'style' => 'width: 130px;',
  125.                             'data-live-search' => 'true',
  126.                         ],
  127.                         'query_builder' => function(EntityRepository $er) {
  128.                             return $er->createQueryBuilder('o')
  129.                                 ->groupBy('o.marca')
  130.                                 ->orderBy('o.marca', 'ASC');
  131.                         }
  132.                     ]);
  133.                 }*/
  134.                 if ($options['tipo'] == 'otro') {
  135.                     $form->add('marca'EntityType::class, [
  136.                         'required' => false,
  137.                         'label' => 'Marca',
  138.                         'class' => Otro::class,
  139.                         'choice_label' => 'marca',
  140.                         'placeholder' => 'Todas',
  141.                         'attr' => [
  142.                             'class' => 'form-control',
  143.                             'style' => 'width: 130px;',
  144.                             'data-live-search' => 'true',
  145.                         ],
  146.                         'query_builder' => function (EntityRepository $er) use ($user) {
  147.                             // Verifica si el rol del usuario es mayor a 2
  148.                             if ($user->getRol()->getIdRol() > 2) {
  149.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  150.                                 return $er->createQueryBuilder('o')
  151.                                     ->where('o.unidad = :unidadId'// Filtra por unidad
  152.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  153.                                     ->groupBy('o.marca')
  154.                                     ->orderBy('o.marca''ASC');
  155.                             } else {
  156.                                 // Si el rol es 2 o menor, mostrar todas las marcas
  157.                                 return $er->createQueryBuilder('o')
  158.                                     ->groupBy('o.marca')
  159.                                     ->orderBy('o.marca''ASC');
  160.                             }
  161.                         }
  162.                     ]);
  163.                 }
  164.                 /*if($options['tipo'] == 'impresora') {
  165.                     $form->add('marca', EntityType::class, [
  166.                         'required' => false,
  167.                         'label' => 'Marca',
  168.                         'class' => Impresora::class,
  169.                         'choice_label' => 'marca',
  170.                         'placeholder' => 'Todas',
  171.                         'attr' => [
  172.                             'class' => 'form-control',
  173.                             'style' => 'width: 130px;',
  174.                             'data-live-search' => 'true',
  175.                         ],
  176.                         'query_builder' => function(EntityRepository $er) {
  177.                             return $er->createQueryBuilder('i')
  178.                                 ->groupBy('i.marca')
  179.                                 ->orderBy('i.marca', 'ASC');
  180.                         }
  181.                     ]);
  182.                 }*/
  183.                 if ($options['tipo'] == 'impresora') {
  184.                     $form->add('marca'EntityType::class, [
  185.                         'required' => false,
  186.                         'label' => 'Marca',
  187.                         'class' => Impresora::class,
  188.                         'choice_label' => 'marca',
  189.                         'placeholder' => 'Todas',
  190.                         'attr' => [
  191.                             'class' => 'form-control',
  192.                             'style' => 'width: 130px;',
  193.                             'data-live-search' => 'true',
  194.                         ],
  195.                         'query_builder' => function (EntityRepository $er) use ($user) {
  196.                             // Verifica si el rol del usuario es mayor a 2
  197.                             if ($user->getRol()->getIdRol() > 2) {
  198.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  199.                                 return $er->createQueryBuilder('i')
  200.                                     ->where('i.unidad = :unidadId'// Filtra por unidad
  201.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  202.                                     ->groupBy('i.marca')
  203.                                     ->orderBy('i.marca''ASC');
  204.                             } else {
  205.                                 // Si el rol es 2 o menor, mostrar todas las marcas
  206.                                 return $er->createQueryBuilder('i')
  207.                                     ->groupBy('i.marca')
  208.                                     ->orderBy('i.marca''ASC');
  209.                             }
  210.                         }
  211.                     ]);
  212.                 }
  213.                 if ($options['tipo'] == 'comunicacion') {
  214.                     $form->add('marca'EntityType::class, [
  215.                         'required' => false,
  216.                         'label' => 'Marca',
  217.                         'class' => Red::class, // Clase correspondiente a "Red" (comunicación)
  218.                         'choice_label' => 'marca',
  219.                         'placeholder' => 'Todas',
  220.                         'attr' => [
  221.                             'class' => 'form-control',
  222.                             'style' => 'width: 130px;',
  223.                             'data-live-search' => 'true',
  224.                         ],
  225.                         'query_builder' => function (EntityRepository $er) use ($user) {
  226.                             // Verifica si el rol del usuario es mayor a 2
  227.                             if ($user->getRol()->getIdRol() > 2) {
  228.                                 // Si el rol es mayor a 2, filtra las marcas por la unidad del usuario
  229.                                 return $er->createQueryBuilder('r')
  230.                                     ->where('r.unidad = :unidadId'// Filtra por unidad
  231.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  232.                                     ->groupBy('r.marca'// Agrupa por marca
  233.                                     ->orderBy('r.marca''ASC'); // Ordena alfabéticamente
  234.                             } else {
  235.                                 // Si el rol es 2 o menor, mostrar todas las marcas
  236.                                 return $er->createQueryBuilder('r')
  237.                                     ->groupBy('r.marca'// Agrupa por marca
  238.                                     ->orderBy('r.marca''ASC'); // Ordena alfabéticamente
  239.                             }
  240.                         },
  241.                     ]);
  242.                 }
  243.                 /*if($options['tipo'] == 'comunicacion') {
  244.                     $form->add('marca', EntityType::class, [
  245.                         'required' => false,
  246.                         'label' => 'Marca',
  247.                         'class' => Red::class,
  248.                         'choice_label' => 'marca',
  249.                         'placeholder' => 'Todas',
  250.                         'attr' => [
  251.                             'class' => 'form-control',
  252.                             'style' => 'width: 130px;',
  253.                             'data-live-search' => 'true',
  254.                         ],
  255.                         'query_builder' => function(EntityRepository $er) {
  256.                             return $er->createQueryBuilder('r')
  257.                                 ->groupBy('r.marca')
  258.                                 ->orderBy('r.marca', 'ASC');
  259.                         }
  260.                     ]);
  261.                 }*/
  262.                 /*if ($options['tipo'] == 'comunicacion') {
  263.                     $form->add('marca', EntityType::class, [
  264.                         'required' => false,
  265.                         'label' => 'Marca',
  266.                         'class' => Comunicacion::class, // Clase correspondiente a "comunicación"
  267.                         'choice_label' => 'marca',
  268.                         'placeholder' => 'Todas',
  269.                         'attr' => [
  270.                             'class' => 'form-control',
  271.                             'style' => 'width: 130px;',
  272.                             'data-live-search' => 'true',
  273.                         ],
  274.                         'query_builder' => function (EntityRepository $er) use ($user) {
  275.                             // Verifica si el rol del usuario es mayor a 2
  276.                             if ($user->getRol()->getIdRol() > 2) {
  277.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  278.                                 return $er->createQueryBuilder('c')
  279.                                     ->where('c.unidad = :unidadId') // Filtra por unidad
  280.                                     ->setParameter('unidadId', $user->getUnidad()->getIdUni())
  281.                                     ->groupBy('c.marca')
  282.                                     ->orderBy('c.marca', 'ASC');
  283.                             } else {
  284.                                 // Si el rol es 2 o menor, mostrar todas las marcas
  285.                                 return $er->createQueryBuilder('c')
  286.                                     ->groupBy('c.marca')
  287.                                     ->orderBy('c.marca', 'ASC');
  288.                             }
  289.                         }
  290.                     ]);
  291.                 }*/
  292.                 /*if($options['tipo'] == 'equipo') {
  293.                     $form->add('modelo', EntityType::class, [
  294.                         'required' => false,
  295.                         'class' => 'App\Entity\Equipo',
  296.                         'label' => 'Modelo',
  297.                         'choice_label' => 'modelo',
  298.                         'placeholder' => 'Todas',
  299.                         'attr' => [
  300.                             'class' => 'form-control',
  301.                             'style' => 'width: 130px;'
  302.                         ],
  303.                         'query_builder' => function(EntityRepository $er) {
  304.                             return $er->createQueryBuilder('e')
  305.                                 ->groupBy('e.marca')
  306.                                 ->orderBy('e.marca', 'ASC');
  307.                         }
  308.                     ]);
  309.                 }*/
  310.                 if ($options['tipo'] == 'equipo') {
  311.                     $form->add('modelo'EntityType::class, [
  312.                         'required' => false,
  313.                         'class' => 'App\Entity\Equipo',
  314.                         'label' => 'Modelo',
  315.                         'choice_label' => 'modelo',
  316.                         'placeholder' => 'Todas',
  317.                         'attr' => [
  318.                             'class' => 'form-control',
  319.                             'style' => 'width: 130px;'
  320.                         ],
  321.                         'query_builder' => function (EntityRepository $er) use ($user) {
  322.                             // Verifica si el rol del usuario es mayor a 2
  323.                             if ($user->getRol()->getIdRol() > 2) {
  324.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  325.                                 return $er->createQueryBuilder('e')
  326.                                     ->where('e.unidad = :unidadId'// Filtra por unidad
  327.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  328.                                     ->groupBy('e.modelo'// Agrupa por modelo
  329.                                     ->orderBy('e.modelo''ASC'); // Ordena alfabéticamente
  330.                             } else {
  331.                                 // Si el rol es 2 o menor, mostrar todos los modelos
  332.                                 return $er->createQueryBuilder('e')
  333.                                     ->groupBy('e.modelo'// Agrupa por modelo
  334.                                     ->orderBy('e.modelo''ASC'); // Ordena alfabéticamente
  335.                             }
  336.                         }
  337.                     ]);
  338.                 }
  339.                 /*if($options['tipo'] == 'otro') {
  340.                     $form->add('modelo', EntityType::class, [
  341.                         'required' => false,
  342.                         'class' => Otro::class,
  343.                         'label' => 'Modelo',
  344.                         'choice_label' => 'modelo',
  345.                         'placeholder' => 'Todas',
  346.                         'attr' => [
  347.                             'class' => 'form-control',
  348.                             'style' => 'width: 130px;'
  349.                         ],
  350.                         'query_builder' => function(EntityRepository $er) {
  351.                             return $er->createQueryBuilder('o')
  352.                                 ->groupBy('o.marca')
  353.                                 ->orderBy('o.marca', 'ASC');
  354.                         },
  355.                     ]);
  356.                 }*/
  357.                 if ($options['tipo'] == 'otro') {
  358.                     $form->add('modelo'EntityType::class, [
  359.                         'required' => false,
  360.                         'class' => Otro::class, // Clase correspondiente a "Otro"
  361.                         'label' => 'Modelo',
  362.                         'choice_label' => 'modelo',
  363.                         'placeholder' => 'Todas',
  364.                         'attr' => [
  365.                             'class' => 'form-control',
  366.                             'style' => 'width: 130px;',
  367.                         ],
  368.                         'query_builder' => function (EntityRepository $er) use ($user) {
  369.                             // Verifica si el rol del usuario es mayor a 2
  370.                             if ($user->getRol()->getIdRol() > 2) {
  371.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  372.                                 return $er->createQueryBuilder('o')
  373.                                     ->where('o.unidad = :unidadId'// Filtra por unidad
  374.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  375.                                     ->groupBy('o.modelo'// Agrupa por modelo
  376.                                     ->orderBy('o.modelo''ASC'); // Ordena alfabéticamente
  377.                             } else {
  378.                                 // Si el rol es 2 o menor, mostrar todos los modelos
  379.                                 return $er->createQueryBuilder('o')
  380.                                     ->groupBy('o.modelo'// Agrupa por modelo
  381.                                     ->orderBy('o.modelo''ASC'); // Ordena alfabéticamente
  382.                             }
  383.                         },
  384.                     ]);
  385.                 }
  386.                 /*if($options['tipo'] == 'impresora') {
  387.                     $form->add('modelo', EntityType::class, [
  388.                         'required' => false,
  389.                         'class' => Impresora::class,
  390.                         'label' => 'Modelo',
  391.                         'choice_label' => 'modelo',
  392.                         'placeholder' => 'Todas',
  393.                         'attr' => [
  394.                             'class' => 'form-control',
  395.                             'style' => 'width: 130px;'
  396.                         ],
  397.                         'query_builder' => function(EntityRepository $er) {
  398.                             return $er->createQueryBuilder('i')
  399.                                 ->groupBy('i.marca')
  400.                                 ->orderBy('i.marca', 'ASC');
  401.                         },
  402.                     ]);
  403.                 }*/
  404.                 if ($options['tipo'] == 'impresora') {
  405.                     $form->add('modelo'EntityType::class, [
  406.                         'required' => false,
  407.                         'class' => Impresora::class, // Clase correspondiente a "Impresora"
  408.                         'label' => 'Modelo',
  409.                         'choice_label' => 'modelo',
  410.                         'placeholder' => 'Todas',
  411.                         'attr' => [
  412.                             'class' => 'form-control',
  413.                             'style' => 'width: 130px;',
  414.                         ],
  415.                         'query_builder' => function (EntityRepository $er) use ($user) {
  416.                             // Verifica si el rol del usuario es mayor a 2
  417.                             if ($user->getRol()->getIdRol() > 2) {
  418.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  419.                                 return $er->createQueryBuilder('i')
  420.                                     ->where('i.unidad = :unidadId'// Filtra por unidad
  421.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  422.                                     ->groupBy('i.modelo'// Agrupa por modelo
  423.                                     ->orderBy('i.modelo''ASC'); // Ordena alfabéticamente
  424.                             } else {
  425.                                 // Si el rol es 2 o menor, mostrar todos los modelos
  426.                                 return $er->createQueryBuilder('i')
  427.                                     ->groupBy('i.modelo'// Agrupa por modelo
  428.                                     ->orderBy('i.modelo''ASC'); // Ordena alfabéticamente
  429.                             }
  430.                         },
  431.                     ]);
  432.                 }
  433.                 /*if($options['tipo'] == 'comunicacion') {
  434.                     $form->add('modelo', EntityType::class, [
  435.                         'required' => false,
  436.                         'class' => Red::class,
  437.                         'label' => 'Modelo',
  438.                         'choice_label' => 'modelo',
  439.                         'placeholder' => 'Todas',
  440.                         'attr' => [
  441.                             'class' => 'form-control',
  442.                             'style' => 'width: 130px;'
  443.                         ],
  444.                         'query_builder' => function(EntityRepository $er) {
  445.                             return $er->createQueryBuilder('r')
  446.                                 ->groupBy('r.marca')
  447.                                 ->orderBy('r.marca', 'ASC');
  448.                         },
  449.                     ]);
  450.                 }*/
  451.                 if ($options['tipo'] == 'comunicacion') {
  452.                     $form->add('modelo'EntityType::class, [
  453.                         'required' => false,
  454.                         'class' => Red::class, // Clase correspondiente a "Red" (comunicación)
  455.                         'label' => 'Modelo',
  456.                         'choice_label' => 'modelo',
  457.                         'placeholder' => 'Todas',
  458.                         'attr' => [
  459.                             'class' => 'form-control',
  460.                             'style' => 'width: 130px;',
  461.                         ],
  462.                         'query_builder' => function (EntityRepository $er) use ($user) {
  463.                             // Verifica si el rol del usuario es mayor a 2
  464.                             if ($user->getRol()->getIdRol() > 2) {
  465.                                 // Si el rol es mayor a 2, filtra por la unidad del usuario
  466.                                 return $er->createQueryBuilder('r')
  467.                                     ->where('r.unidad = :unidadId'// Filtra por unidad
  468.                                     ->setParameter('unidadId'$user->getUnidad()->getIdUni())
  469.                                     ->groupBy('r.modelo'// Agrupa por modelo
  470.                                     ->orderBy('r.modelo''ASC'); // Ordena alfabéticamente
  471.                             } else {
  472.                                 // Si el rol es 2 o menor, mostrar todos los modelos
  473.                                 return $er->createQueryBuilder('r')
  474.                                     ->groupBy('r.modelo'// Agrupa por modelo
  475.                                     ->orderBy('r.modelo''ASC'); // Ordena alfabéticamente
  476.                             }
  477.                         },
  478.                     ]);
  479.                 }
  480.                 $form->add('uso'ChoiceType::class, [
  481.                     'required' => false,
  482.                     'label' => 'Uso',
  483.                     'choices' => [
  484.                         'Educativo' => '1',
  485.                         'Docente' => '2',
  486.                         'Administrativo' => '3',
  487.                     ],
  488.                     'placeholder' => 'Todos los usos',
  489.                     'attr' => [
  490.                         'class' => 'form-control',
  491.                         'style' => 'width: 130px;'
  492.                     ],
  493.                 ]);
  494.                 $form->add('estatus'ChoiceType::class, [
  495.                     'required' => false,
  496.                     'label' => 'Estatus',
  497.                     'choices' => [
  498.                         'En operación' => '1',
  499.                         'Descompuesto' => '2',
  500.                         'Sin instalar' => '3',
  501.                         'En proceso de baja' => '4',
  502.                         'Baja' => '5',
  503.                     ],
  504.                     'placeholder' => 'Todos los estatus',
  505.                     'attr' => [
  506.                         'class' => 'form-control',
  507.                         'style' => 'width: 130px;'
  508.                     ],
  509.                 ]);
  510.             }
  511.         });
  512.     }
  513.     public function configureOptions(OptionsResolver $resolver): void
  514.     {
  515.         $resolver->setDefaults([
  516.             'unidad' => false,
  517.             'marca' => false,
  518.             'modelo' => false,
  519.             'tipo' => false
  520.         ]);
  521.     }
  522.     //Para subir formulario
  523. }