src/Form/Frontend/InscripcionParejaType.php line 117

Open in your IDE?
  1. <?php
  2. namespace App\Form\Frontend;
  3. use Symfony\Component\Form\AbstractType;
  4. use Symfony\Component\Form\FormBuilderInterface;
  5. use Symfony\Component\Form\FormEvents;
  6. use Doctrine\ORM\EntityRepository;
  7. use App\DBAL\Backend\EnumTurnoHorarioType as EnumTurnoHorarioType;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\FileType;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  18. use Doctrine\Persistence\ManagerRegistry;
  19. use App\Entity\Backend\Tarifa;
  20. use App\Entity\Backend\Categoria;
  21. use App\Util\UtilInscritos;
  22. class InscripcionParejaType extends AbstractType {
  23. private $em;
  24. private $utilInscritos;
  25. //AƱadimos el EntityManager para poder ir a la BD y traernos las barra-categorias disponibles de esa competicion, para evitar fallos de validacion en el formulario
  26. public function __construct(ManagerRegistry $em, UtilInscritos $utilInscritos, private readonly ValidateInscriptionRates $validateInscriptionRates){
  27. $this->em = $em;
  28. $this->utilInscritos = $utilInscritos;
  29. }
  30. public function buildForm(FormBuilderInterface $builder, array $options) {
  31. $builder->addEventListener(FormEvents::POST_SUBMIT, $this->validateInscriptionRates);
  32. $idc = $options['attr']['competicion']->getId();
  33. $permitirExtranjeros = $options['attr']['competicion']->getpermitirExtranjeros() ? "-andEnglish" : "";
  34. $builder
  35. ->add('save', SubmitType::class, array('label' => 'competicion.inscritos.continue', 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'ui big blue fluid circular disabled button')))
  36. ->add('nombre_jugador1', TextType::class, array('required' => true, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'jugador', 'disabled' => 'disabled')))
  37. ->add('nombre_jugador2', TextType::class, array('required' => true, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'jugador', 'disabled' => 'disabled')))
  38. ->add('licencia1', TextType::class, array('required' => true, 'mapped' => false, 'attr' => array('class' => 'prompt licencia', 'autocomplete' => 'off'), 'label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
  39. ->add('licencia2', TextType::class, array('required' => true, 'mapped' => false, 'attr' => array('class' => 'prompt licencia', 'autocomplete' => 'off'), 'label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
  40. ->add('tarifa_select1', EntityType::class, array('attr' => array('class' => 'tarifa', 'disabled' => 'disabled'),
  41. 'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
  42. 'translation_domain' => 'FrontendBundle',
  43. 'required' => true,
  44. 'mapped' => false,
  45. 'class' => Tarifa::class,
  46. 'placeholder' => 'competicion.inscritos.fare-empty' . $permitirExtranjeros,
  47. 'query_builder' => function (EntityRepository $e) use ($idc) {
  48. $now = new \DateTime('now');
  49. return $e->createQueryBuilder('a')
  50. ->innerJoin('Backend:Competicion', 'c', 'WITH', 'c.id = a.competicion')
  51. ->innerJoin('Backend:Club', 'cl', 'WITH', 'c.club = cl.id')
  52. ->innerJoin('Backend:Timezone', 't', 'WITH', 't.id = cl.timezone')
  53. ->where('a.competicion = :competicion')
  54. ->andWhere("a.inicio IS NULL OR CONVERT_TZ(a.inicio, t.nombre, '" . date_default_timezone_get() . "') <= :now")
  55. ->andWhere("a.fin IS NULL OR CONVERT_TZ(a.fin, t.nombre, '". date_default_timezone_get() . "') >= :now")
  56. ->setParameter('now', $now)
  57. ->setParameter('competicion', $idc);
  58. }
  59. ))
  60. ->add('tarifa_select2', EntityType::class, array('attr' => array('class' => 'tarifa', 'disabled' => 'disabled'),
  61. 'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
  62. 'translation_domain' => 'FrontendBundle',
  63. 'required' => true,
  64. 'mapped' => false,
  65. 'class' => Tarifa::class,
  66. 'placeholder' => 'competicion.inscritos.fare-empty' . $permitirExtranjeros,
  67. 'query_builder' => function (EntityRepository $e) use ($idc) {
  68. $now = new \DateTime('now');
  69. return $e->createQueryBuilder('a')
  70. ->innerJoin('Backend:Competicion', 'c', 'WITH', 'c.id = a.competicion')
  71. ->innerJoin('Backend:Club', 'cl', 'WITH', 'c.club = cl.id')
  72. ->innerJoin('Backend:Timezone', 't', 'WITH', 't.id = cl.timezone')
  73. ->where('a.competicion = :competicion')
  74. ->andWhere("a.inicio IS NULL OR CONVERT_TZ(a.inicio, t.nombre, '" . date_default_timezone_get() . "') <= :now")
  75. ->andWhere("a.fin IS NULL OR CONVERT_TZ(a.fin, t.nombre, '". date_default_timezone_get() . "') >= :now")
  76. ->setParameter('now', $now)
  77. ->setParameter('competicion', $idc);
  78. }
  79. ))
  80. ->add('email', EmailType::class, array('label' => 'competicion.inscritos.email', 'translation_domain' => 'FrontendBundle', 'mapped' => false, 'required' => true, 'attr' => array('data-help' => 'competicion.inscritos.email-help', 'disabled' => 'disabled', 'class' => 'form_email')))
  81. ->add('observaciones', TextareaType::class, array('label' => 'competicion.inscritos.annotation' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'required' => false, 'attr' => array('maxlength' => 100, 'rows' => 7)))
  82. ->add('id1', HiddenType::class, array('mapped' => false))
  83. ->add('id2', HiddenType::class, array('mapped' => false))
  84. ->add('categoria1', HiddenType::class, array('mapped' => false))
  85. ->add('categoria2', HiddenType::class, array('mapped' => false))
  86. ->add('tarifa1', HiddenType::class, array('required' => true, 'mapped' => false))
  87. ->add('tarifa2', HiddenType::class, array('required' => true, 'mapped' => false))
  88. ->add('sgCliente1', HiddenType::class, array('mapped' => false))
  89. ->add('sgCliente2', HiddenType::class, array('mapped' => false))
  90. ->add('documentoHcp1', FileType::class, array('label' => 'competicion.inscritos.document' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoHcp', 'accept' => "application/pdf", 'data-help' => 'competicion.inscritos.document-help' . $permitirExtranjeros, 'disabled' => 'disabled')))
  91. ->add('documentoHcp2', FileType::class, array('label' => 'competicion.inscritos.document' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoHcp', 'accept' => "application/pdf", 'data-help' => 'competicion.inscritos.document-help' . $permitirExtranjeros, 'disabled' => 'disabled')))
  92. ->add('telefono_jugador1', TextType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.phone', 'translation_domain' => 'FrontendBundle', 'attr' => array('disabled' => 'disabled', 'class' => 'tlfnJug phone-input', 'data-help' => 'competicion.inscritos.phone-help' . $permitirExtranjeros)))
  93. ->add('tlfnPrefix1', HiddenType::class, array('mapped' => false, 'attr' => array('class' => 'phone-prefix-input')))
  94. ->add('telefono_jugador2', TextType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.phone', 'translation_domain' => 'FrontendBundle', 'attr' => array('disabled' => 'disabled', 'class' => 'tlfnJug phone-input', 'data-help' => 'competicion.inscritos.phone-help' . $permitirExtranjeros)))
  95. ->add('tlfnPrefix2', HiddenType::class, array('mapped' => false, 'attr' => array('class' => 'phone-prefix-input')))
  96. ;
  97. if (count(($options['attr']['competicion']->getVouchers())) > 0) {
  98. $builder->add('voucher', 'text', array('mapped' => false, 'required' => false, 'attr' => array('class' => 'form-control')));
  99. }
  100. if (!$options['attr']['competicion']->getBarraSalida()) {
  101. $builder->add('categoria_select1', EntityType::class, array('attr' => array('class' => 'categoria', 'disabled' => 'disabled'),
  102. 'label' => 'competicion.inscritos.category' . $permitirExtranjeros,
  103. 'translation_domain' => 'FrontendBundle',
  104. 'mapped' => false,
  105. 'required' => true,
  106. 'class' => Categoria::class,
  107. 'placeholder' => 'competicion.inscritos.category-empty' . $permitirExtranjeros,
  108. 'query_builder' => function(EntityRepository $e) use ($idc) {
  109. return $e->createQueryBuilder('a')
  110. ->where('a.competicion = :competicion')
  111. ->setParameter('competicion', $idc);
  112. }
  113. ))
  114. ->add('categoria_select2', EntityType::class, array('attr' => array('class' => 'categoria', 'disabled' => 'disabled'),
  115. 'label' => 'competicion.inscritos.category' . $permitirExtranjeros,
  116. 'translation_domain' => 'FrontendBundle',
  117. 'mapped' => false,
  118. 'required' => true,
  119. 'class' => Categoria::class,
  120. 'placeholder' => 'competicion.inscritos.category-empty' . $permitirExtranjeros,
  121. 'query_builder' => function(EntityRepository $e) use ($idc) {
  122. return $e->createQueryBuilder('a')
  123. ->where('a.competicion = :competicion')
  124. ->setParameter('competicion', $idc);
  125. }
  126. ));
  127. } else {
  128. $builder->add('barra1', ChoiceType::class, array('attr' => ['class' => 'barraSalida barraSalida1 '], //el espacio posterior es necesario
  129. 'label' => 'competicion.inscritos.tee' . $permitirExtranjeros,
  130. 'translation_domain' => 'FrontendBundle',
  131. 'mapped' => false,
  132. 'required' => false,
  133. 'empty_data' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
  134. 'placeholder' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
  135. 'choices' => $this->utilInscritos->barrasCategorias($idc) //nos traemos los barra-categoria de la competicion
  136. ))
  137. ->add('barra2', ChoiceType::class, array('attr' => ['class' => 'barraSalida barraSalida2 '], //el espacio posterior es necesario
  138. 'label' => 'competicion.inscritos.tee' . $permitirExtranjeros,
  139. 'translation_domain' => 'FrontendBundle',
  140. 'mapped' => false,
  141. 'required' => true,
  142. 'empty_data' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
  143. 'placeholder' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
  144. 'choices' => $this->utilInscritos->barrasCategorias($idc) //nos traemos los barra-categoria de la competicion
  145. ));
  146. }
  147. if (count(($options['attr']['competicion']->getVouchers())) > 0) {
  148. $builder->add('voucher', 'text', array('mapped' => false, 'required' => false, 'attr' => array('class' => 'form-control')));
  149. }
  150. //Se cambia segun tarea NEX-1447-5
  151. //Pablo 21/04/2022: Se elimina la peticion de documentos FLP para FGM
  152. // if (strpos($options['attr']['org'], "CM00") !== false) {
  153. // $builder
  154. // ->add('documentoCovid1', 'file', array('label' => "Adjuntar PDF", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoCovid', 'accept' => "application/pdf")))
  155. // ->add('formCompleto1', 'checkbox', array('label' => "He completado y revisado el formulario", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'formCompleto')))
  156. // ->add('documentoCovid2', 'file', array('label' => "Adjuntar PDF", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoCovid', 'accept' => "application/pdf")))
  157. // ->add('formCompleto2', 'checkbox', array('label' => "He completado y revisado el formulario", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'formCompleto')));
  158. // }
  159. //solo mostramos turno si hay plazas definidas
  160. if (($options['attr']['competicion']->getPlazasManana() > 0) || ($options['attr']['competicion']->getPlazasTarde() > 0)) {
  161. $dispManana = $options['attr']['dispManana']; //las plazas que hay vacantes aun (totales menos las usadas)
  162. $dispTarde = $options['attr']['dispTarde'];
  163. if (($dispManana >= 2) && ($dispTarde >= 2)) {
  164. $builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getSmallChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
  165. } elseif (($dispManana >= 2) && ($dispTarde < 1)) {
  166. $builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getMananaChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
  167. } elseif (($dispManana < 1) && ($dispTarde >= 2)) {
  168. $builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getTardeChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
  169. }
  170. }
  171. // ->add('captcha', 'captcha', array('width' => 240, 'height' => 60, 'max_front_lines' => 1, 'max_behind_lines' => 3, 'distortion' => true, 'quality' => 150, 'length' => 6, 'interpolation' => true, 'background_color' => [245, 245, 245]));
  172. }
  173. // public function getDefaultOptions() {
  174. // return array(
  175. // 'data_class' => 'App\Entity\Backend\Competicion',
  176. // 'id' => null
  177. // );
  178. // }
  179. public function getName() {
  180. return $this->getBlockPrefix();
  181. }
  182. public function getBlockPrefix(): string {
  183. return 'inscripcion_pareja';
  184. }
  185. }