src/Controller/ProcesoReclutamientoUnidadController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Crud\Controller\crudPlainController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use App\Entity\ProcesoReclutamientoUnidad;
  8. use Dompdf\Dompdf;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use App\Enum\TipoFuerzaEnum;
  11. class ProcesoReclutamientoUnidadController extends crudPlainController
  12. {
  13.     protected function indexLoadEntities($params)
  14.     {
  15.         if ($this->routeClassName == 'consolidadofuerza' && !isset($this->filterData['anno'])) 
  16.         {
  17.             return array();
  18.         }
  19.         else if ($this->routeClassName == 'consolidadofuerza' || $this->routeClassName == 'reporterechazos'
  20.                     || $this->routeClassName == 'registradosbase' || $this->routeClassName == 'registradoscentro'
  21.         {
  22.             return null;
  23.         } 
  24.         else {
  25.             return parent::indexLoadEntities($params);
  26.         }
  27.     }
  28.     public function indexAction($rol$routeClassName)
  29.     {
  30.         if ($routeClassName == 'reporteconsolidadofuerza'
  31.         {
  32.             $this->setInitialValues($rol$routeClassName);
  33.             $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  34.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  35.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  36.             if ($routeClassName == 'reporteconsolidadofuerza')
  37.                 $this->entities $this->getConsolidadoPorFuerza($routeClassName);
  38.             $this->session->set($routeClassName,$this->filterData);
  39.             $this->paginator null;
  40.             $params $this->indexParamsForTwig();
  41.             return $this->render($this->twigIndexName$params);
  42.         }
  43.         else
  44.             return parent::indexAction ($rol$routeClassName);
  45.     }
  46.     
  47.     
  48.     protected function indexParamsForTwig()
  49.     {
  50.         $params parent::indexParamsForTwig();
  51.         if ($this->routeClassName=='reportecupolugar')
  52.         {
  53.             $unidades $params['entities'];
  54.             $lugares = array();
  55.             foreach ($unidades as $unidad)
  56.             {
  57.                 $centro $unidad->getLugar();
  58.                 $base $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  59.                     ->findOneBy(array('proceso'=>$unidad->getProceso()->getId(), 'lugar'=>$centro->getId()));
  60.                 $base $base->getBase();
  61.                 if (isset($lugares[$base->getId()]))
  62.                 {
  63.                     $lugares[$base->getId()]['organicoMasculino'] += $unidad->getOrganicoMasculino();
  64.                     $lugares[$base->getId()]['organicoFemenino'] += $unidad->getOrganicoFemenino();
  65.                     $lugares[$base->getId()]['cupoMasculino'] += $unidad->getCupoMasculino();
  66.                     $lugares[$base->getId()]['cupoFemenino'] += $unidad->getCupoFemenino();
  67.                     $lugares[$base->getId()]['cantUnidades'] += 1;
  68.                 }
  69.                 else
  70.                 {
  71.                     $lugares[$base->getId()] = array(
  72.                         'id'=>'base_'.$base->getId(),
  73.                         'tipoLugar'=>'Base movilizazciĆ³n',
  74.                         'nombre'=>$base->getNombre(),
  75.                         'organicoMasculino' => $unidad->getOrganicoMasculino(),
  76.                         'organicoFemenino' => $unidad->getOrganicoFemenino(),
  77.                         'cupoMasculino' => $unidad->getCupoMasculino(),
  78.                         'cupoFemenino' => $unidad->getCupoFemenino(),
  79.                         'cantUnidades'=>1,
  80.                         'hijos' => array()
  81.                     );
  82.                 }
  83.                 if (isset($lugares[$base->getId()]['hijos'][$centro->getId()])) 
  84.                 {
  85.                     $lugares[$base->getId()]['hijos'][$centro->getId()]['organicoMasculino'] += $unidad->getOrganicoMasculino();
  86.                     $lugares[$base->getId()]['hijos'][$centro->getId()]['organicoFemenino'] += $unidad->getOrganicoFemenino();
  87.                     $lugares[$base->getId()]['hijos'][$centro->getId()]['cupoMasculino'] += $unidad->getCupoMasculino();
  88.                     $lugares[$base->getId()]['hijos'][$centro->getId()]['cupoFemenino'] += $unidad->getCupoFemenino();
  89.                     $lugares[$base->getId()]['hijos'][$centro->getId()]['cantUnidades'] += 1;
  90.                 }
  91.                 else
  92.                 {
  93.                     $lugares[$base->getId()]['hijos'][$centro->getId()] = array(
  94.                         'id'=>'centro_'.$centro->getId(),
  95.                         'tipoLugar'=>'Centro movilizazciĆ³n',
  96.                         'nombre'=>$centro->getNombre(),
  97.                         'organicoMasculino' => $unidad->getOrganicoMasculino(),
  98.                         'organicoFemenino' => $unidad->getOrganicoFemenino(),
  99.                         'cupoMasculino' => $unidad->getCupoMasculino(),
  100.                         'cupoFemenino' => $unidad->getCupoFemenino(),
  101.                         'cantUnidades'=>1,
  102.                         'parent'=>'base_'.$base->getId(),
  103.                         'hijos' => array()
  104.                     );
  105.                 }
  106.                 $lugares[$base->getId()]['hijos'][$centro->getId()]['hijos'][$unidad->getId()] = array(
  107.                     'id'=>'unidad_'.$unidad->getId(),
  108.                     'tipoLugar'=>'Unidad militar',
  109.                     'nombre'=>$unidad->getNombreUnidad(),
  110.                     'organicoMasculino' => $unidad->getOrganicoMasculino(),
  111.                     'organicoFemenino' => $unidad->getOrganicoFemenino(),
  112.                     'cupoMasculino' => $unidad->getCupoMasculino(),
  113.                     'cupoFemenino' => $unidad->getCupoFemenino(),
  114.                     'parent'=>'centro_'.$centro->getId(),
  115.                     'hijos' => array(),
  116.                 );
  117.             }       
  118.             $params['treeNodes'] = $lugares;
  119.             return $params;
  120.         }
  121.         
  122.         if ($this->routeClassName=='consolidadofuerza' || $this->routeClassName == 'reporterechazos'
  123.                 || $this->routeClassName == 'registradosbase' || $this->routeClassName == 'registradoscentro')
  124.         {
  125.             if ($this->routeClassName=='consolidadofuerza')
  126.                 $this->entities $this->getConsolidadoPorFuerza($this->routeClassName);
  127.             if ($this->routeClassName == 'reporterechazos') {
  128.                 $resultados $this->getRechazados($this->routeClassName);
  129.                 $this->entities $resultados['entities'];
  130.                 $params['extra'] = $resultados['causas'];
  131.             }
  132.             if ($this->routeClassName == 'registradosbase' || $this->routeClassName == 'registradoscentro')
  133.                 $this->entities $this->getRegistrados($this->routeClassName);
  134.             
  135.             $params['entities'] = $this->entities;
  136.         }
  137.         return $params;
  138.     }
  139.     protected function getConsolidadoPorFuerza($routeClassName)
  140.     {
  141.         $em $this ->em;
  142.         $conn $em->getConnection();
  143.         $addwhere '';
  144.         $user $this->getUser();
  145.             
  146.         if ($routeClassName == 'reporteconsolidadofuerza') {
  147.             if (isset($this->filterData['proceso']))
  148.             {
  149.                 $proceso $this->filterData['proceso'];
  150.                 if (is_array($proceso))
  151.                 {
  152.                     $proceso=implode(',',$proceso);
  153.                 }
  154.                 $addwhere " AND pr.id in ( ".$proceso.')';
  155.             }
  156.             if (isset($this->filterData['centroMovilizacion']))
  157.             {
  158.                 $centro $this->filterData['centroMovilizacion'];
  159.                 if (is_array($centro))
  160.                     $centro=implode(',',$centro);
  161.                 $addwhere " AND prlb.lugar in ( ".$centro.')';
  162.             }
  163.             if (isset($this->filterData['baseMovilizacion']))
  164.             {
  165.                 $base $this->filterData['baseMovilizacion'];
  166.                 if (is_array($base))
  167.                     $base=implode(',',$base);
  168.                 $addwhere " AND prlb.base in ( ".$base.')';
  169.             }    
  170.             
  171.             if (isset($this->filterData['fuerza']))
  172.                 $addwhere " AND prul.fuerza = '".$this->filterData['fuerza']."'";
  173.             
  174.             $query 
  175.                 "SELECT
  176.                     prul.fuerza,
  177.                     pr.anno, 
  178.                     pr.llamada, 
  179.                     prlb.nombre_lugar AS centro,
  180.                     sum(prul.cupo_masculino) AS cupomasculino,
  181.                     sum(prul.cupo_femenino) AS cupofemenino,
  182.                     sum(prul.registrado_masculino) AS totalregistromasculino,
  183.                     sum(prul.registrado_femenino) AS totalregistrofemenino
  184.                 FROM 
  185.                     proceso_reclutamiento_unidad_lugar prul
  186.                 INNER JOIN 
  187.                     proceso_reclutamiento pr ON prul.proceso = pr.id
  188.                 INNER JOIN 
  189.                     proceso_reclutamiento_lugar_base prlb on prlb.proceso = pr.id and prlb.lugar = prul.lugar
  190.                 WHERE
  191.                     (pr.id > 0) ".$addwhere.
  192.                 GROUP BY
  193.                     prul.fuerza, pr.anno, pr.llamada, prlb.nombre_lugar;";
  194.             
  195.             $statement $conn->prepare($query);
  196.             $datos $statement->executeQuery()->fetchAllAssociative(); 
  197.             
  198.             return $datos
  199.         }
  200.         else if ($routeClassName == 'consolidadofuerza') {
  201.             if (isset($this->filterData['baseMovilizacion']))
  202.             {
  203.                 $base $this->filterData['baseMovilizacion'];
  204.                 if (is_array($base))
  205.                     $base=implode(',',$base);
  206.                 $addwhere " AND prlb.base in ( ".$base.')';
  207.             }    
  208.             if (isset($this->filterData['centroMovilizacion']))
  209.             {
  210.                 $centro $this->filterData['centroMovilizacion'];
  211.                 if (is_array($centro))
  212.                     $centro=implode(',',$centro);
  213.                 $addwhere .= " AND prlb.lugar in ( ".$centro.')';
  214.             }
  215.             if (isset($this->filterData['unidad']))
  216.             {
  217.                 $unidad $this->filterData['unidad'];
  218.                 if (is_array($unidad))
  219.                     $unidad=implode(',',$unidad);
  220.                 $addwhere .= " AND prul.unidad in ( ".$unidad.')';
  221.             }
  222.             $proceso $em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($this->filterData['proceso']);
  223.             
  224.             $query 
  225.                 "SELECT 
  226.                     pr.anno, 
  227.                     pr.llamada,
  228.                     prlb.lugar as id,
  229.                     prlb.nombre_lugar AS centro_movilizacion,
  230.                     prul.fuerza,
  231.                     Sum(COALESCE(prul.registrado_masculino,0)) AS registro_masculino,
  232.                     Sum(COALESCE(prul.registrado_femenino,0)) AS registro_femenino
  233.                 FROM
  234.                     proceso_reclutamiento_unidad_lugar prul
  235.                 INNER JOIN 
  236.                     proceso_reclutamiento pr ON prul.proceso = pr.id
  237.                 INNER JOIN 
  238.                     proceso_reclutamiento_lugar_base prlb ON prlb.proceso = pr.id and prlb.lugar=prul.lugar
  239.                 WHERE
  240.                     pr.id=".$proceso->getId()." ".$addwhere.
  241.                 GROUP BY
  242.                     pr.anno, 
  243.                     pr.llamada,
  244.                     prlb.lugar,
  245.                     prlb.nombre_lugar,
  246.                     prul.fuerza
  247.                 ORDER BY
  248.                     prlb.nombre_lugar ASC";
  249.             
  250.             $statement $conn->prepare($query);
  251.             $datos $statement->executeQuery()->fetchAllAssociative();  
  252.             $resultados = array();
  253.             
  254.             for ($i=0$i<count($datos); $i++){    
  255.                 if ($datos[$i]['registro_masculino']>0) {
  256.                     if (!isset($resultados[$datos[$i]['id'].'-M'])) {
  257.                         $resultados[$datos[$i]['id'].'-M'] = array(
  258.                             'centro'=>$datos[$i]['centro_movilizacion'],
  259.                             'genero'=>'M',
  260.                             'total'=>0,
  261.                             'PRIMERA'=>array('TERRESTRE'=>0,
  262.                                             'NAVAL'=>0,
  263.                                             'AEREA'=>0),
  264.                             'SEGUNDA'=>array('TERRESTRE'=>0,
  265.                                             'NAVAL'=>0,
  266.                                             'AEREA'=>0),
  267.                 );
  268.                     }
  269.                     $resultados[$datos[$i]['id'].'-M'][$datos[$i]['llamada']][$datos[$i]['fuerza']] = $datos[$i]['registro_masculino'];
  270.                     $resultados[$datos[$i]['id'].'-M']['total'] += $datos[$i]['registro_masculino'];
  271.                 }
  272.                 if ($datos[$i]['registro_femenino']>0) {
  273.                     if (!isset($resultados[$datos[$i]['id'].'-F'])) {
  274.                         $resultados[$datos[$i]['id'].'-F'] = array(
  275.                             'centro'=>$datos[$i]['centro_movilizacion'],
  276.                             'genero'=>'F',
  277.                             'total'=>0,
  278.                             'PRIMERA'=>array('TERRESTRE'=>0,
  279.                                             'NAVAL'=>0,
  280.                                             'AEREA'=>0),
  281.                             'SEGUNDA'=>array('TERRESTRE'=>0,
  282.                                             'NAVAL'=>0,
  283.                                             'AEREA'=>0),
  284.                         );
  285.                     }
  286.                     $resultados[$datos[$i]['id'].'-F'][$datos[$i]['llamada']][$datos[$i]['fuerza']] = $datos[$i]['registro_femenino'];
  287.                     $resultados[$datos[$i]['id'].'-F']['total'] += $datos[$i]['registro_femenino'];
  288.                 }
  289.             }  
  290.             return $resultados;
  291.         }
  292.         return null;
  293.         }
  294.     protected function getRechazados($routeClassName)
  295.     {
  296.         $em $this ->em;
  297.         $conn $em->getConnection();
  298.         $addwhere '';
  299.         $user $this->getUser();
  300.         if (isset($this->filterData['baseMovilizacion']))
  301.         {
  302.             $base $this->filterData['baseMovilizacion'];
  303.             if (is_array($base))
  304.                 $base=implode(',',$base);
  305.             $addwhere " AND prlb.base in ( ".$base.')';
  306.         }    
  307.         if (isset($this->filterData['centroMovilizacion']))
  308.         {
  309.             $centro $this->filterData['centroMovilizacion'];
  310.             if (is_array($centro))
  311.                 $centro=implode(',',$centro);
  312.             $addwhere .= " AND prlb.lugar in ( ".$centro.')';
  313.         }
  314.         $query 
  315.             "SELECT
  316.                 prlb.proceso,
  317.                 prlb.lugar as item,
  318.                 prlb.nombre_lugar as nombre,
  319.                 Sum(COALESCE(prul.cupo_masculino,0)) AS cupo_masculino_total,
  320.                 Sum(COALESCE(prul.cupo_femenino,0)) AS cupo_femenino_total,
  321.                 Sum(COALESCE(prul.organico_masculino,0)) AS organico_masculino,
  322.                 Sum(COALESCE(prul.organico_femenino,0)) AS organico_femenino,
  323.                 Sum(COALESCE(prul.registrado_masculino,0)) AS registrados_masculinos_total,
  324.                 Sum(COALESCE(prul.registrado_femenino,0)) AS registrados_femeninos_total,
  325.                 prlb.registrado_masculino,
  326.                 prlb.registrado_femenino
  327.             FROM
  328.                 proceso_reclutamiento_lugar_base prlb
  329.             INNER JOIN
  330.                 proceso_reclutamiento_unidad_lugar prul on prul.lugar = prlb.lugar and prul.proceso = prlb.proceso
  331.             WHERE
  332.                 prlb.proceso = ".$this->filterData['proceso']." and prul.proceso= ".$this->filterData['proceso']." ".$addwhere."
  333.             GROUP BY
  334.                 prlb.proceso,
  335.                 prlb.lugar,
  336.                 prlb.nombre_lugar,
  337.                 prlb.registrado_masculino,
  338.                 prlb.registrado_femenino
  339.             ORDER BY 
  340.                 prlb.lugar ASC;";
  341.         
  342.         $statement $conn->prepare($query);
  343.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  344.         $resultados = array();
  345.         $causas = array();
  346.         for ($i=0$i<count($datos); $i++){    
  347.         //if ($datos[$i]['registro_masculino']>0) {
  348.             if (!isset($resultados[$datos[$i]['item'].'-M'])) {
  349.                 $resultados[$datos[$i]['item'].'-M'] = array(
  350.                     'centro'=>$datos[$i]['nombre'],
  351.                     'genero'=>'M',
  352.                     'organico'=>0,
  353.                     'cupo'=>0,
  354.                     'registrados'=>0,
  355.                     'no_idoneos'=>0,
  356.                     'rechazos'=>array(),
  357.                 );
  358.             }
  359.             $resultados[$datos[$i]['item'].'-M']['organico'] = $datos[$i]['organico_masculino'];
  360.             $resultados[$datos[$i]['item'].'-M']['cupo'] = $datos[$i]['cupo_masculino_total'];
  361.             // estoy usando registrado de centro
  362.             $resultados[$datos[$i]['item'].'-M']['registrados'] = $datos[$i]['registrado_masculino'];
  363.             //if ($datos[$i]['registro_femenino']>0) {
  364.             if (!isset($resultados[$datos[$i]['item'].'-F'])) {
  365.                 $resultados[$datos[$i]['item'].'-F'] = array(
  366.                     'centro'=>$datos[$i]['nombre'],
  367.                     'genero'=>'F',
  368.                     'organico'=>0,
  369.                     'cupo'=>0,
  370.                     'registrados'=>0,
  371.                     'no_idoneos'=>0,
  372.                     'rechazos'=>array(),
  373.                 );
  374.             }
  375.             $resultados[$datos[$i]['item'].'-F']['organico'] = $datos[$i]['organico_femenino'];
  376.             $resultados[$datos[$i]['item'].'-F']['cupo'] = $datos[$i]['cupo_femenino_total'];
  377.             // estoy usando registrado de centro
  378.             $resultados[$datos[$i]['item'].'-F']['registrados'] = $datos[$i]['registrado_femenino'];
  379.         }  
  380.         $query 
  381.             "SELECT
  382.                 rp.centro_movilizacion,
  383.                 COALESCE(rp.causa_rechazo, 'NO DEFINIDA') AS causa,
  384.                 count(r.sexo = 'Masculino' or null) AS rechazos_masculinos,
  385.                 count(r.sexo = 'Femenino' or null) AS rechazos_femeninos
  386.                 FROM
  387.                     recluta r
  388.                 INNER JOIN
  389.                     recluta_proceso rp ON rp.recluta = r.id
  390.                 INNER JOIN
  391.                     proceso_reclutamiento_lugar_base prlb ON rp.centro_movilizacion = prlb.lugar and prlb.proceso=rp.proceso
  392.                 INNER JOIN
  393.                     centro_movilizacion cm ON rp.centro_movilizacion = cm.id
  394.                 WHERE
  395.                     rp.proceso = ".$this->filterData['proceso']." AND
  396.                     prlb.proceso = ".$this->filterData['proceso']." AND
  397.                     rp.idoneo = false AND
  398.                     rp.fecha_resultado IS NOT NULL ".$addwhere."
  399.                 GROUP BY
  400.                     rp.centro_movilizacion,
  401.                     rp.causa_rechazo;";
  402.         
  403.         $statement $conn->prepare($query);
  404.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  405.         for ($i=0$i<count($datos); $i++){    
  406.             $resultados[$datos[$i]['centro_movilizacion'].'-M']['no_idoneos'] += $datos[$i]['rechazos_masculinos']?$datos[$i]['rechazos_masculinos']:0;
  407.             $resultados[$datos[$i]['centro_movilizacion'].'-F']['no_idoneos'] += $datos[$i]['rechazos_femeninos']?$datos[$i]['rechazos_femeninos']:0;
  408.             if(!isset($resultados[$datos[$i]['centro_movilizacion'].'-M']['rechazos'][$datos[$i]['causa']])){
  409.                 $resultados[$datos[$i]['centro_movilizacion'].'-M']['rechazos'][$datos[$i]['causa']] = 0;
  410.                 $resultados[$datos[$i]['centro_movilizacion'].'-F']['rechazos'][$datos[$i]['causa']] = 0;
  411.             }
  412.             $resultados[$datos[$i]['centro_movilizacion'].'-M']['rechazos'][$datos[$i]['causa']] += $datos[$i]['rechazos_masculinos'];
  413.             $resultados[$datos[$i]['centro_movilizacion'].'-F']['rechazos'][$datos[$i]['causa']] += $datos[$i]['rechazos_femeninos'];
  414.             if ( $datos[$i]['causa'] !== 'NO DEFINIDA')
  415.                 $causas[$datos[$i]['causa']] = $datos[$i]['causa'];
  416.         }  
  417.         return array('entities' => $resultados'causas' => $causas);
  418.     }
  419.     
  420.     protected function getRegistradosPorCentro()
  421.     {
  422.         $em $this ->em;
  423.         $conn $em->getConnection();
  424.         $addwhere '';
  425.         $inwhere '';
  426.         $user $this->getUser();
  427.         if (isset($this->filterData['baseMovilizacion']))
  428.         {
  429.             $base $this->filterData['baseMovilizacion'];
  430.             if (is_array($base))
  431.                 $base=implode(',',$base);
  432.             $addwhere " AND prlb.base in ( ".$base.')';
  433.             $inwhere " AND inprlb.base in ( ".$base.')';
  434.         }    
  435.         if (isset($this->filterData['centroMovilizacion']))
  436.         {
  437.             $centro $this->filterData['centroMovilizacion'];
  438.             if (is_array($centro))
  439.                 $centro=implode(',',$centro);
  440.             $addwhere .= " AND prlb.lugar in ( ".$centro.')';
  441.             $inwhere " AND inprlb.lugar in ( ".$centro.')';
  442.         }
  443.         // se puede cambiar los registrados para tomar los de la unidad en lugar de los del centro 
  444.         // usando registrados_masculinos_total, registrados_femeninos_total
  445.         $query 
  446.             "SELECT
  447.                 prlb.proceso,
  448.                 prlb.lugar as item,
  449.                 prlb.nombre_lugar as nombre,
  450.                 Sum(COALESCE(prlb.cupo_masculino,0)) AS cupo_masculino_total,
  451.                 Sum(COALESCE(prlb.cupo_femenino,0)) AS cupo_femenino_total,
  452.                 Sum(COALESCE(prlb.organico_masculino,0)) AS organico_masculino,
  453.                 Sum(COALESCE(prlb.organico_femenino,0)) AS organico_femenino,
  454.                 Sum(COALESCE(prlb.registrado_masculino,0)) AS registrado_masculino,
  455.                 Sum(COALESCE(prlb.registrado_femenino,0)) AS registrado_femenino,
  456.                 idoneos_rechazos.idoneos_femeninos,
  457.                 idoneos_rechazos.idoneos_masculinos,
  458.                 idoneos_rechazos.rechazos_masculinos,
  459.                 idoneos_rechazos.rechazos_femeninos
  460.             FROM
  461.                 proceso_reclutamiento_lugar_base prlb
  462.             LEFT JOIN
  463.                 (
  464.                     SELECT recluta_proceso.centro_movilizacion,
  465.                         Count((recluta_proceso.idoneo = true and recluta.sexo = 'Masculino') or null) AS idoneos_masculinos,
  466.                         Count((recluta_proceso.idoneo = true and recluta.sexo = 'Femenino') or null) AS idoneos_femeninos,
  467.                         Count((recluta_proceso.idoneo = false and recluta.sexo = 'Masculino') or null) AS rechazos_masculinos,
  468.                         Count((recluta_proceso.idoneo = false and recluta.sexo = 'Femenino') or null) AS rechazos_femeninos
  469.                     FROM recluta
  470.                     INNER JOIN
  471.                         recluta_proceso ON recluta_proceso.recluta = recluta.id
  472.                     INNER JOIN
  473.                         proceso_reclutamiento_lugar_base inprlb ON recluta_proceso.centro_movilizacion = inprlb.lugar AND recluta_proceso.proceso = inprlb.proceso
  474.                     WHERE
  475.                         recluta_proceso.proceso = ".$this->filterData['proceso']." AND
  476.                         recluta_proceso.fecha_resultado IS NOT NULL ".$inwhere."
  477.                     GROUP BY recluta_proceso.centro_movilizacion
  478.                 ) 
  479.                 as idoneos_rechazos ON idoneos_rechazos.centro_movilizacion = prlb.lugar
  480.             WHERE
  481.                 prlb.proceso = ".$this->filterData['proceso'].$addwhere."
  482.             GROUP BY
  483.                 prlb.proceso,
  484.                 prlb.lugar,
  485.                 prlb.nombre_lugar,
  486.                 idoneos_rechazos.idoneos_femeninos,
  487.                 idoneos_rechazos.idoneos_masculinos,
  488.                 idoneos_rechazos.rechazos_masculinos,
  489.                 idoneos_rechazos.rechazos_femeninos
  490.             ORDER BY
  491.                 prlb.lugar ASC";
  492.         $statement $conn->prepare($query);
  493.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  494.         return $datos;
  495.     }
  496.     protected function getRegistradosPorBase()
  497.     {
  498.         $em $this ->em;
  499.         $conn $em->getConnection();
  500.         $addwhere '';
  501.         $inwhere '';
  502.         $user $this->getUser();
  503.         if (isset($this->filterData['baseMovilizacion']))
  504.         {
  505.             $base $this->filterData['baseMovilizacion'];
  506.             if (is_array($base))
  507.                 $base=implode(',',$base);
  508.             $addwhere " AND prb.base in ( ".$base.')';
  509.             $inwhere =  " AND inprlb.base in ( ".$base.')';
  510.         }    
  511.         if (isset($this->filterData['centroMovilizacion']))
  512.         {
  513.             $centro $this->filterData['centroMovilizacion'];
  514.             if (is_array($centro))
  515.                 $centro=implode(',',$centro);
  516.             $addwhere .= " AND prlb.lugar in ( ".$centro.')';
  517.             $inwhere .=  " AND inprlb.lugar in ( ".$centro.')';
  518.         }
  519.         
  520.         // se puede cambiar los registrados para tomar los de la unidad en lugar de los del centro 
  521.         // usando registrados_masculinos_total, registrados_femeninos_total
  522.         $query 
  523.             "SELECT 
  524.                 prb.base as item,
  525.                 prb.nombre_base as nombre,                
  526.                 idoneos_rechazos.idoneos_femeninos,
  527.                 idoneos_rechazos.idoneos_masculinos,
  528.                 idoneos_rechazos.rechazos_masculinos,
  529.                 idoneos_rechazos.rechazos_femeninos,
  530.                 Sum(COALESCE(prlb.cupo_masculino,0)) AS cupo_masculino_total,
  531.                 Sum(COALESCE(prlb.cupo_femenino,0)) AS cupo_femenino_total,
  532.                 Sum(COALESCE(prlb.organico_masculino,0)) AS organico_masculino,
  533.                 Sum(COALESCE(prlb.organico_femenino,0)) AS organico_femenino,
  534.                 Sum(COALESCE(prlb.registrado_masculino,0)) AS registrado_masculino,
  535.                 Sum(COALESCE(prlb.registrado_femenino,0)) AS registrado_femenino
  536.             FROM 
  537.                 proceso_reclutamiento_bases prb 
  538.             INNER JOIN 
  539.                 proceso_reclutamiento_lugar_base as prlb ON prb.base = prlb.base and prb.proceso=prlb.proceso           
  540.             LEFT JOIN (
  541.                         SELECT inprlb.base,
  542.                             Count((recluta_proceso.idoneo and recluta.sexo = 'Masculino') or null) AS idoneos_masculinos,
  543.                             Count((recluta_proceso.idoneo = true and recluta.sexo = 'Femenino') or null) AS idoneos_femeninos,
  544.                             Count((recluta_proceso.idoneo = false and recluta.sexo = 'Masculino') or null) AS rechazos_masculinos,
  545.                             Count((recluta_proceso.idoneo = false and recluta.sexo = 'Femenino') or null) AS rechazos_femeninos
  546.                         FROM recluta
  547.                             INNER JOIN recluta_proceso ON recluta_proceso.recluta = recluta.id
  548.                             INNER JOIN proceso_reclutamiento_lugar_base inprlb ON recluta_proceso.centro_movilizacion = inprlb.lugar AND recluta_proceso.proceso = inprlb.proceso
  549.                         WHERE
  550.                             recluta_proceso.proceso = ".$this->filterData['proceso'].$inwhere." AND
  551.                             recluta_proceso.fecha_resultado is not NULL 
  552.                         GROUP BY inprlb.base
  553.                     ) as idoneos_rechazos ON idoneos_rechazos.base = prb.base                    
  554.                 WHERE
  555.                     prb.proceso = ".$this->filterData['proceso'].$addwhere."
  556.                 GROUP BY
  557.                     prb.base,
  558.                     prb.nombre_base,                   
  559.                     idoneos_rechazos.idoneos_femeninos,
  560.                     idoneos_rechazos.idoneos_masculinos,
  561.                     idoneos_rechazos.rechazos_masculinos,
  562.                     idoneos_rechazos.rechazos_femeninos
  563.                 ORDER BY
  564.                     prb.base;";
  565.         
  566.         $statement $conn->prepare($query);
  567.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  568.         return $datos;
  569.     }
  570.     protected function getRegistrados($routeClassName)
  571.     {
  572.         if ($routeClassName == 'registradosbase')
  573.             $datos $this->getRegistradosPorBase();  
  574.         if ($routeClassName == 'registradoscentro')
  575.             $datos $this->getRegistradosPorCentro();  
  576.         $resultados = array();
  577.         $causas = array();
  578.        
  579.         for ($i=0$i<count($datos); $i++){    
  580.         //if ($datos[$i]['registro_masculino']>0) {
  581.             if (!isset($resultados[$datos[$i]['item'].'-M'])) {
  582.                 $resultados[$datos[$i]['item'].'-M'] = array(
  583.                     'id' => $datos[$i]['item'],
  584.                     'lugar'=>$datos[$i]['nombre'],
  585.                     'genero'=>'M',
  586.                     'organico'=>0,
  587.                     'cupo'=>0,
  588.                     'registrados'=>0,
  589.                     'idoneos'=>0,
  590.                     'no_idoneos'=>0,
  591.                     'disponibles'=>0,
  592.                     'porcentaje_registro'=>0,
  593.                     'observaciones'=>'',
  594.                 );
  595.             }
  596.             $resultados[$datos[$i]['item'].'-M']['organico'] = $datos[$i]['organico_masculino'];
  597.             $resultados[$datos[$i]['item'].'-M']['cupo'] = $datos[$i]['cupo_masculino_total'];
  598.             // estoy usando registrado de centro
  599.             $resultados[$datos[$i]['item'].'-M']['registrados'] = $datos[$i]['registrado_masculino'];
  600.             $resultados[$datos[$i]['item'].'-M']['disponibles'] = $datos[$i]['cupo_masculino_total'] - $datos[$i]['registrado_masculino'];
  601.             
  602.             if($datos[$i]['cupo_masculino_total']>0)
  603.             $resultados[$datos[$i]['item'].'-M']['porcentaje_registro'] = number_format((($datos[$i]['registrado_masculino']/$datos[$i]['cupo_masculino_total'])*100),2).'%';
  604.             
  605.             if ($resultados[$datos[$i]['item'].'-M']['disponibles'] > 0)
  606.                 $resultados[$datos[$i]['item'].'-M']['observaciones'] = 'CUPO DISPONIBLE';
  607.             else{
  608.                 if ($datos[$i]['cupo_masculino_total'] > 0)
  609.                     $resultados[$datos[$i]['item'].'-M']['observaciones'] = 'CUPO LLENO';
  610.             }
  611.             $resultados[$datos[$i]['item'].'-M']['idoneos'] = $datos[$i]['idoneos_masculinos']?$datos[$i]['idoneos_masculinos']:0;
  612.             $resultados[$datos[$i]['item'].'-M']['no_idoneos'] = $datos[$i]['rechazos_masculinos']?$datos[$i]['rechazos_masculinos']:0;
  613.             //if ($datos[$i]['registro_femenino']>0) {
  614.             if (!isset($resultados[$datos[$i]['item'].'-F'])) {
  615.                 $resultados[$datos[$i]['item'].'-F'] = array(
  616.                     'id' => $datos[$i]['item'],
  617.                     'lugar'=>$datos[$i]['nombre'],
  618.                     'genero'=>'F',
  619.                     'organico'=>0,
  620.                     'cupo'=>0,
  621.                     'registrados'=>0,
  622.                     'idoneos'=>0,
  623.                     'no_idoneos'=>0,
  624.                     'disponibles'=>0,
  625.                     'porcentaje_registro'=>0,
  626.                     'observaciones'=>'',
  627.                 );
  628.             }
  629.             $resultados[$datos[$i]['item'].'-F']['organico'] = $datos[$i]['organico_femenino'];
  630.             $resultados[$datos[$i]['item'].'-F']['cupo'] = $datos[$i]['cupo_femenino_total'];
  631.             // estoy usando registrado de centro
  632.             $resultados[$datos[$i]['item'].'-F']['registrados'] = $datos[$i]['registrado_femenino'];
  633.             $resultados[$datos[$i]['item'].'-F']['disponibles'] = $datos[$i]['cupo_femenino_total'] - $datos[$i]['registrado_femenino'];
  634.             
  635.             if($datos[$i]['cupo_femenino_total']>0)
  636.                 $resultados[$datos[$i]['item'].'-M']['porcentaje_registro'] = number_format(($datos[$i]['registrado_femenino']/$datos[$i]['cupo_femenino_total']*100),2).'%';
  637.             
  638.             if ($resultados[$datos[$i]['item'].'-F']['disponibles'] > 0)
  639.                 $resultados[$datos[$i]['item'].'-F']['observaciones'] = 'CUPO DISPONIBLE';
  640.             else{
  641.                 if ($datos[$i]['cupo_femenino_total']> 0)
  642.                     $resultados[$datos[$i]['item'].'-F']['observaciones'] = 'CUPO LLENO';
  643.             }
  644.             $resultados[$datos[$i]['item'].'-F']['idoneos'] = $datos[$i]['idoneos_femeninos']?$datos[$i]['idoneos_femeninos']:0;
  645.             $resultados[$datos[$i]['item'].'-F']['no_idoneos'] = $datos[$i]['rechazos_femeninos']?$datos[$i]['rechazos_femeninos']:0;
  646.         }  
  647.         return $resultados;
  648.     }
  649.     
  650.     public function exportarReportePDFAction($routeClassName)
  651.     {
  652.         $em $this ->em;
  653.         $this->setInitialValues('all'$routeClassName);
  654.         $params = array(
  655.             'routeClassName'=>$routeClassName
  656.         );
  657.         $twig '';
  658.         if ($routeClassName == 'consolidadofuerza') {
  659.             $this->entities $this->getConsolidadoPorFuerza('consolidadofuerza');
  660.             $params['procesoReclutamiento'] = $em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($this->filterData['proceso']);
  661.             $twig 'ProcesoReclutamientoUnidad\\consolidado_fuerza_pdf.html.twig';
  662.         }
  663.         if ($routeClassName == 'reporterechazos') {
  664.             $resultados $this->getRechazados($routeClassName);
  665.             $this->entities $resultados['entities'];
  666.             $params['extra'] = $resultados['causas'];
  667.             $twig 'ProcesoReclutamientoUnidad\\reporte_rechazos_pdf.html.twig';
  668.         }
  669.         if ($routeClassName == 'registradosbase' || $routeClassName == 'registradoscentro')
  670.         {
  671.             $this->entities $this->getRegistrados($routeClassName);
  672.             $twig 'ProcesoReclutamientoUnidad\\registrados_inner_pdf.html.twig';
  673.         }
  674.         //$params['procesoReclutamiento'] = $em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('anno' => $anno));
  675.         $params['entities'] = $this->entities;
  676.         $this->routeClassName $routeClassName;
  677.         
  678.         // Create an instance of the class:
  679.         
  680.         $html $this->renderView($twig$params);
  681.         $dompdf = new Dompdf();
  682.         $dompdf->setPaper('letter''landscape');
  683.         $dompdf->loadHtml($html);
  684.         $dompdf->render();
  685.         $dompdf->stream();        
  686.     }        
  687.     
  688.     public function excelAction($rol$routeClassName)
  689.     {
  690.         //$this->comunSetInitialValues($routeClassName);
  691.         if($routeClassName == 'registradosbase' || $routeClassName == 'registradoscentro')
  692.             $this->twigExcelName 'App:ProcesoReclutamientoUnidad:registrados_inner_excel.html.twig';
  693.         if($routeClassName == 'reporterechazos')
  694.             $this->twigExcelName 'App:ProcesoReclutamientoUnidad:reporte_rechazos_excel.html.twig';
  695.         
  696.         if ($routeClassName == 'consolidadofuerza'
  697.             $this->twigExcelName 'App:ProcesoReclutamientoUnidad:consolidado_fuerza_excel.html.twig';
  698.         return parent::excelAction($rol$routeClassName);
  699.     }   
  700.     
  701.     protected function excelCreateParamsForTwig()
  702.     {
  703.         $params parent::excelCreateParamsForTwig();
  704.         
  705.         if ($this->routeClassName == 'reporterechazos')
  706.         {
  707.             foreach ($params['entities'] as $key=>$entity)
  708.             {
  709.                 foreach ($params['extra'] as $extra)
  710.                 {
  711.                     if (isset($entity['rechazos'][$extra]))
  712.                     {
  713.                         $params['entities'][$key][$extra] = $entity['rechazos'][$extra];
  714.                     }
  715.                     else
  716.                     {
  717.                         $params['entities'][$key][$extra] = 0;
  718.                     }
  719.                 }
  720.             }
  721.         }
  722.         
  723.         if ($this->routeClassName == 'consolidadofuerza' && isset($this->filterData['proceso']) && $this->filterData['proceso'])  {
  724.             $em $this ->em;
  725.             $params['procesoReclutamiento'] = $em->getRepository('App\\Entity\\ProcesoReclutamiento')->find($this->filterData['proceso']);
  726.         }
  727.         return $params;
  728.     }
  729.     
  730.     public function loadUnidadesPorCentroInstruccionRegistradosAction($centro$sexo)
  731.     {
  732.         $this->setUtilProperties();
  733.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  734.                 ->findOneBy(array('activo'=>true));
  735.         $unidades = array();
  736.         if ($procesoActivo)
  737.         {
  738.             $unidades $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  739.                 ->createQueryBuilder('u')
  740.                 ->innerJoin('u.proceso''proceso')
  741.                 ->innerJoin('u.unidad''unidad')
  742.                 ->innerJoin('unidad.centroInstruccion''centro')
  743.                 ->where('proceso.id='.$procesoActivo->getId())
  744.                 ->andWhere('centro.id='.$centro)
  745.                 ->orderBy('unidad.nombre','ASC');
  746.             if ($sexo=='F')
  747.             {
  748.                 $unidades->andWhere('u.registradoFemenino>0');
  749.             }
  750.             else
  751.             {
  752.                 $unidades->andWhere('u.registradoMasculino>0');
  753.             }
  754.             $unidades=$unidades->getQuery()->getResult();
  755.         }
  756.         return $this->render('@crud/Common/comboreloaded.html.twig', array("entities"=>$unidades'value'=>-1));
  757.     }
  758.     
  759.     public function loadUnidadesPorCentroInstruccionCupoAction($centro$sexo)
  760.     {
  761.         $this->setUtilProperties();
  762.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  763.                 ->findOneBy(array('activo'=>true));
  764.         $unidades = array();
  765.         if ($procesoActivo)
  766.         {
  767.             $unidades $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
  768.                 ->createQueryBuilder('u')
  769.                 ->innerJoin('u.proceso''proceso')
  770.                 ->innerJoin('u.unidad''unidad')
  771.                 ->innerJoin('unidad.centroInstruccion''centro')
  772.                 ->where('proceso.id='.$procesoActivo->getId())
  773.                 ->andWhere('centro.id='.$centro);
  774.             if ($sexo=='F')
  775.             {
  776.                 $unidades->andWhere('u.registradoFemenino<u.cupoFemenino')
  777.                     ->orderBy('u.cupoFemenino','ASC');
  778.             }
  779.             else
  780.             {
  781.                 $unidades->andWhere('u.registradoMasculino<u.cupoMasculino')
  782.                     ->orderBy('u.cupoMasculino','ASC');
  783.             }
  784.             $unidades=$unidades->getQuery()->getResult();
  785.             if ($sexo=='F')
  786.             {
  787.                 $getCupo 'getCupoFemenino';
  788.                 $getRegistrados 'getRegistradoFemenino';
  789.             }
  790.             else
  791.             {
  792.                 $getCupo 'getCupoMasculino';
  793.                 $getRegistrados 'getRegistradoMasculino';
  794.             }
  795.             $preText = array();
  796.             foreach ($unidades as $unidad)
  797.             {
  798.                 $capacidad $unidad->$getCupo()-$unidad->$getRegistrados();
  799.                 $preText[$unidad->getId()] = '('.$capacidad.') ';
  800.             }                
  801.         }
  802.         return $this->render('@crud/Common/comboreloaded.html.twig', array("entities"=>$unidades'value'=>-1'preText'=>$preText));
  803.     }
  804.     
  805.     public function loadInfoForRedistributionAction($unidadOrigen$unidadDestino$sexo)
  806.     {
  807.         $this->setUtilProperties();
  808.         $unidadOrigen $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($unidadOrigen);
  809.         $unidadDestino $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($unidadDestino);
  810.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  811.                 ->findOneBy(array('activo'=>true));
  812.         $data = array('ok'=>true);
  813.         if ($procesoActivo && $unidadOrigen && $unidadDestino)
  814.         {
  815.             $unidadOrigen $unidadOrigen->getUnidad();
  816.             if ($sexo=='F')
  817.             {
  818.                 $sexo='Femenino';
  819.                 $data['capacidad'] = $unidadDestino->getCupoFemenino()-$unidadDestino->getRegistradoFemenino();
  820.             }
  821.             else
  822.             {
  823.                 $sexo='Masculino';
  824.                 $data['capacidad'] = $unidadDestino->getCupoMasculino()-$unidadDestino->getRegistradoMasculino();
  825.             }
  826.         
  827.             $reclutas $this->em->getRepository('App\\Entity\\ReclutaProceso')
  828.                     ->createQueryBuilder('r')
  829.                     ->innerJoin('r.procesoReclutamiento''proceso')
  830.                     ->innerJoin('r.recluta''recluta')
  831.                     ->innerJoin('r.unidadMilitar''unidad')
  832.                     ->where('proceso.id='.$procesoActivo->getId())
  833.                     ->andWhere('unidad.id='.$unidadOrigen->getId())
  834.                     ->andWhere('r.idoneo=true')
  835.                     ->andWhere('r.fechaResultado is not null')
  836.                     ->andWhere("recluta.sexo='".$sexo."'")
  837.                     ->orderBy('recluta.apellidoPaterno, recluta.apellidoMaterno, recluta.nombres','ASC')
  838.                     ->getQuery()->getResult();
  839.             $data['reclutas'] = $this->renderView('@crud/Common/comboreloaded.html.twig', array("entities"=>$reclutas'value'=>-1'just_items'=>true'empty_value'=>true));
  840.         }   
  841.         else
  842.         {
  843.             $data['ok']=false;
  844.         }
  845.         $data = new Response(json_encode($data));
  846.         $data->headers->set('Content-Type''application/json');
  847.         return $data;
  848.     }
  849.     
  850.     public function redistribuyeReclutasAction()
  851.     {
  852.         $this->setUtilProperties();
  853.         $data=$this->request->get('distribucion');
  854.         $unidadOrigen $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($data['unidadOrigen']);
  855.         $unidadDestino $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($data['unidadDestino']);
  856.         $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true));
  857.         if ($data['transferBy']=='S')
  858.         {
  859.             $data['reclutas'] = explode(',',$data['reclutas']);
  860.             foreach ($data['reclutas'] as $key => $recluta)
  861.             {
  862.                 $data['reclutas'][$key] = $this->em->getRepository('App\\Entity\\ReclutaProceso')->find($recluta);
  863.             }
  864.         }
  865.         else 
  866.         {
  867.             if ($data['sexo']=='F')
  868.             {
  869.                 $data['sexo']='Femenino';
  870.             }
  871.             else
  872.             {
  873.                 $data['sexo']='Masculino';
  874.             }
  875.             $data['reclutas'] = $this->em->getRepository('App\\Entity\\ReclutaProceso')
  876.                 ->createQueryBuilder('r')
  877.                 ->innerJoin('r.procesoReclutamiento''proceso')
  878.                 ->innerJoin('r.recluta''recluta')
  879.                 ->innerJoin('r.unidadMilitar''unidad')
  880.                 ->where('proceso.id='.$procesoActivo->getId())
  881.                 ->andWhere('unidad.id='.$unidadOrigen->getUnidad()->getId())
  882.                 ->andWhere('r.idoneo=true')
  883.                 ->andWhere('r.fechaResultado is not null')
  884.                 ->andWhere("recluta.sexo='".$data['sexo']."'")
  885.                 ->setMaxResults($data['cantidad'])
  886.                 ->getQuery()->getResult();
  887.         }
  888.         
  889.         $data['message'] = '<ul>';
  890.         foreach ($data['reclutas'] as $recluta)
  891.         {
  892.             if ($recluta)
  893.             {
  894.                 $this->em->getRepository('App\\Entity\\ReclutaProceso')->cambiaReclutaUnidad($recluta->getId(), $unidadDestino->getUnidad()->getId() );
  895.                 $data['message'] .= '<li>'.$recluta->__toString().'</li>'
  896.             }
  897.         }
  898.         if ($data['message'] != '<ul>')
  899.         {
  900.             $data['message'] = '<p>RedistribuciĆ³n exitosa</p>'.
  901.                                '<p>Unidad origen: '.$unidadOrigen->__toString().'</p>'.
  902.                                '<p>Unidad Destino: '.$unidadDestino->__toString().'</p>'.
  903.                                '<p>Los reclutas transferidos son:</p>'.$data['message'].'</ul>';
  904.         }
  905.         else 
  906.         {
  907.             $data['message'] = '<p>No se encontraron reclutas para transferir</p>';
  908.         }
  909.         $data['ok']=true;
  910.         unset($data['sexo']);
  911.         unset($data['unidadOrigen']);
  912.         unset($data['unidadDestino']);
  913.         unset($data['transferBy']);
  914.         $data = new Response(json_encode($data));
  915.         $data->headers->set('Content-Type''application/json');
  916.         return $data;
  917.     }
  918.     
  919.     protected function excelGetFields()
  920.     {
  921.         if ($this->routeClassName == 'registradosbase' || $this->routeClassName == 'registradoscentro'
  922.         {
  923.             if ($this->routeClassName == 'registradosbase'
  924.             {
  925.                 $labelLugar $this->translator->trans('registradosbase.fields.base',[],'crud');
  926.             }
  927.             else
  928.             {
  929.                 $labelLugar $this->translator->trans('registradosbase.fields.centro',[],'crud');
  930.             }
  931.             $excelFields = [
  932.                 'lugar' => [
  933.                     'nombre' => 'lugar',
  934.                     'label' => $labelLugar,
  935.                 ],
  936.                 'organico' => [
  937.                     'nombre' => 'organico',
  938.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.organico',[],'crud'),
  939.                 ],
  940.                 'cupo' => [
  941.                     'nombre' => 'cupo',
  942.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.cupo',[],'crud'),
  943.                 ],
  944.                 'registrados' => [
  945.                     'nombre' => 'registrados',
  946.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.registrados',[],'crud'),
  947.                 ],
  948.                 'idoneos' => [
  949.                     'nombre' => 'idoneos',
  950.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.idoneos',[],'crud'),
  951.                 ],
  952.                 'no_idoneos' => [
  953.                     'nombre' => 'no_idoneos',
  954.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.no_idoneos',[],'crud'),
  955.                 ],
  956.                 'disponibles' => [
  957.                     'nombre' => 'disponibles',
  958.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.disponibles',[],'crud'),
  959.                 ],
  960.                 'porcentaje_registro' => [
  961.                     'nombre' => 'porcentaje_registro',
  962.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.porcentajeRegistro',[],'crud'),
  963.                 ],
  964.                 'genero' => [
  965.                     'nombre' => 'genero',
  966.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.genero',[],'crud'),
  967.                 ],
  968.                 'observaciones' => [
  969.                     'nombre' => 'observaciones',
  970.                     'label' => $this->translator->trans('reportesprocesoreclutamientounidad.fields.observaciones',[],'crud'),
  971.                 ],
  972.             ];
  973.             return $excelFields;
  974.         }
  975.         else
  976.         if ($this->routeClassName == 'reporterechazos')
  977.         {
  978.             $excelFields = [
  979.                'centro' => [
  980.                     'label'=>$this->translator->trans('reporterechazos.fields.centro',[],'crud'),
  981.                     'nombre'=>'centro',
  982.                 ],
  983.                'genero' => [
  984.                     'label'=>$this->translator->trans('reporterechazos.fields.genero',[],'crud'),
  985.                     'nombre'=>'genero',
  986.                 ],
  987.                'organico' => [
  988.                     'label'=>$this->translator->trans('reporterechazos.fields.organico',[],'crud'),
  989.                     'nombre'=>'organico',
  990.                 ],
  991.                'cupo' => [
  992.                     'label'=>$this->translator->trans('reporterechazos.fields.cupo',[],'crud'),
  993.                     'nombre'=>'cupo',
  994.                 ],
  995.                'registrados' => [
  996.                     'label'=>$this->translator->trans('reporterechazos.fields.registrados',[],'crud'),
  997.                     'nombre'=>'registrados',
  998.                 ],
  999.                'BAJAVOLUNTARIA' => [
  1000.                     'label'=>'BAJAVOLUNTARIA',
  1001.                     'nombre'=>'BAJAVOLUNTARIA',
  1002.                 ],
  1003.                'LABORATORIO' => [
  1004.                     'label'=>'LABORATORIO',
  1005.                     'nombre'=>'LABORATORIO',
  1006.                 ],
  1007.                'MEDICA' => [
  1008.                     'label'=>'MEDICA',
  1009.                     'nombre'=>'MEDICA',
  1010.                 ],
  1011.                'PSICOLOGICA' => [
  1012.                     'label'=>'PSICOLOGICA',
  1013.                     'nombre'=>'PSICOLOGICA',
  1014.                 ],
  1015.                'VACUNACION' => [
  1016.                     'label'=>'VACUNACION',
  1017.                     'nombre'=>'VACUNACION',
  1018.                 ],
  1019.                'no_idoneos' => [
  1020.                     'label'=>$this->translator->trans('reporterechazos.fields.no_idoneos',[],'crud'),
  1021.                     'nombre'=>'no_idoneos',
  1022.                 ],
  1023.             ];
  1024.             return $excelFields;
  1025.         }
  1026.         else
  1027.         { 
  1028.             return parent::excelGetFields();
  1029.         }
  1030.     }
  1031.     
  1032.     protected function indexGetFields() {
  1033.         $fields parent::indexGetFields();
  1034.         $bckFields $fields;
  1035.         if ($this->routeClassName == 'reporteconsolidadounidad')  {
  1036.             
  1037.             unset($fields['prioridad']);
  1038.             unset($fields['cupoMasculino']);
  1039.             unset($fields['cupoFemenino']);
  1040.             unset($fields['unidad']);
  1041.             unset($fields['nombreUnidad']);
  1042.             unset($fields['lugar']);
  1043.             unset($fields['registradoMasculino']);
  1044.             unset($fields['registradoFemenino']);
  1045.             unset($fields['organicoMasculino']);
  1046.             unset($fields['organicoFemenino']);
  1047.             $fields['lugar'] = $bckFields['lugar'];
  1048.             $fields['nombreUnidad'] = $bckFields['nombreUnidad'];
  1049.             $fields['organicoMasculino'] = $bckFields['organicoMasculino'];
  1050.             $fields['registradoMasculino'] = $bckFields['registradoMasculino'];
  1051.             $fields['organicoFemenino'] = $bckFields['organicoFemenino'];
  1052.             $fields['registradoFemenino'] = $bckFields['registradoFemenino'];
  1053.         }
  1054.         else if ($this->routeClassName == 'registradoscentro' || $this->routeClassName == 'registradosbase')  {
  1055.             unset($fields['proceso']);            
  1056.             unset($fields['prioridad']);
  1057.             unset($fields['cupoMasculino']);
  1058.             unset($fields['cupoFemenino']);
  1059.             unset($fields['organicoMasculino']);
  1060.             unset($fields['organicoFemenino']);
  1061.             unset($fields['fuerza']);
  1062.             unset($fields['cupoFemenino']);
  1063.             unset($fields['unidad']);
  1064.             unset($fields['registradoMasculino']);
  1065.             unset($fields['registradoFemenino']);
  1066.             unset($fields['nombreUnidad']);
  1067.             unset($fields['lugar']);
  1068.             
  1069.             if ($this->routeClassName == 'registradoscentro')
  1070.                 $fields['centro'] = array('nombre'=>'centro',
  1071.                                     'type'=>'string',
  1072.                                     'label'=>$this->translator->trans(
  1073.                                          $this->translatorBase.'.fields.centro',
  1074.                                          array(),
  1075.                                          'crud'));
  1076.             else
  1077.                 $fields['base'] = array('nombre'=>'base',
  1078.                                     'type'=>'string',
  1079.                                     'label'=>$this->translator->trans(
  1080.                                          $this->translatorBase.'.fields.base',
  1081.                                          array(),
  1082.                                          'crud'));
  1083.             
  1084.             $fields['organico'] = array('nombre'=>'organico',
  1085.                                 'type'=>'string',
  1086.                                 'label'=>$this->translator->trans(
  1087.                                      $this->translatorBase.'.fields.organico',
  1088.                                      array(),
  1089.                                      'crud'));
  1090.             $fields['cupo'] = array('nombre'=>'cupo',
  1091.                                 'type'=>'string',
  1092.                                 'label'=>$this->translator->trans(
  1093.                                      $this->translatorBase.'.fields.cupo',
  1094.                                      array(),
  1095.                                      'crud'));
  1096.             $fields['registrados'] = array('nombre'=>'registrados',
  1097.                                 'type'=>'string',
  1098.                                 'label'=>$this->translator->trans(
  1099.                                      $this->translatorBase.'.fields.registrados',
  1100.                                      array(),
  1101.                                      'crud'));
  1102.             $fields['idoneos'] = array('nombre'=>'idoneos',
  1103.                                 'type'=>'string',
  1104.                                 'label'=>$this->translator->trans(
  1105.                                      $this->translatorBase.'.fields.idoneos',
  1106.                                      array(),
  1107.                                      'crud'));
  1108.             $fields['no_idoneos'] = array('nombre'=>'no_idoneos',
  1109.                                 'type'=>'string',
  1110.                                 'label'=>$this->translator->trans(
  1111.                                      $this->translatorBase.'.fields.no_idoneos',
  1112.                                      array(),
  1113.                                      'crud'));
  1114.             $fields['disponibles'] = array('nombre'=>'disponibles',
  1115.                                 'type'=>'string',
  1116.                                 'label'=>$this->translator->trans(
  1117.                                      $this->translatorBase.'.fields.disponibles',
  1118.                                      array(),
  1119.                                      'crud'));
  1120.             $fields['porcentaje_registro'] = array('nombre'=>'porcentaje_registro',
  1121.                                 'type'=>'string',
  1122.                                 'label'=>$this->translator->trans(
  1123.                                      $this->translatorBase.'.fields.porcentajeRegistro',
  1124.                                      array(),
  1125.                                      'crud'));
  1126.             $fields['genero'] = array('nombre'=>'genero',
  1127.                                 'type'=>'string',
  1128.                                 'label'=>$this->translator->trans(
  1129.                                      $this->translatorBase.'.fields.genero',
  1130.                                      array(),
  1131.                                      'crud'));
  1132.             $fields['observaciones'] = array('nombre'=>'observaciones',
  1133.                                 'type'=>'string',
  1134.                                 'label'=>$this->translator->trans(
  1135.                                      $this->translatorBase.'.fields.observaciones',
  1136.                                      array(),
  1137.                                      'crud'));
  1138.         }
  1139.         else {
  1140.             unset($fields['prioridad']);   
  1141.             unset($fields['organicoMasculino']);
  1142.             unset($fields['organicoFemenino']);
  1143.             unset($fields['cupoMasculino']);
  1144.             unset($fields['registradoMasculino']);
  1145.             unset($fields['cupoFemenino']);
  1146.             unset($fields['registradoFemenino']);
  1147.             unset($fields['nombreUnidad']);
  1148.             unset($fields['lugar']);
  1149.             unset($fields['fuerza']);
  1150.             $fields['organicoMasculino'] = $bckFields['organicoMasculino'];
  1151.             $fields['cupoMasculino'] = $bckFields['cupoMasculino'];
  1152.             $fields['registradoMasculino'] = $bckFields['registradoMasculino'];
  1153.             $fields['organicoFemenino'] = $bckFields['organicoFemenino'];
  1154.             $fields['cupoFemenino'] = $bckFields['cupoFemenino'];
  1155.             $fields['registradoFemenino'] = $bckFields['registradoFemenino'];
  1156.         }
  1157.         return $fields;
  1158.     }
  1159.     
  1160.     protected function getFormFilter()
  1161.     {
  1162.         $formulario parent::getFormFilter();
  1163.         $repo $this->em->getRepository('App\\Entity\\ReclutaProceso');
  1164.         $user $this->getUser();
  1165.         
  1166.         unset($formulario['prioridad']);
  1167.         unset($formulario['cupoMasculino']);
  1168.         unset($formulario['organicoMasculino']);
  1169.         unset($formulario['registradoMasculino']);
  1170.         unset($formulario['cupoFemenino']);
  1171.         unset($formulario['organicoFemenino']);
  1172.         unset($formulario['registradoFemenino']);
  1173.         unset($formulario['lugar']);
  1174.         unset($formulario['nombreUnidad']);
  1175.         unset($formulario['organicoMasculino']);
  1176.         unset($formulario['organicoFemenino']);
  1177.         
  1178.         $formulario['proceso']['atributos']['multiple']=false;
  1179.         $formulario['unidad']['atributos']['multiple']=false;
  1180.         
  1181.         if ($this->routeClassName=='reportecupounidad' || $this->routeClassName=='reporteconsolidadofuerza'
  1182.                   || $this->routeClassName=='reporteconsolidadounidad' || $this->routeClassName=='consolidadofuerza'
  1183.                   || $this->routeClassName=='registradosbase' || $this->routeClassName=='registradoscentro'
  1184.                   || $this->routeClassName=='reporterechazos')
  1185.         {
  1186.             array_unshift($formulario, array('nombre'   =>'centroMovilizacion',
  1187.                             'tipo'     => EntityType::class,
  1188.                             'type'     => 'association',
  1189.                             'atributos'=> array('label' => $this->translator->trans(
  1190.                                                     $this->translatorBase.'.fields.centro',
  1191.                                                     array(),
  1192.                                                     'crud').':',
  1193.                                                 'class' => 'App\\Entity\\CentroMovilizacion',
  1194.                                                 'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1195.                                                 'required' => false,
  1196.                                                 'multiple'=>false,
  1197.                                                 'attr'=>array('style'=>'width: 100%''class'=>'chosen-select'))));
  1198.             array_unshift($formulario, array('nombre'   =>'baseMovilizacion',
  1199.                             'tipo'     => EntityType::class,
  1200.                             'type'     => 'association',
  1201.                             'atributos'=> array('label' => $this->translator->trans(
  1202.                                                     $this->translatorBase.'.fields.base',
  1203.                                                     array(),
  1204.                                                     'crud').':',
  1205.                                                 'class' => 'App\\Entity\\BaseMovilizacion',
  1206.                                                 'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1207.                                                 'required' => false,
  1208.                                                 'multiple'=>false,
  1209.                                                 'attr'=>array('style'=>'width: 100%''class'=>'chosen-select'))));
  1210.             
  1211.             $formulario['0']['atributos']['query_builder'] = $repo->queryBasesPorProceso($user);
  1212.             $formulario['1']['atributos']['query_builder'] = $repo->queryCentrosPorBase($user);
  1213.             $formulario['unidad']['atributos']['query_builder'] = $repo->queryUnidadesPorCentro($user);
  1214.                       
  1215.             if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
  1216.             {
  1217.                 $formulario[0]['atributos']['disabled'] = true;
  1218.                 $formulario[1]['atributos']['disabled'] = true;
  1219.                 $formulario['unidad']['atributos']['disabled'] = true;
  1220.        }
  1221.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO') || $this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO'))
  1222.             {
  1223.                 $formulario[0]['atributos']['disabled'] = true;
  1224.                 $formulario[1]['atributos']['disabled'] = true;
  1225.             }
  1226.             if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE'))
  1227.             {
  1228.                 $formulario[0]['atributos']['disabled'] = true;
  1229.             }
  1230.             
  1231. /*            if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
  1232.             {
  1233.                 
  1234.                 $queryBuilder = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  1235.                         ->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
  1236.                 $formulario[1]['atributos']['query_builder'] = $queryBuilder;
  1237.                 $queryBuilder = $this->em->getRepository('App\\Entity\\UnidadMilitar')->createQueryBuilder('u')
  1238.                         ->leftJoin('u.centroInstruccion', 'instr')
  1239.                         ->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
  1240.                 $formulario['unidad']['atributos']['query_builder'] = $queryBuilder;
  1241.                 
  1242.                 unset($formulario[0]);
  1243.             }*/
  1244.             
  1245.             /*if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') === true)
  1246.             {
  1247.                 
  1248.                 $queryBuilder = $this->em->getRepository('App\\Entity\\CentroMovilizacion')->createQueryBuilder('c')
  1249.                         ->innerJoin('c.centrosInstruccion','instr')->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId());
  1250.                 $formulario['0']['atributos']['query_builder'] = $queryBuilder;
  1251.                 $queryBuilder = $this->em->getRepository('App\\Entity\\UnidadMilitar')
  1252.                     ->createQueryBuilder('unidad')
  1253.                         ->innerJoin('unidad.centroInstruccion','instr')
  1254.                         ->where('instr.id='.$this->getUser()->getCentroInstruccion()->getId())
  1255.                     ->orderBy('unidad.nombre');
  1256.                 $formulario['unidad']['atributos']['query_builder'] = $queryBuilder;
  1257.             }*/
  1258.             
  1259.         }
  1260.         
  1261.         
  1262.             
  1263.                 $formulario['fuerza']=array('nombre'   =>'fuerza',
  1264.                             'tipo'     => "Symfony\Component\Form\Extension\Core\Type\ChoiceType",
  1265.                             'type'     => 'string',
  1266.                             'atributos'=> array('label' => $this->translator->trans(
  1267.                                                     $this->translatorBase.'.fields.fuerza',
  1268.                                                     array(),
  1269.                                                     'crud').':',
  1270.                                                 'choices' => array_flip(TipoFuerzaEnum::getReadables()),
  1271.                                                 'placeholder' => '--- Seleccione ---',
  1272.                                                 'required' => false,
  1273.                                                 'empty_data' => null,
  1274.                                                 'attr'=>array('style'=>'width: 100%''class'=>'chosen-select')));
  1275.                 
  1276.             if ($this->routeClassName == 'reporteconsolidadofuerza' ||  $this->routeClassName =='consolidadofuerza') {                                  
  1277.                 unset($formulario['unidad']);                
  1278.             }
  1279.             
  1280.             if ($this->routeClassName != 'reporteconsolidadofuerza' ) {                                  
  1281.                 unset($formulario['fuerza']);                
  1282.             }
  1283.         
  1284.         
  1285.         
  1286.         if ($this->routeClassName=='registradosbase' || $this->routeClassName=='registradoscentro'
  1287.                   || $this->routeClassName=='reporterechazos')
  1288.         {
  1289.             unset($formulario['unidad']);        
  1290.         }
  1291.         
  1292.         if ($this->routeClassName == 'consolidadofuerza')
  1293.         {
  1294.             //unset($formulario['proceso']);        
  1295.             //unset($formulario['unidad']);        
  1296. /*            $formulario['anno'] = array('nombre'   =>'anno',
  1297.                             'tipo'     => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
  1298.                             'type'     => 'string',
  1299.                             'atributos'=> array('label' => $this->translator->trans(
  1300.                                                     $this->translatorBase.'.fields.anno',
  1301.                                                     array(),
  1302.                                                     'crud').':',
  1303.                                 'placeholder' => $this->translator->trans('choice_value.empty_value',array(),'crud'),
  1304.                                 'required' => false,
  1305.                                 'multiple'=>false,
  1306.                                 'attr'=>array('style'=>'width: 100%', 'class'=>'chosen-select')));
  1307.             
  1308.             $annos = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->createQueryBuilder('p')
  1309.                                     ->orderBy('p.anno', 'DESC')
  1310.                                     ->getQuery()->getResult(); //->findAll();
  1311.             foreach ($annos as $a)
  1312.             {
  1313.                 $formulario['anno']['atributos']['choices'][$a->getAnno()]=$a->getAnno();
  1314.             }*/
  1315.         }
  1316.         if (isset($formulario['proceso']))
  1317.         {
  1318.             $proceso $formulario['proceso'];
  1319.             unset($formulario['proceso']);
  1320.             array_unshift($formulario$proceso);
  1321.         }
  1322.         if ($this->routeClassName=='reportecupolugar')
  1323.         {
  1324.             unset($formulario['lugar']);
  1325.             unset($formulario['unidad']);
  1326.             unset($formulario['fuerza']);
  1327.         }
  1328.         
  1329.         return $formulario;
  1330.     }
  1331.     protected function setFiltros()
  1332.     {
  1333.         if (!isset($this->filterData['proceso']))
  1334.         {
  1335.             $procesoActivo $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')
  1336.                     ->findOneBy(array('activo'=>true));
  1337.             if ($procesoActivo)
  1338.             {
  1339.                 $this->filterData['proceso']=$procesoActivo->getId();
  1340.             }
  1341.         }
  1342.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $this->getUser()->isRoleAssigned('ROLE_COORDINADOR_CENTRO'))
  1343.         {
  1344.             $this->filterData['centroMovilizacion']= $this->getUser()->getCentroMovilizacion()->getId(); 
  1345.         }
  1346.         if ($this->getUser()->isRoleAssigned('ROLE_COORDINADOR_BASE'))
  1347.         {
  1348.             $this->filterData['baseMovilizacion']= $this->getUser()->getBaseMovilizacion()->getId(); 
  1349.         }
  1350.         if ($this->getUser()->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
  1351.         {
  1352.             $this->filterData['unidad']= $this->getUser()->getUnidadMilitar()->getId(); 
  1353.         }
  1354.     }
  1355.        
  1356. }