<?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\EmailType;
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 Doctrine\Persistence\ManagerRegistry;
use App\Entity\Backend\Tarifa;
use App\Entity\Backend\Categoria;
use App\Util\UtilInscritos;
class InscripcionEquipoType 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' => 'Continuar', 'attr' => array('class' => 'ui blue circular disabled button')))
->add('email', EmailType::class, array('label' => 'E-mail', 'mapped' => false, 'required' => true, 'attr' => array('data-help' => 'Se activa tras añadir licencias correctas.', 'disabled' => 'disabled')))
->add('observaciones', TextareaType::class, array('label' => 'competicion.inscritos.annotation' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'required' => false, 'attr' => array('maxlength' => 100, 'rows' => 7)))
->add("teamname", TextType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.teamname' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
;
if (count(($options['attr']['competicion']->getVouchers())) > 0) {
$builder->add('voucher', TextType::class, array('mapped' => false, 'required' => false, 'attr' => array('class' => 'form-control')));
}
for ($i = 1; $i <= $options["attr"]["jugadores"]; $i++) {
$required = true;
if (!$options["attr"]['competicion']->getEstricto() && ($i == $options["attr"]["competicion"]->getJugadores())) {
$required = false;
}
$builder
->add("nombre_jugador$i", TextType::class, array('required' => $required, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('class' => 'jugador', 'disabled' => 'disabled')))
->add("licencia$i", TextType::class, array('required' => $required, 'mapped' => false, 'attr' => array('placeholder' => "Licencia", 'class' => 'prompt licencia', 'autocomplete' => 'off'), 'label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle'))
->add("tarifa_select$i", EntityType::class, array('attr' => array('class' => "tarifa tarifa$i", 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'required' => $required,
'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("id$i", HiddenType::class, array('mapped' => false))
->add("categoria$i", HiddenType::class, array('mapped' => false))
->add("tarifa$i", HiddenType::class, array('mapped' => false))
->add("telefono_jugador$i", IntegerType::class, array('required' => false, 'mapped' => false, 'label' => 'Teléfono', 'attr' => array('class' => 'tlfnJug', 'data-help' => "Se usará para informarle sobre el campeonato", "min-length" => 9)))
;
if (!$options['attr']['competicion']->getBarraSalida()) {
$builder->add("categoria_select$i", EntityType::class, array('attr' => array('class' => 'categoria', 'disabled' => 'disabled'),
'label' => 'competicion.inscritos.category' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => $required,
'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("barra$i", ChoiceType::class, array('attr' => ['class' => "barraSalida barraSalida$i "], //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
));
}
}
//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 >= $options["attr"]["jugadores"]) && ($dispTarde >= $options["attr"]["jugadores"])) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getSmallChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
} elseif (($dispManana >= $options["attr"]["jugadores"]) && ($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 >= $options["attr"]["jugadores"])) {
$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_equipo';
}
}