<?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\Categoria;
use App\Entity\Backend\Tarifa;
use App\Util\UtilInscritos;
class InscripcionType 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 circular fluid right floated disabled button ')))
->add('nombre_jugador', TextType::class, array('required' => true, 'mapped' => false, 'label' => 'competicion.inscritos.name' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('required' => true, 'disabled' => 'disabled')))
->add('licencia', TextType::class, array('label' => 'competicion.inscritos.licencia' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'required' => true, 'mapped' => false, 'attr' => array('class' => 'prompt licencia', 'autocomplete' => 'off')))
->add('tarifa_select', EntityType::class, array('attr' => array('disabled' => 'disabled'),
'label' => 'competicion.inscritos.fare' . $permitirExtranjeros,
'translation_domain' => 'FrontendBundle',
'mapped' => false,
'required' => true,
'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('documentoHcp', 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('email', EmailType::class, array('label' => 'competicion.inscritos.email', 'translation_domain' => 'FrontendBundle', 'mapped' => false, 'required' => true, 'attr' => array('class' => 'email', 'data-help' => 'competicion.inscritos.email-help' . $permitirExtranjeros, 'disabled' => 'disabled')))
->add('observaciones', TextareaType::class, array('label' => 'competicion.inscritos.annotation' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'required' => false, 'mapped' => false, 'attr' => array('maxlength' => 100, 'rows' => 6)))
->add('id', HiddenType::class)
->add('categoria', HiddenType::class, array('required' => true, 'mapped' => false))
->add('tarifa', HiddenType::class, array('required' => true, 'mapped' => false))
->add('telefono_jugador', IntegerType::class, array('required' => false, 'mapped' => false, 'label' => 'competicion.inscritos.phone' . $permitirExtranjeros, 'translation_domain' => 'FrontendBundle', 'attr' => array('disabled' => 'disabled', 'data-help' => 'competicion.inscritos.phone-help' . $permitirExtranjeros, "min-length" => 9)))
->add('sgCliente', HiddenType::class, array('mapped' => false))
;
if (!$options['attr']['competicion']->getBarraSalida()) {
$builder
->add('categoria_select', EntityType::class, array('attr' => array('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('barra', ChoiceType::class, array(
'attr' => ['class' => 'barraSalida '],
'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, si tenemos al jugador filtramos ademas por sexo
));
}
//SI ES CM00 O TIENE NEW-FORM EN EL CODIGO SE MUESTRA NUEVO FORM COVID
//Se cambia segun tarea NEX-1447-5
//if ($options['attr']['org'] == "CM00" || ($options['attr']['competicion']->getCodigo() == "NEW-FORM")) {
//Se elimina el COVID de la inscripcion segun NEX-1838
// if (strpos($options['attr']['org'], "00") !== false) {
// $builder->add('covidfilename', HiddenType::class, array('label' => "", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'covidfilename')));
// }
//fin covid
//
// //Segun la nota informativa del 28/03/2022 se comenta esta parte
// if ($options['attr']['org'] == "AM00") {
// $builder->add('certificado', 'hidden', array('label' => "", 'mapped' => false, 'required' => false, 'attr' => array('class' => 'certificado')));
// }
//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 >= 1) && ($dispTarde >= 1)) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getSmallChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
} elseif (($dispManana >= 1) && ($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 >= 1)) {
$builder->add('turno', ChoiceType::class, array('choices' => EnumTurnoHorarioType::getTardeChoices(), 'expanded' => false, 'mapped' => false, 'required' => true, 'attr' => array('class' => 'form-control')));
}
}
if (count(($options['attr']['competicion']->getVouchers())) > 0) {
$builder->add('voucher', TextType::class, array('mapped' => false, 'required' => false, '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\Inscrito',
// 'id' => null
// );
// }
public function getName() {
return $this->getBlockPrefix();
}
public function getBlockPrefix(): string {
return 'inscripcion_jugador';
}
}