src/Controller/ReclutaProcesoController.php line 924

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Crud\Controller\crudPlainController;
  4. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use \Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use App\Entity\ReclutaProceso;
  9. use App\Enum\VolverPresentarseEnum;
  10. use Endroid\QrCode\Builder\BuilderRegistryInterface;
  11. use Endroid\QrCodeBundle\Response\QrCodeResponse;
  12. use App\Enum\CausaNoIdoneoEnum;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use Dompdf\Dompdf;
  15. use Dompdf\Options;
  16. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  17. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  18. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  19. use Symfony\Component\HttpFoundation\StreamedResponse;
  20. use PhpOffice\PhpSpreadsheet\Style\Fill;
  21. use PhpOffice\PhpSpreadsheet\Style\Color;
  22. /**
  23.  * ReclutaProcesoController controller.
  24.  *
  25.  */
  26. class ReclutaProcesoController extends crudPlainController
  27. {
  28.     public function imprimirFichaProcesoAction($idReclutaProceso)
  29.     {
  30.         $em $this ->em;
  31.         $proceso $em->getRepository('App\\Entity\\ReclutaProceso')->find($idReclutaProceso);
  32.         if (!$proceso
  33.           throw new \RuntimeException($this->translator->trans(
  34.                                         'error.instance_not_found',
  35.                                         array('%classname%' => $this->routeClassName.'/'.$this->className,
  36.                                               '%id%'        => $id),
  37.                                         'crud'));
  38.         $this->setInitialValues('all''reclutaproceso');
  39.         $paramsForTwigShow $this->showCreateParamsForTwig($proceso);
  40.         $paramsForTwigShow['tab']=-1;
  41.         if ($proceso->getIdoneo())
  42.         {
  43.             $html $this->renderView("ReclutaProceso/show_pdf_gral.html.twig", ['entity'=>$proceso]);
  44.         }
  45.         else
  46.         {
  47.             $html $this->renderView("ReclutaProceso/show_pdf_noidoneo.html.twig"$paramsForTwigShow);
  48.         }
  49.         $options = new Options();
  50.         $options->setIsRemoteEnabled(true);
  51.         $dompdf = new Dompdf();
  52.         $dompdf->setOptions($options);
  53.         $dompdf->setPaper('letter''portrait');
  54.         $dompdf->loadHtml($html);
  55.         $dompdf->render();
  56.         $dompdf->stream();        
  57.         
  58. /*        
  59.         // Create an instance of the class:
  60.         $pdfparam = [
  61.                 'mode' => '',
  62.                 'format' => 'letter',
  63.                 'default_font_size' => 0,
  64.                 'default_font' => '',
  65.                 'margin_left' => 10,
  66.                 'margin_right' => 10,
  67.                 'margin_top' => 5,
  68.                 'margin_bottom' => 5,
  69.                 'margin_header' => 9,
  70.                 'margin_footer' => 9,
  71.                 'orientation' => 'P',
  72.                 'setAutoBottomMargin' => 'stretch',
  73.                 'setAutoTopMargin' => 'stretch',];
  74.         $mpdf = new \Mpdf\Mpdf($pdfparam);
  75.         
  76.         $dompdf = new Dompdf();
  77.         $dompdf->setPaper('letter', 'portrait');
  78.         $dompdf->loadHtml($html);
  79.         $dompdf->render();
  80.         $dompdf->stream();        
  81.         
  82.         $mpdf->SetAutoPageBreak(true, $mpdf->bMargin);
  83.         //$mpdf->SetTitle('FICHA DE INSCRIPCION');
  84.         $mpdf->SetHTMLHeader();
  85.         if ($proceso->getIdoneo())
  86.         {
  87.             $mpdf->SetHTMLFooter($this->renderView("ReclutaProceso/show_pdf_footer.html.twig", $paramsForTwigShow));
  88.             // datos del recluta y del proceso
  89.             $html = $this->renderView("ReclutaProceso/show_pdf_gral.html.twig", $paramsForTwigShow);
  90.             $mpdf->WriteHTML($html);
  91.             // test psicologico
  92.             $mpdf->AddPage();
  93.             //$preguntas = $em->getRepository('App\\Entity\\ReclutaProcesoPregunta')->findBy(array('reclutaProceso'=>$idReclutaProceso));
  94.             //$html = $this->renderView("App:ReclutaProcesoPregunta:table_pdf.html.twig", array('entities'=>$preguntas));
  95.             $html = $this->renderView("ReclutaProceso/show_pdf_test.html.twig", $paramsForTwigShow);
  96.             $mpdf->WriteHTML($html);
  97.             // examen medico
  98.             $mpdf->AddPage();
  99.             $html = $this->renderView("ReclutaProceso/show_pdf_emed.html.twig", $paramsForTwigShow);
  100.             $mpdf->WriteHTML($html);
  101.         }
  102.         else
  103.         {
  104.             $html = $this->renderView("ReclutaProceso/show_pdf_noidoneo.html.twig", $paramsForTwigShow);
  105.             $mpdf->WriteHTML($html);
  106.         }
  107.         // Output a PDF file directly to the browser
  108.         $mpdf->Output();      */ 
  109.     }        
  110.     public function crearCodigoQRAction($idReclutaProcesoBuilderRegistryInterface $builderRegistry)
  111.     {
  112.         $em $this ->em;
  113.    
  114.         $proceso $em->getRepository('App\\Entity\\ReclutaProceso')->find($idReclutaProceso);
  115.         if (!$proceso
  116.           throw new \RuntimeException($this->translator->trans(
  117.                                         'error.instance_not_found',
  118.                                         array('%classname%' => $this->routeClassName.'/'.$this->className,
  119.                                               '%id%'        => $id),
  120.                                         'crud'));
  121.         $recluta $proceso->getRecluta();
  122.         $data 'ASPIRANTE: '.$recluta->getId().'\n';
  123.         $data .= 'PROCESO: '.$proceso->getProcesoReclutamiento().'\n';
  124.         $data .= 'CENTRO: '.$proceso->getCentroMovilizacion().'\n';
  125.         $data .= 'TURNO: '.$proceso->getTurno().'\n';
  126.         $data .= 'INDENTIFICACION: '.$recluta->getIdentificacion().'\n';
  127.         $data .= 'NOMBRES: '.$recluta->getNombreCompleto().'\n';
  128.         $data .= 'FECHAREGISTRO: '.$proceso->getFechaRegistro()->format('d/m/Y H:i:s').'\n';
  129.         
  130.         $builder $builderRegistry->getBuilder('default');   
  131.         return new QrCodeResponse($builder->data($data)->build());    }    
  132.     
  133.     public function cambiarUnidadAction()
  134.     {
  135.         $em$this->em;
  136.         $bases $em->getRepository('App\\Entity\\BaseMovilizacion')->findBy(array(), array('nombre'=>'ASC'));
  137.         $params=array('bases'=>$bases);
  138.         return $this->render('ReclutaProceso/cambiaUnidad.html.twig',$params);
  139.     }
  140.     
  141.     public function limpiarResultadoAction()
  142.     {
  143.         return $this->render('ReclutaProceso/limpiaResultado.html.twig');
  144.     }
  145.     
  146.     public function bajaVoluntariaAction()
  147.     {
  148.         return $this->render('ReclutaProceso/bajaVoluntaria.html.twig');
  149.     }
  150.     
  151.     public function doCambiarUnidadAction$reclutaProceso$unidad)
  152.     {
  153.         $em $this ->em;
  154.         if ($em->getRepository('App\\Entity\\ReclutaProceso')->cambiaReclutaUnidad($reclutaProceso$unidad))
  155.         {
  156.             $data = array('ok'=>true);
  157.         }
  158.         else
  159.         {
  160.             $data = array('ok'=>false'error'=>'No hay cupo');
  161.         }
  162.         
  163.         $data = new Response(json_encode($data));
  164.         $data->headers->set('Content-Type''application/json');
  165.         return $data;
  166.     }
  167.     
  168.     public function doBajaVoluntariaAction$reclutaProceso)
  169.     {
  170.         $em $this->em;
  171.         $reclutaProceso $em->getRepository('App\\Entity\\ReclutaProceso')->find($reclutaProceso);
  172.         if ($reclutaProceso)
  173.         {
  174.             
  175.             $sexo $reclutaProceso->getRecluta()->getSexo();
  176.             $unidadOriginal $reclutaProceso->getUnidadMilitar();
  177.             $proceso $reclutaProceso->getProcesoReclutamiento();
  178.             $procesoUnidadOriginal $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  179.                 ->findOneBy(array('proceso'=>$proceso->getId(), 'unidad'=>$unidadOriginal->getId()));
  180.             if ($sexo=='Masculino')
  181.             {
  182.                 $procesoUnidadOriginal->setRegistradoMasculino($procesoUnidadOriginal->getRegistradoMasculino()-1);
  183.             }
  184.             else
  185.             {
  186.                 $procesoUnidadOriginal->setRegistradoFemenino($procesoUnidadOriginal->getRegistradoFemenino()-1);
  187.             }
  188.             $reclutaProceso->setUnidadMilitarInicial($reclutaProceso->getUnidadMilitar());
  189.             $reclutaProceso->setUnidadMilitar(null);
  190.             $reclutaProceso->setIdoneo(false);
  191.             $reclutaProceso->setCausaRechazo(CausaNoIdoneoEnum::BAJAVOLUNTARIA);
  192.             $reclutaProceso->setVolverPresentarse(VolverPresentarseEnum::PROXIMO);
  193.             $reclutaProceso->setFechaBaja(new \DateTime());
  194.             $em->persist($reclutaProceso);
  195.             $em->persist($procesoUnidadOriginal);
  196.             $em->flush();
  197.             $data = array('ok'=>true);
  198.         }
  199.         
  200.         $data = new Response(json_encode($data));
  201.         $data->headers->set('Content-Type''application/json');
  202.         return $data;
  203.     }
  204.     
  205.     public function doLimpiarResultadoAction$reclutaProceso)
  206.     {
  207.         $em $this ->em;
  208.         $reclutaProceso $em->getRepository('App\\Entity\\ReclutaProceso')->find($reclutaProceso);
  209.         if ($reclutaProceso)
  210.         {
  211.             if ($reclutaProceso->getIdoneo()) //Hay que desasignarlo
  212.             {
  213.                 $sexo $reclutaProceso->getRecluta()->getSexo();
  214.                 $unidadOriginal $reclutaProceso->getUnidadMilitar();
  215.                 $proceso $reclutaProceso->getProcesoReclutamiento();
  216.                 $procesoUnidadOriginal $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  217.                     ->findOneBy(array('proceso'=>$proceso->getId(), 'unidad'=>$unidadOriginal->getId()));
  218.                 if ($sexo=='Masculino')
  219.                 {
  220.                     $procesoUnidadOriginal->setRegistradoMasculino($procesoUnidadOriginal->getRegistradoMasculino()-1);
  221.                 }
  222.                 else
  223.                 {
  224.                     $procesoUnidadOriginal->setRegistradoFemenino($procesoUnidadOriginal->getRegistradoFemenino()-1);
  225.                 }
  226.                 $em->persist($procesoUnidadOriginal);
  227.                 $reclutaProceso->setUnidadMilitar(null);
  228.             }
  229.             else
  230.             {
  231.                 $reclutaProceso->setCausaRechazo(null);
  232.             }
  233.             $reclutaProceso->setVolverPresentarse(null);
  234.             $reclutaProceso->setIdoneo(true);
  235.             $reclutaProceso->setFechaResultado(null);
  236.             $em->persist($reclutaProceso);
  237.             $em->flush();
  238.             $data = array('ok'=>true);
  239.         }
  240.         
  241.         $data = new Response(json_encode($data));
  242.         $data->headers->set('Content-Type''application/json');
  243.         return $data;
  244.     }
  245.     
  246.     public function buscarReclutaAsignadoAction$cedula)
  247.     {
  248.         $user $this->getUser();
  249.         $em $this ->em;
  250.         $repo $em->getRepository('App\\Entity\\ReclutaProceso');
  251.         $data=array('ok'=>true);
  252.         $procesoActivo $em->getRepository('App\\Entity\\ProcesoReclutamiento')
  253.             ->findOneBy(array('activo'=>true));
  254.         if ($procesoActivo)
  255.         {
  256.             $recluta $repo
  257.                 ->createQueryBuilder('r')
  258.                 ->innerJoin('r.recluta','recluta')
  259.                 ->innerJoin('r.procesoReclutamiento','proceso')
  260.                 ->where('proceso.id='.$procesoActivo->getId())
  261.                 ->andWhere("recluta.identificacion='".$cedula."'")
  262.                 ->andWhere('r.unidadMilitar is not null')
  263.                 ->getQuery()->getOneOrNullResult();
  264.             
  265.             
  266.             if (!$recluta)
  267.             {
  268.                 $data['ok']=false;
  269.                 $data['error']='Con la cédula indicada no hay un recluta asignado a una unidad en el proceso activo';
  270.             }
  271.             else
  272.             {
  273.                 if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD') && 
  274.                     $recluta->getUnidadMilitar()->getId()!=$user->getUnidadMilitar()->getId())
  275.                 {
  276.                     $data['ok']=false;
  277.                     $data['error']='Con la cédula indicada no hay un recluta asignado a esta unidad en el proceso activo';
  278.                 }
  279.                 else
  280.                 {
  281.                     if (($user->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $user->isRoleAssigned('ROLE_COORDINADOR_CENTRO')) && 
  282.                         $recluta->getCentroMovilizacion()->getId()!=$user->getCentroMovilizacion()->getId())
  283.                     {
  284.                         $data['ok']=false;
  285.                         $data['error']='Con la cédula indicada no hay un recluta asignado a una unidad d este centro de movilización';
  286.                     }
  287.                     else
  288.                     {
  289.                         if ($user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION')) 
  290.                         {
  291.                            // habilitar luego 
  292. /*                            $centro = $recluta->getCentroMovilizacion();
  293.                             if (!$centro->getCentrosInstruccion()->contains($user->getCentroInstruccion()))
  294.                             {
  295.                                 $data['ok']=false;
  296.                                 $data['error']='Con la cédula indicada no hay un recluta con resultado establecido';
  297.                             }*/
  298.                         }
  299.                     }
  300.                 }
  301.             }
  302.         }
  303.         else
  304.         {
  305.             $data['ok']=false;
  306.             $data['error']='No hay un proceso activo';
  307.         }
  308.         if ($data['ok'])
  309.         {
  310.             $data['recluta'] = $recluta->getId();
  311.             $data['reclutaNombre'] = $recluta->getRecluta()->getApellidoPaterno().' '.$recluta->getRecluta()->getApellidoMaterno().' '.$recluta->getRecluta()->getNombres(); 
  312.             $data['reclutaIdentificacion'] = $recluta->getRecluta()->getIdentificacion();
  313.             $data['reclutaFoto'] = $recluta->getRecluta()->getFoto() ? $recluta->getRecluta()->getFoto()->getUrl(): ''
  314.             $data['reclutaSexo'] = $recluta->getRecluta()->getSexo(); 
  315.             $unidad $recluta->getUnidadMilitar();
  316.             $data['unidad'] = $unidad->getId();
  317.             $centro $recluta->getCentroMovilizacion();
  318.             $base $recluta->getBaseMovilizacion();
  319.             $centros $repo->loadCentrosPorBase($user$base->getId(), $procesoActivo->getId());            
  320.             $unidades $repo->loadUnidadesPorCentro($user$centro->getId());
  321.             $data['asignado'] = $base->getNombre().' / '.$centro->getNombre().' / '.$unidad->getNombre();
  322.             $data['base'] = $base->getId();
  323.             $html='';
  324.             foreach ($centros as $item)
  325.             {
  326.                 if ($centro->getId()==$item->getId())
  327.                     $html .= '<option value="'.$item->getId().'" selected="true">'.$item->__toString().'</option>';
  328.                 else
  329.                     $html .= '<option value="'.$item->getId().'">'.$item->__toString().'</option>';
  330.             }
  331.             $data['centros'] = $html;
  332.             $html='';
  333.             foreach ($unidades as $item)
  334.             {
  335.                 if ($unidad->getId()==$item->getId())
  336.                     $html .= '<option value="'.$item->getId().'" selected="true">'.$item->__toString().'</option>';
  337.                 else
  338.                     $html .= '<option value="'.$item->getId().'">'.$item->__toString().'</option>';
  339.             }
  340.             $data['unidades'] = $html;
  341.             $data['asignado'] = $base->getNombre().' / '.$centro->getNombre().' / '.$unidad->getNombre();
  342.         }
  343.         $data = new Response(json_encode($data));
  344.         $data->headers->set('Content-Type''application/json');
  345.         return $data;
  346.     }
  347.     
  348.     public function buscarReclutaConResultadoAction$cedula)
  349.     {
  350.         $em $this ->em;
  351.         $data=array('ok'=>true);
  352.         $procesoActivo $em->getRepository('App\\Entity\\ProcesoReclutamiento')
  353.             ->findOneBy(array('activo'=>true));
  354.         if ($procesoActivo)
  355.         {
  356.             $recluta $em->getRepository('App\\Entity\\ReclutaProceso')
  357.                 ->createQueryBuilder('r')
  358.                 ->innerJoin('r.recluta','recluta')
  359.                 ->innerJoin('r.procesoReclutamiento','proceso')
  360.                 ->where('proceso.id='.$procesoActivo->getId())
  361.                 ->andWhere("recluta.identificacion='".$cedula."'")
  362.                 ->andWhere('r.fechaResultado is not null')
  363.                 ->andWhere('r.turno is not null')
  364.                 ->getQuery()->getOneOrNullResult();
  365.             if (!$recluta)
  366.             {
  367.                 $data['ok']=false;
  368.                 $data['error']='Con la cédula indicada no hay un recluta con resultado establecido';
  369.             }
  370.             else
  371.             {
  372.                 if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD') && 
  373.                     $recluta->getUnidadMilitar()->getId()!=$this->getUser()->getUnidadMilitar()->getId())
  374.                 {
  375.                     $data['ok']=false;
  376.                     $data['error']='Con la cédula indicada no hay un recluta con resultado establecido';
  377.                 }
  378.                 else
  379.                 {
  380.                     if (($this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO')) && 
  381.                         $recluta->getCentroMovilizacion()->getId()!=$this->getUser()->getCentroMovilizacion()->getId())
  382.                     {
  383.                         $data['ok']=false;
  384.                         $data['error']='Con la cédula indicada no hay un recluta con resultado establecido';
  385.                     }
  386.                     else
  387.                         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION')) 
  388.                         {
  389.                             /*$centro = $recluta->getCentroMovilizacion();
  390.                             if (!$centro->getCentrosInstruccion()->contains($this->getUser()->getCentroInstruccion()))
  391.                             {
  392.                                 $data['ok']=false;
  393.                                 $data['error']='Con la cédula indicada no hay un recluta con resultado establecido';
  394.                             }*/
  395.                         }
  396.                 }
  397.             }
  398.         }
  399.         else
  400.         {
  401.             $data['ok']=false;
  402.             $data['error']='No hay un proceso activo';
  403.         }
  404.         if ($data['ok'])
  405.         {
  406.             $data['recluta'] = $recluta->getId();
  407.             $data['reclutaNombre'] = $recluta->getRecluta()->getApellidoPaterno().' '.$recluta->getRecluta()->getApellidoMaterno().' '.$recluta->getRecluta()->getNombres(); 
  408.             $data['reclutaIdentificacion'] = $recluta->getRecluta()->getIdentificacion();
  409.             $data['reclutaFoto'] = $recluta->getRecluta()->getFoto() ? $recluta->getRecluta()->getFoto()->getUrl(): ''
  410.             $data['reclutaSexo'] = $recluta->getRecluta()->getSexo(); 
  411.             if ($recluta->getIdoneo())
  412.             {
  413.                 $unidad $recluta->getUnidadMilitar();
  414.                 $data['unidad'] = $unidad->getId();
  415.                 $centro $recluta->getCentroMovilizacion();
  416.                 $base $recluta->getBaseMovilizacion();
  417.                 $data['asignado'] = 'ASIGNADO A '.$base->getNombre().' / '.$centro->getNombre().' / '.$unidad->getNombre();
  418.             }
  419.             else
  420.                 $data['asignado'] = 'NO IDÓNEO / '.$recluta->getCausaRechazoTexto();
  421.         }
  422.         $data = new Response(json_encode($data));
  423.         $data->headers->set('Content-Type''application/json');
  424.         return $data;
  425.     }
  426.     
  427.     public function loadBasesPorProcesoAction($proceso = -1)
  428.     {
  429.         $em $this ->em;
  430.         $user $this->getUser();
  431.         $repo $em->getRepository('App\\Entity\\ReclutaProceso');
  432.         $bases $repo->loadBasesPorProceso($user$proceso);
  433.         return $this->render('@crud/Common/comboreloaded.html.twig', array("entities"=>$bases));
  434.     }
  435.     public function loadCentrosPorBaseAction($base$proceso=-1)
  436.     {
  437.         $em $this ->em;
  438.         $user $this->getUser();
  439.         $repo $em->getRepository('App\\Entity\\ReclutaProceso');
  440.         $centros $repo->loadCentrosPorBase($user$base$proceso);
  441.         return $this->render('@crud/Common/comboreloaded.html.twig', array("entities"=>$centros));
  442.     }
  443.         
  444.     public function loadUnidadesPorCentroAction($centro$proceso=-1)
  445.     {
  446.         $em $this ->em;
  447.         $user $this->getUser();
  448.         $repo $em->getRepository('App\\Entity\\ReclutaProceso');
  449.         $unidades $repo->loadUnidadesPorCentro($user$centro$proceso);
  450.         return $this->render('@crud/Common/comboreloaded.html.twig', array("entities"=>$unidades));
  451.     }
  452.         
  453.     protected function indexLoadEntities($params)
  454.     {
  455.         if ($this->routeClassName == 'noidoneos')
  456.             $this->logger->info('*********RESULTADO consulta noidoneos');
  457.         
  458.         if (!$this->filtrosOk())
  459.         {
  460.             return array();
  461.         }
  462.         else
  463.         {
  464. //            if ($this->routeClassName == 'listaaspirantes' && isset($this->filterData['cedula']))
  465.             return parent::indexLoadEntities($params);
  466.         }
  467.     }
  468.     
  469.     protected function indexParamsForTwig()
  470.     {
  471.         $params parent::indexParamsForTwig();
  472.         $params['totalBajas'] =null;
  473.         
  474.         if (!$this->filtrosOk())
  475.         {
  476.             if ($this->routeClassName=='reporteasignacionunidad' || $this->routeClassName=='listaasignacionunidad'
  477.                     || $this->routeClassName=='nominaunidadinicio')
  478.             {
  479.                 $params['filtrosOk']='Debe indicar una Unidad Militar en los filtros';
  480.             }
  481.             else if ($this->routeClassName=='reporteasignacioncentroinstruccion')
  482.             {
  483.                 $params['filtrosOk']='Debe indicar un Centro de Instrucción en los filtros';
  484.             }
  485.             else if ($this->routeClassName=='nominaacuartelados' || $this->routeClassName=='reportebajas'
  486.                     || $this->routeClassName=='listaasignacionbase')
  487.             {
  488.                 $params['filtrosOk']='Debe indicar Base de Movilización, Centro de Movilización o Unidad Militar en los filtros';
  489.             }
  490.             else
  491.             {
  492.                 $params['filtrosOk']='Debe indicar un Centro de Movilización en los filtros';
  493.             }
  494.         }
  495.         else 
  496.         {
  497.             if ($this->routeClassName=='listaasignacionunidad' || $this->routeClassName=='nominaunidadinicio') {
  498.                 $params['totales'] = $this->getTotalesAsignadosPorUnidad($this->filterData$this->routeClassName);
  499.             }
  500.             if ($this->routeClassName=='nominaacuartelados'
  501.             {
  502.                 $params['entities'] = $this->organizaResultadosNomina();
  503.             }
  504.             if ($this->routeClassName=='reportebajas'
  505.             {
  506.                 $resultados $this->organizaResultadosBajas();
  507.                 $params['entities'] = $resultados['resultados'];
  508.                 $params['totalBajas'] = $resultados['total'];
  509.             }
  510.         }
  511.         
  512.         return $params;
  513.     }
  514.     protected function organizaResultadosBajas()
  515.     {
  516.         $datos $this->entities;
  517.         $resultados = array();
  518.         $totales 0;
  519.         for($i=0$i<count($datos); $i++)
  520.         {
  521.             $centro $datos[$i]->getCentroMovilizacion();
  522.             $unidad $datos[$i]->getUnidadMilitar();
  523.             if (!isset($resultados[$centro->getId()])) 
  524.             {
  525.                 $resultados[$centro->getId()] = array(
  526.                     'id' => 'centro_'.$centro->getId(),
  527.                     'nombre' => $centro->getNombre(),
  528.                     'total' => 0,
  529.                     'reclutas' => array()
  530.                 );
  531.             }
  532.             $resultados[$centro->getId()]['reclutas'][$i] = array(
  533.                 'id' => 'recluta_'.$datos[$i]->getId(),
  534.                 'orden' => $i+1,
  535.                 'datos' => $datos[$i]
  536.             );
  537.             $resultados[$centro->getId()]['total'] += 1;
  538.             $totales++;
  539.         }
  540.         return array('resultados' => $resultados'total'=>$totales);
  541.     }
  542.     protected function organizaResultadosNomina()
  543.     {
  544.         $datos $this->entities;
  545.         $resultados = array();
  546.         for($i=0$i<count($datos); $i++)
  547.         {
  548.             $centro $datos[$i]->getCentroMovilizacion();
  549.             $unidad $datos[$i]->getUnidadMilitar();
  550.             if($centro && $unidad){
  551.                 if (!isset($resultados[$centro->getId()])) 
  552.                 {
  553.                     $resultados[$centro->getId()] = array(
  554.                         'id' => 'centro_'.$centro->getId(),
  555.                         'nombre' => $centro->getNombre(),
  556.                         'jefe' => $centro->getJefe(),
  557.                         'unidades' => array()
  558.                     );
  559.                 }
  560.                 if (!isset($resultados[$centro->getId()]['unidades'][$unidad->getId()]))
  561.                 {
  562.                     $resultados[$centro->getId()]['unidades'][$unidad->getId()] = array(
  563.                         'id' => 'unidad_'.$unidad->getId(),
  564.                         'nombre' => $unidad->getNombre(),
  565.                         'reclutas' => array()
  566.                     );
  567.                 }
  568.                 $resultados[$centro->getId()]['unidades'][$unidad->getId()]['reclutas'][$i] = array(
  569.                     'id' => 'recluta_'.$datos[$i]->getId(),
  570.                     'orden' => $i+1,
  571.                     'datos' => $datos[$i]
  572.                 );
  573.             }
  574.         }
  575.         return $resultados;
  576.     }
  577.     protected function organizaResultadosNominaBase()
  578.     {
  579.         $datos $this->entities;
  580.         $resultados = array();
  581.         for($i=0$i<count($datos); $i++)
  582.         {
  583.             $unidad $datos[$i]->getUnidadMilitar();
  584.             if (!isset($resultados[$unidad->getId()])) 
  585.             {
  586.                 $resultados[$unidad->getId()] = array(
  587.                     'id' => 'um_'.$unidad->getId(),
  588.                     'reclutas' => array()
  589.                 );
  590.             }
  591.             $resultados[$unidad->getId()]['reclutas'][$i] = array(
  592.                 'orden' => $i,
  593.                 'datos' => $datos[$i]);
  594.         }
  595.         return $resultados;
  596.     }
  597.     
  598.     protected function filtrosOk()
  599.     {
  600.         return 
  601.         (
  602.             (
  603.                 $this->routeClassName=='reporteasignacionunidad' || 
  604.                 $this->routeClassName=='listaasignacionunidad' || 
  605.                 $this->routeClassName=='nominaunidadinicio'
  606.             )
  607.             &&
  608.                 isset($this->filterData['unidadMilitar']) &&
  609.                 $this->filterData['unidadMilitar']!='not null'
  610.         
  611.         ||
  612.         (
  613.             $this->routeClassName=='centroreclutaproceso' &&
  614.             $this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION')
  615.         ) 
  616.         ||
  617.         (
  618.             (
  619.                 $this->routeClassName=='nominaacuartelados' || 
  620.                 $this->routeClassName == 'reportebajas' || 
  621.                 $this->routeClassName == 'listaasignacionbase'
  622.             
  623.             && 
  624.             (
  625.                 isset($this->filterData['reclutaBase']) ||
  626.                 (
  627.                     isset($this->filterData['centroMovilizacion']) &&
  628.                     $this->filterData['centroMovilizacion']!= 'not null'
  629.                 
  630.                 || 
  631.                 (
  632.                     isset($this->filterData['unidadMilitar']) &&
  633.                     $this->filterData['unidadMilitar']!='not null'
  634.                 )
  635.             )
  636.         )
  637.         ||
  638.         (
  639.             $this->routeClassName!='reporteasignacioncentroinstruccion' &&
  640.             $this->routeClassName!='reporteasignacionunidad' && 
  641.             $this->routeClassName!='listaasignacionunidad' && 
  642.             $this->routeClassName!='nominaacuartelados' && 
  643.             $this->routeClassName!='listaasignacionbase' && 
  644.             $this->routeClassName!='reportebajas' && 
  645.             $this->routeClassName!='nominaunidadinicio' && 
  646.             isset($this->filterData['centroMovilizacion']) ||
  647.             (
  648.                 ($this->routeClassName=='listaaspirantes' || $this->routeClassName=='noidoneos')
  649.             )
  650.             ||
  651.             (
  652.                 $this->routeClassName=='reporteasignacioncentroinstruccion' && 
  653.                 isset($this->filterData['reclutaCentroInstruccion'])
  654.             )
  655.         );
  656.     }
  657.         
  658.     protected function getTotalesAsignadosPorUnidad$filters$routeClassName )
  659.     {
  660.         $addInner '';
  661.         $addWhere '';
  662.         
  663.         if ($routeClassName == 'listaasignacionunidad')
  664.             $addWhere ' AND rp.unidad_militar = '.$filters['unidadMilitar'];
  665.         else if ($routeClassName == 'nominaunidadinicio')
  666.             $addWhere ' AND (rp.unidad_militar = '.$filters['unidadMilitar'].' OR rp.unidad_militar_inicial = '.$filters['unidadMilitar'].')';
  667.         
  668.         if (isset($filters['asignacionInicio']) && $filters['asignacionInicio'] == 'true')
  669.         {
  670.             $addInner ' INNER JOIN proceso_reclutamiento pr ON rp.proceso = pr.id';
  671.             $addWhere .= ' AND rp.fecha_asignacion >= pr.fecha_acuartelamiento AND rp.fecha_asignacion <= pr.fecha_fin_dias';
  672.         }
  673.         $totalSQL 
  674.             "SELECT 
  675.                 r.sexo, 
  676.                 count(rp.id) as cantidad
  677.             FROM 
  678.                 recluta_proceso rp
  679.             INNER JOIN 
  680.                 recluta r ON rp.recluta = r.id ".
  681.                 $addInner."
  682.             WHERE
  683.                 rp.proceso = ".$filters['procesoReclutamiento'].
  684.                 $addWhere."
  685.             GROUP BY
  686.                 r.sexo;";
  687.         
  688.         $conn $this->em->getConnection();
  689.         $statement $conn->prepare($totalSQL);
  690.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  691.         $totales['Hombres'] = 0;
  692.         $totales['Mujeres'] = 0;
  693.         for ($i=0$i<count($datos); $i++){    
  694.             if ($datos[$i]['sexo'] == 'Masculino')
  695.                 $totales['Hombres'] = $datos[$i]['cantidad'];
  696.             if ($datos[$i]['sexo'] == 'Femenino')
  697.                 $totales['Mujeres'] = $datos[$i]['cantidad'];
  698.         }
  699.         return $totales;        
  700.     }
  701.     
  702.     public function exportarReportePDFAction($routeClassName)
  703.     {
  704.         $em $this ->em;
  705.         $pdfTwig '';
  706.         $this->setInitialValues('all'$routeClassName);
  707.         $procesoReclutamiento $em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($this->filterData['procesoReclutamiento']);
  708.         $params = array();
  709.         $this->routeClassName $routeClassName;
  710.         $params['procesoReclutamiento'] = $procesoReclutamiento;
  711.         $filtros $this->filterData;
  712.         
  713.         $params['routeClassName'] = $routeClassName;
  714.         
  715.         if ($routeClassName == 'listaasignacionunidad' || $routeClassName == 'nominaunidadinicio')
  716.         {
  717.             $qb $em->getRepository('App\\Entity\\ReclutaProceso')->createQueryBuilder('e')
  718.                         ->innerJoin('e.recluta','recluta')->addSelect('recluta')
  719.                         ->where('e.procesoReclutamiento = '.$filtros['procesoReclutamiento'])
  720.                         ->orderBy('recluta.nombres''ASC');
  721.             
  722.             if (isset($filtros['asignacionInicio']) && $filtros['asignacionInicio'] == 'true') {
  723.                 $params['fechaFin'] = $procesoReclutamiento->getfechaFinDias();
  724.                 $qb->andWhere("e.fechaAsignacion >= :FECHA_INI")
  725.                    ->andWhere("e.fechaAsignacion <= :FECHA_FIN")
  726.                    ->setParameter('FECHA_INI'$procesoReclutamiento->getfechaAcuartelamiento())
  727.                    ->setParameter('FECHA_INI'$procesoReclutamiento->getfechaFinDias())
  728.                     ;
  729.             }
  730.             if (isset($filtros['unidadMilitar']) && $filtros['unidadMilitar'] != 'not null'
  731.             {
  732.                 if ($routeClassName == 'nominaunidadinicio')
  733.                     $qb->andWhere('e.unidadMilitar = '.$filtros['unidadMilitar'].' OR e.unidadMilitarInicial = '.$filtros['unidadMilitar']);
  734.                 else
  735.                     $qb->andWhere('e.unidadMilitar = '.$filtros['unidadMilitar']);
  736.             }
  737.             else if (isset($filtros['centroMovilizacion']) && $filtros['centroMovilizacion'] && $filtros['centroMovilizacion'] != 'not null') {
  738.                 $qb->andWhere('e.centroMovilizacion = '.$filtros['centroMovilizacion'])
  739.                         ->andWhere('e.unidadMilitar IS NOT NULL');                
  740.             }
  741.             else if (isset($filtros['reclutaBase']))
  742.             {
  743.                 $qb->andWhere('e.base = '.$filtros['reclutaBase'])
  744.                     ->andWhere('e.unidadMilitar IS NOT NULL');
  745.             }
  746.          
  747.             $this->entities $qb->getQuery()->getResult();
  748.             $pdfTwig "ReclutaProceso/reporte_pdf_inner.html.twig";
  749.             $params['unidadMilitar'] = $em->getRepository('App\\Entity\\UnidadMilitar')->find($filtros['unidadMilitar']);
  750.             $centro $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->findOneBy(array('proceso' => $procesoReclutamiento->getId(), 'unidad'=> $filtros['unidadMilitar']));
  751.             $params['centroMovilizacion'] = $centro->getLugar();
  752.             $params['centroProceso'] = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->findOneBy(array('proceso' => $procesoReclutamiento->getId(), 'lugar'=> $params['centroMovilizacion']->getId()));
  753.             $params['totales'] = $this->getTotalesAsignadosPorUnidad($this->filterData$routeClassName);
  754.             
  755.         }
  756.         if ($routeClassName == 'listaasignacionbase')
  757.         {
  758.             $qb $em->getRepository('App\\Entity\\ReclutaProceso')->createQueryBuilder('e')
  759.                         ->innerJoin('e.recluta','recluta')->addSelect('recluta')
  760.                         //->innerJoin('e.unidadMilitar','unidad')
  761.                         ->where('e.procesoReclutamiento = '.$filtros['procesoReclutamiento'])
  762.                         ->orderBy('e.centroMovilizacion ASC, e.unidadMilitar''ASC');
  763.             
  764.             if (isset($filtros['unidadMilitar']) && $filtros['unidadMilitar'] != 'not null')
  765.                 $qb->andWhere('e.unidadMilitar = '.$filtros['unidadMilitar']);
  766.             else if (isset($filtros['centroMovilizacion']) && $filtros['centroMovilizacion'] && 
  767.                     $filtros['centroMovilizacion'] != 'not null') {
  768.                 $qb->andWhere('e.centroMovilizacion = '.$filtros['centroMovilizacion'])
  769.                         ->andWhere('e.unidadMilitar IS NOT NULL');                
  770.             }
  771.             else if (isset($filtros['reclutaBase']))
  772.             {
  773.                 $qb->andWhere('e.baseMovilizacion = '.$filtros['reclutaBase']);
  774.             }
  775.             $this->entities $qb->getQuery()->getResult();
  776.             $this->entities $this->organizaResultadosNominaBase();
  777.             $pdfTwig "ReclutaProceso/nominabase_pdf_inner.html.twig";
  778.             if (isset($filtros['unidadMilitar']) && $filtros['unidadMilitar'] != 'not null') {
  779.                 $params['unidadMilitar'] = $em->getRepository('App\\Entity\\UnidadMilitar')->find($filtros['unidadMilitar']);
  780.                 $centro $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->findOneBy(array('proceso' => $procesoReclutamiento->getId(), 'unidad'=> $filtros['unidadMilitar']));
  781.                 $params['centroMovilizacion'] = $centro->getLugar();
  782.                 $params['centroProceso'] = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->findOneBy(array('proceso' => $procesoReclutamiento->getId(), 'lugar'=> $params['centroMovilizacion']->getId()));
  783.             }
  784.         }
  785.         if ($routeClassName == 'reportebajas')
  786.         {
  787.             $pdfTwig "ReclutaProceso/reporte_bajas_pdf.html.twig";
  788.             $qb $em->getRepository('App\\Entity\\ReclutaProceso')->createQueryBuilder('e')
  789.                         ->innerJoin('e.recluta','recluta')->addSelect('recluta')
  790.                         ->where('e.procesoReclutamiento = '.$filtros['procesoReclutamiento'])
  791.                         ->andWhere('e.idoneo = false')
  792.                         ->andWhere('e.fechaResultado is not null ')
  793.                         ->orderBy('e.centroMovilizacion ASC, e.unidadMilitar''ASC');
  794.             if (isset($filtros['unidadMilitar']) && $filtros['unidadMilitar'])
  795.                 $qb->andWhere('e.unidadMilitar = '.$filtros['unidadMilitar']);
  796.             else if (isset($filtros['centroMovilizacion']) && $filtros['centroMovilizacion'] && 
  797.                     $filtros['centroMovilizacion'] != 'not null') {
  798.                 $qb->andWhere('e.centroMovilizacion = '.$filtros['centroMovilizacion']);                
  799.             }
  800.             else if (isset($filtros['reclutaBase']))
  801.             {
  802.                 $qb->andWhere('e.base = '.$filtros['reclutaBase'])
  803.                    ->andWhere('e.centroMovilizacion is not null');
  804.             } 
  805.             
  806.             $this->entities $qb->getQuery()->getResult();
  807.             $resultados $this->organizaResultadosBajas();
  808.             $this->entities $resultados['resultados'];
  809.             $params['totalBajas'] = $resultados['total'];
  810.         }
  811.         if ($routeClassName == 'nominaacuartelados')
  812.         {
  813.             $pdfTwig "ReclutaProceso/reporte_nomina_pdf.html.twig";
  814.             
  815.             $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  816.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  817.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  818.             $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  819.             $this->entities $this->indexLoadEntities($paramsForFunctionInEntity);
  820.             
  821.             $this->entities $this->organizaResultadosNomina();
  822.         }
  823.         $params['entities'] = $this->entities;
  824.         
  825.         $options = new Options();
  826.         $options->setIsRemoteEnabled(true);
  827.         $dompdf = new Dompdf();
  828.         $dompdf->setOptions($options);
  829.         $dompdf->setPaper('letter''portrait');
  830.         
  831.         // Create an instance of the class:
  832.         $pdfparam = [
  833.                 'mode' => '',
  834.                 'format' => 'letter',
  835.                 'default_font_size' => 0,
  836.                 'default_font' => '',
  837.                 'margin_left' => 10,
  838.                 'margin_right' => 10,
  839.                 'margin_top' => 5,
  840.                 'margin_bottom' => 5,
  841.                 'margin_header' => 9,
  842.                 'margin_footer' => 9,
  843.                 'orientation' => 'P',
  844.                 'setAutoBottomMargin' => 'stretch',
  845.                 'setAutoTopMargin' => 'stretch',];
  846. //        $mpdf = new \Mpdf\Mpdf($pdfparam);
  847.         // esta es otra forma de hacerlo donde el pdf sale completo
  848.         //ini_set("pcre.backtrack_limit", "5000000");
  849.         //$html = $this->renderView($pdfTwig, $params);
  850.         //$mpdf->WriteHTML($html);
  851.         
  852. //        $mpdf->SetAutoPageBreak(true, $mpdf->bMargin);
  853. //        $mpdf->SetHTMLHeader();
  854.         if ($routeClassName == 'nominaacuartelados' || $routeClassName == 'listaasignacionbase')
  855.         {
  856.             $html $this->renderView($pdfTwig$params);
  857.             $dompdf->loadHtml($html);
  858. /*            $params['entities']= array();
  859.             foreach ($this->entities as $centro)
  860.             {
  861.                 $params['entities'][0] = $centro;
  862.                 $centroId = str_replace('centro_','',$centro['id']);
  863.                 $params['centro'] = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->find($centroId);
  864. //                $mpdf->WriteHTML($html);
  865. //                $mpdf->AddPage();
  866.             }
  867. */
  868.         }
  869.         else {
  870.             $html $this->renderView($pdfTwig$params);
  871.             $dompdf->loadHtml($html);
  872. //            $mpdf->WriteHTML($html);
  873.         }
  874.         // Output a PDF file directly to the browser
  875. //        $mpdf->Output();  
  876.         $dompdf->render();
  877.         $dompdf->stream();        
  878.         die();
  879.     }        
  880.     public function excelAction($rol$routeClassName)
  881.     {
  882.         if($routeClassName == 'listaasignacionunidad')
  883.             $this->twigExcelName 'App:ReclutaProceso:reporte_excel_inner.html.twig';
  884.         if($routeClassName == 'listaasignacionbase')
  885.             $this->twigExcelName 'App:ReclutaProceso:nominabase_excel_inner.html.twig';
  886.         if($routeClassName == 'reportebajas')
  887.             $this->twigExcelName 'App:ReclutaProceso:reporte_bajas_excel.html.twig';
  888.         if($routeClassName == 'nominaacuartelados')
  889.             $this->twigExcelName 'App:ReclutaProceso:reporte_nomina_excel.html.twig';
  890.         return parent::excelAction($rol$routeClassName);
  891.     }   
  892.     protected function excelCreateParamsForTwig()
  893.     {
  894.         $params parent::excelCreateParamsForTwig();
  895.         $em $this ->em;
  896.         if ($this->routeClassName=='listaasignacionunidad' || $this->routeClassName=='nominaacuartelados'
  897.                 || $this->routeClassName=='reportebajas' || $this->routeClassName=='listaasignacionbase'
  898.                 || $this->routeClassName=='nominaunidadinicio')
  899.         {
  900.             $em $this ->em;
  901.             $procesoReclutamiento $em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($this->filterData['procesoReclutamiento']);
  902.             $params['procesoReclutamiento'] = $procesoReclutamiento;
  903.         }
  904.         if ($this->routeClassName == 'listaasignacionunidad')  {
  905.             $params['unidadMilitar'] = $em->getRepository('App\\Entity\\UnidadMilitar')->find($this->filterData['unidadMilitar']);
  906.             $centro $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->findOneBy(array('proceso' => $procesoReclutamiento->getId(), 'unidad'=> $this->filterData['unidadMilitar']));
  907.             $params['centroMovilizacion'] = $centro->getLugar();
  908.             $params['centroProceso'] = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->findOneBy(array('proceso' => $this->filterData['procesoReclutamiento'], 'lugar'=> $params['centroMovilizacion']->getId()));
  909.         }
  910.         return $params;
  911.     }
  912.     
  913.     public function redistribuirReclutasAction()
  914.     {
  915.         $this->setUtilProperties();
  916.         $params = array();
  917.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  918.                 ->findOneBy(array('activo'=>true));
  919.         if ($procesoActivo)
  920.         {
  921.             $params['proceso']=$procesoActivo;
  922.             $centros $this->em->getRepository('App\\Entity\\CentroInstruccion')->findAll();
  923.             $user $this->getUser();
  924.             if ($user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
  925.             {
  926.                 // habilitar luego $params['centroUsuario']=$user->getCentroInstruccion()->getId();
  927.             }
  928.             $params['centros']=$centros;
  929.             $unidades $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  930.                     ->createQueryBuilder('u')
  931.                     ->innerJoin('u.proceso''proceso')
  932.                     ->innerJoin('u.unidad''unidad')
  933.                     ->innerJoin('unidad.centroInstruccion''centro')
  934.                     ->where('proceso.id='.$procesoActivo->getId())
  935.                     ->andWhere('centro.id=14')
  936.                     ->orderBy('unidad.nombre','ASC')
  937.                     ->getQuery()->getResult();
  938.             $params['unidades']=$unidades;
  939.         }
  940.         return $this->render('ReclutaProceso/redistribuyeUnidad.html.twig',$params);
  941.     }
  942.     
  943.     public function cargarNominaPDFAction($proceso$unidad)
  944.     {
  945.         $this->filterData['procesoReclutamiento'] = $proceso;
  946.         $this->filterData['unidadMilitar'] = $unidad;
  947.         //$this->filterData['asignacionInicio'] = 'false';
  948.         $this->session->set('listaasignacionunidad',$this->filterData);
  949.         //$this->exportarReportePDFAction('listaasignacionunidad');
  950.         
  951.         $data = array('ok'=>true);
  952.         $data = new Response(json_encode($data));
  953.         $data->headers->set('Content-Type''application/json');
  954.         return $data;
  955.     } 
  956.     
  957.     protected function getFormFilter()
  958.     {
  959.         $formulario parent::getFormFilter();
  960.         
  961.         $repo $this->em->getRepository('App\\Entity\\ReclutaProceso');
  962.         $user $this->getUser();
  963.         
  964.         unset($formulario['fechaRegistro_WWdesdeWW']);
  965.         unset($formulario['fechaRegistro_WWhastaWW']);
  966.         unset($formulario['paisResidencia']);
  967.         unset($formulario['lugarResidencia']);
  968.         unset($formulario['callePrincipalResidencia']);
  969.         unset($formulario['calleSecundariaResidencia']);
  970.         unset($formulario['numeroCasa']);
  971.         unset($formulario['referencias']);
  972.         unset($formulario['geometria']);
  973.         unset($formulario['fechaConsultaAntecedentes_WWdesdeWW']);
  974.         unset($formulario['fechaConsultaAntecedentes_WWhastaWW']);
  975.         unset($formulario['resultadosAntecedentes']);
  976.         unset($formulario['fechaConsultaEstudios_WWdesdeWW']);
  977.         unset($formulario['fechaConsultaEstudios_WWhastaWW']);
  978.         unset($formulario['resultadosEstudios']);
  979.         unset($formulario['fechaResultado_WWdesdeWW']);
  980.         unset($formulario['fechaAsignacion_WWdesdeWW']);
  981.         unset($formulario['fechaAsignacion_WWhastaWW']);
  982.         unset($formulario['observaciones']);
  983.         unset($formulario['volverPresentarse']);
  984.         unset($formulario['intentos']);
  985.         unset($formulario['fechaIntento1_WWdesdeWW']);
  986.         unset($formulario['fechaIntento2_WWdesdeWW']);
  987.         unset($formulario['fechaIntento3_WWdesdeWW']);
  988.         unset($formulario['fechaIntento1_WWhastaWW']);
  989.         unset($formulario['fechaIntento2_WWhastaWW']);
  990.         unset($formulario['fechaIntento3_WWhastaWW']);
  991.         unset($formulario['id']);
  992.         $formulario['procesoReclutamiento']['atributos']['multiple']=false;
  993.         $formulario['centroMovilizacion']['atributos']['multiple']=false;
  994.         
  995.         $formulario['reclutaBase']= array('nombre'   =>'reclutaBase',
  996.                         'tipo'     => EntityType::class,
  997.                         'type'     => 'association',
  998.                         'atributos'=> array('label' => $this->translator->trans(
  999.                                                 $this->translatorBase.'.fields.base',
  1000.                                                 array(),
  1001.                                                 'crud').':',
  1002.                                             'class' => 'App\\Entity\\BaseMovilizacion',
  1003.                                             'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1004.                                             'required' => false,
  1005.                                             'multiple'=>false,
  1006.                                             'attr'=>array('style'=>'width: 100%''class'=>'chosen-select')));
  1007.         
  1008.         
  1009.         $formulario['reclutaBase']['atributos']['query_builder'] = $repo->queryBasesPorProceso($user);
  1010.         $formulario['centroMovilizacion']['atributos']['query_builder'] = $repo->queryCentrosPorBase($user);
  1011.         $formulario['unidadMilitar']['atributos']['query_builder'] = $repo->queryUnidadesPorCentro($user);
  1012.             
  1013.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
  1014.         {
  1015.             $formulario['reclutaBase']['atributos']['disabled'] = true;
  1016.             $formulario['centroMovilizacion']['atributos']['disabled'] = true;
  1017.             $formulario['unidadMilitar']['atributos']['disabled'] = true;
  1018.         }
  1019.         if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') || 
  1020.             $this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO'/*||
  1021.             $this->getUser()->isRoleAssigned('ROLE_PSICOLOGO') ||
  1022.             $this->getUser()->isRoleAssigned('ROLE_PSICOLOGO_JEFE')*/ )
  1023.         {
  1024.             $formulario['reclutaBase']['atributos']['disabled'] = true;
  1025.             $formulario['centroMovilizacion']['atributos']['disabled'] = true;
  1026.         }
  1027.         if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE'))
  1028.         {
  1029.             $formulario['reclutaBase']['atributos']['disabled'] = true;
  1030.         }
  1031. /*        if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
  1032.         {
  1033.             $queryBuilder = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  1034.                     ->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
  1035.             $formulario['centroMovilizacion']['atributos']['query_builder'] = $queryBuilder;
  1036.             $queryBuilder = $this->em->getRepository('App\\Entity\\UnidadMilitar')->createQueryBuilder('u')
  1037.                     ->leftJoin('u.centroInstruccion', 'centro')
  1038.                     ->where('centro.id='.$this->getUser()->getCentroInstruccion()->getId());
  1039.             $formulario['unidadMilitar']['atributos']['query_builder'] = $queryBuilder;
  1040.         }
  1041. */
  1042.         $newFormulario = array();
  1043.         $newFormulario['procesoReclutamiento'] = $formulario['procesoReclutamiento'];
  1044.         if (!$this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD'/*&& !$this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION')*/)
  1045.         {
  1046.             $newFormulario['reclutaBase'] = $formulario['reclutaBase'];
  1047.         }
  1048.         $newFormulario['centroMovilizacion'] = $formulario['centroMovilizacion'];
  1049.         
  1050. /*        $newFormulario['base'] = $formulario['reclutaBase'];
  1051.         $newFormulario['centro'] = $formulario['centroMovilizacion'];
  1052.         $newFormulario['unidad'] = $formulario['unidadMilitar'];      
  1053. */       
  1054.         /*if ($this->routeClassName == '') 
  1055.         {
  1056.             unset($newFormulario['procesoReclutamiento']);
  1057.         }
  1058.         else */
  1059.         if (strpos($this->routeClassName'reporteasignacion') === false &&
  1060.                 $this->routeClassName != 'listaasignacionunidad' && 
  1061.                 $this->routeClassName != 'nominaunidadinicio' && 
  1062.                 $this->routeClassName != 'listaasignacionbase' && 
  1063.                 $this->routeClassName != 'reportebajas' &&
  1064.                 $this->routeClassName != 'nominaacuartelados')
  1065.         {
  1066.             if ($this->routeClassName=='aspirantescursos')
  1067.             {
  1068.                 $newFormulario['unidadMilitar'] = $formulario['unidadMilitar'];
  1069.                 $newFormulario['idoneo'] = $formulario['idoneo'];
  1070.                 $newFormulario['cursos'] = $formulario['cursos'];
  1071.                 $newFormulario['cursos']['atributos']['required'] = true;
  1072.             }
  1073.             if ($this->routeClassName=='aspirantesencuesta')
  1074.             {
  1075.                 $newFormulario['unidadMilitar'] = $formulario['unidadMilitar'];
  1076.                 $newFormulario['idoneo'] = $formulario['idoneo'];
  1077.                 $newFormulario['pregunta'] = [
  1078.                     'nombre' => 'pregunta',
  1079.                     'tipo' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
  1080.                     'type' => 'custom',
  1081.                     'atributos' => [
  1082.                         'label' => 'Pregunta',
  1083.                         'choices' => array_flip(
  1084.                             array(
  1085.                                 'TallaUniforme' => 'Tallas de los uniformes Jaguar M1',
  1086.                                 'TallaJockey' => 'Tallas de los jockey Jaguar',
  1087.                                 'TallaCalzado' => 'Tallas del clazado (botas)',
  1088.                                 'TallaCamiseta' => 'Tallas de las camisetas (caqui)',
  1089.                                 'EstudioStr' => 'Nivel de estudio',                            
  1090.                             )
  1091.                         ),
  1092.                         'attr' => ['style' => 'width: 100%'],
  1093.                         'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1094.                         'empty_data' => null,
  1095.                     ],
  1096.                 ];
  1097.             }
  1098.             if ($this->routeClassName=='listaaspirantes')
  1099.             {
  1100.                 $newFormulario['turno'] = $formulario['turno'];
  1101.                 $newFormulario['turno']['atributos']['disabled']=true;
  1102.                 $newFormulario['fechaResultado_WWhastaWW'] = $formulario['fechaResultado_WWhastaWW'];
  1103.                 $newFormulario['fechaResultado_WWhastaWW']['nombre']='fechaResultado';
  1104.                 $newFormulario['fechaResultado_WWhastaWW']['atributos']['disabled']=true;
  1105.             }
  1106.             if ($this->routeClassName=='noidoneos')
  1107.             {
  1108.                 $newFormulario['idoneo'] = $formulario['idoneo'];
  1109.                 $newFormulario['idoneo']['atributos']['disabled']=true;
  1110.                 $newFormulario['causaRechazo'] = $formulario['causaRechazo'];
  1111.                 $newFormulario['causaRechazo']['tipo']="Symfony\Component\Form\Extension\Core\Type\ChoiceType";
  1112.                 $newFormulario['causaRechazo']['atributos']['choices'] = array_flip(CausaNoIdoneoEnum::getReadables());
  1113.                 $newFormulario['causaRechazo']['atributos']['placeholder'] = '--- Seleccione ---';
  1114.                 $newFormulario['causaRechazo']['atributos']['empty_data'] = null;
  1115.             }
  1116.             
  1117.             
  1118. /*            $proceso = $formulario['procesoReclutamiento'];
  1119.             $centro = $formulario['centroMovilizacion'];
  1120.             unset($formulario['procesoReclutamiento']);
  1121.             unset($formulario['centroMovilizacion']);
  1122. */
  1123.             // para incluir campo identificacion y edad del recluta
  1124.             
  1125.             unset($formulario['recluta']);
  1126.             $newFormulario['reclutaNombre']=array('nombre'   =>'reclutaNombre',
  1127.                             'tipo'     => null,
  1128.                             'type'     => 'string',
  1129.                             'atributos'=> array('label' => $this->translator->trans(
  1130.                                                     $this->translatorBase.'.fields.reclutaNombre',
  1131.                                                     array(),
  1132.                                                     'crud').':',
  1133.                                                 'required' => false,
  1134.                                                 'attr'=>array('style'=>'width: 100%')));
  1135.             $newFormulario['reclutaIdentificacion']=array('nombre'   =>'reclutaIdentificacion',
  1136.                             'tipo'     => null,
  1137.                             'type'     => 'string',
  1138.                             'atributos'=> array('label' => $this->translator->trans(
  1139.                                                     $this->translatorBase.'.fields.reclutaIdentificacion',
  1140.                                                     array(),
  1141.                                                     'crud').':',
  1142.                                                 'required' => false,
  1143.                                                 'attr'=>array('style'=>'width: 100%')));
  1144.             if ($this->routeClassName!='aspirantesencuesta' && $this->routeClassName!='aspirantescursos')
  1145.             {
  1146.                 $newFormulario['reclutaEdad']=array('nombre'   =>'reclutaEdad',
  1147.                                 'tipo'     => null,
  1148.                                 'type'     => 'string',
  1149.                                 'atributos'=> array('label' => $this->translator->trans(
  1150.                                                         $this->translatorBase.'.fields.reclutaEdad',
  1151.                                                         array(),
  1152.                                                         'crud').':',
  1153.                                                     'required' => false,
  1154.                                                     'attr'=>array('style'=>'width: 100%')));
  1155.                 $newFormulario['reclutaEdad']['atributos']['attr']['class'] = 'spinbox-input';                
  1156.                 $newFormulario['reclutaEdad']['atributos']['attr']['full_width'] = true;                
  1157.                 
  1158.             }
  1159.             if ($this->routeClassName!='noidoneos' && $this->routeClassName!='aspirantesencuesta' && $this->routeClassName!='aspirantescursos')
  1160.             {
  1161.                 $newFormulario['scanQR']=array('nombre'   =>'scanQR',
  1162.                                 'tipo'     => null,
  1163.                                 'type'     => 'string',
  1164.                                 'atributos'=> array('label' => 'Scanear QR:',
  1165.                                                     'required' => false,
  1166.                                                     'attr'=>array('style'=>'width: 100%')));
  1167.             }
  1168.             
  1169.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION')) 
  1170.             {
  1171.                 $newFormulario['reclutaBase']=array('nombre'   =>'reclutaCentroInstruccion',
  1172.                             'tipo'     => EntityType::class,
  1173.                             'type'     => 'custom',
  1174.                             'atributos'=> array('label' => $this->translator->trans(
  1175.                                                     $this->translatorBase.'.fields.centroInstruccion',
  1176.                                                     array(),
  1177.                                                     'crud').':',
  1178.                                                 'class' => 'App\\Entity\\CentroInstruccion',
  1179.                                                 'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1180.                                                 'required' => false,
  1181.                                                 'multiple'=>false,
  1182. //                                                'disabled'=>true,
  1183.                                                 'attr'=>array('style'=>'width: 100%''class'=>'chosen-select')));
  1184.             }
  1185.             
  1186.             if ($this->routeClassName=='certificadovacunacion')
  1187.             {
  1188.                 $newFormulario['certificadoVacunacionOk'] = $formulario['certificadoVacunacionOk'];
  1189.                 $newFormulario['certificadoVacunacionOk']['atributos']['choices']['Pendiente'] = 'null';
  1190.             }
  1191.             
  1192.         }
  1193.         else
  1194.         {
  1195.             unset($formulario['recluta']);
  1196.             unset($formulario['turno']);
  1197.         
  1198.             $newFormulario['unidadMilitar'] = $formulario['unidadMilitar'];
  1199.             $newFormulario['unidadMilitar']['atributos']['multiple']=false;
  1200.             if ($this->routeClassName == 'reportebajas'
  1201.             {
  1202.                 unset($newFormulario['unidadMilitar']);
  1203.             }
  1204.             if ($this->routeClassName=='listaasignacionunidad' || $this->routeClassName=='nominaunidadinicio')
  1205.             {
  1206.                 $newFormulario['asignacionInicio']=array('nombre'=>'asignacionInicio',
  1207.                                 'tipo'     => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
  1208.                                 'type'     => 'boolean',
  1209.                                 'atributos'=> array('label' => $this->translator->trans(
  1210.                                         $this->translatorBase.'.fields.asignacionInicio',
  1211.                                         array(),
  1212.                                         'crud').':',
  1213.                                     'required' => false,
  1214.                                     'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1215.                                     'empty_data' => null,
  1216.                                     'choices' => array_flip(array('true'=>$this->translator->trans('choice_value.yes', array(), 'crud'),
  1217.                                                                       'false'=>$this->translator->trans('choice_value.no', array(), 'crud'))),
  1218.                                     'attr'=>array('style'=>'width: 100%')));
  1219.             }
  1220.             if ($this->routeClassName == 'reporteasignacioncentro' || 
  1221.                     $this->routeClassName == 'reporteasignacioncentroinstruccion'
  1222.             {
  1223.                 $newFormulario['unidadMilitar']['atributos']['disabled']=true;
  1224.             }
  1225.             if ($this->routeClassName == 'reporteasignacioncentroinstruccion'
  1226.             {
  1227.                 $newFormulario['reclutaBase']=array('nombre'   =>'reclutaCentroInstruccion',
  1228.                             'tipo'     => EntityType::class,
  1229.                             'type'     => 'custom',
  1230.                             'atributos'=> array('label' => $this->translator->trans(
  1231.                                                     $this->translatorBase.'.fields.centroInstruccion',
  1232.                                                     array(),
  1233.                                                     'crud').':',
  1234.                                                 'class' => 'App\\Entity\\CentroInstruccion',
  1235.                                                 'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1236.                                                 'required' => false,
  1237.                                                 'multiple'=>false,
  1238.                                                 'attr'=>array('style'=>'width: 100%''class'=>'chosen-select')));
  1239.             }
  1240.         }
  1241.         
  1242.         return $newFormulario;
  1243.     }
  1244.     
  1245.     protected function indexGetFields()
  1246.     {
  1247.         $fields parent::indexGetFields();
  1248.         $bckFields $fields;
  1249.         unset($fields['recluta']);
  1250.         //unset($fields['causaRechazo']);
  1251.         unset($fields['fechaRegistro']);
  1252.         //unset($fields['procesoReclutamiento']);
  1253.         unset($fields['paisResidencia']);
  1254.         unset($fields['lugarResidencia']);
  1255.         unset($fields['callePrincipalResidencia']);
  1256.         unset($fields['calleSecundariaResidencia']);
  1257.         unset($fields['numeroCasa']);
  1258.         unset($fields['referencias']);
  1259.         unset($fields['geometria']);
  1260.         unset($fields['fechaConsultaAntecedentes']);
  1261.         unset($fields['resultadosAntecedentes']);
  1262.         unset($fields['fechaConsultaEstudios']);
  1263.         unset($fields['resultadosEstudios']);
  1264.         unset($fields['fechaBaja']);        
  1265.         //unset($fields['fechaResultado']);
  1266.         //unset($fields['unidadMilitar']);
  1267.         //unset($fields['fechaAsignacion']);
  1268.         unset($fields['observaciones']);
  1269.         unset($fields['volverPresentarse']);
  1270.         //unset($fields['centroMovilizacion']);
  1271.         unset($fields['intentos']);
  1272.         unset($fields['fechaIntento1']);
  1273.         unset($fields['fechaIntento2']);
  1274.         unset($fields['fechaIntento3']);
  1275.         unset($fields['id']);
  1276.         unset($fields['unidadMilitarInicial']);
  1277.         unset($fields['certificadoVacunacionOk']);
  1278.         unset($fields['tallaUniforme']);
  1279.         unset($fields['tallaJockey']);
  1280.         unset($fields['tallaCalzado']);
  1281.         unset($fields['tallaCamiseta']);
  1282.         unset($fields['estudio']);
  1283.         // para incluir campo identificacion y edad del recluta
  1284.         
  1285.         if ($this->routeClassName != 'aspirantesencuesta' && $this->routeClassName != 'aspirantescursos')
  1286.         {
  1287.             unset($fields['idoneo']);
  1288.         }
  1289.         if ($this->routeClassName == 'listaasignacionunidad' || $this->routeClassName == 'nominaunidadinicio'
  1290.         {
  1291.             unset($fields['causaRechazo']);
  1292.             unset($fields['turno']);
  1293.             unset($fields['centroMovilizacion']);
  1294.             $fechaResultado $fields['fechaResultado'];
  1295.             unset($fields['fechaResultado']);
  1296.             unset($fields['idoneo']);
  1297.             $UM $fields['unidadMilitar'];
  1298.             unset($fields['unidadMilitar']);
  1299.             //$fechaAsignacion = $fields['fechaAsignacion'];
  1300.             unset($fields['fechaAsignacion']);
  1301.             unset($fields['fechaBaja']);
  1302.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1303.                                           'type' => 'string',
  1304.                                           'label'  => $this->translator->trans(
  1305.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1306.                                               array(),
  1307.                                               'crud'));
  1308.             
  1309.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1310.                                                  'type'=>'string',
  1311.                                                  'label'=>$this->translator->trans(
  1312.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1313.                                                       array(),
  1314.                                                       'crud'));
  1315.             $fields['reclutaSexo'] = array('nombre'=>'reclutaSexo',
  1316.                                           'type' => 'string',
  1317.                                           'label'  => $this->translator->trans(
  1318.                                                       $this->translatorBase.'.fields.reclutaSexo',
  1319.                                               array(),
  1320.                                               'crud'));
  1321.             //$fields['fechaAsignacion'] = $fechaAsignacion;
  1322.             $fields['fechaResultado'] = $fechaResultado;
  1323.             if ($this->routeClassName == 'nominaunidadinicio') {
  1324.                 $fields['unidadAsignada'] = array('nombre'=>'unidadAsignada',
  1325.                                         'type' => 'string',
  1326.                                         'label'  => $this->translator->trans(
  1327.                                                       $this->translatorBase.'.fields.unidadAsignada',
  1328.                                                       array(), 'crud'));
  1329.                 $fields['bajaVoluntaria'] = array('nombre'=>'bajaVoluntaria',
  1330.                                         'type' => 'string',
  1331.                                         'label'  => $this->translator->trans(
  1332.                                                       $this->translatorBase.'.fields.bajaVoluntaria',
  1333.                                                       array(), 'crud'));
  1334.             }
  1335.             else
  1336.             $fields['unidadMilitar'] = $UM;
  1337.         }
  1338.         else if ($this->routeClassName == 'listaasignacionbase'
  1339.         {
  1340.             unset($fields['causaRechazo']);
  1341.             unset($fields['fechaResultado']);
  1342.             unset($fields['turno']);
  1343.             $CM $fields['centroMovilizacion'];
  1344.             unset($fields['centroMovilizacion']);
  1345.             $UM $fields['unidadMilitar'];
  1346.             unset($fields['unidadMilitar']); 
  1347.             //$fechaAsignacion = $fields['fechaAsignacion']; 
  1348.             unset($fields['fechaAsignacion']);
  1349.             $fields['fuerza'] = array('nombre'=>'fuerza',
  1350.                                                  'type'=>'string',
  1351.                                                  'label'=>$this->translator->trans(
  1352.                                                       $this->translatorBase.'.fields.fuerza',
  1353.                                                       array(),
  1354.                                                       'crud'));
  1355.             $fields['baseMovilizacion'] = array('nombre'=>'baseMovilizacion',
  1356.                                                  'type'=>'string',
  1357.                                                  'label'=>$this->translator->trans(
  1358.                                                       $this->translatorBase.'.fields.baseMovilizacion',
  1359.                                                       array(),
  1360.                                                       'crud'));
  1361.             $fields['centroMovilizacion'] = $CM;
  1362.             $fields['unidadMilitar'] = $UM;
  1363.             $fields['centroInstruccion'] = array('nombre'=>'centroInstruccion',
  1364.                                                  'type'=>'string',
  1365.                                                  'label'=>$this->translator->trans(
  1366.                                                       $this->translatorBase.'.fields.centroInstruccion',
  1367.                                                       array(),
  1368.                                                       'crud'));
  1369.             
  1370.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1371.                                                  'type'=>'string',
  1372.                                                  'label'=>$this->translator->trans(
  1373.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1374.                                                       array(),
  1375.                                                       'crud'));
  1376.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1377.                                           'type' => 'string',
  1378.                                           'label'  => $this->translator->trans(
  1379.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1380.                                               array(),
  1381.                                               'crud'));
  1382.             
  1383.             $fields['reclutaSexo'] = array('nombre'=>'reclutaSexo',
  1384.                                           'type' => 'string',
  1385.                                           'label'  => $this->translator->trans(
  1386.                                                       $this->translatorBase.'.fields.reclutaSexo',
  1387.                                               array(),
  1388.                                               'crud'));
  1389.             //$fields['fechaAsignacion'] = $fechaAsignacion;
  1390.         }
  1391.         else if ($this->routeClassName == 'nominaacuartelados'
  1392.         {
  1393.             unset($fields['turno']);
  1394.             unset($fields['causaRechazo']);
  1395.             unset($fields['fechaAsignacion']);
  1396.             unset($fields['fechaResultado']);
  1397.             
  1398.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1399.                                           'type' => 'string',
  1400.                                           'label'  => $this->translator->trans(
  1401.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1402.                                               array(),
  1403.                                               'crud'));
  1404.             
  1405.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1406.                                                  'type'=>'string',
  1407.                                                  'label'=>$this->translator->trans(
  1408.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1409.                                                       array(),
  1410.                                                       'crud'));
  1411.             $fields['reclutaFechaNacimiento'] = array('nombre'=>'reclutaFechaNacimiento',
  1412.                                                  'tipo'=>'date',
  1413.                                                  'type'=>'date',
  1414.                                                  'label'=>$this->translator->trans(
  1415.                                                       $this->translatorBase.'.fields.reclutaFechaNacimiento',
  1416.                                                       array(),
  1417.                                                       'crud'));
  1418.             $fields['reclutaSexo'] = array('nombre'=>'reclutaSexo',
  1419.                                           'type' => 'string',
  1420.                                           'label'  => $this->translator->trans(
  1421.                                                       $this->translatorBase.'.fields.reclutaSexo',
  1422.                                               array(),
  1423.                                               'crud'));
  1424.         }
  1425.         else if ($this->routeClassName == 'reportebajas'
  1426.         {
  1427.             unset($fields['turno']);
  1428.             unset($fields['fechaAsignacion']);
  1429.             
  1430.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1431.                                           'type' => 'string',
  1432.                                           'label'  => $this->translator->trans(
  1433.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1434.                                               array(),
  1435.                                               'crud'));
  1436.             
  1437.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1438.                                                  'type'=>'string',
  1439.                                                  'label'=>$this->translator->trans(
  1440.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1441.                                                       array(),
  1442.                                                       'crud'));
  1443.         }
  1444.         else if ($this->routeClassName == 'reporteasignacion'
  1445.         {
  1446.             unset($fields['procesoReclutamiento']);
  1447.             unset($fields['unidadMilitar']);
  1448.             //unset($fields['fechaAsignacion']);
  1449.             unset($fields['causaRechazo']);
  1450.             unset($fields['fechaResultado']);
  1451.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1452.                                              'type'=>'string',
  1453.                                              'label'=>$this->translator->trans(
  1454.                                                   $this->translatorBase.'.fields.reclutaNombre',
  1455.                                                   array(),
  1456.                                                   'crud'));
  1457.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1458.                                       'type' => 'string',
  1459.                                       'label'  => $this->translator->trans(
  1460.                                                   $this->translatorBase.'.fields.reclutaIdentificacion',
  1461.                                           array(),
  1462.                                           'crud'));
  1463.         
  1464.             $fields['reclutaEdad'] = array('nombre'=>'reclutaEdad',
  1465.                                              'type'=>'integer',
  1466.                                              'label'=>$this->translator->trans(
  1467.                                                   $this->translatorBase.'.fields.reclutaEdad',
  1468.                                                   array(),
  1469.                                                   'crud'));
  1470.             $fields['fechaRegistro'] = $bckFields['fechaRegistro'];
  1471.             
  1472.             $fields['certificadoVacunacionOk'] = $bckFields['certificadoVacunacionOk'];
  1473.              
  1474.             if ($this->routeClassName!='listaaspirantes')
  1475.             {
  1476.                 if (!$this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
  1477.                     unset($fields['centroMovilizacion']);
  1478.                 $fields['idoneo'] = $bckFields['idoneo'];
  1479.                 $fields['causaRechazoTexto'] = array('nombre'=>'causaRechazoTexto',
  1480.                                              'type'=>'integer',
  1481.                                              'label'=>$this->translator->trans(
  1482.                                                   $this->translatorBase.'.fields.causaRechazoTexto',
  1483.                                                   array(),
  1484.                                                   'crud'));
  1485.                 $fields['fechaResultado'] = $bckFields['fechaResultado'];                               
  1486.                 
  1487.             }
  1488.         }
  1489.         else if ($this->routeClassName == 'aspirantesencuesta')
  1490.         {
  1491.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1492.                                           'type' => 'string',
  1493.                                           'label'  => $this->translator->trans(
  1494.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1495.                                               array(),
  1496.                                               'crud'));
  1497.             
  1498.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1499.                                                  'type'=>'string',
  1500.                                                  'label'=>$this->translator->trans(
  1501.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1502.                                                       array(),
  1503.                                                       'crud'));
  1504.             if (isset($this->filterData['pregunta']) && $this->filterData['pregunta'])
  1505.             {
  1506.                 $preguntas = [
  1507.                     'TallaUniforme' => 'Tallas de los uniformes Jaguar M1',
  1508.                     'TallaJockey' => 'Tallas de los jockey Jaguar',
  1509.                     'TallaCalzado' => 'Tallas del clazado (botas)',
  1510.                     'TallaCamiseta' => 'Tallas de las camisetas (caqui)',
  1511.                     'EstudioStr' => 'Nivel de estudio',
  1512.                 ];
  1513.                 
  1514.                 $fields[$this->filterData['pregunta']] = [
  1515.                     'nombre'=>$this->filterData['pregunta'],
  1516.                     'type'=>'string',
  1517.                     'label'=> $preguntas[$this->filterData['pregunta']]
  1518.                 ];
  1519.                 
  1520.                 unset($fields['fechaResultado']);
  1521.                 unset($fields['fechaAsignacion']);
  1522.                 unset($fields['turno']);
  1523.                 
  1524.             }
  1525.         }
  1526.         else if ($this->routeClassName == 'aspirantescursos')
  1527.         {
  1528.             $fields['cursos'] = array('nombre'=>'cursosStr',
  1529.                                       'type' => 'string',
  1530.                                       'label'  => 'Cursos');
  1531.             
  1532.             unset($fields['fechaResultado']);
  1533.             unset($fields['fechaAsignacion']);
  1534.             unset($fields['turno']);
  1535.                 
  1536.         }
  1537.         else
  1538.         {
  1539.             unset($fields['turno']);
  1540.             //unset($fields['fechaAsignacion']);
  1541.             unset($fields['causaRechazo']);
  1542.             unset($fields['fechaResultado']);
  1543.             if ($this->routeClassName == 'reporteasignacioncentro'){
  1544.                // unset($fields['unidadMilitar']);
  1545.             }
  1546.             elseif ($this->routeClassName == 'reporteasignacionunidad') {
  1547.                 //unset($fields['centroMovilizacion']);
  1548.             }
  1549.             $fields['centroInstruccion'] = array('nombre'=>'centroInstruccion',
  1550.                                                  'type'=>'string',
  1551.                                                  'label'=>$this->translator->trans(
  1552.                                                       $this->translatorBase.'.fields.centroInstruccion',
  1553.                                                       array(),
  1554.                                                       'crud'));
  1555.             
  1556.             $fields['reclutaNombre'] = array('nombre'=>'reclutaNombre',
  1557.                                                  'type'=>'string',
  1558.                                                  'label'=>$this->translator->trans(
  1559.                                                       $this->translatorBase.'.fields.reclutaNombre',
  1560.                                                       array(),
  1561.                                                       'crud'));
  1562.             $fields['reclutaIdentificacion'] = array('nombre'=>'reclutaIdentificacion',
  1563.                                           'type' => 'string',
  1564.                                           'label'  => $this->translator->trans(
  1565.                                                       $this->translatorBase.'.fields.reclutaIdentificacion',
  1566.                                               array(),
  1567.                                               'crud'));
  1568.         }
  1569.         
  1570.         if ($this->routeClassName=='certificadovacunacion')
  1571.         {
  1572.             $fields['turno']['nombre'] = 'centroMovilizacion';
  1573.             $fields['turno']['label'] = 'Centro Acuartelamiento';
  1574.             $fields['reclutaNombre']['label'] = 'Aspirante';
  1575.             unset($fields['fechaResultado']);
  1576.             unset($fields['idoneo']);
  1577.             unset($fields['causaRechazoTexto']);
  1578.         }
  1579.         
  1580.         return $fields;
  1581.     } 
  1582.     
  1583.     protected function getFormulario($entity
  1584.     {
  1585.         $formulario parent::getFormulario($entity);
  1586.         
  1587.         unset($formulario['turno']);        
  1588.         unset($formulario['fechaRegistro']);        
  1589.         unset($formulario['paisResidencia']);
  1590.         unset($formulario['lugarResidencia']);
  1591.         unset($formulario['callePrincipalResidencia']);
  1592.         unset($formulario['calleSecundariaResidencia']);
  1593.         unset($formulario['numeroCasa']);
  1594.         unset($formulario['referencias']);
  1595.         unset($formulario['geometria']);
  1596.         unset($formulario['fechaConsultaAntecedentes']);
  1597.         unset($formulario['resultadosAntecedentes']);
  1598.         unset($formulario['fechaConsultaEstudios']);
  1599.         unset($formulario['resultadosEstudios']);
  1600.         unset($formulario['unidadMilitar']);
  1601.         unset($formulario['fechaAsignacion']);
  1602.         unset($formulario['volverPresentarse']);
  1603.         unset($formulario['intentos']);
  1604.         unset($formulario['fechaIntento1']);
  1605.         unset($formulario['fechaIntento2']);
  1606.         unset($formulario['fechaIntento3']);
  1607.         unset($formulario['centroMovilizacion']);
  1608.         unset($formulario['recluta']);
  1609.         // Para cambiar el oreden en que se presentan
  1610.         $proceso $formulario['procesoReclutamiento'];
  1611.         $fechaRes $formulario['fechaResultado'];
  1612.         $idoneo $formulario['idoneo'];
  1613.         $causa $formulario['causaRechazo'];
  1614.         $obs $formulario['observaciones'];
  1615.         unset($formulario['procesoReclutamiento']);
  1616.         unset($formulario['observaciones']);
  1617.         unset($formulario['fechaResultado']);
  1618.         unset($formulario['idoneo']);
  1619.         unset($formulario['causaRechazo']);
  1620.         
  1621.         
  1622. /*        $formulario['reclutaNombre']=array('nombre'   =>'reclutaNombre',
  1623.                         'tipo'     => null,
  1624.                         'type'     => 'string',
  1625.                         'atributos'=> array('label' => $this->translator->trans(
  1626.                                                 $this->translatorBase.'.fields.reclutaNombre',
  1627.                                                 array(),
  1628.                                                 'crud').':',
  1629.                                             'required' => true,
  1630.                                             'attr'=>array('style'=>'width: 100%')));
  1631.         $formulario['reclutaNombre']['atributos']['disabled'] = true;
  1632.         
  1633.         $formulario['procesoTexto']=array('nombre'   =>'procesoTexto',
  1634.                         'tipo'     => null,
  1635.                         'type'     => 'string',
  1636.                         'atributos'=> array('label' => $this->translator->trans(
  1637.                                                 $this->translatorBase.'.fields.procesoTexto',
  1638.                                                 array(),
  1639.                                                 'crud').':',
  1640.                                             'required' => true,
  1641.                                             'attr'=>array('style'=>'width: 100%')));
  1642.         $formulario['procesoTexto']['atributos']['disabled'] = true;
  1643.      */   
  1644.         $formulario['fechaResultado'] = $fechaRes;
  1645.         $formulario['idoneo'] = $idoneo;
  1646.         $formulario['causaRechazo'] = $causa;      
  1647.         $formulario['causaRechazo']['tipo']="Symfony\Component\Form\Extension\Core\Type\ChoiceType";
  1648.         $formulario['causaRechazo']['atributos']['choices'] = array_flip(CausaNoIdoneoEnum::getReadables());
  1649.         $formulario['causaRechazo']['atributos']['placeholder'] = '--- Seleccione ---';
  1650.         $formulario['causaRechazo']['atributos']['empty_data'] = null;
  1651.                 
  1652.         $formulario['observaciones'] = $obs;
  1653.         //$formulario['causaRechazo']['atributos']['attr']['containerclass'] = 'full-row';
  1654.         //$formulario['observaciones']['atributos']['attr']['containerclass'] = 'full-row';
  1655.         
  1656.         return $formulario;
  1657.     }
  1658.     
  1659.     protected function showGetFields($entity null
  1660.     {
  1661.         $fields parent::showGetFields($entity);
  1662.         
  1663.         
  1664.         $queryBuilder $this->em->getRepository('App\\Entity\\Recluta')->createQueryBuilder('c')
  1665.                     ->where('c.id='.$entity->getRecluta()->getId());
  1666.        $fields['recluta']['atributos']['query_builder'] = $queryBuilder;
  1667.         
  1668.    
  1669.         $newFields['recluta'] =$fields['recluta'];
  1670.         
  1671.         $newFields['paisResidencia'] = $fields['paisResidencia'];
  1672.         $newFields['callePrincipalResidencia'] = $fields['callePrincipalResidencia'];
  1673.         $newFields['region'] = array('nombre'=>'region',
  1674.                                              'type'=>'string',
  1675.                                              'label'=>$this->translator->trans(
  1676.                                                   $this->translatorBase.'.fields.region',
  1677.                                                   array(),
  1678.                                                   'crud'));    
  1679.         $newFields['calleSecundariaResidencia'] = $fields['calleSecundariaResidencia'];
  1680.         $newFields['provincia'] = array('nombre'=>'provincia',
  1681.                                              'type'=>'string',
  1682.                                              'label'=>$this->translator->trans(
  1683.                                                   $this->translatorBase.'.fields.provincia',
  1684.                                                   array(),
  1685.                                                   'crud'));
  1686.         $newFields['numeroCasa'] = $fields['numeroCasa'];
  1687.         $newFields['canton'] = array('nombre'=>'canton',
  1688.                                              'type'=>'string',
  1689.                                              'label'=>$this->translator->trans(
  1690.                                                   $this->translatorBase.'.fields.canton',
  1691.                                                   array(),
  1692.                                                   'crud'));
  1693.         $newFields['referencias'] = $fields['referencias'];
  1694.         $newFields['lugarResidencia'] = $fields['lugarResidencia'];
  1695.         
  1696.                
  1697.         //$newFields['centroMovilizacion'] = $fields['centroMovilizacion'];
  1698.         
  1699.         // antecedentes
  1700.         // nivel de intruccion
  1701.         // encuesta psicologica
  1702.         
  1703.       //  $newFields['idoneo'] = $fields['idoneo'];
  1704.         /*
  1705.         $newFields['nombreCompleto'] = array('nombre'=>'nombreCompleto',
  1706.                                              'type'=>'string',
  1707.                                              'label'=>$this->translator->trans(
  1708.                                                   $this->routeClassName.'.fields.nombrecompleto',
  1709.                                                   array(),
  1710.                                                   'crud'));
  1711.         $newFields['imagen'] = array('nombre' => 'imagen',
  1712.                                       'type' => 'string',
  1713.                                       'label'  => $this->translator->trans(
  1714.                                           $this->routeClassName.'.fields.foto',
  1715.                                           array(),
  1716.                                           'crud'));
  1717.         */
  1718.         return $newFields;
  1719.     }
  1720.     
  1721.     protected function setFiltros()
  1722.     {
  1723.         if (!isset($this->filterData['procesoReclutamiento']))
  1724.         {
  1725.             $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  1726.                     ->findOneBy(array('activo'=>true));
  1727.             if ($procesoActivo)
  1728.             {
  1729.                 $this->filterData['procesoReclutamiento']=$procesoActivo->getId();
  1730.             }
  1731.         }
  1732.         if ($this->routeClassName=='listaaspirantes' || $this->routeClassName=='certificadovacunacion')
  1733.         {
  1734.             $this->filterData['turno']= 'not null';            
  1735.             $this->filterData['fechaResultado']= 'null'
  1736.             if (!isset($this->filterData['centroMovilizacion']) && isset($this->filterData['reclutaBase']))
  1737.             {
  1738.                 $this->filterData['centroMovilizacion'] = 'not null'
  1739.             }
  1740.             $user $this->getUser();
  1741.             
  1742.             if ($user->getCentroMovilizacion() && !$this->getUser()->isRoleAssigned('ROLE_PSICOLOGO_JEFE'))
  1743.             {
  1744.                 $this->filterData['centroMovilizacion'] = $user->getCentroMovilizacion()->getId(); 
  1745.             }
  1746.         }
  1747.         if ($this->routeClassName=='certificadovacunacion' && !isset($this->filterData['certificadoVacunacionOk']))
  1748.         {
  1749.             $this->filterData['certificadoVacunacionOk'] = 'null';            
  1750.         }
  1751.         if ($this->routeClassName=='listaasignacionbase')
  1752.         {
  1753.             if (!isset($this->filterData['unidadMilitar']))
  1754.             {
  1755.                 $this->filterData['unidadMilitar'] = 'not null'
  1756.             }
  1757.         }
  1758.         if ($this->routeClassName=='nominaacuartelados')
  1759.         {
  1760.             if (!isset($this->filterData['centroMovilizacion']))
  1761.             {
  1762.                 $this->filterData['centroMovilizacion'] = 'not null'
  1763.             }
  1764.             if (!isset($this->filterData['unidadMilitar']))
  1765.             {
  1766.                 $this->filterData['unidadMilitar']= 'not null'
  1767.             }
  1768.         }
  1769.         if ($this->routeClassName=='reportebajas')
  1770.         {
  1771.             if (!isset($this->filterData['centroMovilizacion']))
  1772.             {
  1773.                 $this->filterData['centroMovilizacion'] = 'not null'
  1774.             }
  1775.         }
  1776.         if ($this->routeClassName=='noidoneos')
  1777.         {
  1778.             $this->filterData['idoneo']= 'false'
  1779.             if (!isset($this->filterData['centroMovilizacion']) && isset($this->filterData['reclutaBase']))
  1780.             {
  1781.                 $this->filterData['centroMovilizacion'] = 'not null'
  1782.             }
  1783.         }
  1784.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO'))
  1785.         {
  1786.             $this->filterData['centroMovilizacion']= $this->getUser()->getCentroMovilizacion()->getId(); 
  1787.         }
  1788.         if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE'))
  1789.         {
  1790.             $this->filterData['reclutaBase']= $this->getUser()->getBaseMovilizacion()->getId(); 
  1791.         }
  1792.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
  1793.         {
  1794.             $this->filterData['unidadMilitar']= $this->getUser()->getUnidadMilitar()->getId(); 
  1795.         }
  1796.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') && $this->routeClassName=='centroreclutaproceso')
  1797.         {
  1798.             $this->filterData['reclutaCentroInstruccion']= $this->getUser()->getCentroInstruccion()->getId(); 
  1799.         }
  1800.         
  1801.         if (strpos($this->routeClassName'reporteasignacion') !== false || 
  1802.                 $this->routeClassName=='listaasignacionunidad'
  1803.         {
  1804.             if (!isset($this->filterData['unidadMilitar']))
  1805.             {
  1806.                 $this->filterData['unidadMilitar']='not null';
  1807.             }
  1808.         }
  1809.     }
  1810.        
  1811.     public function showRespuestasAction($id)
  1812.     {
  1813.         $params $this->getTestResultsData($id);
  1814.         return $this->render('ReclutaProceso/testPreguntasShowBody.html.twig'$params);
  1815.     }
  1816.     
  1817.     protected function fillExcelDataTest($params$row$sheet)
  1818.     {
  1819.         $user $this->getUser();
  1820.         $recluta $params['entity']->getRecluta(); 
  1821.         
  1822.         $sheet->setCellValue('A'.$row'Datos personales')->mergeCells('A1:B1');
  1823.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1824.         $sheet->getStyle('A'.$row)->getFont()->setSize(16);
  1825.         
  1826.         $row++;
  1827.         $sheet->setCellValue('A'.$row'Cédula');
  1828.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1829.         $sheet->setCellValue('B'.$row$recluta->getIdentificacion());
  1830.         
  1831.         $row++;
  1832.         
  1833.         $sheet->setCellValue('A'.$row'Nombres');
  1834.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1835.         $sheet->setCellValue('B'.$row$recluta->getNombreCompleto());
  1836.         
  1837.         $row++;
  1838.         
  1839.         $sheet->setCellValue('A'.$row'Género');
  1840.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1841.         $sheet->setCellValue('B'.$row$recluta->getSexo());
  1842.         
  1843.         $row++;
  1844.         
  1845.         $sheet->setCellValue('A'.$row'Estado civil');
  1846.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1847.         $sheet->setCellValue('B'.$row$recluta->getEstadoCivil());
  1848.         
  1849.         $row++;
  1850.         
  1851.         $sheet->setCellValue('A'.$row'Teléfono');
  1852.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1853.         $sheet->setCellValue('B'.$row$recluta->getTelefono());
  1854.         
  1855.         $row++;
  1856.         
  1857.         $sheet->setCellValue('A'.$row'Teléfono para emergencias');
  1858.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1859.         $sheet->setCellValue('B'.$row$recluta->getTelefonoEmergencias());
  1860.         
  1861.         $row++;
  1862.         
  1863.         $sheet->setCellValue('A'.$row'Correo electrónico');
  1864.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1865.         $sheet->setCellValue('B'.$row$recluta->getEmail());
  1866.         
  1867.         $row++;
  1868.         
  1869.         $sheet->setCellValue('A'.$row'Estatura (cm)');
  1870.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1871.         $sheet->setCellValue('B'.$row$recluta->getEstatura());
  1872.         
  1873.         
  1874.         $row $row+2;
  1875.         
  1876.         $sheet->setCellValue('A'.$row'Resultado del test psicológico')->mergeCells('A11:B11');
  1877.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1878.         $sheet->getStyle('A'.$row)->getFont()->setSize(16);
  1879.         
  1880.         $row++;
  1881.         
  1882.         $sheet->setCellValue('A'.$row'Tipo');
  1883.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1884.         $sheet->setCellValue('B'.$row'Nombre');
  1885.         $sheet->getStyle('B'.$row)->getFont()->setBold(true);
  1886.         $sheet->setCellValue('C'.$row'Valor');
  1887.         $sheet->getStyle('C'.$row)->getFont()->setBold(true);
  1888.         $sheet->setCellValue('D'.$row'Riesgo Bajo');
  1889.         $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  1890.         $sheet->setCellValue('E'.$row'Riesgo Medio');
  1891.         $sheet->getStyle('E'.$row)->getFont()->setBold(true);
  1892.         $sheet->setCellValue('F'.$row'Riesgo Alto');
  1893.         $sheet->getStyle('F'.$row)->getFont()->setBold(true);
  1894.         
  1895.         if ($user->isRoleAssigned('ROLE_PSICOLOGO_JEFE'))
  1896.         {
  1897.             $sheet->setCellValue('G'.$row'Tipo Pregunta');
  1898.             $sheet->getStyle('G'.$row)->getFont()->setBold(true);
  1899.         }
  1900.         $row++;
  1901.         
  1902.         foreach ($params['preguntas'] as $sistemaId => $sistema)
  1903.         {
  1904.             $indent '';
  1905.             $sheet->setCellValue('A'.$row$indent.'SISTEMA');
  1906.             $sheet->setCellValue('B'.$row$sistema['nombre']);
  1907.             $row++;
  1908.             if (isset($sistema['ejes']))
  1909.             {
  1910.                 foreach ($sistema['ejes'] as $ejeId => $eje)
  1911.                 {
  1912.                     $indent '    ';
  1913.                     $sheet->setCellValue('A'.$row$indent.'EJE');
  1914.                     $sheet->setCellValue('B'.$row$eje['nombre']);
  1915.                     $row++;
  1916.                     if (isset($eje['criterios']))
  1917.                     {
  1918.                         foreach ($eje['criterios'] as $criterioId => $criterio)
  1919.                         {
  1920.                             $indent '        ';
  1921.                             $sheet->setCellValue('A'.$row$indent.'CRITERIO');
  1922.                             $sheet->setCellValue('B'.$row$criterio['criterio']->getNombre());
  1923.                             $sheet->setCellValue('C'.$row$criterio['suma']);
  1924.                             $sheet->setCellValue('D'.$row$criterio['criterio']->getRiesgoBajoDesde().' a '.$criterio['criterio']->getRiesgoBajoHasta());
  1925.                             if ($criterio['suma']<$criterio['criterio']->getRiesgoMedioDesde())
  1926.                             {
  1927.                                 $sheet->getStyle('D'.$row)->getFill()
  1928.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_GREEN);
  1929.                             }
  1930.                             $sheet->setCellValue('E'.$row$criterio['criterio']->getRiesgoMedioDesde().' a '.$criterio['criterio']->getRiesgoMedioHasta());
  1931.                             if ($criterio['suma']>=$criterio['criterio']->getRiesgoMedioDesde() && $criterio['suma']<=$criterio['criterio']->getRiesgoMedioHasta())
  1932.                             {
  1933.                                 $sheet->getStyle('E'.$row)->getFill()
  1934.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_YELLOW);
  1935.                             }
  1936.                             $sheet->setCellValue('F'.$row$criterio['criterio']->getRiesgoAltoDesde().' a '.$criterio['criterio']->getRiesgoAltoHasta());
  1937.                             if ($criterio['suma']>$criterio['criterio']->getRiesgoMedioHasta())
  1938.                             {
  1939.                                 $sheet->getStyle('F'.$row)->getFill()
  1940.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_RED);
  1941.                             }
  1942.                             $row++;
  1943.                             if (isset($criterio['preguntas']) && $user->isRoleAssigned('ROLE_PSICOLOGO_JEFE'))
  1944.                             {
  1945.                                 $indent '            ';
  1946.                                 foreach ($criterio['preguntas'] as $pregunta)
  1947.                                 {
  1948.                                     $sheet->setCellValue('A'.$row$indent.'PREGUNTA');
  1949.                                     $sheet->setCellValue('B'.$row$pregunta['pregunta']->getNombre());
  1950.                                     $sheet->setCellValue('C'.$row$pregunta['txt']);
  1951.                                     if ($pregunta['pregunta']->getTipo()=='directo')
  1952.                                     {
  1953.                                         $sheet->setCellValue('G'.$row'Directa');
  1954.                                     }
  1955.                                     else
  1956.                                     {
  1957.                                         $sheet->setCellValue('G'.$row'Inversa');
  1958.                                     }
  1959.                                     $row++;
  1960.                                 }
  1961.                             }
  1962.                         }
  1963.                     }
  1964.                 }
  1965.             }
  1966.         }
  1967.         
  1968.         $row++;
  1969.         $sheet->setCellValue('A'.$row'Sistema');
  1970.         $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  1971.         $sheet->setCellValue('B'.$row'Preguntas');
  1972.         $sheet->getStyle('B'.$row)->getFont()->setBold(true);
  1973.         $sheet->setCellValue('C'.$row'Porciento');
  1974.         $sheet->getStyle('C'.$row)->getFont()->setBold(true);
  1975.         $sheet->setCellValue('D'.$row'Puntuación Respuestas');
  1976.         $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  1977.         $sheet->setCellValue('E'.$row'Resultado (%)');
  1978.         $sheet->getStyle('E'.$row)->getFont()->setBold(true);
  1979.         
  1980.         $row++;
  1981.         foreach ($params['preguntas'] as $sistemaId => $sistema)
  1982.         {
  1983.             $sheet->setCellValue('A'.$row$sistema['nombre']);
  1984.             $sheet->setCellValue('B'.$row$sistema['cant_preguntas']);
  1985.             $sheet->setCellValue('C'.$row$sistema['porciento']);
  1986.             $sheet->setCellValue('D'.$row$sistema['suma_respuestas']);
  1987.             $sheet->setCellValue('E'.$row$sistema['resultado']);
  1988.             $row++;
  1989.         }        
  1990.         $sheet->setCellValue('E'.$row$params['total']);
  1991.         $sheet->getStyle('E'.$row)->getFont()->setBold(true);
  1992.         
  1993.         if ($params['total']<=60)
  1994.         {
  1995.             $sheet->setCellValue('D'.$row'Riesgo bajo');
  1996.             $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  1997.             $sheet->getStyle('D'.$row)->getFill()
  1998.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_GREEN);
  1999.             $sheet->getStyle('E'.$row)->getFill()
  2000.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_GREEN);
  2001.         }
  2002.         elseif ($params['total']<=80)
  2003.         {
  2004.             $sheet->setCellValue('D'.$row'Riesgo Medio');
  2005.             $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  2006.             $sheet->getStyle('D'.$row)->getFill()
  2007.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_YELLOW);
  2008.             $sheet->getStyle('E'.$row)->getFill()
  2009.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_YELLOW);
  2010.         }
  2011.         else
  2012.         {
  2013.             $sheet->setCellValue('D'.$row'Riesgo Alto');
  2014.             $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  2015.             $sheet->getStyle('D'.$row)->getFill()
  2016.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_RED);
  2017.             $sheet->getStyle('E'.$row)->getFill()
  2018.                 ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_RED);
  2019.         }
  2020.         
  2021.         return $row++; 
  2022.     }
  2023.             
  2024.     public function showExcelRespuestasAction($id)
  2025.     {
  2026.         $user $this->getUser();
  2027.         
  2028.         $params $this->getTestResultsData($id);
  2029.         
  2030.         $spreadSheet = new Spreadsheet();
  2031.         $sheet $spreadSheet->getActiveSheet();
  2032.         $this->fillExcelDataTest($params1$sheet);
  2033.         $contentType 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  2034.         $xlsxWriter = new Xlsx($spreadSheet);            
  2035.         $fileName 'ww.xlsx';
  2036.         $response = new StreamedResponse();
  2037.         $response->headers->set('Content-Type'$contentType);
  2038.         $response->headers->set('Content-Disposition''attachment;filename="'.$fileName.'"');
  2039.         $response->setPrivate();
  2040.         $response->headers->addCacheControlDirective('no-cache'true);
  2041.         $response->headers->addCacheControlDirective('must-revalidate'true);
  2042.         $response->setCallback(function() use ($xlsxWriter) {
  2043.             $xlsxWriter->save('php://output');
  2044.         });
  2045.         return $response;            
  2046.         
  2047.     }
  2048.     
  2049.     protected function getTestResultsData($id)
  2050.     {
  2051.         $reclutaProceso $this->em->getRepository('App\\Entity\\ReclutaProceso')->find($id);
  2052.         $params = ['entity' => $reclutaProceso'preguntas'=>[]];
  2053.         
  2054.         $respuestas $this->em->getRepository('App\\Entity\\TestReclutaProcesoPregunta')
  2055.             ->createQueryBuilder('rcp')
  2056.             ->innerJoin('rcp.reclutaProceso''reclutaProceso')
  2057.             ->innerJoin('rcp.pregunta''pregunta')->addSelect('pregunta')
  2058.             ->innerJoin('pregunta.criterio''criterio')->addSelect('criterio')
  2059.             ->innerJoin('criterio.eje''eje')->addSelect('eje')
  2060.             ->innerJoin('eje.sistema''sistema')->addSelect('sistema')
  2061.             ->where('reclutaProceso.id=:ID')
  2062.             ->setParameter('ID'$id)
  2063.             ->getQuery()->getResult();
  2064.             
  2065.         $textos = [
  2066.             => 'De acuerdo',
  2067.             => 'Ni de acuerdo ni en desacuerdo',
  2068.             => 'En desacuerdo',
  2069.         ];
  2070.         foreach ($respuestas as $respuesta)
  2071.         {
  2072.             $pregunta $respuesta->getPregunta();
  2073.             $criterio $pregunta->getCriterio();
  2074.             $eje $criterio->getEje();
  2075.             $sistema $eje->getSistema();
  2076.             
  2077.             $valor $respuesta->getRespuesta();
  2078.             $txt $textos[$valor];
  2079.             if ($pregunta->getTipo() == 'directo')
  2080.             {
  2081.                 if ($valor==1)
  2082.                 {
  2083.                     $valor=3;
  2084.                 }
  2085.                 else
  2086.                 if ($valor==3)
  2087.                 {
  2088.                     $valor=1;
  2089.                 }
  2090.             }
  2091.             if (!isset($params['preguntas'][$sistema->getId()]['cant_preguntas']))
  2092.             {
  2093.                 $params['preguntas'][$sistema->getId()]['cant_preguntas'] = 0;
  2094.             }
  2095.             if (!isset($params['preguntas'][$sistema->getId()]['suma_respuestas']))
  2096.             {
  2097.                 $params['preguntas'][$sistema->getId()]['suma_respuestas'] = 0;
  2098.             }
  2099.             
  2100.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['preguntas'][] = ['pregunta'=>$pregunta'respuesta'=>$respuesta'valor'=>$valor'txt'=>$txt]; 
  2101.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
  2102.             if (!isset($params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['suma']))
  2103.             {
  2104.                 $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['suma'] = 0;
  2105.             }
  2106.             $params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
  2107.             $params['preguntas'][$sistema->getId()]['cant_preguntas'] += 1;
  2108.             $params['preguntas'][$sistema->getId()]['suma_respuestas'] += $valor;
  2109.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['suma'] += $valor;
  2110.             $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
  2111.             
  2112.         }
  2113.         $total =0;
  2114.         
  2115.         foreach ($params['preguntas'] as $sistemaId => $datos)
  2116.         {
  2117.             $params['preguntas'][$sistemaId]['porciento'] = number_format($params['preguntas'][$sistemaId]['cant_preguntas']*100/count($respuestas),7);
  2118.             $params['preguntas'][$sistemaId]['resultado'] = number_format($params['preguntas'][$sistemaId]['suma_respuestas']*$params['preguntas'][$sistemaId]['porciento']/($params['preguntas'][$sistemaId]['cant_preguntas']*3),2);
  2119.             $total += $params['preguntas'][$sistemaId]['suma_respuestas']*$params['preguntas'][$sistemaId]['porciento']/($params['preguntas'][$sistemaId]['cant_preguntas']*3);                        
  2120.         }
  2121.         $params['total'] = number_format($total,2);
  2122.         return $params;
  2123.     }
  2124.     
  2125.     public function exportExcelTestsQuestionsAction($rol$routeClassName)
  2126.     {     
  2127.         $this->setInitialValues($rol$routeClassName);
  2128.         $this->accion 'INDEX';
  2129.         if (!$this->allowActionExecution())
  2130.         {
  2131.             return $this->render('@crud\\accesDenied.html.twig');
  2132.         }
  2133.         if (!$this->inline)
  2134.         {
  2135.             $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  2136.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  2137.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  2138.             $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  2139.             $this->entities $this->indexLoadEntities($paramsForFunctionInEntity);
  2140.         }
  2141.         $params $this->indexParamsForTwig($this->em);
  2142.         
  2143.         if (!empty($this->entities))
  2144.         {
  2145.             $proceso $params['entities'][0]->getProcesoReclutamiento();        
  2146.             
  2147.             $spreadSheet = new Spreadsheet();
  2148.             $sheet $spreadSheet->getActiveSheet();
  2149.             $sheet->setCellValue('A1''Reporte Tests Psicológicos')->mergeCells('A1:F1');
  2150.             $sheet->getStyle('A1')->getFont()->setBold(true);
  2151.             $sheet->getStyle('A1')->getFont()->setSize(16);
  2152.             $sheet->setCellValue('A2'$proceso->__toString())->mergeCells('A2:F2');
  2153.             $sheet->getStyle('A2')->getFont()->setBold(true);
  2154.             $sheet->getStyle('A2')->getFont()->setSize(16);
  2155.             
  2156.             $row 7;
  2157.             $first true;
  2158.             
  2159.             $centro='ReporteTest';
  2160.                     
  2161.             foreach ($this->entities as $reclutaProceso)
  2162.             {
  2163.                 $data $this->getTestResultsData($reclutaProceso->getId());
  2164.                 if ($first)
  2165.                 {
  2166.                     $sheet->setCellValue('A'.$row'Identificación');
  2167.                     $sheet->getStyle('A'.$row)->getFont()->setBold(true);
  2168.                     $sheet->getStyle('A'.$row)->getFont();
  2169.                     $sheet->setCellValue('B'.$row'Nombre');
  2170.                     $sheet->getStyle('B'.$row)->getFont()->setBold(true);
  2171.                     $sheet->getStyle('B'.$row)->getFont();
  2172.                     $sheet->setCellValue('C'.$row'Centro movilización');
  2173.                     $sheet->getStyle('C'.$row)->getFont()->setBold(true);
  2174.                     $sheet->getStyle('C'.$row)->getFont();
  2175.                     $sheet->setCellValue('D'.$row'Fecha registro');
  2176.                     $sheet->getStyle('D'.$row)->getFont()->setBold(true);
  2177.                     $sheet->getStyle('D'.$row)->getFont();
  2178.                     
  2179.                     $colSistema 'E';
  2180.                     $colEje 'E';
  2181.                     $colCriterio 'E';
  2182.                     $colPregunta 'D'//Se deja una columna atrás
  2183.                     // E4 -> sistema
  2184.                     // E5 -> eje
  2185.                     // E6 ->criterio
  2186.                     foreach ($data['preguntas'] as $sistemaId => $sistema)
  2187.                     {
  2188.                         foreach ($sistema['ejes'] as $ejeId => $eje)
  2189.                         {
  2190.                             foreach ($eje['criterios'] as $criterioId => $criterio)
  2191.                             {
  2192.                                 foreach ($criterio['preguntas'] as $pregunta)
  2193.                                 {
  2194.                                     $colPregunta++;
  2195.                                     $sheet->setCellValue($colPregunta.$row$pregunta['pregunta']->getNombre());
  2196.                                     $sheet->getStyle($colPregunta.$row)->getFont()->setBold(true);
  2197.                                 }
  2198.                                 $colPregunta++;
  2199.                                 $sheet->setCellValue($colPregunta.$row'Total Criterio');
  2200.                                 $sheet->getStyle($colPregunta.$row)->getFont()->setBold(true);
  2201.                                 
  2202.                                 $sheet->setCellValue($colCriterio.($row-1), $criterio['criterio']->getNombre())->mergeCells($colCriterio.($row-1).':'.$colPregunta.($row-1));
  2203.                                 $sheet->getStyle($colCriterio.($row-1))->getFont()->setBold(true);
  2204.                                 $sheet->getStyle($colCriterio.($row-1))->getFont();
  2205.                                 $colCriterio $colPregunta;
  2206.                                 $colMerge $colCriterio;
  2207.                                 $colCriterio++;
  2208.                             }
  2209.                             $sheet->setCellValue($colEje.($row-2), $eje['nombre'])->mergeCells($colEje.($row-2).':'.$colMerge.($row-2));
  2210.                             $sheet->getStyle($colEje.($row-2))->getFont()->setBold(true);
  2211.                             $sheet->getStyle($colEje.($row-2))->getFont();
  2212.                             $colEje $colPregunta;
  2213.                             $colMerge $colEje;
  2214.                             $colEje++;
  2215.                         }
  2216.                         $sheet->setCellValue($colSistema.($row-3), $sistema['nombre'])->mergeCells($colSistema.($row-3).':'.$colMerge.($row-3));
  2217.                         $sheet->getStyle($colSistema.($row-3))->getFont()->setBold(true);
  2218.                         $sheet->getStyle($colSistema.($row-3))->getFont();
  2219.                         $colSistema $colPregunta;
  2220.                         $colSistema++;
  2221.                     }
  2222.                     $first false;
  2223.                     $row=8;
  2224.                 }
  2225.                 
  2226.                 $recluta $reclutaProceso->getRecluta(); 
  2227.                 
  2228.                 $sheet->setCellValue('A'.$row$recluta->getIdentificacion());
  2229.                 $sheet->setCellValue('B'.$row$recluta->getNombreCompleto());
  2230.                 $sheet->setCellValue('C'.$row$reclutaProceso->getCentroMovilizacion()->__toString());
  2231.                 $sheet->setCellValue('D'.$row$reclutaProceso->getFechaRegistro()->format('Y-m-d'));
  2232.                 
  2233.                 
  2234.                 $centro=$reclutaProceso->getCentroMovilizacion()->__toString();
  2235.                 
  2236.                 $colCriterio 'E';
  2237.                 $colPregunta 'D'//Se deja una columna atrás
  2238.                 foreach ($data['preguntas'] as $sistemaId => $sistema)
  2239.                 {
  2240.                     foreach ($sistema['ejes'] as $ejeId => $eje)
  2241.                     {
  2242.                         foreach ($eje['criterios'] as $criterioId => $criterio)
  2243.                         {
  2244.                             foreach ($criterio['preguntas'] as $pregunta)
  2245.                             {
  2246.                                 $colPregunta++;
  2247.                                 /*if ($pregunta['txt'] == 'Ni de acuerdo ni en desacuerdo')
  2248.                                 {
  2249.                                     $pregunta['txt'] = '';
  2250.                                 }*/
  2251.                                 $sheet->setCellValue($colPregunta.$row/*$pregunta['txt'].' ('.*/$pregunta['valor']/*.')'*/);
  2252.                             }
  2253.                             $colPregunta++;
  2254.                             $colCriterio $colPregunta;
  2255.                             $sheet->setCellValue($colCriterio.$row$criterio['suma']);
  2256.                             if ($criterio['suma']<$criterio['criterio']->getRiesgoMedioDesde())
  2257.                             {
  2258.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2259.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_GREEN);
  2260.                             }
  2261.                             if ($criterio['suma']>=$criterio['criterio']->getRiesgoMedioDesde() && $criterio['suma']<=$criterio['criterio']->getRiesgoMedioHasta())
  2262.                             {
  2263.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2264.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_YELLOW);
  2265.                             }
  2266.                             if ($criterio['suma']>$criterio['criterio']->getRiesgoMedioHasta())
  2267.                             {
  2268.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2269.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_RED);
  2270.                             }
  2271.                         }
  2272.                     }
  2273.                 }
  2274.                 
  2275.                 $row++;
  2276.             }
  2277.                 
  2278.             $row++;
  2279.         }
  2280.         
  2281.         $contentType 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  2282.         $xlsxWriter = new Xlsx($spreadSheet);            
  2283.         $fileName $centro.'.xlsx';
  2284.         $response = new StreamedResponse();
  2285.         $response->headers->set('Content-Type'$contentType);
  2286.         $response->headers->set('Content-Disposition''attachment;filename="'.$fileName.'"');
  2287.         $response->setPrivate();
  2288.         $response->headers->addCacheControlDirective('no-cache'true);
  2289.         $response->headers->addCacheControlDirective('must-revalidate'true);
  2290.         $response->setCallback(function() use ($xlsxWriter) {
  2291.             $xlsxWriter->save('php://output');
  2292.         });
  2293.         return $response;            
  2294.     }
  2295.     
  2296.     public function exportExcelTestsAction($rol$routeClassName)
  2297.     {     
  2298.         $this->setInitialValues($rol$routeClassName);
  2299.         $this->accion 'INDEX';
  2300.         if (!$this->allowActionExecution())
  2301.         {
  2302.             return $this->render('@crud\\accesDenied.html.twig');
  2303.         }
  2304.         if (!$this->inline)
  2305.         {
  2306.             $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  2307.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  2308.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  2309.             $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  2310.             $this->entities $this->indexLoadEntities($paramsForFunctionInEntity);
  2311.         }
  2312.         $params $this->indexParamsForTwig($this->em);
  2313.         
  2314.         if (!empty($this->entities))
  2315.         {
  2316.             $proceso $params['entities'][0]->getProcesoReclutamiento();        
  2317.             
  2318.             $spreadSheet = new Spreadsheet();
  2319.             $sheet $spreadSheet->getActiveSheet();
  2320.             $sheet->setCellValue('A1''Reporte cruzado Tests Psicológicos')->mergeCells('A1:F1');
  2321.             $sheet->getStyle('A1')->getFont()->setBold(true);
  2322.             $sheet->getStyle('A1')->getFont()->setSize(16);
  2323.             $sheet->setCellValue('A2'$proceso->__toString())->mergeCells('A2:F2');
  2324.             $sheet->getStyle('A2')->getFont()->setBold(true);
  2325.             $sheet->getStyle('A2')->getFont()->setSize(16);
  2326.             
  2327.             $first true;
  2328.             foreach ($this->entities as $reclutaProceso)
  2329.             {
  2330.                 $data $this->getTestResultsData($reclutaProceso->getId());
  2331.                 if ($first)
  2332.                 {
  2333.                     $sheet->setCellValue('A6''Identificación');
  2334.                     $sheet->getStyle('A6')->getFont()->setBold(true);
  2335.                     $sheet->getStyle('A6')->getFont();
  2336.                     $sheet->setCellValue('B6''Nombre');
  2337.                     $sheet->getStyle('B6')->getFont()->setBold(true);
  2338.                     $sheet->getStyle('B6')->getFont();
  2339.                     $sheet->setCellValue('C6''Centro movilización');
  2340.                     $sheet->getStyle('C6')->getFont()->setBold(true);
  2341.                     $sheet->getStyle('C6')->getFont();
  2342.                     $sheet->setCellValue('D6''Fecha registro');
  2343.                     $sheet->getStyle('D6')->getFont()->setBold(true);
  2344.                     $sheet->getStyle('D6')->getFont();
  2345.                     
  2346.                     $colSistema 'E';
  2347.                     $colEje 'E';
  2348.                     $colCriterio 'D'//Se deja una columna atrás
  2349.                     // E4 -> sistema
  2350.                     // E5 -> eje
  2351.                     // E6 ->criterio
  2352.                     foreach ($data['preguntas'] as $sistemaId => $sistema)
  2353.                     {
  2354.                         foreach ($sistema['ejes'] as $ejeId => $eje)
  2355.                         {
  2356.                             foreach ($eje['criterios'] as $criterioId => $criterio)
  2357.                             {
  2358.                                 $colCriterio++;
  2359.                                 $sheet->setCellValue($colCriterio.'6'$criterio['criterio']->getNombre());
  2360.                                 $sheet->getStyle($colCriterio.'6')->getFont()->setBold(true);
  2361.                                 $sheet->getStyle($colCriterio.'6')->getFont();
  2362.                             }
  2363.                             $sheet->setCellValue($colEje.'5'$eje['nombre'])->mergeCells($colEje.'5:'.$colCriterio.'5');
  2364.                             $sheet->getStyle($colEje.'5')->getFont()->setBold(true);
  2365.                             $sheet->getStyle($colEje.'5')->getFont();
  2366.                             $colEje $colCriterio;
  2367.                             $colEje++;
  2368.                         }
  2369.                         $sheet->setCellValue($colSistema.'4'$sistema['nombre'])->mergeCells($colSistema.'4:'.$colCriterio.'4');
  2370.                         $sheet->getStyle($colSistema.'4')->getFont()->setBold(true);
  2371.                         $sheet->getStyle($colSistema.'4')->getFont();
  2372.                         $colSistema $colCriterio;
  2373.                         $colSistema++;
  2374.                     }
  2375.                     $first false;
  2376.                     $row 7;
  2377.                 }
  2378.                 
  2379.                 $recluta $reclutaProceso->getRecluta(); 
  2380.                 
  2381.                 $sheet->setCellValue('A'.$row$recluta->getIdentificacion());
  2382.                 $sheet->setCellValue('B'.$row$recluta->getNombreCompleto());
  2383.                 $sheet->setCellValue('C'.$row$reclutaProceso->getCentroMovilizacion()->__toString());
  2384.                 $sheet->setCellValue('D'.$row$reclutaProceso->getFechaRegistro()->format('Y-m-d'));
  2385.                 
  2386.                 $colCriterio 'D'//Se deja una columna atrás
  2387.                 foreach ($data['preguntas'] as $sistemaId => $sistema)
  2388.                 {
  2389.                     foreach ($sistema['ejes'] as $ejeId => $eje)
  2390.                     {
  2391.                         foreach ($eje['criterios'] as $criterioId => $criterio)
  2392.                         {
  2393.                             $colCriterio++;
  2394.                             $sheet->setCellValue($colCriterio.$row$criterio['suma']);
  2395.                             
  2396.                             if ($criterio['suma']<$criterio['criterio']->getRiesgoMedioDesde())
  2397.                             {
  2398.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2399.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_GREEN);
  2400.                             }
  2401.                             if ($criterio['suma']>=$criterio['criterio']->getRiesgoMedioDesde() && $criterio['suma']<=$criterio['criterio']->getRiesgoMedioHasta())
  2402.                             {
  2403.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2404.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_YELLOW);
  2405.                             }
  2406.                             if ($criterio['suma']>$criterio['criterio']->getRiesgoMedioHasta())
  2407.                             {
  2408.                                 $sheet->getStyle($colCriterio.$row)->getFill()
  2409.                                     ->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Color::COLOR_RED);
  2410.                             }
  2411.                         }
  2412.                     }
  2413.                 }
  2414.                 
  2415.                 $row++;
  2416.             }
  2417.         }
  2418.         
  2419.         $contentType 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  2420.         $xlsxWriter = new Xlsx($spreadSheet);            
  2421.         $fileName 'ww.xlsx';
  2422.         $response = new StreamedResponse();
  2423.         $response->headers->set('Content-Type'$contentType);
  2424.         $response->headers->set('Content-Disposition''attachment;filename="'.$fileName.'"');
  2425.         $response->setPrivate();
  2426.         $response->headers->addCacheControlDirective('no-cache'true);
  2427.         $response->headers->addCacheControlDirective('must-revalidate'true);
  2428.         $response->setCallback(function() use ($xlsxWriter) {
  2429.             $xlsxWriter->save('php://output');
  2430.         });
  2431.         return $response;            
  2432.         
  2433.         
  2434.     }
  2435.     
  2436. /*    public function exportExcelTestsQuestionsAction($rol, $routeClassName)
  2437.     {     
  2438.         $this->setInitialValues($rol, $routeClassName);
  2439.         $this->accion = 'INDEX';
  2440.         if (!$this->allowActionExecution())
  2441.         {
  2442.             return $this->render('@crud\\accesDenied.html.twig');
  2443.         }
  2444.         if (!$this->inline)
  2445.         {
  2446.             $paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
  2447.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  2448.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  2449.             $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  2450.             $this->entities = $this->indexLoadEntities($paramsForFunctionInEntity);
  2451.         }
  2452.         $params = $this->indexParamsForTwig($this->em);
  2453.         
  2454.         if (!empty($this->entities))
  2455.         {
  2456.             $proceso = $params['entities'][0]->getProcesoReclutamiento();        
  2457.             
  2458.             $spreadSheet = new Spreadsheet();
  2459.             $sheet = $spreadSheet->getActiveSheet();
  2460.             $sheet->setCellValue('A1', 'Reporte Tests Psicológicos')->mergeCells('A1:F1');
  2461.             $sheet->getStyle('A1')->getFont()->setBold(true);
  2462.             $sheet->getStyle('A1')->getFont()->setSize(16);
  2463.             $sheet->setCellValue('A2', $proceso->__toString())->mergeCells('A2:F2');
  2464.             $sheet->getStyle('A2')->getFont()->setBold(true);
  2465.             $sheet->getStyle('A2')->getFont()->setSize(16);
  2466.             
  2467.             $row=1;
  2468.             foreach ($this->entities as $reclutaProceso)
  2469.             {
  2470.                 $data = $this->getTestResultsData($reclutaProceso->getId());
  2471.                 
  2472.                 $row = $this->fillExcelDataTest($data, $row, $sheet);
  2473.                 $row++;
  2474.             }
  2475.         }
  2476.         
  2477.         $contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  2478.         $xlsxWriter = new Xlsx($spreadSheet);            
  2479.         $fileName = 'ww.xlsx';
  2480.         $response = new StreamedResponse();
  2481.         $response->headers->set('Content-Type', $contentType);
  2482.         $response->headers->set('Content-Disposition', 'attachment;filename="'.$fileName.'"');
  2483.         $response->setPrivate();
  2484.         $response->headers->addCacheControlDirective('no-cache', true);
  2485.         $response->headers->addCacheControlDirective('must-revalidate', true);
  2486.         $response->setCallback(function() use ($xlsxWriter) {
  2487.             $xlsxWriter->save('php://output');
  2488.         });
  2489.         return $response;            
  2490.     }
  2491. */    
  2492.     public function getTestElementsAction($proceso$editable)
  2493.     {
  2494.         $params = [
  2495.             'preguntas' => [],
  2496.             'maxSistema' => 0,
  2497.             'maxEje' => 0,
  2498.             'maxCriterio' => 0,
  2499.             'maxPregunta' => 0,
  2500.         ];
  2501.         $sistemas $this->em->getRepository('App\\Entity\\TestSistema')
  2502.             ->createQueryBuilder('s')
  2503.             ->innerJoin('s.proceso''proceso')
  2504.             ->where('proceso.id = '.$proceso)
  2505.             ->getQuery()->getResult();
  2506.         foreach ($sistemas as $sistema)
  2507.         {
  2508.             if ($sistema->getId()>$params['maxSistema'])
  2509.             {
  2510.                 $params['maxSistema'] = $sistema->getId();
  2511.             }
  2512.             $params['preguntas'][$sistema->getId()]['nombre'] = $sistema->getNombre();
  2513.             $ejes $this->em->getRepository('App\\Entity\\TestEje')
  2514.                 ->createQueryBuilder('e')
  2515.                 ->innerJoin('e.sistema''sistema')
  2516.                 ->where('sistema.id = '.$sistema->getId())
  2517.                 ->getQuery()->getResult();
  2518.             foreach ($ejes as $eje)
  2519.             {
  2520.                 if ($eje->getId()>$params['maxEje'])
  2521.                 {
  2522.                     $params['maxEje'] = $eje->getId();
  2523.                 }
  2524.                 $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['nombre'] = $eje->getNombre();
  2525.                 
  2526.                 $criterios $this->em->getRepository('App\\Entity\\TestCriterio')
  2527.                     ->createQueryBuilder('c')
  2528.                     ->innerJoin('c.eje''eje')
  2529.                     ->where('eje.id = '.$eje->getId())
  2530.                     ->getQuery()->getResult();
  2531.                 foreach ($criterios as $criterio)
  2532.                 {
  2533.                     if ($criterio->getId()>$params['maxCriterio'])
  2534.                     {
  2535.                         $params['maxCriterio'] = $criterio->getId();
  2536.                     }
  2537.                     $params['preguntas'][$sistema->getId()]['ejes'][$eje->getId()]['criterios'][$criterio->getId()]['criterio'] = $criterio;
  2538.                 }
  2539.             }
  2540.         }
  2541.         
  2542.         if ($editable=='YES')
  2543.         {
  2544.             return $this->render('ProcesoReclutamiento/testPreguntas.html.twig'$params);
  2545.         }
  2546.         else
  2547.         {
  2548.             return $this->render('ProcesoReclutamiento/testPreguntasShowBody.html.twig'$params);
  2549.         }
  2550.     }    
  2551.     
  2552. }