src/Controller/ReporteMapaController.php line 312

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\Routing\Annotation\Route;
  7. //use App\Entity\Recluta;
  8. /**
  9.  * ReclutaProcesoController controller.
  10.  *
  11.  */
  12. class ReporteMapaController extends crudPlainController
  13. {
  14.     public function showProcesoBaseCentroUnidadAction($proceso)
  15.     {
  16.         $this->setUtilProperties();
  17.         $em $this ->em;
  18.         
  19.         if ($proceso 0) {
  20.             
  21.             $proceso $em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId(); 
  22.         }
  23.         $user $this->getUser();
  24.         $filtros = array('proceso'=>$proceso);
  25.         $limitabase false;
  26.         $nivel 'país';
  27.         if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
  28.         {
  29.             $base $user->getBaseMovilizacion();
  30.             $filtros['base'] = $base->getId();
  31.             $nivel 'base movilización';
  32.         }
  33.         else
  34.         if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
  35.             $user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true
  36.         {
  37.             $centro $user->getCentroMovilizacion();
  38.             $filtros['centro'] = $centro->getId();
  39.             $limitabase true;
  40.             $nivel 'centro movilización';
  41.         }
  42.         
  43.         if ($limitabase)
  44.             $eBases = array();
  45.         else
  46.             $eBases $this->getBases($filtros);  //ProcesoReclutamientoBase
  47.         
  48.         $eCentros $this->getCentros($filtros);  //ProcesoReclutamientoCentro
  49.         $eUnidades $this->getUnidades($filtros);  //ProcesoReclutamientoUnidad
  50.         if ($user->isRoleAssigned('ROLE_ADMINISTRADOR') === true)
  51.         {
  52.             $punidades=array();
  53.             $cadenaUnidadessPuntos=array();
  54.         }
  55.         
  56.         $basesPuntos = array();
  57.         $centrosPuntos = array();
  58.         $unidadesPuntos = array();
  59.         
  60.         $pbases = array();
  61.         $cadenaBasesPuntos = array();
  62.                 
  63.         $totales = array('asignadosMasculinos' => 0,
  64.                 'asignadosFemeninos' => 0,
  65.                 'cupoMasculinos' => 0,
  66.                 'cupoFemeninos' => 0);
  67.         $avances = array('total' => 'masculino' => 0'femenino' => 0);
  68.         foreach ($eBases as $entity)
  69.         {
  70.             $cadenaBasesPuntos[] = $entity->getBase()->getGeometria();
  71.             $pbases[$entity->getBase()->getId()] = array(
  72.                 'id' => 'base'.$entity->getBase()->getId(),
  73.                 'nombre' => $entity->getBase()->getNombre(),
  74.                 'nombreGrupo' => 'Base de Movilización',
  75.                 'asignadosMasculinos' => 0,
  76.                 'asignadosFemeninos' => 0,
  77.                 'registradosMasculinos' => 0,
  78.                 'registradosFemeninos' => 0,
  79.                 'path' => $this->generateUrl('resultadoProceso', array('tipoLugar' => 'base',
  80.                                                                        'lugar' => $entity->getBase()->getId(),
  81.                                                                        'proceso' => $proceso))
  82.             );  
  83.         }       
  84.         foreach ($eCentros as $entity)
  85.         {
  86.             $cadenaCentrosPuntos[] = $entity->getLugar()->getGeometria();
  87.             $pcentros[$entity->getLugar()->getId()] = array(
  88.                 'id' => 'centro'.$entity->getLugar()->getId(),
  89.                 'nombre' => $entity->getNombreLugar(),
  90.                 'nombreGrupo' => 'Centro de Movilización',
  91.                 'asignadosMasculinos' => 0,
  92.                 'asignadosFemeninos' => 0,
  93.                 'registradosMasculinos' => $entity->getRegistradoMasculino()?$entity->getRegistradoMasculino():0,
  94.                 'registradosFemeninos' => $entity->getRegistradoFemenino()?$entity->getRegistradoFemenino():0,
  95.                 'path' => $this->generateUrl('resultadoProceso'
  96.                         array('tipoLugar' => 'centro',
  97.                             'lugar' => $entity->getLugar()->getId(),
  98.                             'proceso' => $proceso))
  99.             );
  100.             $base $entity->getBase();
  101.             if (isset($pbases[$base->getId()])) {
  102.                 $pbases[$base->getId()]['registradosMasculinos'] +=  $pcentros[$entity->getLugar()->getId()]['registradosMasculinos'];
  103.                 $pbases[$base->getId()]['registradosFemeninos'] +=  $pcentros[$entity->getLugar()->getId()]['registradosFemeninos'];
  104.             }
  105.         }       
  106.         foreach ($eUnidades as $entity)
  107.         {
  108.             $cadenaUnidadessPuntos[] = $entity->getUnidad()->getGeometria();
  109.             $punidades[$entity->getUnidad()->getId()] = array(
  110.                 'id' => 'unidad'.$entity->getUnidad()->getId(),
  111.                 'nombre' => $entity->getNombreUnidad(),
  112.                 'nombreGrupo' => 'Unidad Militar',
  113.                 'asignadosMasculinos' => $entity->getRegistradoMasculino()?$entity->getRegistradoMasculino():0,
  114.                 'asignadosFemeninos' => $entity->getRegistradoFemenino()?$entity->getRegistradoFemenino():0,
  115.                 'path' => $this->generateUrl('resultadoProceso'
  116.                         array('tipoLugar' => 'unidad',
  117.                             'lugar' => $entity->getUnidad()->getId(),
  118.                             'proceso' => $proceso))
  119.             );
  120.             
  121.             $centro $entity->getLugar();
  122.             $procesoBase $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  123.                 ->findOneBy(array('proceso'=>$proceso'lugar'=>$centro->getId())); 
  124.             $base $procesoBase->getBase();
  125.             if (isset($pcentros[$centro->getId()])) {
  126.                 $pcentros[$centro->getId()]['asignadosMasculinos'] +=  $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
  127.                 $pcentros[$centro->getId()]['asignadosFemeninos'] +=  $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
  128.             }
  129.             if (isset($pbases[$base->getId()])) {
  130.                 $pbases[$base->getId()]['asignadosMasculinos'] +=  $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
  131.                 $pbases[$base->getId()]['asignadosFemeninos'] +=  $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
  132.             }
  133.             $totales['cupoMasculinos'] += $entity->getCupoMasculino();
  134.             $totales['cupoFemeninos'] +=  $entity->getCupoFemenino();
  135.             $totales['asignadosMasculinos'] += $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
  136.             $totales['asignadosFemeninos'] +=  $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
  137.         }       
  138.         foreach ($pbases as $item)
  139.             $basesPuntos['puntos'][] = $item;
  140.         foreach ($pcentros as $item)
  141.             $centrosPuntos['puntos'][] = $item;
  142.         foreach ($punidades as $item)
  143.             $unidadesPuntos['puntos'][] = $item;
  144.  
  145.         if (count($cadenaBasesPuntos)) {
  146.             $basesPuntos['cadenaPuntos'] = implode('***'$cadenaBasesPuntos);
  147.             $basesPuntos['properties'] = json_encode($basesPuntos['puntos']);
  148.         }
  149.         if (count($cadenaCentrosPuntos)) {
  150.             $centrosPuntos['cadenaPuntos'] = implode('***'$cadenaCentrosPuntos);
  151.             $centrosPuntos['properties'] = json_encode($centrosPuntos['puntos']);
  152.         }
  153.         if (count($cadenaUnidadessPuntos)) {
  154.             $unidadesPuntos['cadenaPuntos'] = implode('***'$cadenaUnidadessPuntos);
  155. //            $unidadesPuntos['properties'] = array_chunk($unidadesPuntos['puntos'],40,true);
  156. //            $unidadesPuntos['properties'] = json_encode($unidadesPuntos['properties']);
  157.             $unidadesPuntos['properties'] = json_encode($unidadesPuntos['puntos']);
  158.         }
  159.         if ($totales)
  160.         {
  161.             if ($totales['cupoMasculinos'] > 0)
  162.                 $avances['masculino'] = round($totales['asignadosMasculinos']*100/$totales['cupoMasculinos'],2); 
  163.             if ($totales['cupoFemeninos'] > 0)
  164.                 $avances['femenino'] = round($totales['asignadosFemeninos']*100/$totales['cupoFemeninos'],2);
  165.             if ($totales['cupoMasculinos']> || $totales['cupoFemeninos']>0)
  166.                 $avances['total'] = round(($totales['asignadosMasculinos'] + $totales['asignadosFemeninos'])*100/($totales['cupoMasculinos'] + $totales['cupoFemeninos']),2);
  167.         }
  168.         //$procesos = $this->getProcesos();
  169.         $procesos $em->getRepository('App\\Entity\\ProcesoReclutamiento')
  170.                                             ->createQueryBuilder('p')                                            
  171.                                             ->getQuery()->getResult();
  172.         
  173.         
  174.         return $this->render("ReportesMapas/bases_centros_unidades.html.twig" 
  175.                 array('bases' => $basesPuntos,
  176.                     'centros' => $centrosPuntos,
  177.                     'unidades' => array(),//$unidadesPuntos,
  178.                     'idProceso' => $proceso,
  179.                     'procesos' => $procesos,
  180.                     'limitBase'=>$limitabase,
  181.                     'nivel' => $nivel,
  182.                     'avances' => $avances));
  183.     }     
  184.         
  185.     public function getProcessData($routeClassName,  $filterdata)
  186.     {
  187.         $this->setInitialValues('all'$routeClassName);
  188.         $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  189.         $entities = array();
  190.         if (isset($filterdata['id'])) 
  191.         {
  192. //            $item = $em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->findOneBy(array('id'=>$filterdata['id'], 'proceso'=>$proceso)); // $this->filterData);
  193.             if ($item $this->em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->find($filterdata['id'])) // $this->filterData);
  194.             {
  195.                 $entities[] = $item;
  196.             }
  197.         }
  198.         else
  199.         {
  200.             $entities $this->em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->findBy($filterdata);
  201.         }
  202.         return $entities;
  203.     }     
  204.     public function getBases($filterdata)
  205.     {
  206.         $entities = array();
  207.         if (isset($filterdata['id'])) {
  208.            if ($item $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')->find($filterdata['id']))
  209.             {
  210.                 $entities[] = $item;
  211.             }
  212.         }
  213.         else
  214.         {
  215.             $query $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')->createQueryBuilder('b')
  216.                     ->innerJoin('b.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
  217.             if (isset($filterdata['base']))
  218.             {
  219.                 $query->innerJoin('b.base','base')->andWhere('base.id='.$filterdata['base']);
  220.             }
  221.             $entities $query->getQuery()->getResult();
  222.         }
  223.         return $entities;
  224.     }     
  225.     public function getCentros($filterdata)
  226.     {
  227.         $entities = array();
  228.         if (isset($filterdata['id'])) {
  229.            if ($item $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->find($filterdata['id']))
  230.             {
  231.                 $entities[] = $item;
  232.             }
  233.         }
  234.         else
  235.         {
  236.             $query $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->createQueryBuilder('c')
  237.                     ->innerJoin('c.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
  238.             if (isset($filterdata['centro']))
  239.             {
  240.                 $query->innerJoin('c.lugar','centro')->andWhere('centro.id='.$filterdata['centro']);
  241.             }
  242.             if (isset($filterdata['base']))
  243.             {
  244.                 $query->innerJoin('c.base','base')->andWhere('base.id='.$filterdata['base']);
  245.             }
  246.             $entities $query->getQuery()->getResult();
  247.         }
  248.         return $entities;
  249.     }     
  250.     public function getUnidades($filterdata)
  251.     {
  252.         $entities = array();
  253.         if (isset($filterdata['id'])) {
  254.            if ($item $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($filterdata['id']))
  255.             {
  256.                 $entities[] = $item;
  257.             }
  258.         }
  259.         else
  260.         {
  261.             $query $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->createQueryBuilder('u')
  262.                     ->innerJoin('u.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
  263.             if (isset($filterdata['centro']))
  264.             {
  265.                 $query->innerJoin('u.lugar','centro')->andWhere('centro.id='.$filterdata['centro']);
  266.             }
  267.             if (isset($filterdata['base']))
  268.             {
  269.                 $temp $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
  270.                     ->createQueryBuilder('prc')
  271.                     ->select('centro.id')
  272.                     ->innerJoin('prc.proceso''procesoRec')
  273.                     ->innerJoin('prc.lugar''centro')
  274.                     ->innerJoin('prc.base','base')
  275.                     ->where('procesoRec.id='.$filterdata['proceso'])
  276.                     ->andWhere('base.id = '.$filterdata['base'])
  277.                     ->getQuery()->getDql();
  278.                 $query->innerJoin('u.lugar','lugar1')
  279.                     ->andWhere('lugar1.id in ('.$temp.')');
  280.             }
  281.             $entities $query->getQuery()->getResult();
  282.         }
  283.         return $entities;
  284.     }     
  285.     public function getProcesos()
  286.     {
  287.         $this->setInitialValues('all''procesoreclutamiento');
  288.         $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  289.         $em $this ->em;
  290.         $query $em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->loadResults$paramsForFunctionInEntity$filterdata); // $this->filterData);
  291.         $entities $query->getQuery()->getResult();
  292.         return $entities;
  293.     }     
  294.     
  295.     public function totalesNoIdoneosAction($proceso)
  296.     {
  297.         if ($proceso 0) {
  298.             $proceso $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId(); 
  299.         }
  300.         
  301.         $user $this->getUser();
  302.         $filtros = array('proceso'=>$proceso);
  303.         $addfrom "";
  304.         $addwhere "AND (rp.proceso = ".$proceso.") ";
  305.         $addfrom " INNER JOIN centro_movilizacion centro_movilizacion ON centro_movilizacion.id = rp.centro_movilizacion ";
  306.         
  307.         if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
  308.         {
  309.             $base $user->getBaseMovilizacion();
  310.             $addfrom " INNER JOIN proceso_reclutamiento_lugar_base prlb ON prlb.lugar = rp.centro_movilizacion ";
  311.             $addwhere .= " AND (prlb.base = ".$base->getId().") AND (prlb.proceso = ".$proceso.") ";
  312.         }
  313.         else
  314.         if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
  315.             $user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true
  316.         {
  317.             $centro $user->getCentroMovilizacion();
  318.             $addwhere .= " AND (rp.centro_movilizacion = ".$centro->getId().")";
  319.         }
  320.         
  321.         $query 
  322.             "SELECT 
  323.                 COALESCE(rp.causa_rechazo, 'DESCONOCIDA') AS causa,
  324.                 Count(rp.recluta) AS cantidad
  325.             FROM 
  326.                 recluta_proceso rp 
  327.                 INNER JOIN
  328.                         proceso_reclutamiento_lugar_base inprlb ON rp.centro_movilizacion = inprlb.lugar AND rp.proceso = inprlb.proceso".$addfrom."
  329.             WHERE 
  330.                 (rp.idoneo = false) AND 
  331.                 (rp.turno IS NOT NULL) ".
  332.                 $addwhere."
  333.             GROUP BY
  334.                 rp.causa_rechazo;";
  335.         
  336.         $conn $this->em->getConnection();
  337.         $statement $conn->prepare($query);
  338.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  339.         
  340.         return $this->render("ReportesMapas/porcientos_no_idoneos.html.twig" 
  341.                 array('datos' => $datos));
  342.     }     
  343.     
  344.     // TODO: esta por modificar lo q tiene dentro
  345.     public function avanceNacionalAction($proceso)
  346.     {
  347.         if ($proceso 0) {
  348.             $proceso $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId(); 
  349.         }
  350.         
  351.         $user $this->getUser();
  352.         $filtros = array('proceso'=>$proceso);
  353.         $addfrom "";
  354.         $addwhere "AND (rp.proceso = ".$proceso.") ";
  355.         $addwhere2 "";
  356.         
  357.         $addfrom " INNER JOIN centro_movilizacion centro_movilizacion ON centro_movilizacion.id = rp.centro_movilizacion ";
  358.         
  359.         
  360.         if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
  361.         {
  362.             $base $user->getBaseMovilizacion();      
  363.             $addfrom .= " INNER JOIN proceso_reclutamiento_lugar_base prlb ON prlb.lugar = rp.centro_movilizacion ";
  364.             $addwhere .= " AND (prlb.base = ".$base->getId().") AND (prlb.proceso = ".$proceso.") ";
  365.             $addwhere2 .= " AND (prlb.base = ".$base->getId().")";
  366.         }
  367.         else
  368.         if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
  369.             $user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true
  370.         {
  371.             $centro $user->getCentroMovilizacion();
  372.             $addwhere .= " AND (centro_movilizacion.id = ".$centro->getId().")";
  373.             $addwhere2 "AND (prlb.lugar = ".$centro->getId().") ";
  374.             
  375.         }
  376.         
  377.         $query 
  378.             "SELECT 
  379.                 COALESCE(rp.idoneo::int, 0::int) AS resultado,
  380.                 Count(rp.idoneo) AS cantidad
  381.             FROM
  382.                 recluta_proceso rp 
  383.                 INNER JOIN
  384.                         proceso_reclutamiento_lugar_base inprlb ON rp.centro_movilizacion = inprlb.lugar AND rp.proceso = inprlb.proceso".$addfrom."
  385.             WHERE 
  386.                 (rp.turno IS NOT NULL)".
  387.                 $addwhere."
  388.             GROUP BY
  389.                 COALESCE(rp.idoneo::int, 0::int)
  390.             ORDER BY
  391.                 COALESCE(rp.idoneo::int, 0::int) DESC;";
  392.         
  393.         $conn $this->em->getConnection();
  394.         $statement $conn->prepare($query);
  395.         $datos $statement->executeQuery()->fetchAllAssociative(); 
  396.         for ($i=0$i<count($datos); $i++){                             
  397.             $datos[$i]['resultado'] = ($datos[$i]['resultado'] === 'Idóneos' 'No Idóneos');
  398.         }
  399.                            
  400.         
  401.         
  402.         /*$query2 = 
  403.             "SELECT
  404.                 'Registrados' AS resultado,
  405.                 Count(rp.recluta) AS cantidad
  406.             FROM
  407.                 recluta_proceso rp ".$addfrom."
  408.             WHERE
  409.                 (rp.fecha_resultado IS NULL) and                 
  410.                 (rp.turno is not null) ".
  411.                 $addwhere.";";*/
  412.         
  413.         
  414.         $query2 
  415.             "SELECT
  416.                 'Registrados' AS resultado,
  417.                 Sum(COALESCE(prlb.registrado_masculino,0))+Sum(COALESCE(prlb.registrado_femenino,0)) AS cantidad
  418.             FROM
  419.                 proceso_reclutamiento_lugar_base prlb 
  420.             WHERE
  421.                 prlb.proceso = ".$proceso.
  422.                 $addwhere2.";";
  423.         
  424.         
  425.         $conn2 $this->em->getConnection();
  426.         $statement2 $conn2->prepare($query2);
  427.         $datos2 $statement2->executeQuery()->fetchAllAssociative(); 
  428.         
  429.         //$datos= array_merge($datos, $datos2);
  430.         $i=0;
  431.         
  432.         /*for ($i; $i<count($datos); $i++){     
  433.             if($datos[$i]['resultado'] === 1)
  434.                 $datos[$i]['resultado'] ='Idóneos';
  435.             else
  436.                 if($datos[$i]['resultado'] === 0)
  437.                     $datos[$i]['resultado'] ='No Idóneos';                                    
  438.             //$datos[$i]['resultado'] = ($datos[$i]['resultado'] === 1 ? 'Idóneos' : 'No Idóneos');
  439.         }*/
  440.                         
  441.         $datosarray_merge($datos$datos2);
  442.         
  443.         /*for ($j=0; $j<count($datos); $j++){                             
  444.             $datos2[$i]['resultado'] = 'Registrados';
  445.             $i++;
  446.         }*/
  447.         return $this->render("ReportesMapas/porcientos_avacnes_idoneos.html.twig" 
  448.                 array('datos' => $datos));
  449.     }     
  450. }