src/Controller/ProcesoReclutamientoController.php line 1582

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Crud\Controller\crudPlainController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use App\Entity\ProcesoReclutamientoUnidad;
  8. use App\Entity\ProcesoReclutamientoCentro;
  9. use App\Entity\ProcesoReclutamientoBase;
  10. use App\Entity\ProcesoReclutamientoPregunta;
  11. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  12. use App\Entity\TestSistema;
  13. use App\Entity\TestEje;
  14. use App\Entity\TestCriterio;
  15. use App\Entity\TestPregunta;
  16. class ProcesoReclutamientoController extends crudPlainController
  17. {
  18.     protected function newParamsForTwig($entity)
  19.     {
  20.         $params parent::newParamsForTwig($entity);
  21.         
  22. /*        $procesoActivo = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array(),array('fechaAcuartelamiento'=> 'DESC'));
  23.         
  24.         $preguntas = $this->em->getRepository('App\\Entity\\PreguntaTest')->createQueryBuilder('p')
  25.                 ->innerJoin('p.etapa', 'etapa')
  26.                 ->where('p.activa = true')
  27.                 ->andWhere('etapa.activa = true')
  28.                 ->orderBy('etapa.orden, p.pregunta')
  29.                 ->getQuery()->getResult();
  30.         $params['preguntas']=$preguntas;
  31.         $elementosUsados = $this->construyeElementosUsados($procesoActivo);
  32.         $params = array_merge($params, $elementosUsados);*/
  33.         return $params;
  34.     }
  35.     protected function construyeElementosUsados($proceso)
  36.     {
  37.         $basesEnProceso = [];
  38.         $lugaresEnProceso = [];
  39.         $unidadesEnProceso = [];
  40.         $elementosUsados = [];
  41.         
  42.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  43.                 ->createQueryBuilder('p')
  44.                 ->where('p.id <> '.$proceso->getId())
  45.                 ->orderBy('p.fechaAcuartelamiento''DESC')
  46.                 ->setMaxResults(1)
  47.                 ->getQuery()->getResult();
  48.         $procesoActivo = !empty($procesoActivo) ? $procesoActivo[0] : null;
  49.         if ($proceso)
  50.         {
  51.             
  52.             $basesUsadas $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
  53.                 ->createQueryBuilder('us')
  54.                 ->innerJoin('us.proceso''proceso')
  55.                 ->innerJoin('us.base''base')
  56.                 ->addSelect('base')
  57.                 ->where('proceso.id = :PROCESO')
  58.                 ->orderBy('us.nombreBase')
  59.                 ->setParameter('PROCESO',$proceso->getId())
  60.                 ->getQuery()->getResult();
  61.             
  62.             if (empty($basesUsadas) && $procesoActivo && $proceso->getId() != $procesoActivo->getId())
  63.             {
  64.                 $params $this->construyeElementosUsados($procesoActivo);
  65.                 $params['accionJerarquia'] = 'CREATE';
  66.                 return $params;
  67.             }
  68.             
  69.             foreach ($basesUsadas as $baseUsada)
  70.             {
  71.                 $base $baseUsada->getBase();
  72.                 $basesEnProceso[$base->getId()]=true;
  73.                 
  74.                 $elementosUsados[$base->getId()]['base'] = $baseUsada;
  75.                 $elementosUsados[$base->getId()]['canDelete'] = true;   
  76.                 $centrosUsados $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  77.                         ->createQueryBuilder('us')
  78.                         ->innerJoin('us.proceso''proceso')
  79.                         ->where('proceso.id = :PROCESO')
  80.                         ->innerJoin('us.base''base')
  81.                         ->andWhere('base.id = :BASE')
  82.                         ->innerJoin('us.lugar''lugar')
  83.                         ->addSelect('base')
  84.                         ->addSelect('lugar')
  85.                         ->setParameter('PROCESO',$proceso->getId())
  86.                         ->setParameter('BASE',$base->getId())
  87.                         ->getQuery()->getResult();
  88.                 foreach ($centrosUsados as $centroUsado)
  89.                 {
  90.                     $centro $centroUsado->getLugar();
  91.                     $lugaresEnProceso[$centro->getId()]=true;
  92.                     
  93.                     $elementosUsados[$base->getId()]['centros'][$centro->getId()]['centro'] = $centroUsado;
  94.                     $elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] = true;
  95.                     
  96.                     $unidadesUsadas $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  97.                         ->createQueryBuilder('us')
  98.                         ->innerJoin('us.proceso''proceso')
  99.                         ->innerJoin('us.unidad''unidad')
  100.                         ->innerJoin('us.lugar''lugar')
  101.                         ->addSelect('unidad')
  102.                         ->addSelect('lugar')
  103.                         ->where('proceso.id = :PROCESO')
  104.                         ->andWhere('lugar.id = :LUGAR')
  105.                         ->orderBy('us.nombreUnidad')
  106.                         ->setParameter('PROCESO',$proceso->getId())
  107.                         ->setParameter('LUGAR',$centro->getId())
  108.                         ->getQuery()->getResult();
  109.                     
  110.                     foreach ($unidadesUsadas as $unidadUsada)
  111.                     {
  112.                         $unidad $unidadUsada->getUnidad();
  113.                         $unidadesEnProceso[$unidad->getId()]=true;
  114.                         
  115.                         $canDelete $this->accion=='CREATE' || ($unidadUsada->getRegistradoMasculino()==0) && ($unidadUsada->getRegistradoFemenino()==0);
  116.                         
  117.                         $elementosUsados[$base->getId()]['centros'][$centro->getId()]['unidades'][$unidad->getId()] = $unidadUsada;
  118.                         
  119.                         $elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] = $elementosUsados[$base->getId()]['centros'][$centro->getId()]['canDelete'] && $canDelete;
  120.                         $elementosUsados[$base->getId()]['canDelete'] = $elementosUsados[$base->getId()]['canDelete'] && $canDelete;
  121.                         
  122.                     }
  123.                     
  124.                 }
  125.                 
  126.                 
  127.             }
  128.         }
  129.         $bases $this->em->getRepository('App\\Entity\\BaseMovilizacion')->createQueryBuilder('b')
  130.             ->where('b.activo = true')
  131.             ->orderBy('b.nombre')
  132.             ->getQuery()->getResult();
  133.         
  134.         $lugares $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  135.             ->where('c.activo = true')
  136.             ->orderBy('c.nombre')
  137.             ->getQuery()->getResult();
  138.         $unidades $this->em->getRepository('App\\Entity\\UnidadMilitar')->createQueryBuilder('u')
  139.             ->where('u.activo = true')
  140.             ->orderBy('u.nombre')
  141.             ->getQuery()->getResult();
  142.         
  143.         return [
  144.             'elementosUsados'=>$elementosUsados
  145.             'bases'=>$bases
  146.             'lugares'=>$lugares
  147.             'unidades'=>$unidades,
  148.             'basesEnProceso'=>$basesEnProceso
  149.             'lugaresEnProceso'=>$lugaresEnProceso
  150.             'unidadesEnProceso'=>$unidadesEnProceso,
  151.             'accionJerarquia' => empty($basesUsadas) ? 'CREATE' 'UPDATE',
  152.         ];
  153.     }
  154.     
  155.     protected function editParamsForTwig($entity)
  156.     {
  157.         $params parent::editParamsForTwig($entity);
  158.         
  159. //        $bases = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->findBy(array('activo'=>true), array('nombre'=>'ASC'));
  160. //        $params['bases']=$bases;
  161. /*        $preguntas = $this->em->getRepository('App\\Entity\\PreguntaTest')->createQueryBuilder('p')
  162.                 ->innerJoin('p.etapa', 'etapa')
  163.                 ->where('p.activa = true')
  164.                 ->andWhere('etapa.activa = true')
  165.                 ->orderBy('etapa.orden, p.pregunta')
  166.                 ->getQuery()->getResult();
  167.         
  168.         
  169.         
  170.         $procesoPreguntas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoPregunta')->findBy(array('proceso'=>$entity->getId()));
  171.         $preguntasUsadas = array();
  172.         foreach ($procesoPreguntas as $procesoPregunta)
  173.         {
  174.             $preguntasUsadas[$procesoPregunta->getPregunta()->getId()]=true;    
  175.         }
  176. */
  177. /*        $params['preguntas'] = [];
  178.         $sistemas  =  $this->em->getRepository('App\\Entity\\TestSistema')
  179.             ->createQueryBuilder('s')
  180.             ->innerJoin('s.proceso', 'proceso')
  181.             ->where('proceso.id = '.$entity->getId())
  182.             ->getQuery()->getResult();
  183.         foreach ($sistemas as $sistema)
  184.         {
  185.             $params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
  186.             
  187.             $ejes = $this->em->getRepository('App\\Entity\\TestEje')
  188.                 ->createQueryBuilder('e')
  189.                 ->innerJoin('e.sistema', 'sistema')
  190.                 ->where('sistema.id = '.$sistema->getId())
  191.                 ->getQuery()->getResult();
  192.             foreach ($ejes as $eje)
  193.             {
  194.                 $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
  195.                 
  196.                 $criterios = $this->em->getRepository('App\\Entity\\TestCriterio')
  197.                     ->createQueryBuilder('c')
  198.                     ->innerJoin('c.eje', 'eje')
  199.                     ->where('eje.id = '.$eje->getId())
  200.                     ->getQuery()->getResult();
  201.                 foreach ($criterios as $criterio)
  202.                 {
  203.                     $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
  204.                     $preguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
  205.                                                 ->createQueryBuilder('p')
  206.                                                 ->innerJoin('p.criterio', 'criterio')
  207.                                                 ->where('criterio.id = '.$criterio->getId())
  208.                                                 ->getQuery()->getResult();
  209.                     foreach ($preguntas as $pregunta)
  210.                     {
  211.                         $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $pregunta; 
  212.                     }
  213.                 }
  214.             }
  215.         }
  216. */
  217. /*        
  218.         $procesoPreguntas = $this->em->getRepository('App\\Entity\\TestPregunta')
  219.                                                 ->createQueryBuilder('p')
  220.                                                 ->innerJoin('p.criterio', 'criterio')
  221.                                                 ->innerJoin('criterio.eje', 'eje')
  222.                                                 ->innerJoin('eje.sistema', 'sistema')
  223.                                                 ->innerJoin('sistema.proceso', 'proceso')
  224.                                                 ->addSelect('criterio')
  225.                                                 ->addSelect('eje')
  226.                                                 ->addSelect('sistema')
  227.                                                 ->where('proceso.id = '.$entity->getId())
  228.                                                 ->getQuery()->getResult();
  229.         foreach ($procesoPreguntas as $procesoPregunta)
  230.         {
  231.             $criterio = $procesoPregunta->getCriterio();
  232.             $eje = $criterio->getEje();
  233.             $sistema = $eje->getSistema();
  234.             $params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
  235.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
  236.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
  237.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $procesoPregunta; 
  238.         }
  239.         */
  240.         
  241.         
  242.  
  243. //        $params['preguntas']=$preguntas;
  244. //        $params['preguntas']=$procesoPreguntas;
  245. //        $params['procesoPreguntas']=$preguntasUsadas;
  246.         
  247. /*        $elementosUsados = $this->construyeElementosUsados($entity);
  248.         $otrosProcesos  =  $this->em->getRepository('App\\Entity\\TestSistema')
  249.             ->createQueryBuilder('s')
  250.             ->select('distinct proceso.id, proceso.anno, proceso.llamada')
  251.             ->innerJoin('s.proceso', 'proceso')
  252.             ->where('proceso.id <> '.$entity->getId())
  253.             ->getQuery()->getResult();
  254.         $params['otrosProcesos'] = $otrosProcesos;
  255.         
  256.         $params = array_merge($params, $elementosUsados);*/
  257.         return $params;
  258.     }
  259.     
  260.     protected function showCreateParamsForTwig($entity)
  261.     {
  262.         $params parent::showCreateParamsForTwig($entity);
  263. //       $params['accion'] = 'UPDATE';
  264.        
  265.         $elementosUsados $this->construyeElementosUsados($entity);
  266.         $otrosProcesos  =  $this->em->getRepository('App\\Entity\\TestSistema')
  267.             ->createQueryBuilder('s')
  268.             ->select('distinct proceso.id, proceso.anno, proceso.llamada')
  269.             ->innerJoin('s.proceso''proceso')
  270.             ->where('proceso.id <> '.$entity->getId())
  271.             ->getQuery()->getResult();
  272.         $params['otrosProcesos'] = $otrosProcesos;
  273.         
  274.         $params array_merge($params$elementosUsados);
  275.         return $params;
  276.     }
  277.     
  278.     public function addBaseAction$base)
  279.     {
  280.         $data=array('ok'=>true);
  281.         $em $this->em;
  282.         $base $em->getRepository('App\\Entity\\BaseMovilizacion')
  283.                 ->find($base);
  284.         $data['html'] = $this->renderView('ProcesoReclutamiento/tr_baseMovilizacion.html.twig',array('base'=>$base'canDelete'=>true));
  285.         $data = new Response(json_encode($data));
  286.         $data->headers->set('Content-Type''application/json');
  287.         return $data;
  288.     }
  289.     
  290.     public function addCentroAction$base$centro)
  291.     {
  292.         $data=array('ok'=>true);
  293.         $em $this ->em;
  294.         $centro $em->getRepository('App\\Entity\\CentroMovilizacion')
  295.                 ->find($centro);
  296.         $data['html'] = $this->renderView('ProcesoReclutamiento/tr_centroMovilizacion.html.twig',array('baseId'=>$base'centro'=>$centro'canDelete'=>true));
  297.         $data = new Response(json_encode($data));
  298.         $data->headers->set('Content-Type''application/json');
  299.         return $data;
  300.     }
  301.     
  302.     public function addUnidadAction$base$centro$unidad)
  303.     {
  304.         $data=array('ok'=>true);
  305.         $em $this ->em;
  306.         $unidad $em->getRepository('App\\Entity\\UnidadMilitar')
  307.                 ->find($unidad);
  308.         $data['html'] = $this->renderView('ProcesoReclutamiento/tr_unidadMilitar.html.twig',array('baseId'=>$base'centroId'=>$centro'unidad'=>$unidad));
  309.         $data = new Response(json_encode($data));
  310.         $data->headers->set('Content-Type''application/json');
  311.         return $data;
  312.     }
  313.     
  314.     protected function afterSave($entity)
  315.     {
  316.         parent::afterSave($entity);
  317.         
  318.         if ($entity->getActivo())
  319.         {
  320.             //quitar el activo a los demás
  321.             $this->em->createQuery("update App:ProcesoReclutamiento p set p.activo = false where p.id <> :ID")->
  322.                 setParameter("ID",$entity->getId())->execute();
  323.         }
  324. /*        
  325.         $unidadesEnUso = [];
  326.         $enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  327.                         ->findBy(['proceso'=>$entity->getId()]);
  328.         foreach ($enUso as $item)
  329.         {
  330.             $unidadesEnUso[$item->getLugar()->getId().'-'.$item->getUnidad()->getId()] = $item;
  331.         }
  332.         $lugaresEnUso = [];
  333.         $enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  334.                         ->findBy(['proceso'=>$entity->getId()]);
  335.         foreach ($enUso as $item)
  336.         {
  337.             $lugaresEnUso[$item->getBase()->getId().'-'.$item->getLugar()->getId()] = $item;
  338.         }
  339.         $basesEnUso = [];
  340.         $enUso = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
  341.                         ->findBy(['proceso'=>$entity->getId()]);
  342.         foreach ($enUso as $item)
  343.         {
  344.             $basesEnUso[$item->getBase()->getId()] = $item;
  345.         }
  346.            
  347.         $form = $this->request->get('tree_form');
  348.         foreach ($form as $base=>$lugares)
  349.         {
  350.             $base = $this->em->getRepository('App\\Entity\\BaseMovilizacion')->find($base);
  351.             foreach ($lugares as $lugar=>$unidades)
  352.             {
  353.                 $lugarCupos = [];
  354.                 $lugar = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->find($lugar);
  355.                 foreach ($unidades as $unidad=>$data)
  356.                 {
  357.                     $unidad = $this->em->getRepository('App\\Entity\\UnidadMilitar')->find($unidad);
  358.                     $unidad->setCupoMasculino($data['unidadcupomasculino']);
  359.                     $unidad->setAdicionalMasculino($data['unidadadicionalmasculino']);
  360.                     $unidad->setCupoFemenino($data['unidadcupofemenino']);
  361.                     $unidad->setAdicionalFemenino($data['unidadadicionalfemenino']);
  362.                     
  363.                     $cupoMasculino = $unidad->getCupoMasculino()+floor($unidad->getCupoMasculino()*$unidad->getAdicionalMasculino()/100);
  364.                     $cupoFemenino = $unidad->getCupoFemenino()+floor($unidad->getCupoFemenino()*$unidad->getAdicionalFemenino()/100);
  365.                     
  366.                     if (isset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]))
  367.                     {
  368.                         $procesoUnidad = $unidadesEnUso[$lugar->getId().'-'.$unidad->getId()];
  369.                         unset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]);
  370.                     }
  371.                     else
  372.                     {
  373.                         $procesoUnidad = new ProcesoReclutamientoUnidad();
  374.                         $procesoUnidad->setProceso($entity);
  375.                         $procesoUnidad->setUnidad($unidad);
  376.                         $procesoUnidad->setLugar($lugar);
  377.                         $procesoUnidad->setNombreUnidad($unidad->getNombre());
  378.                         $procesoUnidad->setRegistradoFemenino(0);
  379.                         $procesoUnidad->setRegistradoMasculino(0);
  380.                     }
  381.                     $procesoUnidad->setPrioridad($data['unidadprioridad']);
  382.                     $procesoUnidad->setCupoMasculino($cupoMasculino);
  383.                     $procesoUnidad->setCupoFemenino($cupoFemenino);
  384.                     $procesoUnidad->setFuerza($unidad->getFuerza());
  385.                     $procesoUnidad->setOrganicoMasculino($unidad->getCupoMasculino());
  386.                     $procesoUnidad->setOrganicoFemenino($unidad->getCupoFemenino());
  387.                     
  388.                     $this->em->persist($unidad);
  389.                     $this->em->persist($procesoUnidad);
  390.                     $this->em->flush();
  391.                     
  392.                     if (!isset($lugarCupos[$lugar->getId()]))
  393.                     {
  394.                         $lugarCupos[$lugar->getId()]['masc']=0;
  395.                         $lugarCupos[$lugar->getId()]['fem']=0;
  396.                         $lugarCupos[$lugar->getId()]['org_masc']=0;
  397.                         $lugarCupos[$lugar->getId()]['org_fem']=0;
  398.                     }
  399.                     $lugarCupos[$lugar->getId()]['masc']+=$cupoMasculino;
  400.                     $lugarCupos[$lugar->getId()]['fem']+=$cupoFemenino;
  401.                     $lugarCupos[$lugar->getId()]['org_masc']+=$unidad->getCupoMasculino();
  402.                     $lugarCupos[$lugar->getId()]['org_fem']+=$unidad->getCupoFemenino();
  403.                 }
  404.                 
  405.                 if (isset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]))
  406.                 {
  407.                     $procesoLugar = $lugaresEnUso[$base->getId().'-'.$lugar->getId()];
  408.                     unset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]);
  409.                 }
  410.                 else
  411.                 {
  412.                     $procesoLugar = new ProcesoReclutamientoCentro();
  413.                     $procesoLugar->setProceso($entity);
  414.                     $procesoLugar->setBase($base);
  415.                     $procesoLugar->setLugar($lugar);
  416.                     $procesoLugar->setNombreLugar($lugar->getNombre());
  417.                     $procesoLugar->setTurno(0);
  418.                     $procesoLugar->setRegistradoFemenino(0);
  419.                     $procesoLugar->setRegistradoMasculino(0);                    
  420.                 }
  421.                 $procesoLugar->setApellidos($lugar->getJefe() ? $lugar->getJefe()->getApellidos() : '');
  422.                 $procesoLugar->setNombres($lugar->getJefe() ? $lugar->getJefe()->getNombres() : '');
  423.                 $procesoLugar->setCargo($lugar->getJefe() ? $lugar->getJefe()->getCargoTxt() : '');
  424.                 $procesoLugar->setGrado($lugar->getJefe() ? $lugar->getJefe()->getGradoTxt() : '');
  425.                 $procesoLugar->setIdentificacion($lugar->getJefe() ? $lugar->getJefe()->getIdentificacion() : '');
  426.                 $procesoLugar->setCupoMasculino($lugarCupos[$lugar->getId()]['masc']);
  427.                 $procesoLugar->setCupoFemenino($lugarCupos[$lugar->getId()]['fem']);
  428.                 $procesoLugar->setOrganicoMasculino($lugarCupos[$lugar->getId()]['org_masc']);
  429.                 $procesoLugar->setOrganicoFemenino($lugarCupos[$lugar->getId()]['org_fem']);
  430.                 
  431.                 $this->em->persist($procesoLugar);
  432.             }
  433.             if (isset($basesEnUso[$base->getId()]))
  434.             {
  435.                 $procesoBase = $basesEnUso[$base->getId()];
  436.                 unset($basesEnUso[$base->getId()]);
  437.             }
  438.             else
  439.             {
  440.                 $procesoBase = new ProcesoReclutamientoBase();
  441.                 $procesoBase->setProceso($entity);
  442.                 $procesoBase->setBase($base);
  443.                 $procesoBase->setNombreBase($base->getNombre());
  444.             }
  445.             $procesoBase->setApellidos($base->getJefe() ? $base->getJefe()->getApellidos() : '');
  446.             $procesoBase->setNombres($base->getJefe() ? $base->getJefe()->getNombres() : '');
  447.             $procesoBase->setCargo($base->getJefe() ? $base->getJefe()->getCargoTxt() : '');
  448.             $procesoBase->setGrado($base->getJefe() ? $base->getJefe()->getGradoTxt() : '');
  449.             $procesoBase->setIdentificacion($base->getJefe() ? $base->getJefe()->getIdentificacion() : '');
  450.             
  451.             $this->em->persist($procesoBase);
  452.         }
  453.         
  454.         foreach ($unidadesEnUso as $item)
  455.         {        
  456.             $this->em->remove($item);
  457.         }
  458.         foreach ($lugaresEnUso as $item)
  459.         {
  460.             $this->em->remove($item);
  461.         }
  462.         foreach ($basesEnUso as $item)
  463.         {
  464.             $this->em->remove($item);
  465.         }
  466.         $this->em->flush();
  467.    
  468.         // ProcesosPreguntas //
  469.         $data = $this->request->get('form');
  470.         $borrarProcesoPreguntas = array();
  471.         $procesoPreguntas = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoPregunta')->findBy(array('proceso'=>$entity->getId()));
  472.         foreach ($procesoPreguntas as $procesoPregunta)
  473.         {
  474.             $borrarProcesoPreguntas[$procesoPregunta->getPregunta()->getId()]=$procesoPregunta;    
  475.         }
  476.         if (isset($data['pregunta']))
  477.         {    
  478.             foreach ($data['pregunta'] as $pregunta=>$valor)
  479.             {
  480.                 $pregunta = $this->em->getRepository('App\\Entity\\PreguntaTest')->find($pregunta);
  481.                 if (isset($borrarProcesoPreguntas[$pregunta->getId()]))
  482.                 {
  483.                     unset($borrarProcesoPreguntas[$pregunta->getId()]);
  484.                 }
  485.                 else
  486.                 {
  487.                     $procesoPregunta = new ProcesoReclutamientoPregunta();
  488.                     $procesoPregunta->setProceso($entity);
  489.                     $procesoPregunta->setPregunta($pregunta);
  490.                 }
  491.                 $this->em->persist($procesoPregunta);
  492.             }
  493.         }
  494.         foreach ($borrarProcesoPreguntas as $procesoPregunta)
  495.         {
  496.             $this->em->remove($procesoPregunta);
  497.         }
  498.         */
  499.         $this->em->flush();
  500.     } 
  501.     
  502.     public function saveEstructuraCentrosAction()
  503.     {
  504.         $form $this->request->get('tree_form');
  505.         $procesoId $form['id'];
  506.         $this->routeClassName $form['routeClassName'];
  507.         $this->rol $form['rol'];
  508.         unset($form['id']);
  509. //        unset($form['baseJefe']);
  510. //        unset($form['centroJefe']);
  511.         unset($form['routeClassName']);
  512.         unset($form['rol']);
  513.         
  514.         $entity $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($procesoId);        
  515.         $unidadesEnUso = [];
  516.         $enUso $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  517.                         ->findBy(['proceso'=>$entity->getId()]);
  518.         foreach ($enUso as $item)
  519.         {
  520.             $unidadesEnUso[$item->getLugar()->getId().'-'.$item->getUnidad()->getId()] = $item;
  521.         }
  522.         $lugaresEnUso = [];
  523.         $enUso $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  524.                         ->findBy(['proceso'=>$entity->getId()]);
  525.         foreach ($enUso as $item)
  526.         {
  527.             $lugaresEnUso[$item->getBase()->getId().'-'.$item->getLugar()->getId()] = $item;
  528.         }
  529.         $basesEnUso = [];
  530.         $enUso $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
  531.                         ->findBy(['proceso'=>$entity->getId()]);
  532.         foreach ($enUso as $item)
  533.         {
  534.             $basesEnUso[$item->getBase()->getId()] = $item;
  535.         }
  536.            
  537.         foreach ($form as $base=>$lugares)
  538.         {
  539.             $base $this->em->getRepository('App\\Entity\\BaseMovilizacion')->find($base);
  540.             foreach ($lugares as $lugar=>$unidades)
  541.             {
  542.                 $lugarCupos = [];
  543.                 $lugar $this->em->getRepository('App\\Entity\\CentroMovilizacion')->find($lugar);
  544.                 foreach ($unidades as $unidad=>$data)
  545.                 {
  546.                     $unidad $this->em->getRepository('App\\Entity\\UnidadMilitar')->find($unidad);
  547.                     $unidad->setCupoMasculino($data['unidadcupomasculino']);
  548.                     $unidad->setAdicionalMasculino($data['unidadadicionalmasculino']);
  549.                     $unidad->setCupoFemenino($data['unidadcupofemenino']);
  550.                     $unidad->setAdicionalFemenino($data['unidadadicionalfemenino']);
  551.                     
  552.                     $cupoMasculino $unidad->getCupoMasculino()+floor($unidad->getCupoMasculino()*$unidad->getAdicionalMasculino()/100);
  553.                     $cupoFemenino $unidad->getCupoFemenino()+floor($unidad->getCupoFemenino()*$unidad->getAdicionalFemenino()/100);
  554.                     
  555.                     if (isset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]))
  556.                     {
  557.                         $procesoUnidad $unidadesEnUso[$lugar->getId().'-'.$unidad->getId()];
  558.                         unset($unidadesEnUso[$lugar->getId().'-'.$unidad->getId()]);
  559.                     }
  560.                     else
  561.                     {
  562.                         $procesoUnidad = new ProcesoReclutamientoUnidad();
  563.                         $procesoUnidad->setProceso($entity);
  564.                         $procesoUnidad->setUnidad($unidad);
  565.                         $procesoUnidad->setLugar($lugar);
  566.                         $procesoUnidad->setNombreUnidad($unidad->getNombre());
  567.                         $procesoUnidad->setRegistradoFemenino(0);
  568.                         $procesoUnidad->setRegistradoMasculino(0);
  569.                     }
  570.                     $procesoUnidad->setPrioridad($data['unidadprioridad']);
  571.                     $procesoUnidad->setCupoMasculino($cupoMasculino);
  572.                     $procesoUnidad->setCupoFemenino($cupoFemenino);
  573.                     $procesoUnidad->setFuerza($unidad->getFuerza());
  574.                     $procesoUnidad->setOrganicoMasculino($unidad->getCupoMasculino());
  575.                     $procesoUnidad->setOrganicoFemenino($unidad->getCupoFemenino());
  576.                     
  577.                     $this->em->persist($unidad);
  578.                     $this->em->persist($procesoUnidad);
  579.                     $this->em->flush();
  580.                     
  581.                     if (!isset($lugarCupos[$lugar->getId()]))
  582.                     {
  583.                         $lugarCupos[$lugar->getId()]['masc']=0;
  584.                         $lugarCupos[$lugar->getId()]['fem']=0;
  585.                         $lugarCupos[$lugar->getId()]['org_masc']=0;
  586.                         $lugarCupos[$lugar->getId()]['org_fem']=0;
  587.                     }
  588.                     $lugarCupos[$lugar->getId()]['masc']+=$cupoMasculino;
  589.                     $lugarCupos[$lugar->getId()]['fem']+=$cupoFemenino;
  590.                     $lugarCupos[$lugar->getId()]['org_masc']+=$unidad->getCupoMasculino();
  591.                     $lugarCupos[$lugar->getId()]['org_fem']+=$unidad->getCupoFemenino();
  592.                 }
  593.                 
  594.                 if (isset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]))
  595.                 {
  596.                     $procesoLugar $lugaresEnUso[$base->getId().'-'.$lugar->getId()];
  597.                     unset($lugaresEnUso[$base->getId().'-'.$lugar->getId()]);
  598.                 }
  599.                 else
  600.                 {
  601.                     $procesoLugar = new ProcesoReclutamientoCentro();
  602.                     $procesoLugar->setProceso($entity);
  603.                     $procesoLugar->setBase($base);
  604.                     $procesoLugar->setLugar($lugar);
  605.                     $procesoLugar->setNombreLugar($lugar->getNombre());
  606.                     $procesoLugar->setTurno(0);
  607.                     $procesoLugar->setRegistradoFemenino(0);
  608.                     $procesoLugar->setRegistradoMasculino(0);                    
  609.                 }
  610.                 $procesoLugar->setApellidos($lugar->getJefe() ? $lugar->getJefe()->getApellidos() : '');
  611.                 $procesoLugar->setNombres($lugar->getJefe() ? $lugar->getJefe()->getNombres() : '');
  612.                 $procesoLugar->setCargo($lugar->getJefe() ? $lugar->getJefe()->getCargoTxt() : '');
  613.                 $procesoLugar->setGrado($lugar->getJefe() ? $lugar->getJefe()->getGradoTxt() : '');
  614.                 $procesoLugar->setIdentificacion($lugar->getJefe() ? $lugar->getJefe()->getIdentificacion() : '');
  615.                 $procesoLugar->setCupoMasculino($lugarCupos[$lugar->getId()]['masc']);
  616.                 $procesoLugar->setCupoFemenino($lugarCupos[$lugar->getId()]['fem']);
  617.                 $procesoLugar->setOrganicoMasculino($lugarCupos[$lugar->getId()]['org_masc']);
  618.                 $procesoLugar->setOrganicoFemenino($lugarCupos[$lugar->getId()]['org_fem']);
  619.                 
  620.                 $this->em->persist($procesoLugar);
  621.             }
  622.             if (isset($basesEnUso[$base->getId()]))
  623.             {
  624.                 $procesoBase $basesEnUso[$base->getId()];
  625.                 unset($basesEnUso[$base->getId()]);
  626.             }
  627.             else
  628.             {
  629.                 $procesoBase = new ProcesoReclutamientoBase();
  630.                 $procesoBase->setProceso($entity);
  631.                 $procesoBase->setBase($base);
  632.                 $procesoBase->setNombreBase($base->getNombre());
  633.             }
  634.             $procesoBase->setApellidos($base->getJefe() ? $base->getJefe()->getApellidos() : '');
  635.             $procesoBase->setNombres($base->getJefe() ? $base->getJefe()->getNombres() : '');
  636.             $procesoBase->setCargo($base->getJefe() ? $base->getJefe()->getCargoTxt() : '');
  637.             $procesoBase->setGrado($base->getJefe() ? $base->getJefe()->getGradoTxt() : '');
  638.             $procesoBase->setIdentificacion($base->getJefe() ? $base->getJefe()->getIdentificacion() : '');
  639.             
  640.             $this->em->persist($procesoBase);
  641.         }
  642.         
  643.         foreach ($unidadesEnUso as $item)
  644.         {        
  645.             $this->em->remove($item);
  646.         }
  647.         foreach ($lugaresEnUso as $item)
  648.         {
  649.             $this->em->remove($item);
  650.         }
  651.         foreach ($basesEnUso as $item)
  652.         {
  653.             $this->em->remove($item);
  654.         }
  655.         $this->em->flush();
  656.         
  657.         return $this->redirect($this->generateUrl('crud_index', ['routeClassName'=>$this->routeClassName'rol'=>$this->rol]));
  658.     }
  659.     
  660.     protected function indexLoadEntities($params)
  661.     {
  662.         if ($this->routeClassName=='reporteresultados')
  663.         {
  664. /*            if (!isset($this->filterData['proceso'])) {
  665.                 $this->filterData['proceso'] = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId(); 
  666.             }*/
  667.             if (isset($this->filterData['unidad']))
  668.             {
  669.                 return $this->getItemsPorUnidad();
  670.             }
  671.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
  672.             {
  673.                 // habilitar luego 
  674. /*                if (!isset($this->filterData['centro']))
  675.                 {
  676.                     $centros = $this->getUser()->getCentroInstruccion()->getCentrosMovilizacion();
  677.                     $f = array();
  678.                     foreach ($centros as $centro)
  679.                         $f[]=$centro->getId();
  680.                     $this->filterData['centro'] = $f; 
  681.                 } */
  682.             }    
  683.             if (isset($this->filterData['centro']))
  684.             {
  685.                 return $this->getItemsPorCentro();
  686.             }
  687.             if (isset($this->filterData['base']))
  688.             {
  689.                 return $this->getItemsPorBase();
  690.             }
  691.             return $this->getItemsPais();
  692.         }
  693.         else
  694.             return parent::indexLoadEntities($params);
  695.     }
  696.     
  697.     protected function indexParamsForTwig()
  698.     {
  699.         $params parent::indexParamsForTwig();
  700.        
  701.         if ($this->routeClassName=='reporteresultados')
  702.         {
  703.             if (isset($this->filterData['unidad']))
  704.             {
  705.                 $params['totalesLugar'] = $this->getTotalPorUnidad();
  706.             }
  707.             elseif (isset($this->filterData['centro']))
  708.             {
  709.                 $params['totalesLugar'] = $this->getTotalPorCentro();
  710.             }
  711.             elseif (isset($this->filterData['base']))
  712.             {
  713.                 $params['totalesLugar'] = $this->getTotalPorBase();
  714.             }
  715.             else
  716.             {
  717.                 $params['totalesLugar'] = $this->getTotalPais();
  718.             }
  719.             $params['totales'] = $this->getTotalesNacionalesProceso();
  720.         }
  721.         return $params;
  722.     }
  723.     protected function getItemsPorUnidad()
  724.     {
  725.         $query 
  726.             "SELECT
  727.                 prul.proceso,
  728.                 prul.unidad AS lugarId,
  729.                 prul.nombre_unidad AS lugar, 
  730.                 sum(prul.organico_masculino) AS organicoMasculino,
  731.                 sum(prul.organico_femenino) AS organicoFemenino,
  732.                 sum(prul.cupo_masculino) AS cupoMasculino,
  733.                 sum(prul.cupo_femenino) AS cupoFemenino,
  734.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  735.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  736.             FROM
  737.                 proceso_reclutamiento_unidad_lugar prul 
  738.             WHERE
  739.                 prul.proceso = ".$this->filterData['proceso']." AND 
  740.                 prul.unidad= ".$this->filterData['unidad']."
  741.             GROUP BY
  742.                 prul.proceso,
  743.                 prul.unidad,
  744.                 prul.nombre_unidad
  745.             ORDER BY
  746.                 prul.nombre_unidad;";
  747.         
  748.         $conn $this->em->getConnection();
  749.         $statement $conn->prepare($query);
  750.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  751.         return $datos
  752.     }
  753.     
  754.     protected function getItemsPorCentro()
  755.     {
  756.         if (is_array($this->filterData['centro']))
  757.             $whereCentro "prul.lugar in (".implode(',',$this->filterData['centro'])   .")";
  758.         else
  759.             $whereCentro "prul.lugar = ".$this->filterData['centro'];
  760.         
  761.         $query 
  762.             "SELECT
  763.                 prul.proceso,
  764.                 prul.nombre_unidad AS lugar, 
  765.                 sum(prul.organico_masculino) AS organicoMasculino,
  766.                 sum(prul.organico_femenino) AS organicoFemenino,
  767.                 sum(prul.cupo_masculino) AS cupoMasculino,
  768.                 sum(prul.cupo_femenino) AS cupoFemenino,
  769.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  770.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  771.             FROM
  772.                 proceso_reclutamiento_unidad_lugar prul 
  773.             WHERE
  774.                 prul.proceso = ".$this->filterData['proceso']." AND ".
  775.                 $whereCentro.
  776.             GROUP BY 
  777.                 prul.proceso,
  778.                 prul.unidad,
  779.                 prul.nombre_unidad
  780.             ORDER BY
  781.                 prul.nombre_unidad;";        
  782.         $conn $this->em->getConnection();
  783.         $statement $conn->prepare($query);
  784.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  785.         return $datos
  786.     }
  787.     
  788.     protected function getItemsPorBase()
  789.     {
  790.         $query 
  791.             "SELECT 
  792.                 prul.proceso,
  793.                 prul.lugar AS lugarId,
  794.                 prlb.nombre_lugar AS lugar, 
  795.                 sum(prul.organico_masculino) AS organicoMasculino,
  796.                 sum(prul.organico_femenino) AS organicoFemenino,
  797.                 sum(prul.cupo_masculino) AS cupoMasculino,
  798.                 sum(prul.cupo_femenino) AS cupoFemenino,                    
  799.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  800.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  801.             FROM 
  802.                 proceso_reclutamiento_unidad_lugar prul
  803.             INNER JOIN 
  804.                 proceso_reclutamiento_lugar_base prlb ON prul.lugar = prlb.lugar and prul.proceso = prlb.proceso
  805.             WHERE 
  806.                 prul.proceso = ".$this->filterData['proceso']." AND 
  807.                 prlb.base = ".$this->filterData['base']."
  808.             GROUP BY 
  809.                 prul.proceso,
  810.                 prul.lugar,
  811.                 prlb.nombre_lugar 
  812.             ORDER BY 
  813.                 prlb.nombre_lugar;";
  814.         $conn $this->em->getConnection();
  815.         $statement $conn->prepare($query);
  816.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  817.         return $datos
  818.     }
  819.     
  820.     protected function getItemsPais()
  821.     {
  822.         $query 
  823.             "SELECT 
  824.                 prul.proceso,
  825.                 prb.base AS lugarId,
  826.                 prb.nombre_base AS lugar,
  827.                 sum(prul.organico_masculino) AS organicoMasculino,
  828.                 sum(prul.organico_femenino) AS organicoFemenino,
  829.                 sum(prul.cupo_masculino) AS cupoMasculino,
  830.                 sum(prul.cupo_femenino) AS cupoFemenino,                     
  831.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  832.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  833.             FROM 
  834.                 proceso_reclutamiento_unidad_lugar prul
  835.             INNER JOIN 
  836.                 proceso_reclutamiento_lugar_base prlb on prlb.lugar = prul.lugar and prul.proceso = prlb.proceso 
  837.             INNER JOIN 
  838.                 proceso_reclutamiento_bases prb on prlb.base=prb.base and prul.proceso = prb.proceso
  839.             WHERE 
  840.                 prul.proceso = ".$this->filterData['proceso']."
  841.             GROUP BY 
  842.                 prul.proceso,
  843.                 prb.base,
  844.                 prb.nombre_base 
  845.             ORDER BY 
  846.                 prb.nombre_base;";
  847.         $conn $this->em->getConnection();
  848.         $statement $conn->prepare($query);
  849.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  850.         return $datos
  851.     }
  852.     
  853.     protected function getTotalPorUnidad()
  854.     {
  855.         $totalSQL 
  856.             "SELECT
  857.                 prul.proceso,
  858.                 prul.nombre_unidad as lugar,
  859.                 sum(prul.organico_masculino) AS organicoMasculino,
  860.                 sum(prul.organico_femenino) AS organicoFemenino,
  861.                 sum(prul.cupo_masculino) AS cupoMasculino,
  862.                 sum(prul.cupo_femenino) AS cupoFemenino,
  863.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  864.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  865.             FROM
  866.                 proceso_reclutamiento_unidad_lugar prul
  867.             WHERE 
  868.                 prul.proceso = ".$this->filterData['proceso'].
  869.             GROUP BY 
  870.                 prul.proceso, 
  871.                 prul.nombre_unidad;";
  872.         
  873.         $conn $this->em->getConnection();
  874.         $statement $conn->prepare($totalSQL);
  875.         $totalesLugar $statement->executeQuery()->fetchAllAssociative(); 
  876.         if ($totalesLugar)
  877.         {
  878.             $totalesLugar $totalesLugar [0];
  879.         }
  880.         return $totalesLugar;        
  881.     }
  882.     
  883.     protected function getTotalPorCentro()
  884.     {
  885.         if (is_array($this->filterData['centro']))
  886.             $whereCentro "prul.lugar in (".implode(',',$this->filterData['centro'])   .")";
  887.         else
  888.             $whereCentro "prul.lugar = ".$this->filterData['centro'];
  889.         
  890.         $totalSQL 
  891.             "SELECT
  892.                 prul.proceso,
  893.                 prlb.nombre_lugar AS lugar,
  894.                 sum(prul.organico_masculino) AS organicoMasculino,
  895.                 sum(prul.organico_femenino) AS organicoFemenino,
  896.                 sum(prul.cupo_masculino) AS cupoMasculino,
  897.                 sum(prul.cupo_femenino) AS cupoFemenino,
  898.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  899.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  900.             FROM
  901.                 proceso_reclutamiento_unidad_lugar prul 
  902.             INNER JOIN 
  903.                 proceso_reclutamiento_lugar_base prlb on prlb.lugar=prul.lugar and prul.proceso = prlb.proceso
  904.             WHERE
  905.                 prul.proceso = ".$this->filterData['proceso']." AND ".$whereCentro."
  906.             GROUP BY 
  907.                 prul.proceso,
  908.                 prlb.nombre_lugar
  909.             ORDER BY
  910.                 prul.proceso,
  911.                 prlb.nombre_lugar;";
  912.         $conn $this->em->getConnection();
  913.         $statement $conn->prepare($totalSQL);
  914.         $totalesLugar $statement->executeQuery()->fetchAllAssociative(); 
  915.         if ($totalesLugar)
  916.             $totalesLugar $totalesLugar [0];
  917.         return $totalesLugar;        
  918.     }
  919.     
  920.     protected function getTotalPorBase()
  921.     {
  922.         $totalSQL 
  923.             "SELECT 
  924.                 prul.proceso,
  925.                 prb.nombre_base AS lugar,
  926.                 sum(prul.organico_masculino) AS organicoMasculino,
  927.                 sum(prul.organico_femenino) AS organicoFemenino,
  928.                 sum(prul.cupo_masculino) AS cupoMasculino,
  929.                 sum(prul.cupo_femenino) AS cupoFemenino,
  930.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  931.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  932.             FROM
  933.                 proceso_reclutamiento_unidad_lugar prul
  934.             INNER JOIN 
  935.                 proceso_reclutamiento_lugar_base prlb on prlb.lugar=prul.lugar and prul.proceso = prlb.proceso
  936.             INNER JOIN
  937.                 proceso_reclutamiento_bases prb on prb.base=prlb.base and prul.proceso = prb.proceso
  938.             WHERE
  939.                 prul.proceso = ".$this->filterData['proceso']." AND 
  940.                 prlb.base = ".$this->filterData['base']."
  941.             GROUP BY
  942.                 prul.proceso,
  943.                 prb.nombre_base
  944.             ORDER BY
  945.                 prul.proceso,
  946.                 prb.nombre_base;";
  947.         $conn $this->em->getConnection();
  948.         $statement $conn->prepare($totalSQL);
  949.         $totalesLugar $statement->executeQuery()->fetchAllAssociative(); 
  950.         if ($totalesLugar)
  951.             $totalesLugar $totalesLugar [0];
  952.         return $totalesLugar;        
  953.     }
  954.     
  955.     protected function getTotalPais()
  956.     {
  957.         $totalSQL 
  958.             "SELECT
  959.                 pr.anno::text || ' - ' || pr.llamada AS lugar,
  960.                 sum(prul.organico_masculino) AS organicoMasculino,
  961.                 sum(prul.organico_femenino) AS organicoFemenino,
  962.                 sum(prul.cupo_masculino) AS cupoMasculino,
  963.                 sum(prul.cupo_femenino) AS cupoFemenino,
  964.                 sum(prul.registrado_masculino) AS asignadosMasculinos,
  965.                 sum(prul.registrado_femenino) AS asignadosFemeninos
  966.             FROM
  967.                 proceso_reclutamiento pr 
  968.             INNER JOIN 
  969.                 proceso_reclutamiento_unidad_lugar prul ON prul.proceso = pr.id 
  970.             WHERE 
  971.                 prul.proceso = ".$this->filterData['proceso'].
  972.             GROUP BY 
  973.                 prul.proceso,
  974.                 pr.anno::text || ' - ' || pr.llamada
  975.             ORDER BY
  976.                 prul.proceso,
  977.                 pr.anno::text || ' - ' || pr.llamada;";
  978.         $conn $this->em->getConnection();
  979.         $statement $conn->prepare($totalSQL);
  980.         $totalesLugar $statement->executeQuery()->fetchAllAssociative(); 
  981.         if ($totalesLugar)
  982.             $totalesLugar $totalesLugar [0];
  983.         return $totalesLugar;        
  984.     }
  985.     
  986.     public function showResultadoProcesoAction($tipoLugar$lugar$proceso)
  987.     {
  988.         $routeClassName 'reporteresultados';
  989.         $this->filterData=array('proceso'=>$proceso$tipoLugar=>$lugar);
  990.         $this->session->set($routeClassName,$this->filterData);
  991.         return $this->redirect($this->generateUrl('crud_index', array('routeClassName'=>$routeClassName)));
  992.     }
  993.     
  994.     protected function getTotalesNacionalesProceso()
  995.     {
  996.         $conn $this->em->getConnection();
  997.         $totalSQL 
  998.             "SELECT
  999.                 prul.proceso,
  1000.                 sum(COALESCE(prul.organico_masculino, 0)) AS organicoMasculino,
  1001.                 sum(COALESCE(prul.organico_femenino, 0)) AS organicoFemenino,
  1002.                 sum(COALESCE(prul.cupo_masculino, 0)) AS cupoMasculino,
  1003.                 sum(COALESCE(prul.cupo_femenino, 0)) AS cupoFemenino,
  1004.                 sum(COALESCE(prul.registrado_masculino, 0)) AS asignadosMasculinos,
  1005.                 sum(COALESCE(prul.registrado_femenino, 0)) AS asignadosFemeninos
  1006.             FROM 
  1007.                 proceso_reclutamiento_unidad_lugar prul
  1008.             WHERE 
  1009.                 proceso = ".$this->filterData['proceso'].
  1010.             GROUP BY 
  1011.                 proceso";
  1012.         $statement $conn->prepare($totalSQL);
  1013.         $totales $statement->executeQuery()->fetchAllAssociative(); 
  1014.         if (count($totales))
  1015.             $totales $totales[0];
  1016.         else{
  1017.             $totales=array();
  1018.             $totales['cupomasculino'] = 0;
  1019.             $totales['cupofemenino'] = 0;
  1020.             $totales['asignadosmasculinos'] = 0;
  1021.             $totales['asignadosfemeninos'] = 0;            
  1022.         }
  1023.         return $totales;
  1024.     }
  1025.     public function getProcesos()
  1026.     {
  1027.         $em $this ->em;
  1028.         $conn $em->getConnection();
  1029.         $query "SELECT proceso_reclutamiento.id,
  1030.                     proceso_reclutamiento.anno::text || ' - ' || proceso_reclutamiento.llamada AS nombre
  1031.                 FROM proceso_reclutamiento;";
  1032.         $statement $conn->prepare($query);
  1033.         $res $statement->executeQuery()->fetchAllAssociative(); 
  1034.         return $res;
  1035.     }     
  1036. /*    
  1037.     public function getBasesMovilizacion()
  1038.     {
  1039.         $em = $this ->em;
  1040.         $conn = $em->getConnection();
  1041.         $query = "SELECT base_movilizacion.id,
  1042.                     base_movilizacion.nombre
  1043.                 FROM base_movilizacion;";
  1044.         $statement = $conn->prepare($query);
  1045.         $statement->execute();
  1046.         $res = $statement->fetchAll(); 
  1047.         return $res;
  1048.     }     
  1049.     public function getCentrosMovilizacion()
  1050.     {
  1051.         $em = $this ->em;
  1052.         $conn = $em->getConnection();
  1053.         $query = "SELECT centro_movilizacion.id,
  1054.                     centro_movilizacion.nombre
  1055.                 FROM centro_movilizacion;";
  1056.         $statement = $conn->prepare($query);
  1057.         $statement->execute();
  1058.         $res = $statement->fetchAll(); 
  1059.         return $res;
  1060.     }     
  1061.     
  1062.     public function getUnidadesMilitares()
  1063.     {
  1064.         $em = $this ->em;
  1065.         $conn = $em->getConnection();
  1066.         $query = "SELECT unidad_militar.id,
  1067.                     unidad_militar.nombre
  1068.                 FROM unidad_militar;";
  1069.         $statement = $conn->prepare($query);
  1070.         $statement->execute();
  1071.         $res = $statement->fetchAll(); 
  1072.         return $res;
  1073.     }     
  1074. */    
  1075.     public function avanceNacionalAction($proceso
  1076.     {
  1077.         if (isset($proceso) && $proceso 0) {
  1078.             $this->filterData['proceso'] = $proceso;
  1079.         }
  1080.         else {
  1081.                 $this->filterData['proceso'] = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId(); 
  1082.         }
  1083.         
  1084.         $totales $this->getTotalesNacionalesProceso();
  1085.         $avances = array('total' => 'masculino' => 0'femenino' => 0);
  1086.         if ($totales)
  1087.         {
  1088.             if ($totales['cupomasculino'] > 0)
  1089.                 $avances['masculino'] = round($totales['asignadosmasculinos']*100/$totales['cupomasculino'],2); 
  1090.             if ($totales['cupofemenino'] > 0)
  1091.                 $avances['femenino'] = round($totales['asignadosfemeninos']*100/$totales['cupofemenino'],2);
  1092.             if ($totales['cupomasculino']> || $totales['cupofemenino']>0)
  1093.                 $avances['total'] = round(($totales['asignadosmasculinos'] + $totales['asignadosfemeninos'])*100/($totales['cupomasculino'] + $totales['cupofemenino']),2);
  1094.         }
  1095.         return $this->render('ReportesMapas/avances_porcientos.html.twig', array('avances'=>$avances));
  1096.        
  1097.     }
  1098.     
  1099.     protected function getFormFilter()
  1100.     {
  1101.         $repo $this->em->getRepository('App\\Entity\\ReclutaProceso');
  1102.         $user $this->getUser();
  1103.         if ($this->routeClassName=='reporteresultados')
  1104.         {
  1105.             $formulario = array();
  1106.             $formulario['proceso'] = array(
  1107.                 'nombre'   => 'proceso',
  1108.                 'tipo'     => EntityType::class,
  1109.                 'type'     => 'association'
  1110.                 'atributos'=> array(
  1111.                     'label' => $this->translator->trans(
  1112.                         $this->translatorBase.'.fields.proceso', array(), 'crud'),
  1113.                     'class' => 'App\\Entity\\ProcesoReclutamiento',
  1114.                     'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1115.                     'empty_data' => null,
  1116.                     'mapped'=>false,
  1117.                     'required'=> false,
  1118.                     'attr' => array(
  1119.                         'class'=>'chosen-select',
  1120.                         'style'=>'width: 100%',
  1121.                         'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
  1122.                     )
  1123.                 )
  1124.             );
  1125.             $formulario['base'] = array(
  1126.                 'nombre'   => 'base',
  1127.                 'tipo'     => EntityType::class,
  1128.                 'type'     => 'association'
  1129.                 'atributos'=> array(
  1130.                     'label' => $this->translator->trans(
  1131.                         $this->translatorBase.'.fields.base', array(), 'crud'),
  1132.                     'class' => 'App\\Entity\\BaseMovilizacion',
  1133.                     'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1134.                     'empty_data' => null,
  1135.                     'mapped'=>false,
  1136.                     'required'=> false,
  1137.                     'attr' => array(
  1138.                         'class'=>'chosen-select',
  1139.                         'style'=>'width: 100%',
  1140.                         'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
  1141.                     )
  1142.                 )
  1143.             );
  1144.             $formulario['centro'] = array(
  1145.                 'nombre'   => 'centro',
  1146.                 'tipo'     => EntityType::class,
  1147.                 'type'     => 'association'
  1148.                 'atributos'=> array(
  1149.                     'label' => $this->translator->trans(
  1150.                         $this->translatorBase.'.fields.centro', array(), 'crud'),
  1151.                     'class' => 'App\\Entity\\CentroMovilizacion',
  1152.                     'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1153.                     'empty_data' => null,
  1154.                     'mapped'=>false,
  1155.                     'required'=> false,
  1156.                     'attr' => array(
  1157.                         'class'=>'chosen-select',
  1158.                         'style'=>'width: 100%',
  1159.                         'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
  1160.                     )
  1161.                 )
  1162.             );
  1163.             $formulario['unidad'] = array(
  1164.                 'nombre'   => 'unidad',
  1165.                 'tipo'     => EntityType::class,
  1166.                 'type'     => 'association'
  1167.                 'atributos'=> array(
  1168.                     'label' => $this->translator->trans(
  1169.                         $this->translatorBase.'.fields.unidad', array(), 'crud'),
  1170.                     'class' => 'App\\Entity\\UnidadMilitar',
  1171.                     'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1172.                     'empty_data' => null,
  1173.                     'mapped'=>false,
  1174.                     'required'=> false,
  1175.                     'attr' => array(
  1176.                         'class'=>'chosen-select',
  1177.                         'style'=>'width: 100%',
  1178.                         'data-placeholder'=>$this->translator->trans('choice_value.empty_value',array(),'crud'),
  1179.                     )
  1180.                 )
  1181.             );
  1182.             $formulario['base']['atributos']['query_builder'] = $repo->queryBasesPorProceso($user);
  1183.             $formulario['centro']['atributos']['query_builder'] = $repo->queryCentrosPorBase($user);
  1184.             $formulario['unidad']['atributos']['query_builder'] = $repo->queryUnidadesPorCentro($user);
  1185.             
  1186.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
  1187.             {
  1188.                 $formulario['base']['atributos']['disabled'] = true;
  1189.             }
  1190.             
  1191.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
  1192.                 $this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
  1193.             {            
  1194.                 $formulario['base']['atributos']['disabled'] = true;
  1195.                 $formulario['centro']['atributos']['disabled'] = true;
  1196.             }
  1197.             
  1198.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD') === true)
  1199.             {            
  1200.                 $formulario['base']['atributos']['disabled'] = true;
  1201.                 $formulario['centro']['atributos']['disabled'] = true;
  1202.                 $formulario['unidad']['atributos']['disabled'] = true;
  1203.             }
  1204.             
  1205. /*            if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') === true)
  1206.             {
  1207.                 unset($formulario['base']);
  1208.                 $queryBuilder = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  1209.                         ->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
  1210.                 $formulario['centro']['atributos']['query_builder'] = $queryBuilder;
  1211.                 $queryBuilder = $this->em->getRepository('App\\Entity\\UnidadMilitar')
  1212.                     ->createQueryBuilder('unidad')
  1213.                         ->innerJoin('unidad.centroInstruccion','instr')
  1214.                         ->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId())
  1215.                     ->orderBy('unidad.nombre');
  1216.                 $formulario['unidad']['atributos']['query_builder'] = $queryBuilder;
  1217.             }
  1218. */
  1219.             return $formulario;
  1220.         }
  1221.         else
  1222.         {
  1223.             $formulario parent::getFormFilter();
  1224.             unset($formulario['horaInicioAcuartelamiento']);
  1225.             unset($formulario['horaFinAcuartelamiento']);
  1226.             return $formulario;
  1227.         }
  1228.     }
  1229.     
  1230.     protected function getFormulario($entity
  1231.     {
  1232.         $formulario parent::getFormulario($entity);
  1233.         
  1234.         //unset($formulario['cursos']);
  1235. /*        $aformulario = array();
  1236.         $aformulario['activo'] = $formulario['activo'];
  1237.         return $aformulario;*/
  1238.         
  1239. /*        $formulario['edadMinima']['tipo']='Symfony\Component\Form\Extension\Core\Type\TextType';
  1240.         $formulario['edadMinima']['type']='string';
  1241.         $formulario['edadMinima']['atributos']['data']='18 años';
  1242.         $formulario['edadMinima']['atributos']['disabled']=true;
  1243.         $formulario['edadMinima']['atributos']['mapped']=false;
  1244.         $formulario['edadMinima']['atributos']['required']=false;
  1245.         unset($formulario['edadMinima']['atributos']['attr']['class']);
  1246.         $formulario['edadMaxima']['tipo']='Symfony\Component\Form\Extension\Core\Type\TextType';
  1247.         $formulario['edadMaxima']['type']='string';
  1248.         $formulario['edadMaxima']['atributos']['data']='21 años, 11 meses y 29 días';
  1249.         $formulario['edadMaxima']['atributos']['disabled']=true;
  1250.         $formulario['edadMaxima']['atributos']['mapped']=false;
  1251.         $formulario['edadMaxima']['atributos']['required']=false;
  1252.         unset($formulario['edadMaxima']['atributos']['attr']['class']);*/
  1253. /*        $formulario['psicologo']['atributos']['attr']['containerclass']='full-row';
  1254.         $formulario['medico']['atributos']['attr']['containerclass']='full-row';
  1255.         $formulario['odontologo']['atributos']['attr']['containerclass']='full-row';
  1256.         $formulario['laboratorista']['atributos']['attr']['containerclass']='full-row';
  1257. */
  1258.         $formulario['llamada']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
  1259.         $formulario['llamada']['atributos']['choices']=array('Primera'=>'PRIMERA',
  1260.                                                               'Segunda'=>'SEGUNDA',
  1261.                                                               'Tercera'=>'TERCERA',
  1262.             );
  1263.         $formulario['llamada']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
  1264.         $formulario['llamada']['atributos']['empty_data'] = null;
  1265.         
  1266.         $formulario['anno']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
  1267.         $formulario['anno']['atributos']['choices']=array();
  1268.         $year = new \DateTime();
  1269.         $year $year->format('Y');
  1270.         for ($c=65$c>=0$c--)
  1271.         {
  1272.             $formulario['anno']['atributos']['choices'][$year-$c]=$year-$c;
  1273.         }
  1274.         $formulario['anno']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
  1275.         $formulario['anno']['atributos']['empty_data'] = null;
  1276.         unset($formulario['anno']['atributos']['attr']['class']);       
  1277.         return $formulario;
  1278.     }
  1279.     
  1280.    protected function indexGetFields() {
  1281.        if ($this->routeClassName=='reporteresultados')
  1282.        {
  1283.            $fields = array('Lugar''OrgH''OrgM''AcuH''AcuM''FaltaH''FaltaM''%H''%M''Excesos');
  1284.        }
  1285.        else
  1286.        {
  1287.            $fields parent::indexGetFields();
  1288.        }
  1289.        return $fields;
  1290.    }
  1291.  
  1292.     protected function setFiltros()
  1293.     {
  1294.         if (!isset($this->filterData['proceso']))
  1295.         {
  1296.             $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  1297.                     ->findOneBy(array('activo'=>true));
  1298.             if ($procesoActivo)
  1299.             {
  1300.                 $this->filterData['proceso']=$procesoActivo->getId();
  1301.             }
  1302.         }
  1303.         if ($this->routeClassName=='reporteresultados')
  1304.         {
  1305.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD') === true)
  1306.             {
  1307.                 $this->filterData['unidad']= $this->getUser()->getUnidadMilitar()->getId();
  1308.             }
  1309.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
  1310.             {
  1311.                 $this->filterData['base']= $this->getUser()->getBaseMovilizacion()->getId();
  1312.             }
  1313.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
  1314.                 $this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
  1315.             {            
  1316.                 $this->filterData['centro']= $this->getUser()->getCentroMovilizacion()->getId(); 
  1317.                 $base $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  1318.                     ->findOneBy(array('proceso'=>$this->filterData['proceso'], 'lugar'=>$this->filterData['centro']));
  1319.                 $this->filterData['base']= $base->getId();
  1320.             }
  1321.             
  1322.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') === true)
  1323.             {    
  1324.                 if(!isset($this->filterData['centro']))
  1325.                 {
  1326.                     $centros $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  1327.                             ->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId())
  1328.                             ->getQuery()->getResult();
  1329.                     $this->filterData['centro']=$centros[0]->getId();
  1330.                     $base $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  1331.                         ->findOneBy(array('proceso'=>$this->filterData['proceso'], 'lugar'=>$this->filterData['centro']));
  1332.                     $this->filterData['base']= $base->getId();
  1333.                 }
  1334.             }
  1335.         }
  1336.     }
  1337.     
  1338.     public function deleteTestElementAction($tipo$id)
  1339.     {
  1340.         $bdId substr($id2);
  1341.         $this->logger->error('WWWWWW bdId '.$bdId);
  1342.         $this->logger->error('WWWWWW tipo '.$tipo);
  1343.         $result = [
  1344.             'ok' => $this->deleteTestElementNode($tipo$bdId),
  1345.             'id' => $id,
  1346.         ];
  1347.         $data = new Response(json_encode($result));
  1348.         $data->headers->set('Content-Type''application/json');
  1349.         return $data;
  1350.     }
  1351.     
  1352.     protected function deleteTestElementNode($tipo$id)
  1353.     {
  1354.         $this->logger->error('WWWWWW deleteTestElementNode bdId '.$id);
  1355.         $this->logger->error('WWWWWW deleteTestElementNode tipo '.$tipo);
  1356.         $childNames = [
  1357.             'sistema' => 'eje',
  1358.             'eje' => 'criterio',
  1359.             'criterio' => 'pregunta',
  1360.             'pregunta' => 'NONE',
  1361.         ];
  1362.         try {
  1363.             if ($childNames[$tipo] != 'NONE')
  1364.             {
  1365.             $this->logger->error('WWWWWW not null');
  1366.                 $childEntityName 'Test'ucfirst($childNames[$tipo]);
  1367.             $this->logger->error('WWWWWW $childEntityName '.$childEntityName);
  1368.                 $hijos $this->em->getRepository('App\\Entity\\'.$childEntityName)->findBy([$tipo=>$id]);
  1369.             $this->logger->error('WWWWWW $hijos '.count($hijos));
  1370.                 foreach ($hijos as $hijo)
  1371.                 {
  1372.                     if (!$this->deleteTestElementNode($childNames[$tipo], $hijo->getId()))
  1373.                     {
  1374.                         return false;
  1375.                     }
  1376.                 }
  1377.             }
  1378.             return $this->deleteTestElementLeaf($tipo$id);
  1379.         }
  1380.         catch (\Exception $exc)
  1381.         {
  1382.             return false;
  1383.         }
  1384.         return true;
  1385.     }
  1386.     
  1387.     protected function deleteTestElementLeaf($tipo$id)
  1388.     {
  1389.         $this->logger->error('WWWWWW deleteTestElementLeaf bdId '.$id);
  1390.         $this->logger->error('WWWWWW deleteTestElementLeaf tipo '.$tipo);
  1391.         $tipo ucwords($tipo);
  1392.         $element $this->em->getRepository('App\\Entity\\Test'.$tipo)->find($id);
  1393.         if ($element)
  1394.         {
  1395.             try {
  1396.                 $this->em->remove($element);
  1397.                 $this->em->flush();
  1398.             }
  1399.             catch(\Exception $exc)
  1400.             {
  1401.                 return false;
  1402.             }
  1403.         }
  1404.         return true;
  1405.     }
  1406.    
  1407.     public function saveTestElementAction()
  1408.     {
  1409.         $result $this->saveTestElement();
  1410.         
  1411.         $data = new Response(json_encode($result));
  1412.         $data->headers->set('Content-Type''application/json');
  1413.         return $data;
  1414.     }
  1415.     
  1416.     public function saveTestElement()
  1417.     {
  1418.         try {
  1419.             $data $this->request->get('test');
  1420.             $id str_replace('N-'''$data['id']);
  1421.             $result = [
  1422.                 'ok' => false,
  1423.                 'id' => $data['id'],
  1424.             ];
  1425.             $newElement $id != $data['id'];
  1426.             $result['newElement'] = $newElement;
  1427.             
  1428.             $entity substr($id02);
  1429.             $result['entity'] = $entity;
  1430.             switch ($entity)
  1431.             {
  1432.                 case 'S-':
  1433.                     if ($newElement)
  1434.                     {
  1435.                         $element = new TestSistema();
  1436.                         $proceso $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($data['proceso']);
  1437.                         $element->setProceso($proceso);
  1438.                     }
  1439.                     else
  1440.                     {
  1441.                         $id str_replace('S-'''$id);
  1442.                         $element $this->em->getRepository('App\\Entity\\TestSistema')->find($id);
  1443.                     }
  1444.                     if (!$element)
  1445.                     {
  1446.                         return $result;
  1447.                     }
  1448.                     
  1449.                     $element->setNombre($data['nombre']);
  1450.                     break;
  1451.                 case 'E-':
  1452.                     if ($newElement)
  1453.                     {
  1454.                         $parentId str_replace('S-'''$data['parentId']);
  1455.                         $parent $this->em->getRepository('App\\Entity\\TestSistema')->find($parentId);
  1456.                         if (!$parent)
  1457.                         {
  1458.                             return $result;
  1459.                         }
  1460.                         $element = new TestEje();
  1461.                         $element->setSistema($parent);
  1462.                     }
  1463.                     else
  1464.                     {
  1465.                         $id str_replace('E-'''$id);
  1466.                         $element $this->em->getRepository('App\\Entity\\TestEje')->find($id);
  1467.                     }
  1468.                     if (!$element)
  1469.                     {
  1470.                         return $result;
  1471.                     }
  1472.                     $element->setNombre($data['nombre']);
  1473.                     break;
  1474.                 case 'C-':
  1475.                     if ($newElement)
  1476.                     {
  1477.                         $parentId str_replace('E-'''$data['parentId']);
  1478.                         $parent $this->em->getRepository('App\\Entity\\TestEje')->find($parentId);
  1479.                         if (!$parent)
  1480.                         {
  1481.                             return $result;
  1482.                         }
  1483.                         $element = new TestCriterio();
  1484.                         $element->setEje($parent);
  1485.                     }
  1486.                     else
  1487.                     {
  1488.                         $id str_replace('C-'''$id);
  1489.                         $element $this->em->getRepository('App\\Entity\\TestCriterio')->find($id);
  1490.                     }
  1491.                     if (!$element)
  1492.                     {
  1493.                         return $result;
  1494.                     }
  1495.                     $element->setNombre($data['nombre']);
  1496.                     $element->setRiesgoBajoDesde($data['riesgoBajoDesde']);
  1497.                     $element->setRiesgoBajoHasta($data['riesgoBajoHasta']);
  1498.                     $element->setRiesgoMedioDesde($data['riesgoMedioDesde']);
  1499.                     $element->setRiesgoMedioHasta($data['riesgoMedioHasta']);
  1500.                     $element->setRiesgoAltoDesde($data['riesgoAltoDesde']);
  1501.                     $element->setRiesgoAltoHasta($data['riesgoAltoHasta']);
  1502.                     break;
  1503.                 case 'P-':
  1504.                     if ($newElement)
  1505.                     {
  1506.                         $parentId str_replace('C-'''$data['parentId']);
  1507.                         $parent $this->em->getRepository('App\\Entity\\TestCriterio')->find($parentId);
  1508.                         if (!$parent)
  1509.                         {
  1510.                             return $result;
  1511.                         }
  1512.                         $element = new TestPregunta();
  1513.                         $element->setCriterio($parent);
  1514.                     }
  1515.                     else
  1516.                     {
  1517.                         $id str_replace('P-'''$id);
  1518.                         $element $this->em->getRepository('App\\Entity\\TestPregunta')->find($id);
  1519.                     }
  1520.                     if (!$element)
  1521.                     {
  1522.                         return $result;
  1523.                     }
  1524.                     $element->setNombre($data['nombre']);
  1525.                     $element->setTipo($data['tipo']);
  1526.                     break;
  1527.                 default:
  1528.                     return $result;
  1529.                     break;
  1530.             }
  1531.             $this->em->persist($element);
  1532.             $this->em->flush();
  1533.             $result['ok'] = true;
  1534.             $result['newId'] = $entity.$element->getId();
  1535.         }
  1536.         catch (\Exception $ecx) {
  1537.             return $result;
  1538.         }
  1539.         return $result;
  1540.     }
  1541.     
  1542.     public function getTestElementsAction($proceso$editable)
  1543.     {
  1544.         $params = [
  1545.             'preguntas' => [],
  1546.             'maxSistema' => 0,
  1547.             'maxEje' => 0,
  1548.             'maxCriterio' => 0,
  1549.             'maxPregunta' => 0,
  1550.         ];
  1551.         $sistemas $this->em->getRepository('App\\Entity\\TestSistema')
  1552.             ->createQueryBuilder('s')
  1553.             ->innerJoin('s.proceso''proceso')
  1554.             ->where('proceso.id = '.$proceso)
  1555.             ->getQuery()->getResult();
  1556.         foreach ($sistemas as $sistema)
  1557.         {
  1558.             if ($sistema->getId()>$params['maxSistema'])
  1559.             {
  1560.                 $params['maxSistema'] = $sistema->getId();
  1561.             }
  1562.             $params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
  1563.             $ejes $this->em->getRepository('App\\Entity\\TestEje')
  1564.                 ->createQueryBuilder('e')
  1565.                 ->innerJoin('e.sistema''sistema')
  1566.                 ->where('sistema.id = '.$sistema->getId())
  1567.                 ->getQuery()->getResult();
  1568.             foreach ($ejes as $eje)
  1569.             {
  1570.                 if ($eje->getId()>$params['maxEje'])
  1571.                 {
  1572.                     $params['maxEje'] = $eje->getId();
  1573.                 }
  1574.                 $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
  1575.                 
  1576.                 $criterios $this->em->getRepository('App\\Entity\\TestCriterio')
  1577.                     ->createQueryBuilder('c')
  1578.                     ->innerJoin('c.eje''eje')
  1579.                     ->where('eje.id = '.$eje->getId())
  1580.                     ->getQuery()->getResult();
  1581.                 foreach ($criterios as $criterio)
  1582.                 {
  1583.                     if ($criterio->getId()>$params['maxCriterio'])
  1584.                     {
  1585.                         $params['maxCriterio'] = $criterio->getId();
  1586.                     }
  1587.                     $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
  1588.                     $preguntas $this->em->getRepository('App\\Entity\\TestPregunta')
  1589.                                                 ->createQueryBuilder('p')
  1590.                                                 ->innerJoin('p.criterio''criterio')
  1591.                                                 ->where('criterio.id = '.$criterio->getId())
  1592.                                                 ->getQuery()->getResult();
  1593.                     foreach ($preguntas as $pregunta)
  1594.                     {
  1595.                         if ($pregunta->getId()>$params['maxPregunta'])
  1596.                         {
  1597.                             $params['maxPregunta'] = $pregunta->getId();
  1598.                         }
  1599.                         $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = $pregunta
  1600.                     }
  1601.                 }
  1602.             }
  1603.         }
  1604.         
  1605.         if ($editable=='YES')
  1606.         {
  1607.             return $this->render('ProcesoReclutamiento/testPreguntas.html.twig'$params);
  1608.         }
  1609.         else
  1610.         {
  1611.             return $this->render('ProcesoReclutamiento/testPreguntasShowBody.html.twig'$params);
  1612.         }
  1613.     }
  1614.     
  1615.     public function replicateTestElementsAction($procesoOrigen$procesoDestino)
  1616.     {
  1617.         $result = ['ok'=>true];
  1618.         try
  1619.         {
  1620.             
  1621.             $this->removeTestElements($procesoDestino);
  1622.             $procesoDestino $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($procesoDestino);
  1623.             $sistemas $this->em->getRepository('App\\Entity\\TestSistema')
  1624.                 ->createQueryBuilder('s')
  1625.                 ->innerJoin('s.proceso''proceso')
  1626.                 ->where('proceso.id = '.$procesoOrigen)
  1627.                 ->getQuery()->getResult();
  1628.             foreach ($sistemas as $sistema)
  1629.             {
  1630.                 $newSistema = new TestSistema();
  1631.                 $newSistema->setNombre($sistema->getNombre());
  1632.                 $newSistema->setProceso($procesoDestino);
  1633.                 $this->em->persist($newSistema);
  1634. //                $this->em->flush();
  1635.                 $ejes $this->em->getRepository('App\\Entity\\TestEje')
  1636.                     ->createQueryBuilder('e')
  1637.                     ->innerJoin('e.sistema''sistema')
  1638.                     ->where('sistema.id = '.$sistema->getId())
  1639.                     ->getQuery()->getResult();
  1640.                 foreach ($ejes as $eje)
  1641.                 {
  1642.                     $newEje = new TestEje();
  1643.                     $newEje->setNombre($eje->getNombre());
  1644.                     $newEje->setSistema($newSistema);
  1645.                     $this->em->persist($newEje);
  1646. //                    $this->em->flush();
  1647.                     $criterios $this->em->getRepository('App\\Entity\\TestCriterio')
  1648.                         ->createQueryBuilder('c')
  1649.                         ->innerJoin('c.eje''eje')
  1650.                         ->where('eje.id = '.$eje->getId())
  1651.                         ->getQuery()->getResult();
  1652.                     foreach ($criterios as $criterio)
  1653.                     {
  1654.                         $newCriterio = new TestCriterio();
  1655.                         $newCriterio->setNombre($criterio->getNombre());
  1656.                         $newCriterio->setRiesgoBajoDesde($criterio->getRiesgoBajoDesde());
  1657.                         $newCriterio->setRiesgoBajoHasta($criterio->getRiesgoBajoHasta());
  1658.                         $newCriterio->setRiesgoMedioDesde($criterio->getRiesgoMedioDesde());
  1659.                         $newCriterio->setRiesgoMedioHasta($criterio->getRiesgoMedioHasta());
  1660.                         $newCriterio->setRiesgoAltoDesde($criterio->getRiesgoAltoDesde());
  1661.                         $newCriterio->setRiesgoAltoHasta($criterio->getRiesgoAltoHasta());
  1662.                         $newCriterio->setEje($newEje);
  1663.                         $this->em->persist($newCriterio);
  1664. //                        $this->em->flush();
  1665.                         $preguntas $this->em->getRepository('App\\Entity\\TestPregunta')
  1666.                                                     ->createQueryBuilder('p')
  1667.                                                     ->innerJoin('p.criterio''criterio')
  1668.                                                     ->where('criterio.id = '.$criterio->getId())
  1669.                                                     ->getQuery()->getResult();
  1670.                         foreach ($preguntas as $pregunta)
  1671.                         {
  1672.                             $newPregunta = new TestPregunta();
  1673.                             $newPregunta->setNombre($pregunta->getNombre());
  1674.                             $newPregunta->setTipo($pregunta->getTipo());
  1675.                             $newPregunta->setCriterio($newCriterio);
  1676.                             $this->em->persist($newPregunta);
  1677. //                            $this->em->flush();
  1678.                         }
  1679.                     }
  1680.                 }
  1681.             }
  1682.             $this->em->flush();
  1683.             
  1684.         }
  1685.         catch(\Exception $exc)
  1686.         {
  1687.             $result['ok'] = false;
  1688.             $result['msg'] = $exc->getMessage();
  1689.         }
  1690.         $data = new Response(json_encode($result));
  1691.         $data->headers->set('Content-Type''application/json');
  1692.         return $data;
  1693.     }
  1694.     
  1695.     private function removeTestElements($proceso)
  1696.     {
  1697.         $sistemas $this->em->getRepository('App\\Entity\\TestSistema')
  1698.             ->createQueryBuilder('s')
  1699.             ->innerJoin('s.proceso''proceso')
  1700.             ->where('proceso.id = '.$proceso)
  1701.             ->getQuery()->getResult();
  1702.         foreach ($sistemas as $sistema)
  1703.         {
  1704.             $ejes $this->em->getRepository('App\\Entity\\TestEje')
  1705.                 ->createQueryBuilder('e')
  1706.                 ->innerJoin('e.sistema''sistema')
  1707.                 ->where('sistema.id = '.$sistema->getId())
  1708.                 ->getQuery()->getResult();
  1709.             foreach ($ejes as $eje)
  1710.             {
  1711.                 $criterios $this->em->getRepository('App\\Entity\\TestCriterio')
  1712.                     ->createQueryBuilder('c')
  1713.                     ->innerJoin('c.eje''eje')
  1714.                     ->where('eje.id = '.$eje->getId())
  1715.                     ->getQuery()->getResult();
  1716.                 foreach ($criterios as $criterio)
  1717.                 {
  1718.                     $preguntas $this->em->getRepository('App\\Entity\\TestPregunta')
  1719.                                                 ->createQueryBuilder('p')
  1720.                                                 ->innerJoin('p.criterio''criterio')
  1721.                                                 ->where('criterio.id = '.$criterio->getId())
  1722.                                                 ->getQuery()->getResult();
  1723.                     foreach ($preguntas as $pregunta)
  1724.                     {
  1725.                         $this->em->remove($pregunta);
  1726.                     }
  1727. //                    $this->em->flush();
  1728.                     $this->em->remove($criterio);
  1729.                 }
  1730. //                $this->em->flush();
  1731.                 $this->em->remove($eje);
  1732.             }
  1733. //            $this->em->flush();
  1734.             $this->em->remove($sistema);
  1735.         }
  1736.         $this->em->flush();
  1737.     }
  1738.     protected function setValuesBeforeForm($entity)
  1739.     {
  1740.         parent::setValuesBeforeForm($entity);
  1741.         if ($this->accion=='CREATE')
  1742.         {
  1743.             $proceso $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  1744.                     ->createQueryBuilder('p')
  1745.                     ->orderBy('p.fechaAcuartelamiento''DESC')
  1746.                     ->setMaxResults(1)
  1747.                     ->getQuery()->getResult();
  1748.             if (!empty($proceso))
  1749.             {
  1750.                 $proceso $proceso[0];
  1751.                 
  1752.                 if ($proceso->getFotoUniforme())
  1753.                 {
  1754.                     $entity->setFotoUniforme($proceso->getFotoUniforme());
  1755.                 }
  1756.                 if ($proceso->getFotoJockey())
  1757.                 {
  1758.                     $entity->setFotoJockey($proceso->getFotoJockey());
  1759.                 }
  1760.                 if ($proceso->getFotoCalzado())
  1761.                 {
  1762.                     $entity->setFotoCalzado($proceso->getFotoCalzado());
  1763.                 }
  1764.                 if ($proceso->getFotoCamiseta())
  1765.                 {
  1766.                     $entity->setFotoCamiseta($proceso->getFotoCamiseta());
  1767.                 }
  1768.                 if ($proceso->getTituloReporteUniforme())
  1769.                 {
  1770.                     $entity->setTituloReporteUniforme($proceso->getTituloReporteUniforme());
  1771.                 }
  1772.                 if ($proceso->getTituloReporteJockey())
  1773.                 {
  1774.                     $entity->setTituloReporteJockey($proceso->getTituloReporteJockey());
  1775.                 }
  1776.                 if ($proceso->getTituloReporteCalzado())
  1777.                 {
  1778.                     $entity->setTituloReporteCalzado($proceso->getTituloReporteCalzado());
  1779.                 }
  1780.                 if ($proceso->getTituloReporteCamiseta())
  1781.                 {
  1782.                     $entity->setTituloReporteCamiseta($proceso->getTituloReporteCamiseta());
  1783.                 }
  1784.                 if ($proceso->getTituloReporteEstudios())
  1785.                 {
  1786.                     $entity->setTituloReporteEstudios($proceso->getTituloReporteEstudios());
  1787.                 }
  1788.             }
  1789.         }
  1790.     }    
  1791.     
  1792.     protected function createRedirectOnSuccess($entity)
  1793.     {
  1794.         if ($this->ajax)
  1795.         {
  1796.             return parent::createRedirectOnSuccess($entity);
  1797.         }
  1798.         else
  1799.         {
  1800.             return $this->redirect($this->generateUrl('crud_plain_show', ['routeClassName'=>$this->routeClassName'id'=>$entity->getId(), 'rol'=>$this->rol]));
  1801.         }
  1802.     } 
  1803.     
  1804.     
  1805. }