src/Form/UnidadFiltroType.php line 153

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