src/Form/AgendaType.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Agenda;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Symfony\Component\OptionsResolver\OptionsResolver;
  7. use App\Entity\User;
  8. use App\Entity\Procedimientos;
  9. use App\Entity\SeguroPrivado;
  10. use App\Entity\OrdenProcedimiento;
  11. use App\Entity\Sala;
  12. use App\Entity\Especialidad;
  13. use App\Entity\Paciente;
  14. use Doctrine\ORM\EntityRepository;
  15. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  16. use Symfony\Component\Form\Extension\Core\Type\DateType;
  17. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextType;
  19. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  20. use App\Repository\UserRepository;
  21. class AgendaType extends AbstractType
  22. {
  23.     private UserRepository $userRepository;
  24.     public function __construct(UserRepository $userRepository)
  25.     {
  26.         $this->userRepository $userRepository;
  27.     }
  28.     public function buildForm(FormBuilderInterface $builder, array $options)
  29.     {
  30.         //dd($options['doctor'],$options['unidad']);
  31.         if($options['doctor']>0){
  32.             $builder
  33.                 ->add('inicio'DateTimeType::class, [
  34.                     
  35.                     'widget' => 'single_text',
  36.                     
  37.                 ])
  38.                 
  39.                 ->add('fin'DateTimeType::class, [
  40.                     
  41.                     'widget' => 'single_text',
  42.         
  43.                 ])
  44.                 
  45.                 ->add('doctor'EntityType::class, [
  46.                     'class' => User::class,
  47.                     'query_builder' => function (EntityRepository $er) use($options) {
  48.                         return $er->createQueryBuilder('u')
  49.                             ->orderBy('u.tipousuario''ASC')
  50.                             ->addOrderBy('u.apellido1''ASC')
  51.                             ->andWhere('u.tipousuario IN (:tipos)')
  52.                             //->andWhere('u.id = :val1')
  53.                             //->setParameter('val1',$options['doctor'])
  54.                             ->andWhere('u.estado = 1')
  55.                             ->setParameter('tipos', [34]);
  56.                     },
  57.                     'choice_label' => function ($user) {
  58.                         return $user->getDr().' '.$user->getApellido1().' '.$user->getApellido2().' '.$user->getNombre1().' '.$user->getNombre2();
  59.                     },
  60.                     'data' => is_numeric($options['doctor'])
  61.                         ? $this->userRepository->find($options['doctor'])
  62.                         : $options['doctor'],
  63.                     'attr' => [
  64.                         'class' => 'form-control select2'
  65.                     ],
  66.                 ])
  67.                 ->add('procedimiento'EntityType::class, [
  68.                     'class' => Procedimientos::class,
  69.                     'query_builder' => function (EntityRepository $er) use($options) {
  70.                         return $er->createQueryBuilder('p')
  71.                             ->andWhere('p.estado = 1')
  72.                             //->andWhere('p.imagen = :val1')
  73.                             //->setParameter('val1', $options['unidad'])
  74.                             ->orderBy('p.id''ASC');
  75.                     },
  76.                     'choice_label' => 'nombre',
  77.                 
  78.                     // ðŸš€ HABILITAR MULTIPLE
  79.                     'multiple' => true,
  80.                     'expanded' => false,          // false = SELECT MULTIPLE (true = checkboxes)
  81.                     'mapped' => false,  // <---- CLAVE
  82.                     // Opcional si usas Select2
  83.                     'attr' => [
  84.                         'class' => 'form-control select2',
  85.                     ],
  86.                 ])
  87.                    
  88.                 ->add('especialidad'EntityType::class, [
  89.                     'class' => Especialidad::class,
  90.                     'query_builder' => function (EntityRepository $er) {
  91.                         return $er->createQueryBuilder('es')
  92.                             ->orderBy('es.nombre''ASC')
  93.                             ->andWhere('es.estado = 1');
  94.                     },
  95.                     'choice_label' => function ($especialidad) {
  96.                         return $especialidad->getNombre();
  97.                     },
  98.                     'preferred_choices' => [$options['especialidad']],
  99.                 ])
  100.                 
  101.                 ->add('seguro'EntityType::class, [
  102.                     'class' => SeguroPrivado::class,
  103.                     'query_builder' => function (EntityRepository $er) {
  104.                         return $er->createQueryBuilder('sg')
  105.                             ->orderBy('sg.nombre''ASC')
  106.                             ->andWhere('sg.estado = 1');
  107.                     },
  108.                     'choice_label' => function ($seguro) {
  109.                         return $seguro->getNombre();
  110.                     }
  111.                 ])
  112.                 ->add('observacion')
  113.                 ->add('validacion'TextType::class, [
  114.                     'required' => false,
  115.                     'label' => 'Motivo Consulta',
  116.                 ])
  117.                 /*->add('orden', EntityType::class, [
  118.                     'class' => OrdenProcedimiento::class,
  119.                     'query_builder' => function (EntityRepository $er) use ($options) {
  120.                         $qb = $er->createQueryBuilder('o')
  121.                             ->andWhere('o.estado = :estado')
  122.                             ->setParameter('estado', 1)
  123.                             ->orderBy('o.id', 'ASC');
  124.                         // si no hay paciente, no cargar nada
  125.                         if (!empty($options['paciente'])) {
  126.                             $qb->andWhere('o.paciente = :paciente')
  127.                             ->setParameter('paciente', $options['paciente']); // objeto Paciente
  128.                         } else {
  129.                             $qb->andWhere('1 = 0');
  130.                         }
  131.                         return $qb;
  132.                     },
  133.                     'mapped' => false,
  134.                     'required' => false,
  135.                     // âœ… MULTIPLE SELECT
  136.                     'multiple' => true,
  137.                     'expanded' => false, // false = <select multiple>, true = checkboxes
  138.                     'choice_label' => function (OrdenProcedimiento $orden) {
  139.                         return $orden->getProcedimiento()->getNombre();
  140.                     },
  141.                     // âœ… Select2
  142.                     'attr' => [
  143.                         'class' => 'form-control select2',
  144.                     ],
  145.                 ])*/
  146.                 
  147.             ;
  148.         }else{
  149.             $builder
  150.                 ->add('inicio'DateTimeType::class, [
  151.                     
  152.                     'widget' => 'single_text',
  153.                     
  154.                 ])
  155.                 
  156.                 ->add('fin'DateTimeType::class, [
  157.                     
  158.                     'widget' => 'single_text',
  159.         
  160.                 ])
  161.                 
  162.                 ->add('doctor'EntityType::class, [
  163.                     'class' => User::class,
  164.                     'query_builder' => function (EntityRepository $er) use($options) {
  165.                         return $er->createQueryBuilder('u')
  166.                             ->orderBy('u.tipousuario''ASC')
  167.                             ->addOrderBy('u.apellido1''ASC')
  168.                             ->andWhere('u.tipousuario IN (:tipos)')
  169.                             ->andWhere('u.estado = 1')
  170.                             ->setParameter('tipos', [34])
  171.                             ;
  172.                     },
  173.                     'choice_label' => function ($user) {
  174.                         return $user->getDr().' '.$user->getApellido1().' '.$user->getApellido2().' '.$user->getNombre1().' '.$user->getNombre2();
  175.                     }
  176.                 ])
  177.                 ->add('procedimiento'EntityType::class, [
  178.                     'class' => Procedimientos::class,
  179.                     'query_builder' => function (EntityRepository $er) use($options) {
  180.                         return $er->createQueryBuilder('p')
  181.                             ->andWhere('p.estado = 1')
  182.                             //->andWhere('p.imagen = :val1')
  183.                             //->setParameter('val1', $options['unidad'])
  184.                             ->orderBy('p.id''ASC');
  185.                     },
  186.                     'choice_label' => 'nombre',
  187.                 
  188.                     // ðŸš€ HABILITAR MULTIPLE
  189.                     'multiple' => true,
  190.                     'expanded' => false,          // false = SELECT MULTIPLE (true = checkboxes)
  191.                     'mapped' => false,  // <---- CLAVE
  192.                     // Opcional si usas Select2
  193.                     'attr' => [
  194.                         'class' => 'form-control select2',
  195.                     ],
  196.                 ])
  197.                    
  198.                 ->add('especialidad'EntityType::class, [
  199.                     'class' => Especialidad::class,
  200.                     'query_builder' => function (EntityRepository $er) {
  201.                         return $er->createQueryBuilder('es')
  202.                             ->orderBy('es.nombre''ASC')
  203.                             ->andWhere('es.estado = 1');
  204.                     },
  205.                     'choice_label' => function ($especialidad) {
  206.                         return $especialidad->getNombre();
  207.                     },
  208.                     'preferred_choices' => [$options['especialidad']],
  209.                 ])
  210.                 
  211.                 ->add('seguro'EntityType::class, [
  212.                     'class' => SeguroPrivado::class,
  213.                     'query_builder' => function (EntityRepository $er) {
  214.                         return $er->createQueryBuilder('sg')
  215.                             ->orderBy('sg.nombre''ASC')
  216.                             ->andWhere('sg.estado = 1');
  217.                     },
  218.                     'choice_label' => function ($seguro) {
  219.                         return $seguro->getNombre();
  220.                     },
  221.                     
  222.                 ])
  223.                 ->add('observacion')
  224.                 ->add('validacion'TextType::class, [
  225.                     'required' => false,
  226.                     'label' => 'Motivo Consulta',
  227.                 ])
  228.                 /*->add('orden', EntityType::class, [
  229.                     'class' => OrdenProcedimiento::class,
  230.                     'query_builder' => function (EntityRepository $er) use ($options) {
  231.                         $qb = $er->createQueryBuilder('o')
  232.                             ->andWhere('o.estado = :estado')
  233.                             ->setParameter('estado', 1)
  234.                             ->orderBy('o.id', 'ASC');
  235.                         // si no hay paciente, no cargar nada
  236.                         if (!empty($options['paciente'])) {
  237.                             $qb->andWhere('o.paciente = :paciente')
  238.                             ->setParameter('paciente', $options['paciente']); // objeto Paciente
  239.                         } else {
  240.                             $qb->andWhere('1 = 0');
  241.                         }
  242.                         return $qb;
  243.                     },
  244.                     'mapped' => false,
  245.                     'required' => false,
  246.                     // âœ… MULTIPLE SELECT
  247.                     'multiple' => true,
  248.                     'expanded' => false, // false = <select multiple>, true = checkboxes
  249.                     'choice_label' => function (OrdenProcedimiento $orden) {
  250.                         return $orden->getProcedimiento()->getNombre();
  251.                     },
  252.                     // âœ… Select2
  253.                     'attr' => [
  254.                         'class' => 'form-control select2',
  255.                     ],
  256.                 ])*/
  257.                 
  258.             ;
  259.         } 
  260.         
  261.     }
  262.     public function configureOptions(OptionsResolver $resolver)
  263.     {
  264.         $resolver->setDefaults([
  265.             'data_class' => Agenda::class,
  266.             'doctor'     => null,
  267.             'especialidad' => null,
  268.             'unidad' => null,
  269.             'paciente' => null,
  270.         ]);
  271.     }
  272. }