<?php
namespace App\Form\Frontend;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Doctrine\ORM\EntityRepository;
use App\DBAL\Backend\EnumTurnoHorarioType as EnumTurnoHorarioType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Backend\Tarifa;
use App\Entity\Backend\Categoria;
use App\Util\UtilInscritos;
class InscripcionParejaType extends AbstractType {
private $em;
private $utilInscritos;
//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
public function __construct(ManagerRegistry $em, UtilInscritos $utilInscritos){
$this->em = $em;
$this->utilInscritos = $utilInscritos;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$idc = $options['attr']['competicion']->getId();
$permitirExtranjeros = $options['attr']['competicion']->getpermitirExtranjeros() ? "-andEnglish" : "";
$builder
->add('save', SubmitType::class, array('label' => 'competicion.inscritos.continue', 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'ui big blue fluid circular disabled button')))
->add('nombre_jugador1', TextType::class, array('required' => true, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'jugador', 'disabled' => 'disabled')))
->add('nombre_jugador2', TextType::class, array('required' => true, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'jugador', 'disabled' => 'disabled')))
->add('licencia1', TextType::class, array('required' => true, 'mapped' => false, 'attr' => array('class' => 'prompt licencia', 'autocomplete' => 'off'), 'label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
->add('licencia2', TextType::class, array('required' => true, 'mapped' => false, 'attr' => array('class' => 'prompt licencia', 'autocomplete' => 'off'), 'label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
->add('tarifa_select1', EntityType::class, array('attr' => array('class' => 'tarifa', 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'required' => true,
'mapped' => false,
'class' => Tarifa::class,
'placeholder' => 'competicion.inscritos.fare-empty' . $permitirExtranjeros,
'query_builder' => function (EntityRepository $e) use ($idc) {
$now = new \DateTime('now');
return $e->createQueryBuilder('a')
->innerJoin('Backend:Competicion', 'c', 'WITH', 'c.id = a.competicion')
->innerJoin('Backend:Club', 'cl', 'WITH', 'c.club = cl.id')
->innerJoin('Backend:Timezone', 't', 'WITH', 't.id = cl.timezone')
->where('a.competicion = :competicion')
->andWhere("a.inicio IS NULL OR CONVERT_TZ(a.inicio, t.nombre, '" . date_default_timezone_get() . "') <= :now")
->andWhere("a.fin IS NULL OR CONVERT_TZ(a.fin, t.nombre, '". date_default_timezone_get() . "') >= :now")
->setParameter('now', $now)
->setParameter('competicion', $idc);
}
))
->add('tarifa_select2', EntityType::class, array('attr' => array('class' => 'tarifa', 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'required' => true,
'mapped' => false,
'class' => Tarifa::class,
'placeholder' => 'competicion.inscritos.fare-empty' . $permitirExtranjeros,
'query_builder' => function (EntityRepository $e) use ($idc) {
$now = new \DateTime('now');
return $e->createQueryBuilder('a')
->innerJoin('Backend:Competicion', 'c', 'WITH', 'c.id = a.competicion')
->innerJoin('Backend:Club', 'cl', 'WITH', 'c.club = cl.id')
->innerJoin('Backend:Timezone', 't', 'WITH', 't.id = cl.timezone')
->where('a.competicion = :competicion')
->andWhere("a.inicio IS NULL OR CONVERT_TZ(a.inicio, t.nombre, '" . date_default_timezone_get() . "') <= :now")
->andWhere("a.fin IS NULL OR CONVERT_TZ(a.fin, t.nombre, '". date_default_timezone_get() . "') >= :now")
->setParameter('now', $now)
->setParameter('competicion', $idc);
}
))
->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')))
->add('observaciones', TextareaType::class, array('label' => 'competicion.inscritos.annotation' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'required' => false, 'attr' => array('maxlength' => 100, 'rows' => 7)))
->add('id1', HiddenType::class, array('mapped' => false))
->add('id2', HiddenType::class, array('mapped' => false))
->add('categoria1', HiddenType::class, array('mapped' => false))
->add('categoria2', HiddenType::class, array('mapped' => false))
->add('tarifa1', HiddenType::class, array('required' => true, 'mapped' => false))
->add('tarifa2', HiddenType::class, array('required' => true, 'mapped' => false))
->add('sgCliente1', HiddenType::class, array('mapped' => false))
->add('sgCliente2', HiddenType::class, array('mapped' => false))
->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')))
->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')))
->add('telefono_jugador1', IntegerType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.phone', 'translation_domain' => 'FrontendBundle', 'attr' => array('disabled' => 'disabled', 'class' => 'tlfnJug', 'data-help' => 'competicion.inscritos.phone-help' . $permitirExtranjeros, "min-length" => 9)))
->add('telefono_jugador2', IntegerType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.phone', 'translation_domain' => 'FrontendBundle', 'attr' => array('disabled' => 'disabled', 'class' => 'tlfnJug', 'data-help' => 'competicion.inscritos.phone-help' . $permitirExtranjeros, "min-length" => 9)))
;
if (count(($options['attr']['competicion']->getVouchers())) > 0) {
$builder->add('voucher', 'text', array('mapped' => false, 'required' => false, 'attr' => array('class' => 'form-control')));
}
if (!$options['attr']['competicion']->getBarraSalida()) {
$builder->add('categoria_select1', EntityType::class, array('attr' => array('class' => 'categoria', 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.category' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => true,
'class' => Categoria::class,
'placeholder' => 'competicion.inscritos.category-empty' . $permitirExtranjeros,
'query_builder' => function(EntityRepository $e) use ($idc) {
return $e->createQueryBuilder('a')
->where('a.competicion = :competicion')
->setParameter('competicion', $idc);
}
))
->add('categoria_select2', EntityType::class, array('attr' => array('class' => 'categoria', 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.category' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => true,
'class' => Categoria::class,
'placeholder' => 'competicion.inscritos.category-empty' . $permitirExtranjeros,
'query_builder' => function(EntityRepository $e) use ($idc) {
return $e->createQueryBuilder('a')
->where('a.competicion = :competicion')
->setParameter('competicion', $idc);
}
));
} else {
$builder->add('barra1', ChoiceType::class, array('attr' => ['class' => 'barraSalida barraSalida1 '], //el espacio posterior es necesario
'label' => 'competicion.inscritos.tee' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => false,
'empty_data' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
'placeholder' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
'choices' => $this->utilInscritos->barrasCategorias($idc) //nos traemos los barra-categoria de la competicion
))
->add('barra2', ChoiceType::class, array('attr' => ['class' => 'barraSalida barraSalida2 '], //el espacio posterior es necesario
'label' => 'competicion.inscritos.tee' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => true,
'empty_data' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
'placeholder' => 'competicion.inscritos.tee-empty' . $permitirExtranjeros,
'choices' => $this->utilInscritos->barrasCategorias($idc) //nos traemos los barra-categoria de la competicion
));
}
if (count(($options['attr']['competicion']->getVouchers())) > 0) {
$builder->add('voucher', 'text', array('mapped' => false, 'required' => false, 'attr' => array('class' => 'form-control')));
}
//Se cambia segun tarea NEX-1447-5
//Pablo 21/04/2022: Se elimina la peticion de documentos FLP para FGM
// if (strpos($options['attr']['org'], "CM00") !== false) {
// $builder
// ->add('documentoCovid1', 'file', array('label' => "Adjuntar PDF", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoCovid', 'accept' => "application/pdf")))
// ->add('formCompleto1', 'checkbox', array('label' => "He completado y revisado el formulario", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'formCompleto')))
// ->add('documentoCovid2', 'file', array('label' => "Adjuntar PDF", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'documentoCovid', 'accept' => "application/pdf")))
// ->add('formCompleto2', 'checkbox', array('label' => "He completado y revisado el formulario", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'formCompleto')));
// }
//solo mostramos turno si hay plazas definidas
if (($options['attr']['competicion']->getPlazasManana() > 0) || ($options['attr']['competicion']->getPlazasTarde() > 0)) {
$dispManana = $options['attr']['dispManana']; //las plazas que hay vacantes aun (totales menos las usadas)
$dispTarde = $options['attr']['dispTarde'];
if (($dispManana >= 2) && ($dispTarde >= 2)) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getSmallChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
} elseif (($dispManana >= 2) && ($dispTarde < 1)) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getMananaChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
} elseif (($dispManana < 1) && ($dispTarde >= 2)) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getTardeChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
}
}
// ->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]));
}
// public function getDefaultOptions() {
// return array(
// 'data_class' => 'App\Entity\Backend\Competicion',
// 'id' => null
// );
// }
public function getName() {
return $this->getBlockPrefix();
}
public function getBlockPrefix(): string {
return 'inscripcion_pareja';
}
}