<?php
namespace App\Controller;
use App\Crud\Controller\crudPlainController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\ProcesoReclutamientoUnidad;
use App\Entity\ProcesoReclutamientoCentro;
use App\Entity\ProcesoReclutamientoBase;
use App\Entity\ProcesoReclutamientoPregunta;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\TestSistema;
use App\Entity\TestEje;
use App\Entity\TestCriterio;
use App\Entity\TestPregunta;
class ProcesoReclutamientoController extends crudPlainController
{
protected function newParamsForTwig($entity)
{
$params = parent::newParamsForTwig($entity);
/* $procesoActivo = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array(),array('fechaAcuartelamiento'=> 'DESC'));
$preguntas = $this->em->getRepository('App\\Entity\\PreguntaTest')->createQueryBuilder('p')
->innerJoin('p.etapa', 'etapa')
->where('p.activa = true')
->andWhere('etapa.activa = true')
->orderBy('etapa.orden, p.pregunta')
->getQuery()->getResult();
$params['preguntas']=$preguntas;
$elementosUsados = $this->construyeElementosUsados($procesoActivo);
$params = array_merge($params, $elementosUsados);*/
return $params;
}
protected function construyeElementosUsados($proceso)
{
$basesEnProceso = [];
$lugaresEnProceso = [];
$unidadesEnProceso = [];
$elementosUsados = [];
$procesoActivo = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
->createQueryBuilder('p')
->where('p.id <> '.$proceso->getId())
->orderBy('p.fechaAcuartelamiento', 'DESC')
->setMaxResults(1)
->getQuery()->getResult();
$procesoActivo = !empty($procesoActivo) ? $procesoActivo[0] : null;
if ($proceso)
{
$basesUsadas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
->createQueryBuilder('us')
->innerJoin('us.proceso', 'proceso')
->innerJoin('us.base', 'base')
->addSelect('base')
->where('proceso.id = :PROCESO')
->orderBy('us.nombreBase')
->setParameter('PROCESO',$proceso->getId())
->getQuery()->getResult();
if (empty($basesUsadas) && $procesoActivo && $proceso->getId() != $procesoActivo->getId())
{
$params = $this->construyeElementosUsados($procesoActivo);
$params['accionJerarquia'] = 'CREATE';
return $params;
}
foreach ($basesUsadas as $baseUsada)
{
$base = $baseUsada->getBase();
$basesEnProceso[$base->getId()]=true;
$elementosUsados[$base->getId()]['base'] = $baseUsada;
$elementosUsados[$base->getId()]['canDelete'] = true;
$centrosUsados = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('us')
->innerJoin('us.proceso', 'proceso')
->where('proceso.id = :PROCESO')
->innerJoin('us.base', 'base')
->andWhere('base.id = :BASE')
->innerJoin('us.lugar', 'lugar')
->addSelect('base')
->addSelect('lugar')
->setParameter('PROCESO',$proceso->getId())
->setParameter('BASE',$base->getId())
->getQuery()->getResult();
foreach ($centrosUsados as $centroUsado)
{
$centro = $centroUsado->getLugar();
$lugaresEnProceso[$centro->getId()]=true;
$elementosUsados[$base->getId()]['centros'][$centro->getId()]['centro'] = $centroUsado;
$elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] = true;
$unidadesUsadas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->createQueryBuilder('us')
->innerJoin('us.proceso', 'proceso')
->innerJoin('us.unidad', 'unidad')
->innerJoin('us.lugar', 'lugar')
->addSelect('unidad')
->addSelect('lugar')
->where('proceso.id = :PROCESO')
->andWhere('lugar.id = :LUGAR')
->orderBy('us.nombreUnidad')
->setParameter('PROCESO',$proceso->getId())
->setParameter('LUGAR',$centro->getId())
->getQuery()->getResult();
foreach ($unidadesUsadas as $unidadUsada)
{
$unidad = $unidadUsada->getUnidad();
$unidadesEnProceso[$unidad->getId()]=true;
$canDelete = $this->accion=='CREATE' || ($unidadUsada->getRegistradoMasculino()==0) && ($unidadUsada->getRegistradoFemenino()==0);
$elementosUsados[$base->getId()]['centros'][$centro->getId()]['unidades'][$unidad->getId()] = $unidadUsada;
$elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] = $elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] && $canDelete;
$elementosUsados[$base->getId()]['canDelete'] = $elementosUsados[$base->getId()]['canDelete'] && $canDelete;
}
}
}
}
$bases = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->createQueryBuilder('b')
->where('b.activo = true')
->orderBy('b.nombre')
->getQuery()->getResult();
$lugares = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
->where('c.activo = true')
->orderBy('c.nombre')
->getQuery()->getResult();
$unidades = $this->em->getRepository('App\\Entity\\UnidadMilitar')->createQueryBuilder('u')
->where('u.activo = true')
->orderBy('u.nombre')
->getQuery()->getResult();
return [
'elementosUsados'=>$elementosUsados,
'bases'=>$bases,
'lugares'=>$lugares,
'unidades'=>$unidades,
'basesEnProceso'=>$basesEnProceso,
'lugaresEnProceso'=>$lugaresEnProceso,
'unidadesEnProceso'=>$unidadesEnProceso,
'accionJerarquia' => empty($basesUsadas) ? 'CREATE' : 'UPDATE',
];
}
protected function editParamsForTwig($entity)
{
$params = parent::editParamsForTwig($entity);
// $bases = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->findBy(array('activo'=>true), array('nombre'=>'ASC'));
// $params['bases']=$bases;
/* $preguntas = $this->em->getRepository('App\\Entity\\PreguntaTest')->createQueryBuilder('p')
->innerJoin('p.etapa', 'etapa')
->where('p.activa = true')
->andWhere('etapa.activa = true')
->orderBy('etapa.orden, p.pregunta')
->getQuery()->getResult();
$procesoPreguntas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoPregunta')->findBy(array('proceso'=>$entity->getId()));
$preguntasUsadas = array();
foreach ($procesoPreguntas as $procesoPregunta)
{
$preguntasUsadas[$procesoPregunta->getPregunta()->getId()]=true;
}
*/
/* $params['preguntas'] = [];
$sistemas = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id = '.$entity->getId())
->getQuery()->getResult();
foreach ($sistemas as $sistema)
{
$params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
$ejes = $this->em->getRepository('App\\Entity\\TestEje')
->createQueryBuilder('e')
->innerJoin('e.sistema', 'sistema')
->where('sistema.id = '.$sistema->getId())
->getQuery()->getResult();
foreach ($ejes as $eje)
{
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
$criterios = $this->em->getRepository('App\\Entity\\TestCriterio')
->createQueryBuilder('c')
->innerJoin('c.eje', 'eje')
->where('eje.id = '.$eje->getId())
->getQuery()->getResult();
foreach ($criterios as $criterio)
{
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
$preguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
->createQueryBuilder('p')
->innerJoin('p.criterio', 'criterio')
->where('criterio.id = '.$criterio->getId())
->getQuery()->getResult();
foreach ($preguntas as $pregunta)
{
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $pregunta;
}
}
}
}
*/
/*
$procesoPreguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
->createQueryBuilder('p')
->innerJoin('p.criterio', 'criterio')
->innerJoin('criterio.eje', 'eje')
->innerJoin('eje.sistema', 'sistema')
->innerJoin('sistema.proceso', 'proceso')
->addSelect('criterio')
->addSelect('eje')
->addSelect('sistema')
->where('proceso.id = '.$entity->getId())
->getQuery()->getResult();
foreach ($procesoPreguntas as $procesoPregunta)
{
$criterio = $procesoPregunta->getCriterio();
$eje = $criterio->getEje();
$sistema = $eje->getSistema();
$params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $procesoPregunta;
}
*/
// $params['preguntas']=$preguntas;
// $params['preguntas']=$procesoPreguntas;
// $params['procesoPreguntas']=$preguntasUsadas;
/* $elementosUsados = $this->construyeElementosUsados($entity);
$otrosProcesos = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->select('distinct proceso.id, proceso.anno, proceso.llamada')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id <> '.$entity->getId())
->getQuery()->getResult();
$params['otrosProcesos'] = $otrosProcesos;
$params = array_merge($params, $elementosUsados);*/
return $params;
}
protected function showCreateParamsForTwig($entity)
{
$params = parent::showCreateParamsForTwig($entity);
// $params['accion'] = 'UPDATE';
$elementosUsados = $this->construyeElementosUsados($entity);
$otrosProcesos = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->select('distinct proceso.id, proceso.anno, proceso.llamada')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id <> '.$entity->getId())
->getQuery()->getResult();
$params['otrosProcesos'] = $otrosProcesos;
$params = array_merge($params, $elementosUsados);
return $params;
}
public function addBaseAction( $base)
{
$data=array('ok'=>true);
$em = $this->em;
$base = $em->getRepository('App\\Entity\\BaseMovilizacion')
->find($base);
$data['html'] = $this->renderView('ProcesoReclutamiento/tr_baseMovilizacion.html.twig',array('base'=>$base, 'canDelete'=>true));
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function addCentroAction( $base, $centro)
{
$data=array('ok'=>true);
$em = $this ->em;
$centro = $em->getRepository('App\\Entity\\CentroMovilizacion')
->find($centro);
$data['html'] = $this->renderView('ProcesoReclutamiento/tr_centroMovilizacion.html.twig',array('baseId'=>$base, 'centro'=>$centro, 'canDelete'=>true));
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function addUnidadAction( $base, $centro, $unidad)
{
$data=array('ok'=>true);
$em = $this ->em;
$unidad = $em->getRepository('App\\Entity\\UnidadMilitar')
->find($unidad);
$data['html'] = $this->renderView('ProcesoReclutamiento/tr_unidadMilitar.html.twig',array('baseId'=>$base, 'centroId'=>$centro, 'unidad'=>$unidad));
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
protected function afterSave($entity)
{
parent::afterSave($entity);
if ($entity->getActivo())
{
//quitar el activo a los demás
$this->em->createQuery("update App:ProcesoReclutamiento p set p.activo = false where p.id <> :ID")->
setParameter("ID",$entity->getId())->execute();
}
/*
$unidadesEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$unidadesEnUso[$item->getLugar()->getId().'-'.$item->getUnidad()->getId()] = $item;
}
$lugaresEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$lugaresEnUso[$item->getBase()->getId().'-'.$item->getLugar()->getId()] = $item;
}
$basesEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$basesEnUso[$item->getBase()->getId()] = $item;
}
$form = $this->request->get('tree_form');
foreach ($form as $base=>$lugares)
{
$base = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->find($base);
foreach ($lugares as $lugar=>$unidades)
{
$lugarCupos = [];
$lugar = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->find($lugar);
foreach ($unidades as $unidad=>$data)
{
$unidad = $this->em->getRepository('App\\Entity\\UnidadMilitar')->find($unidad);
$unidad->setCupoMasculino($data['unidadcupomasculino']);
$unidad->setAdicionalMasculino($data['unidadadicionalmasculino']);
$unidad->setCupoFemenino($data['unidadcupofemenino']);
$unidad->setAdicionalFemenino($data['unidadadicionalfemenino']);
$cupoMasculino = $unidad->getCupoMasculino()+floor($unidad->getCupoMasculino()*$unidad->getAdicionalMasculino()/100);
$cupoFemenino = $unidad->getCupoFemenino()+floor($unidad->getCupoFemenino()*$unidad->getAdicionalFemenino()/100);
if (isset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]))
{
$procesoUnidad = $unidadesEnUso[$lugar->getId().'-'.$unidad->getId()];
unset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]);
}
else
{
$procesoUnidad = new ProcesoReclutamientoUnidad();
$procesoUnidad->setProceso($entity);
$procesoUnidad->setUnidad($unidad);
$procesoUnidad->setLugar($lugar);
$procesoUnidad->setNombreUnidad($unidad->getNombre());
$procesoUnidad->setRegistradoFemenino(0);
$procesoUnidad->setRegistradoMasculino(0);
}
$procesoUnidad->setPrioridad($data['unidadprioridad']);
$procesoUnidad->setCupoMasculino($cupoMasculino);
$procesoUnidad->setCupoFemenino($cupoFemenino);
$procesoUnidad->setFuerza($unidad->getFuerza());
$procesoUnidad->setOrganicoMasculino($unidad->getCupoMasculino());
$procesoUnidad->setOrganicoFemenino($unidad->getCupoFemenino());
$this->em->persist($unidad);
$this->em->persist($procesoUnidad);
$this->em->flush();
if (!isset($lugarCupos[$lugar->getId()]))
{
$lugarCupos[$lugar->getId()]['masc']=0;
$lugarCupos[$lugar->getId()]['fem']=0;
$lugarCupos[$lugar->getId()]['org_masc']=0;
$lugarCupos[$lugar->getId()]['org_fem']=0;
}
$lugarCupos[$lugar->getId()]['masc']+=$cupoMasculino;
$lugarCupos[$lugar->getId()]['fem']+=$cupoFemenino;
$lugarCupos[$lugar->getId()]['org_masc']+=$unidad->getCupoMasculino();
$lugarCupos[$lugar->getId()]['org_fem']+=$unidad->getCupoFemenino();
}
if (isset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]))
{
$procesoLugar = $lugaresEnUso[$base->getId().'-'.$lugar->getId()];
unset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]);
}
else
{
$procesoLugar = new ProcesoReclutamientoCentro();
$procesoLugar->setProceso($entity);
$procesoLugar->setBase($base);
$procesoLugar->setLugar($lugar);
$procesoLugar->setNombreLugar($lugar->getNombre());
$procesoLugar->setTurno(0);
$procesoLugar->setRegistradoFemenino(0);
$procesoLugar->setRegistradoMasculino(0);
}
$procesoLugar->setApellidos($lugar->getJefe() ? $lugar->getJefe()->getApellidos() : '');
$procesoLugar->setNombres($lugar->getJefe() ? $lugar->getJefe()->getNombres() : '');
$procesoLugar->setCargo($lugar->getJefe() ? $lugar->getJefe()->getCargoTxt() : '');
$procesoLugar->setGrado($lugar->getJefe() ? $lugar->getJefe()->getGradoTxt() : '');
$procesoLugar->setIdentificacion($lugar->getJefe() ? $lugar->getJefe()->getIdentificacion() : '');
$procesoLugar->setCupoMasculino($lugarCupos[$lugar->getId()]['masc']);
$procesoLugar->setCupoFemenino($lugarCupos[$lugar->getId()]['fem']);
$procesoLugar->setOrganicoMasculino($lugarCupos[$lugar->getId()]['org_masc']);
$procesoLugar->setOrganicoFemenino($lugarCupos[$lugar->getId()]['org_fem']);
$this->em->persist($procesoLugar);
}
if (isset($basesEnUso[$base->getId()]))
{
$procesoBase = $basesEnUso[$base->getId()];
unset($basesEnUso[$base->getId()]);
}
else
{
$procesoBase = new ProcesoReclutamientoBase();
$procesoBase->setProceso($entity);
$procesoBase->setBase($base);
$procesoBase->setNombreBase($base->getNombre());
}
$procesoBase->setApellidos($base->getJefe() ? $base->getJefe()->getApellidos() : '');
$procesoBase->setNombres($base->getJefe() ? $base->getJefe()->getNombres() : '');
$procesoBase->setCargo($base->getJefe() ? $base->getJefe()->getCargoTxt() : '');
$procesoBase->setGrado($base->getJefe() ? $base->getJefe()->getGradoTxt() : '');
$procesoBase->setIdentificacion($base->getJefe() ? $base->getJefe()->getIdentificacion() : '');
$this->em->persist($procesoBase);
}
foreach ($unidadesEnUso as $item)
{
$this->em->remove($item);
}
foreach ($lugaresEnUso as $item)
{
$this->em->remove($item);
}
foreach ($basesEnUso as $item)
{
$this->em->remove($item);
}
$this->em->flush();
// ProcesosPreguntas //
$data = $this->request->get('form');
$borrarProcesoPreguntas = array();
$procesoPreguntas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoPregunta')->findBy(array('proceso'=>$entity->getId()));
foreach ($procesoPreguntas as $procesoPregunta)
{
$borrarProcesoPreguntas[$procesoPregunta->getPregunta()->getId()]=$procesoPregunta;
}
if (isset($data['pregunta']))
{
foreach ($data['pregunta'] as $pregunta=>$valor)
{
$pregunta = $this->em->getRepository('App\\Entity\\PreguntaTest')->find($pregunta);
if (isset($borrarProcesoPreguntas[$pregunta->getId()]))
{
unset($borrarProcesoPreguntas[$pregunta->getId()]);
}
else
{
$procesoPregunta = new ProcesoReclutamientoPregunta();
$procesoPregunta->setProceso($entity);
$procesoPregunta->setPregunta($pregunta);
}
$this->em->persist($procesoPregunta);
}
}
foreach ($borrarProcesoPreguntas as $procesoPregunta)
{
$this->em->remove($procesoPregunta);
}
*/
$this->em->flush();
}
public function saveEstructuraCentrosAction()
{
$form = $this->request->get('tree_form');
$procesoId = $form['id'];
$this->routeClassName = $form['routeClassName'];
$this->rol = $form['rol'];
unset($form['id']);
// unset($form['baseJefe']);
// unset($form['centroJefe']);
unset($form['routeClassName']);
unset($form['rol']);
$entity = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($procesoId);
$unidadesEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$unidadesEnUso[$item->getLugar()->getId().'-'.$item->getUnidad()->getId()] = $item;
}
$lugaresEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$lugaresEnUso[$item->getBase()->getId().'-'.$item->getLugar()->getId()] = $item;
}
$basesEnUso = [];
$enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
->findBy(['proceso'=>$entity->getId()]);
foreach ($enUso as $item)
{
$basesEnUso[$item->getBase()->getId()] = $item;
}
foreach ($form as $base=>$lugares)
{
$base = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->find($base);
foreach ($lugares as $lugar=>$unidades)
{
$lugarCupos = [];
$lugar = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->find($lugar);
foreach ($unidades as $unidad=>$data)
{
$unidad = $this->em->getRepository('App\\Entity\\UnidadMilitar')->find($unidad);
$unidad->setCupoMasculino($data['unidadcupomasculino']);
$unidad->setAdicionalMasculino($data['unidadadicionalmasculino']);
$unidad->setCupoFemenino($data['unidadcupofemenino']);
$unidad->setAdicionalFemenino($data['unidadadicionalfemenino']);
$cupoMasculino = $unidad->getCupoMasculino()+floor($unidad->getCupoMasculino()*$unidad->getAdicionalMasculino()/100);
$cupoFemenino = $unidad->getCupoFemenino()+floor($unidad->getCupoFemenino()*$unidad->getAdicionalFemenino()/100);
if (isset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]))
{
$procesoUnidad = $unidadesEnUso[$lugar->getId().'-'.$unidad->getId()];
unset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]);
}
else
{
$procesoUnidad = new ProcesoReclutamientoUnidad();
$procesoUnidad->setProceso($entity);
$procesoUnidad->setUnidad($unidad);
$procesoUnidad->setLugar($lugar);
$procesoUnidad->setNombreUnidad($unidad->getNombre());
$procesoUnidad->setRegistradoFemenino(0);
$procesoUnidad->setRegistradoMasculino(0);
}
$procesoUnidad->setPrioridad($data['unidadprioridad']);
$procesoUnidad->setCupoMasculino($cupoMasculino);
$procesoUnidad->setCupoFemenino($cupoFemenino);
$procesoUnidad->setFuerza($unidad->getFuerza());
$procesoUnidad->setOrganicoMasculino($unidad->getCupoMasculino());
$procesoUnidad->setOrganicoFemenino($unidad->getCupoFemenino());
$this->em->persist($unidad);
$this->em->persist($procesoUnidad);
$this->em->flush();
if (!isset($lugarCupos[$lugar->getId()]))
{
$lugarCupos[$lugar->getId()]['masc']=0;
$lugarCupos[$lugar->getId()]['fem']=0;
$lugarCupos[$lugar->getId()]['org_masc']=0;
$lugarCupos[$lugar->getId()]['org_fem']=0;
}
$lugarCupos[$lugar->getId()]['masc']+=$cupoMasculino;
$lugarCupos[$lugar->getId()]['fem']+=$cupoFemenino;
$lugarCupos[$lugar->getId()]['org_masc']+=$unidad->getCupoMasculino();
$lugarCupos[$lugar->getId()]['org_fem']+=$unidad->getCupoFemenino();
}
if (isset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]))
{
$procesoLugar = $lugaresEnUso[$base->getId().'-'.$lugar->getId()];
unset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]);
}
else
{
$procesoLugar = new ProcesoReclutamientoCentro();
$procesoLugar->setProceso($entity);
$procesoLugar->setBase($base);
$procesoLugar->setLugar($lugar);
$procesoLugar->setNombreLugar($lugar->getNombre());
$procesoLugar->setTurno(0);
$procesoLugar->setRegistradoFemenino(0);
$procesoLugar->setRegistradoMasculino(0);
}
$procesoLugar->setApellidos($lugar->getJefe() ? $lugar->getJefe()->getApellidos() : '');
$procesoLugar->setNombres($lugar->getJefe() ? $lugar->getJefe()->getNombres() : '');
$procesoLugar->setCargo($lugar->getJefe() ? $lugar->getJefe()->getCargoTxt() : '');
$procesoLugar->setGrado($lugar->getJefe() ? $lugar->getJefe()->getGradoTxt() : '');
$procesoLugar->setIdentificacion($lugar->getJefe() ? $lugar->getJefe()->getIdentificacion() : '');
$procesoLugar->setCupoMasculino($lugarCupos[$lugar->getId()]['masc']);
$procesoLugar->setCupoFemenino($lugarCupos[$lugar->getId()]['fem']);
$procesoLugar->setOrganicoMasculino($lugarCupos[$lugar->getId()]['org_masc']);
$procesoLugar->setOrganicoFemenino($lugarCupos[$lugar->getId()]['org_fem']);
$this->em->persist($procesoLugar);
}
if (isset($basesEnUso[$base->getId()]))
{
$procesoBase = $basesEnUso[$base->getId()];
unset($basesEnUso[$base->getId()]);
}
else
{
$procesoBase = new ProcesoReclutamientoBase();
$procesoBase->setProceso($entity);
$procesoBase->setBase($base);
$procesoBase->setNombreBase($base->getNombre());
}
$procesoBase->setApellidos($base->getJefe() ? $base->getJefe()->getApellidos() : '');
$procesoBase->setNombres($base->getJefe() ? $base->getJefe()->getNombres() : '');
$procesoBase->setCargo($base->getJefe() ? $base->getJefe()->getCargoTxt() : '');
$procesoBase->setGrado($base->getJefe() ? $base->getJefe()->getGradoTxt() : '');
$procesoBase->setIdentificacion($base->getJefe() ? $base->getJefe()->getIdentificacion() : '');
$this->em->persist($procesoBase);
}
foreach ($unidadesEnUso as $item)
{
$this->em->remove($item);
}
foreach ($lugaresEnUso as $item)
{
$this->em->remove($item);
}
foreach ($basesEnUso as $item)
{
$this->em->remove($item);
}
$this->em->flush();
return $this->redirect($this->generateUrl('crud_index', ['routeClassName'=>$this->routeClassName, 'rol'=>$this->rol]));
}
protected function indexLoadEntities($params)
{
if ($this->routeClassName=='reporteresultados')
{
/* if (!isset($this->filterData['proceso'])) {
$this->filterData['proceso'] = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId();
}*/
if (isset($this->filterData['unidad']))
{
return $this->getItemsPorUnidad();
}
if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
{
// habilitar luego
/* if (!isset($this->filterData['centro']))
{
$centros = $this->getUser()->getCentroInstruccion()->getCentrosMovilizacion();
$f = array();
foreach ($centros as $centro)
$f[]=$centro->getId();
$this->filterData['centro'] = $f;
} */
}
if (isset($this->filterData['centro']))
{
return $this->getItemsPorCentro();
}
if (isset($this->filterData['base']))
{
return $this->getItemsPorBase();
}
return $this->getItemsPais();
}
else
return parent::indexLoadEntities($params);
}
protected function indexParamsForTwig()
{
$params = parent::indexParamsForTwig();
if ($this->routeClassName=='reporteresultados')
{
if (isset($this->filterData['unidad']))
{
$params['totalesLugar'] = $this->getTotalPorUnidad();
}
elseif (isset($this->filterData['centro']))
{
$params['totalesLugar'] = $this->getTotalPorCentro();
}
elseif (isset($this->filterData['base']))
{
$params['totalesLugar'] = $this->getTotalPorBase();
}
else
{
$params['totalesLugar'] = $this->getTotalPais();
}
$params['totales'] = $this->getTotalesNacionalesProceso();
}
return $params;
}
protected function getItemsPorUnidad()
{
$query =
"SELECT
prul.proceso,
prul.unidad AS lugarId,
prul.nombre_unidad AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
WHERE
prul.proceso = ".$this->filterData['proceso']." AND
prul.unidad= ".$this->filterData['unidad']."
GROUP BY
prul.proceso,
prul.unidad,
prul.nombre_unidad
ORDER BY
prul.nombre_unidad;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
return $datos;
}
protected function getItemsPorCentro()
{
if (is_array($this->filterData['centro']))
$whereCentro = "prul.lugar in (".implode(',',$this->filterData['centro']) .")";
else
$whereCentro = "prul.lugar = ".$this->filterData['centro'];
$query =
"SELECT
prul.proceso,
prul.nombre_unidad AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
WHERE
prul.proceso = ".$this->filterData['proceso']." AND ".
$whereCentro."
GROUP BY
prul.proceso,
prul.unidad,
prul.nombre_unidad
ORDER BY
prul.nombre_unidad;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
return $datos;
}
protected function getItemsPorBase()
{
$query =
"SELECT
prul.proceso,
prul.lugar AS lugarId,
prlb.nombre_lugar AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
INNER JOIN
proceso_reclutamiento_lugar_base prlb ON prul.lugar = prlb.lugar and prul.proceso = prlb.proceso
WHERE
prul.proceso = ".$this->filterData['proceso']." AND
prlb.base = ".$this->filterData['base']."
GROUP BY
prul.proceso,
prul.lugar,
prlb.nombre_lugar
ORDER BY
prlb.nombre_lugar;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
return $datos;
}
protected function getItemsPais()
{
$query =
"SELECT
prul.proceso,
prb.base AS lugarId,
prb.nombre_base AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
INNER JOIN
proceso_reclutamiento_lugar_base prlb on prlb.lugar = prul.lugar and prul.proceso = prlb.proceso
INNER JOIN
proceso_reclutamiento_bases prb on prlb.base=prb.base and prul.proceso = prb.proceso
WHERE
prul.proceso = ".$this->filterData['proceso']."
GROUP BY
prul.proceso,
prb.base,
prb.nombre_base
ORDER BY
prb.nombre_base;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
return $datos;
}
protected function getTotalPorUnidad()
{
$totalSQL =
"SELECT
prul.proceso,
prul.nombre_unidad as lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
WHERE
prul.proceso = ".$this->filterData['proceso']."
GROUP BY
prul.proceso,
prul.nombre_unidad;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($totalSQL);
$totalesLugar = $statement->executeQuery()->fetchAllAssociative();
if ($totalesLugar)
{
$totalesLugar = $totalesLugar [0];
}
return $totalesLugar;
}
protected function getTotalPorCentro()
{
if (is_array($this->filterData['centro']))
$whereCentro = "prul.lugar in (".implode(',',$this->filterData['centro']) .")";
else
$whereCentro = "prul.lugar = ".$this->filterData['centro'];
$totalSQL =
"SELECT
prul.proceso,
prlb.nombre_lugar AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
INNER JOIN
proceso_reclutamiento_lugar_base prlb on prlb.lugar=prul.lugar and prul.proceso = prlb.proceso
WHERE
prul.proceso = ".$this->filterData['proceso']." AND ".$whereCentro."
GROUP BY
prul.proceso,
prlb.nombre_lugar
ORDER BY
prul.proceso,
prlb.nombre_lugar;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($totalSQL);
$totalesLugar = $statement->executeQuery()->fetchAllAssociative();
if ($totalesLugar)
$totalesLugar = $totalesLugar [0];
return $totalesLugar;
}
protected function getTotalPorBase()
{
$totalSQL =
"SELECT
prul.proceso,
prb.nombre_base AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
INNER JOIN
proceso_reclutamiento_lugar_base prlb on prlb.lugar=prul.lugar and prul.proceso = prlb.proceso
INNER JOIN
proceso_reclutamiento_bases prb on prb.base=prlb.base and prul.proceso = prb.proceso
WHERE
prul.proceso = ".$this->filterData['proceso']." AND
prlb.base = ".$this->filterData['base']."
GROUP BY
prul.proceso,
prb.nombre_base
ORDER BY
prul.proceso,
prb.nombre_base;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($totalSQL);
$totalesLugar = $statement->executeQuery()->fetchAllAssociative();
if ($totalesLugar)
$totalesLugar = $totalesLugar [0];
return $totalesLugar;
}
protected function getTotalPais()
{
$totalSQL =
"SELECT
pr.anno::text || ' - ' || pr.llamada AS lugar,
sum(prul.organico_masculino) AS organicoMasculino,
sum(prul.organico_femenino) AS organicoFemenino,
sum(prul.cupo_masculino) AS cupoMasculino,
sum(prul.cupo_femenino) AS cupoFemenino,
sum(prul.registrado_masculino) AS asignadosMasculinos,
sum(prul.registrado_femenino) AS asignadosFemeninos
FROM
proceso_reclutamiento pr
INNER JOIN
proceso_reclutamiento_unidad_lugar prul ON prul.proceso = pr.id
WHERE
prul.proceso = ".$this->filterData['proceso']."
GROUP BY
prul.proceso,
pr.anno::text || ' - ' || pr.llamada
ORDER BY
prul.proceso,
pr.anno::text || ' - ' || pr.llamada;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($totalSQL);
$totalesLugar = $statement->executeQuery()->fetchAllAssociative();
if ($totalesLugar)
$totalesLugar = $totalesLugar [0];
return $totalesLugar;
}
public function showResultadoProcesoAction($tipoLugar, $lugar, $proceso)
{
$routeClassName = 'reporteresultados';
$this->filterData=array('proceso'=>$proceso, $tipoLugar=>$lugar);
$this->session->set($routeClassName,$this->filterData);
return $this->redirect($this->generateUrl('crud_index', array('routeClassName'=>$routeClassName)));
}
protected function getTotalesNacionalesProceso()
{
$conn = $this->em->getConnection();
$totalSQL =
"SELECT
prul.proceso,
sum(COALESCE(prul.organico_masculino, 0)) AS organicoMasculino,
sum(COALESCE(prul.organico_femenino, 0)) AS organicoFemenino,
sum(COALESCE(prul.cupo_masculino, 0)) AS cupoMasculino,
sum(COALESCE(prul.cupo_femenino, 0)) AS cupoFemenino,
sum(COALESCE(prul.registrado_masculino, 0)) AS asignadosMasculinos,
sum(COALESCE(prul.registrado_femenino, 0)) AS asignadosFemeninos
FROM
proceso_reclutamiento_unidad_lugar prul
WHERE
proceso = ".$this->filterData['proceso']."
GROUP BY
proceso";
$statement = $conn->prepare($totalSQL);
$totales = $statement->executeQuery()->fetchAllAssociative();
if (count($totales))
$totales = $totales[0];
else{
$totales=array();
$totales['cupomasculino'] = 0;
$totales['cupofemenino'] = 0;
$totales['asignadosmasculinos'] = 0;
$totales['asignadosfemeninos'] = 0;
}
return $totales;
}
public function getProcesos()
{
$em = $this ->em;
$conn = $em->getConnection();
$query = "SELECT proceso_reclutamiento.id,
proceso_reclutamiento.anno::text || ' - ' || proceso_reclutamiento.llamada AS nombre
FROM proceso_reclutamiento;";
$statement = $conn->prepare($query);
$res = $statement->executeQuery()->fetchAllAssociative();
return $res;
}
/*
public function getBasesMovilizacion()
{
$em = $this ->em;
$conn = $em->getConnection();
$query = "SELECT base_movilizacion.id,
base_movilizacion.nombre
FROM base_movilizacion;";
$statement = $conn->prepare($query);
$statement->execute();
$res = $statement->fetchAll();
return $res;
}
public function getCentrosMovilizacion()
{
$em = $this ->em;
$conn = $em->getConnection();
$query = "SELECT centro_movilizacion.id,
centro_movilizacion.nombre
FROM centro_movilizacion;";
$statement = $conn->prepare($query);
$statement->execute();
$res = $statement->fetchAll();
return $res;
}
public function getUnidadesMilitares()
{
$em = $this ->em;
$conn = $em->getConnection();
$query = "SELECT unidad_militar.id,
unidad_militar.nombre
FROM unidad_militar;";
$statement = $conn->prepare($query);
$statement->execute();
$res = $statement->fetchAll();
return $res;
}
*/
public function avanceNacionalAction($proceso)
{
if (isset($proceso) && $proceso > 0) {
$this->filterData['proceso'] = $proceso;
}
else {
$this->filterData['proceso'] = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId();
}
$totales = $this->getTotalesNacionalesProceso();
$avances = array('total' => 0 , 'masculino' => 0, 'femenino' => 0);
if ($totales)
{
if ($totales['cupomasculino'] > 0)
$avances['masculino'] = round($totales['asignadosmasculinos']*100/$totales['cupomasculino'],2);
if ($totales['cupofemenino'] > 0)
$avances['femenino'] = round($totales['asignadosfemeninos']*100/$totales['cupofemenino'],2);
if ($totales['cupomasculino']> 0 || $totales['cupofemenino']>0)
$avances['total'] = round(($totales['asignadosmasculinos'] + $totales['asignadosfemeninos'])*100/($totales['cupomasculino'] + $totales['cupofemenino']),2);
}
return $this->render('ReportesMapas/avances_porcientos.html.twig', array('avances'=>$avances));
}
protected function getFormFilter()
{
$repo = $this->em->getRepository('App\\Entity\\ReclutaProceso');
$user = $this->getUser();
if ($this->routeClassName=='reporteresultados')
{
$formulario = array();
$formulario['proceso'] = array(
'nombre' => 'proceso',
'tipo' => EntityType::class,
'type' => 'association',
'atributos'=> array(
'label' => $this->translator->trans(
$this->translatorBase.'.fields.proceso', array(), 'crud'),
'class' => 'App\\Entity\\ProcesoReclutamiento',
'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
'empty_data' => null,
'mapped'=>false,
'required'=> false,
'attr' => array(
'class'=>'chosen-select',
'style'=>'width: 100%',
'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
)
)
);
$formulario['base'] = array(
'nombre' => 'base',
'tipo' => EntityType::class,
'type' => 'association',
'atributos'=> array(
'label' => $this->translator->trans(
$this->translatorBase.'.fields.base', array(), 'crud'),
'class' => 'App\\Entity\\BaseMovilizacion',
'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
'empty_data' => null,
'mapped'=>false,
'required'=> false,
'attr' => array(
'class'=>'chosen-select',
'style'=>'width: 100%',
'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
)
)
);
$formulario['centro'] = array(
'nombre' => 'centro',
'tipo' => EntityType::class,
'type' => 'association',
'atributos'=> array(
'label' => $this->translator->trans(
$this->translatorBase.'.fields.centro', array(), 'crud'),
'class' => 'App\\Entity\\CentroMovilizacion',
'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
'empty_data' => null,
'mapped'=>false,
'required'=> false,
'attr' => array(
'class'=>'chosen-select',
'style'=>'width: 100%',
'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
)
)
);
$formulario['unidad'] = array(
'nombre' => 'unidad',
'tipo' => EntityType::class,
'type' => 'association',
'atributos'=> array(
'label' => $this->translator->trans(
$this->translatorBase.'.fields.unidad', array(), 'crud'),
'class' => 'App\\Entity\\UnidadMilitar',
'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
'empty_data' => null,
'mapped'=>false,
'required'=> false,
'attr' => array(
'class'=>'chosen-select',
'style'=>'width: 100%',
'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
)
)
);
$formulario['base']['atributos']['query_builder'] = $repo->queryBasesPorProceso($user);
$formulario['centro']['atributos']['query_builder'] = $repo->queryCentrosPorBase($user);
$formulario['unidad']['atributos']['query_builder'] = $repo->queryUnidadesPorCentro($user);
if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
{
$formulario['base']['atributos']['disabled'] = true;
}
if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
$this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
{
$formulario['base']['atributos']['disabled'] = true;
$formulario['centro']['atributos']['disabled'] = true;
}
if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD') === true)
{
$formulario['base']['atributos']['disabled'] = true;
$formulario['centro']['atributos']['disabled'] = true;
$formulario['unidad']['atributos']['disabled'] = true;
}
/* if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') === true)
{
unset($formulario['base']);
$queryBuilder = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
$formulario['centro']['atributos']['query_builder'] = $queryBuilder;
$queryBuilder = $this->em->getRepository('App\\Entity\\UnidadMilitar')
->createQueryBuilder('unidad')
->innerJoin('unidad.centroInstruccion','instr')
->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId())
->orderBy('unidad.nombre');
$formulario['unidad']['atributos']['query_builder'] = $queryBuilder;
}
*/
return $formulario;
}
else
{
$formulario = parent::getFormFilter();
unset($formulario['horaInicioAcuartelamiento']);
unset($formulario['horaFinAcuartelamiento']);
return $formulario;
}
}
protected function getFormulario($entity)
{
$formulario = parent::getFormulario($entity);
//unset($formulario['cursos']);
/* $aformulario = array();
$aformulario['activo'] = $formulario['activo'];
return $aformulario;*/
/* $formulario['edadMinima']['tipo']='Symfony\Component\Form\Extension\Core\Type\TextType';
$formulario['edadMinima']['type']='string';
$formulario['edadMinima']['atributos']['data']='18 años';
$formulario['edadMinima']['atributos']['disabled']=true;
$formulario['edadMinima']['atributos']['mapped']=false;
$formulario['edadMinima']['atributos']['required']=false;
unset($formulario['edadMinima']['atributos']['attr']['class']);
$formulario['edadMaxima']['tipo']='Symfony\Component\Form\Extension\Core\Type\TextType';
$formulario['edadMaxima']['type']='string';
$formulario['edadMaxima']['atributos']['data']='21 años, 11 meses y 29 dÃas';
$formulario['edadMaxima']['atributos']['disabled']=true;
$formulario['edadMaxima']['atributos']['mapped']=false;
$formulario['edadMaxima']['atributos']['required']=false;
unset($formulario['edadMaxima']['atributos']['attr']['class']);*/
/* $formulario['psicologo']['atributos']['attr']['containerclass']='full-row';
$formulario['medico']['atributos']['attr']['containerclass']='full-row';
$formulario['odontologo']['atributos']['attr']['containerclass']='full-row';
$formulario['laboratorista']['atributos']['attr']['containerclass']='full-row';
*/
$formulario['llamada']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
$formulario['llamada']['atributos']['choices']=array('Primera'=>'PRIMERA',
'Segunda'=>'SEGUNDA',
'Tercera'=>'TERCERA',
);
$formulario['llamada']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
$formulario['llamada']['atributos']['empty_data'] = null;
$formulario['anno']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
$formulario['anno']['atributos']['choices']=array();
$year = new \DateTime();
$year = $year->format('Y');
for ($c=65; $c>=0; $c--)
{
$formulario['anno']['atributos']['choices'][$year-$c]=$year-$c;
}
$formulario['anno']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
$formulario['anno']['atributos']['empty_data'] = null;
unset($formulario['anno']['atributos']['attr']['class']);
return $formulario;
}
protected function indexGetFields() {
if ($this->routeClassName=='reporteresultados')
{
$fields = array('Lugar', 'OrgH', 'OrgM', 'AcuH', 'AcuM', 'FaltaH', 'FaltaM', '%H', '%M', 'Excesos');
}
else
{
$fields = parent::indexGetFields();
}
return $fields;
}
protected function setFiltros()
{
if (!isset($this->filterData['proceso']))
{
$procesoActivo = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
->findOneBy(array('activo'=>true));
if ($procesoActivo)
{
$this->filterData['proceso']=$procesoActivo->getId();
}
}
if ($this->routeClassName=='reporteresultados')
{
if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD') === true)
{
$this->filterData['unidad']= $this->getUser()->getUnidadMilitar()->getId();
}
if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
{
$this->filterData['base']= $this->getUser()->getBaseMovilizacion()->getId();
}
if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
$this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
{
$this->filterData['centro']= $this->getUser()->getCentroMovilizacion()->getId();
$base = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->findOneBy(array('proceso'=>$this->filterData['proceso'], 'lugar'=>$this->filterData['centro']));
$this->filterData['base']= $base->getId();
}
if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') === true)
{
if(!isset($this->filterData['centro']))
{
$centros = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId())
->getQuery()->getResult();
$this->filterData['centro']=$centros[0]->getId();
$base = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->findOneBy(array('proceso'=>$this->filterData['proceso'], 'lugar'=>$this->filterData['centro']));
$this->filterData['base']= $base->getId();
}
}
}
}
public function deleteTestElementAction($tipo, $id)
{
$bdId = substr($id, 2);
$this->logger->error('WWWWWW bdId '.$bdId);
$this->logger->error('WWWWWW tipo '.$tipo);
$result = [
'ok' => $this->deleteTestElementNode($tipo, $bdId),
'id' => $id,
];
$data = new Response(json_encode($result));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
protected function deleteTestElementNode($tipo, $id)
{
$this->logger->error('WWWWWW deleteTestElementNode bdId '.$id);
$this->logger->error('WWWWWW deleteTestElementNode tipo '.$tipo);
$childNames = [
'sistema' => 'eje',
'eje' => 'criterio',
'criterio' => 'pregunta',
'pregunta' => 'NONE',
];
try {
if ($childNames[$tipo] != 'NONE')
{
$this->logger->error('WWWWWW not null');
$childEntityName = 'Test'. ucfirst($childNames[$tipo]);
$this->logger->error('WWWWWW $childEntityName '.$childEntityName);
$hijos = $this->em->getRepository('App\\Entity\\'.$childEntityName)->findBy([$tipo=>$id]);
$this->logger->error('WWWWWW $hijos '.count($hijos));
foreach ($hijos as $hijo)
{
if (!$this->deleteTestElementNode($childNames[$tipo], $hijo->getId()))
{
return false;
}
}
}
return $this->deleteTestElementLeaf($tipo, $id);
}
catch (\Exception $exc)
{
return false;
}
return true;
}
protected function deleteTestElementLeaf($tipo, $id)
{
$this->logger->error('WWWWWW deleteTestElementLeaf bdId '.$id);
$this->logger->error('WWWWWW deleteTestElementLeaf tipo '.$tipo);
$tipo = ucwords($tipo);
$element = $this->em->getRepository('App\\Entity\\Test'.$tipo)->find($id);
if ($element)
{
try {
$this->em->remove($element);
$this->em->flush();
}
catch(\Exception $exc)
{
return false;
}
}
return true;
}
public function saveTestElementAction()
{
$result = $this->saveTestElement();
$data = new Response(json_encode($result));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function saveTestElement()
{
try {
$data = $this->request->get('test');
$id = str_replace('N-', '', $data['id']);
$result = [
'ok' => false,
'id' => $data['id'],
];
$newElement = $id != $data['id'];
$result['newElement'] = $newElement;
$entity = substr($id, 0, 2);
$result['entity'] = $entity;
switch ($entity)
{
case 'S-':
if ($newElement)
{
$element = new TestSistema();
$proceso = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($data['proceso']);
$element->setProceso($proceso);
}
else
{
$id = str_replace('S-', '', $id);
$element = $this->em->getRepository('App\\Entity\\TestSistema')->find($id);
}
if (!$element)
{
return $result;
}
$element->setNombre($data['nombre']);
break;
case 'E-':
if ($newElement)
{
$parentId = str_replace('S-', '', $data['parentId']);
$parent = $this->em->getRepository('App\\Entity\\TestSistema')->find($parentId);
if (!$parent)
{
return $result;
}
$element = new TestEje();
$element->setSistema($parent);
}
else
{
$id = str_replace('E-', '', $id);
$element = $this->em->getRepository('App\\Entity\\TestEje')->find($id);
}
if (!$element)
{
return $result;
}
$element->setNombre($data['nombre']);
break;
case 'C-':
if ($newElement)
{
$parentId = str_replace('E-', '', $data['parentId']);
$parent = $this->em->getRepository('App\\Entity\\TestEje')->find($parentId);
if (!$parent)
{
return $result;
}
$element = new TestCriterio();
$element->setEje($parent);
}
else
{
$id = str_replace('C-', '', $id);
$element = $this->em->getRepository('App\\Entity\\TestCriterio')->find($id);
}
if (!$element)
{
return $result;
}
$element->setNombre($data['nombre']);
$element->setRiesgoBajoDesde($data['riesgoBajoDesde']);
$element->setRiesgoBajoHasta($data['riesgoBajoHasta']);
$element->setRiesgoMedioDesde($data['riesgoMedioDesde']);
$element->setRiesgoMedioHasta($data['riesgoMedioHasta']);
$element->setRiesgoAltoDesde($data['riesgoAltoDesde']);
$element->setRiesgoAltoHasta($data['riesgoAltoHasta']);
break;
case 'P-':
if ($newElement)
{
$parentId = str_replace('C-', '', $data['parentId']);
$parent = $this->em->getRepository('App\\Entity\\TestCriterio')->find($parentId);
if (!$parent)
{
return $result;
}
$element = new TestPregunta();
$element->setCriterio($parent);
}
else
{
$id = str_replace('P-', '', $id);
$element = $this->em->getRepository('App\\Entity\\TestPregunta')->find($id);
}
if (!$element)
{
return $result;
}
$element->setNombre($data['nombre']);
$element->setTipo($data['tipo']);
break;
default:
return $result;
break;
}
$this->em->persist($element);
$this->em->flush();
$result['ok'] = true;
$result['newId'] = $entity.$element->getId();
}
catch (\Exception $ecx) {
return $result;
}
return $result;
}
public function getTestElementsAction($proceso, $editable)
{
$params = [
'preguntas' => [],
'maxSistema' => 0,
'maxEje' => 0,
'maxCriterio' => 0,
'maxPregunta' => 0,
];
$sistemas = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id = '.$proceso)
->getQuery()->getResult();
foreach ($sistemas as $sistema)
{
if ($sistema->getId()>$params['maxSistema'])
{
$params['maxSistema'] = $sistema->getId();
}
$params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
$ejes = $this->em->getRepository('App\\Entity\\TestEje')
->createQueryBuilder('e')
->innerJoin('e.sistema', 'sistema')
->where('sistema.id = '.$sistema->getId())
->getQuery()->getResult();
foreach ($ejes as $eje)
{
if ($eje->getId()>$params['maxEje'])
{
$params['maxEje'] = $eje->getId();
}
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
$criterios = $this->em->getRepository('App\\Entity\\TestCriterio')
->createQueryBuilder('c')
->innerJoin('c.eje', 'eje')
->where('eje.id = '.$eje->getId())
->getQuery()->getResult();
foreach ($criterios as $criterio)
{
if ($criterio->getId()>$params['maxCriterio'])
{
$params['maxCriterio'] = $criterio->getId();
}
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
$preguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
->createQueryBuilder('p')
->innerJoin('p.criterio', 'criterio')
->where('criterio.id = '.$criterio->getId())
->getQuery()->getResult();
foreach ($preguntas as $pregunta)
{
if ($pregunta->getId()>$params['maxPregunta'])
{
$params['maxPregunta'] = $pregunta->getId();
}
$params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $pregunta;
}
}
}
}
if ($editable=='YES')
{
return $this->render('ProcesoReclutamiento/testPreguntas.html.twig', $params);
}
else
{
return $this->render('ProcesoReclutamiento/testPreguntasShowBody.html.twig', $params);
}
}
public function replicateTestElementsAction($procesoOrigen, $procesoDestino)
{
$result = ['ok'=>true];
try
{
$this->removeTestElements($procesoDestino);
$procesoDestino = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($procesoDestino);
$sistemas = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id = '.$procesoOrigen)
->getQuery()->getResult();
foreach ($sistemas as $sistema)
{
$newSistema = new TestSistema();
$newSistema->setNombre($sistema->getNombre());
$newSistema->setProceso($procesoDestino);
$this->em->persist($newSistema);
// $this->em->flush();
$ejes = $this->em->getRepository('App\\Entity\\TestEje')
->createQueryBuilder('e')
->innerJoin('e.sistema', 'sistema')
->where('sistema.id = '.$sistema->getId())
->getQuery()->getResult();
foreach ($ejes as $eje)
{
$newEje = new TestEje();
$newEje->setNombre($eje->getNombre());
$newEje->setSistema($newSistema);
$this->em->persist($newEje);
// $this->em->flush();
$criterios = $this->em->getRepository('App\\Entity\\TestCriterio')
->createQueryBuilder('c')
->innerJoin('c.eje', 'eje')
->where('eje.id = '.$eje->getId())
->getQuery()->getResult();
foreach ($criterios as $criterio)
{
$newCriterio = new TestCriterio();
$newCriterio->setNombre($criterio->getNombre());
$newCriterio->setRiesgoBajoDesde($criterio->getRiesgoBajoDesde());
$newCriterio->setRiesgoBajoHasta($criterio->getRiesgoBajoHasta());
$newCriterio->setRiesgoMedioDesde($criterio->getRiesgoMedioDesde());
$newCriterio->setRiesgoMedioHasta($criterio->getRiesgoMedioHasta());
$newCriterio->setRiesgoAltoDesde($criterio->getRiesgoAltoDesde());
$newCriterio->setRiesgoAltoHasta($criterio->getRiesgoAltoHasta());
$newCriterio->setEje($newEje);
$this->em->persist($newCriterio);
// $this->em->flush();
$preguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
->createQueryBuilder('p')
->innerJoin('p.criterio', 'criterio')
->where('criterio.id = '.$criterio->getId())
->getQuery()->getResult();
foreach ($preguntas as $pregunta)
{
$newPregunta = new TestPregunta();
$newPregunta->setNombre($pregunta->getNombre());
$newPregunta->setTipo($pregunta->getTipo());
$newPregunta->setCriterio($newCriterio);
$this->em->persist($newPregunta);
// $this->em->flush();
}
}
}
}
$this->em->flush();
}
catch(\Exception $exc)
{
$result['ok'] = false;
$result['msg'] = $exc->getMessage();
}
$data = new Response(json_encode($result));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
private function removeTestElements($proceso)
{
$sistemas = $this->em->getRepository('App\\Entity\\TestSistema')
->createQueryBuilder('s')
->innerJoin('s.proceso', 'proceso')
->where('proceso.id = '.$proceso)
->getQuery()->getResult();
foreach ($sistemas as $sistema)
{
$ejes = $this->em->getRepository('App\\Entity\\TestEje')
->createQueryBuilder('e')
->innerJoin('e.sistema', 'sistema')
->where('sistema.id = '.$sistema->getId())
->getQuery()->getResult();
foreach ($ejes as $eje)
{
$criterios = $this->em->getRepository('App\\Entity\\TestCriterio')
->createQueryBuilder('c')
->innerJoin('c.eje', 'eje')
->where('eje.id = '.$eje->getId())
->getQuery()->getResult();
foreach ($criterios as $criterio)
{
$preguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
->createQueryBuilder('p')
->innerJoin('p.criterio', 'criterio')
->where('criterio.id = '.$criterio->getId())
->getQuery()->getResult();
foreach ($preguntas as $pregunta)
{
$this->em->remove($pregunta);
}
// $this->em->flush();
$this->em->remove($criterio);
}
// $this->em->flush();
$this->em->remove($eje);
}
// $this->em->flush();
$this->em->remove($sistema);
}
$this->em->flush();
}
protected function setValuesBeforeForm($entity)
{
parent::setValuesBeforeForm($entity);
if ($this->accion=='CREATE')
{
$proceso = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
->createQueryBuilder('p')
->orderBy('p.fechaAcuartelamiento', 'DESC')
->setMaxResults(1)
->getQuery()->getResult();
if (!empty($proceso))
{
$proceso = $proceso[0];
if ($proceso->getFotoUniforme())
{
$entity->setFotoUniforme($proceso->getFotoUniforme());
}
if ($proceso->getFotoJockey())
{
$entity->setFotoJockey($proceso->getFotoJockey());
}
if ($proceso->getFotoCalzado())
{
$entity->setFotoCalzado($proceso->getFotoCalzado());
}
if ($proceso->getFotoCamiseta())
{
$entity->setFotoCamiseta($proceso->getFotoCamiseta());
}
if ($proceso->getTituloReporteUniforme())
{
$entity->setTituloReporteUniforme($proceso->getTituloReporteUniforme());
}
if ($proceso->getTituloReporteJockey())
{
$entity->setTituloReporteJockey($proceso->getTituloReporteJockey());
}
if ($proceso->getTituloReporteCalzado())
{
$entity->setTituloReporteCalzado($proceso->getTituloReporteCalzado());
}
if ($proceso->getTituloReporteCamiseta())
{
$entity->setTituloReporteCamiseta($proceso->getTituloReporteCamiseta());
}
if ($proceso->getTituloReporteEstudios())
{
$entity->setTituloReporteEstudios($proceso->getTituloReporteEstudios());
}
}
}
}
protected function createRedirectOnSuccess($entity)
{
if ($this->ajax)
{
return parent::createRedirectOnSuccess($entity);
}
else
{
return $this->redirect($this->generateUrl('crud_plain_show', ['routeClassName'=>$this->routeClassName, 'id'=>$entity->getId(), 'rol'=>$this->rol]));
}
}
}