<?php
namespace App\Controller;
use App\Crud\Controller\crudPlainController;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
//use App\Entity\Recluta;
/**
* ReclutaProcesoController controller.
*
*/
class ReporteMapaController extends crudPlainController
{
public function showProcesoBaseCentroUnidadAction($proceso)
{
$this->setUtilProperties();
$em = $this ->em;
if ($proceso < 0) {
$proceso = $em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId();
}
$user = $this->getUser();
$filtros = array('proceso'=>$proceso);
$limitabase = false;
$nivel = 'país';
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
{
$base = $user->getBaseMovilizacion();
$filtros['base'] = $base->getId();
$nivel = 'base movilización';
}
else
if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
$user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
{
$centro = $user->getCentroMovilizacion();
$filtros['centro'] = $centro->getId();
$limitabase = true;
$nivel = 'centro movilización';
}
if ($limitabase)
$eBases = array();
else
$eBases = $this->getBases($filtros); //ProcesoReclutamientoBase
$eCentros = $this->getCentros($filtros); //ProcesoReclutamientoCentro
$eUnidades = $this->getUnidades($filtros); //ProcesoReclutamientoUnidad
if ($user->isRoleAssigned('ROLE_ADMINISTRADOR') === true)
{
$punidades=array();
$cadenaUnidadessPuntos=array();
}
$basesPuntos = array();
$centrosPuntos = array();
$unidadesPuntos = array();
$pbases = array();
$cadenaBasesPuntos = array();
$totales = array('asignadosMasculinos' => 0,
'asignadosFemeninos' => 0,
'cupoMasculinos' => 0,
'cupoFemeninos' => 0);
$avances = array('total' => 0 , 'masculino' => 0, 'femenino' => 0);
foreach ($eBases as $entity)
{
$cadenaBasesPuntos[] = $entity->getBase()->getGeometria();
$pbases[$entity->getBase()->getId()] = array(
'id' => 'base'.$entity->getBase()->getId(),
'nombre' => $entity->getBase()->getNombre(),
'nombreGrupo' => 'Base de Movilización',
'asignadosMasculinos' => 0,
'asignadosFemeninos' => 0,
'registradosMasculinos' => 0,
'registradosFemeninos' => 0,
'path' => $this->generateUrl('resultadoProceso', array('tipoLugar' => 'base',
'lugar' => $entity->getBase()->getId(),
'proceso' => $proceso))
);
}
foreach ($eCentros as $entity)
{
$cadenaCentrosPuntos[] = $entity->getLugar()->getGeometria();
$pcentros[$entity->getLugar()->getId()] = array(
'id' => 'centro'.$entity->getLugar()->getId(),
'nombre' => $entity->getNombreLugar(),
'nombreGrupo' => 'Centro de Movilización',
'asignadosMasculinos' => 0,
'asignadosFemeninos' => 0,
'registradosMasculinos' => $entity->getRegistradoMasculino()?$entity->getRegistradoMasculino():0,
'registradosFemeninos' => $entity->getRegistradoFemenino()?$entity->getRegistradoFemenino():0,
'path' => $this->generateUrl('resultadoProceso',
array('tipoLugar' => 'centro',
'lugar' => $entity->getLugar()->getId(),
'proceso' => $proceso))
);
$base = $entity->getBase();
if (isset($pbases[$base->getId()])) {
$pbases[$base->getId()]['registradosMasculinos'] += $pcentros[$entity->getLugar()->getId()]['registradosMasculinos'];
$pbases[$base->getId()]['registradosFemeninos'] += $pcentros[$entity->getLugar()->getId()]['registradosFemeninos'];
}
}
foreach ($eUnidades as $entity)
{
$cadenaUnidadessPuntos[] = $entity->getUnidad()->getGeometria();
$punidades[$entity->getUnidad()->getId()] = array(
'id' => 'unidad'.$entity->getUnidad()->getId(),
'nombre' => $entity->getNombreUnidad(),
'nombreGrupo' => 'Unidad Militar',
'asignadosMasculinos' => $entity->getRegistradoMasculino()?$entity->getRegistradoMasculino():0,
'asignadosFemeninos' => $entity->getRegistradoFemenino()?$entity->getRegistradoFemenino():0,
'path' => $this->generateUrl('resultadoProceso',
array('tipoLugar' => 'unidad',
'lugar' => $entity->getUnidad()->getId(),
'proceso' => $proceso))
);
$centro = $entity->getLugar();
$procesoBase = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->findOneBy(array('proceso'=>$proceso, 'lugar'=>$centro->getId()));
$base = $procesoBase->getBase();
if (isset($pcentros[$centro->getId()])) {
$pcentros[$centro->getId()]['asignadosMasculinos'] += $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
$pcentros[$centro->getId()]['asignadosFemeninos'] += $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
}
if (isset($pbases[$base->getId()])) {
$pbases[$base->getId()]['asignadosMasculinos'] += $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
$pbases[$base->getId()]['asignadosFemeninos'] += $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
}
$totales['cupoMasculinos'] += $entity->getCupoMasculino();
$totales['cupoFemeninos'] += $entity->getCupoFemenino();
$totales['asignadosMasculinos'] += $punidades[$entity->getUnidad()->getId()]['asignadosMasculinos'];
$totales['asignadosFemeninos'] += $punidades[$entity->getUnidad()->getId()]['asignadosFemeninos'];
}
foreach ($pbases as $item)
$basesPuntos['puntos'][] = $item;
foreach ($pcentros as $item)
$centrosPuntos['puntos'][] = $item;
foreach ($punidades as $item)
$unidadesPuntos['puntos'][] = $item;
if (count($cadenaBasesPuntos)) {
$basesPuntos['cadenaPuntos'] = implode('***', $cadenaBasesPuntos);
$basesPuntos['properties'] = json_encode($basesPuntos['puntos']);
}
if (count($cadenaCentrosPuntos)) {
$centrosPuntos['cadenaPuntos'] = implode('***', $cadenaCentrosPuntos);
$centrosPuntos['properties'] = json_encode($centrosPuntos['puntos']);
}
if (count($cadenaUnidadessPuntos)) {
$unidadesPuntos['cadenaPuntos'] = implode('***', $cadenaUnidadessPuntos);
// $unidadesPuntos['properties'] = array_chunk($unidadesPuntos['puntos'],40,true);
// $unidadesPuntos['properties'] = json_encode($unidadesPuntos['properties']);
$unidadesPuntos['properties'] = json_encode($unidadesPuntos['puntos']);
}
if ($totales)
{
if ($totales['cupoMasculinos'] > 0)
$avances['masculino'] = round($totales['asignadosMasculinos']*100/$totales['cupoMasculinos'],2);
if ($totales['cupoFemeninos'] > 0)
$avances['femenino'] = round($totales['asignadosFemeninos']*100/$totales['cupoFemeninos'],2);
if ($totales['cupoMasculinos']> 0 || $totales['cupoFemeninos']>0)
$avances['total'] = round(($totales['asignadosMasculinos'] + $totales['asignadosFemeninos'])*100/($totales['cupoMasculinos'] + $totales['cupoFemeninos']),2);
}
//$procesos = $this->getProcesos();
$procesos = $em->getRepository('App\\Entity\\ProcesoReclutamiento')
->createQueryBuilder('p')
->getQuery()->getResult();
return $this->render("ReportesMapas/bases_centros_unidades.html.twig" ,
array('bases' => $basesPuntos,
'centros' => $centrosPuntos,
'unidades' => array(),//$unidadesPuntos,
'idProceso' => $proceso,
'procesos' => $procesos,
'limitBase'=>$limitabase,
'nivel' => $nivel,
'avances' => $avances));
}
public function getProcessData($routeClassName, $filterdata)
{
$this->setInitialValues('all', $routeClassName);
$paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
$entities = array();
if (isset($filterdata['id']))
{
// $item = $em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->findOneBy(array('id'=>$filterdata['id'], 'proceso'=>$proceso)); // $this->filterData);
if ($item = $this->em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->find($filterdata['id'])) // $this->filterData);
{
$entities[] = $item;
}
}
else
{
$entities = $this->em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->findBy($filterdata);
}
return $entities;
}
public function getBases($filterdata)
{
$entities = array();
if (isset($filterdata['id'])) {
if ($item = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')->find($filterdata['id']))
{
$entities[] = $item;
}
}
else
{
$query = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoBase')->createQueryBuilder('b')
->innerJoin('b.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
if (isset($filterdata['base']))
{
$query->innerJoin('b.base','base')->andWhere('base.id='.$filterdata['base']);
}
$entities = $query->getQuery()->getResult();
}
return $entities;
}
public function getCentros($filterdata)
{
$entities = array();
if (isset($filterdata['id'])) {
if ($item = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->find($filterdata['id']))
{
$entities[] = $item;
}
}
else
{
$query = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')->createQueryBuilder('c')
->innerJoin('c.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
if (isset($filterdata['centro']))
{
$query->innerJoin('c.lugar','centro')->andWhere('centro.id='.$filterdata['centro']);
}
if (isset($filterdata['base']))
{
$query->innerJoin('c.base','base')->andWhere('base.id='.$filterdata['base']);
}
$entities = $query->getQuery()->getResult();
}
return $entities;
}
public function getUnidades($filterdata)
{
$entities = array();
if (isset($filterdata['id'])) {
if ($item = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->find($filterdata['id']))
{
$entities[] = $item;
}
}
else
{
$query = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')->createQueryBuilder('u')
->innerJoin('u.proceso','proceso')->where('proceso.id='.$filterdata['proceso']);
if (isset($filterdata['centro']))
{
$query->innerJoin('u.lugar','centro')->andWhere('centro.id='.$filterdata['centro']);
}
if (isset($filterdata['base']))
{
$temp = $this->em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->select('centro.id')
->innerJoin('prc.proceso', 'procesoRec')
->innerJoin('prc.lugar', 'centro')
->innerJoin('prc.base','base')
->where('procesoRec.id='.$filterdata['proceso'])
->andWhere('base.id = '.$filterdata['base'])
->getQuery()->getDql();
$query->innerJoin('u.lugar','lugar1')
->andWhere('lugar1.id in ('.$temp.')');
}
$entities = $query->getQuery()->getResult();
}
return $entities;
}
public function getProcesos()
{
$this->setInitialValues('all', 'procesoreclutamiento');
$paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
$em = $this ->em;
$query = $em->getRepository($this->bundleName.'\\Entity\\'.$this->className)->loadResults( $paramsForFunctionInEntity, $filterdata); // $this->filterData);
$entities = $query->getQuery()->getResult();
return $entities;
}
public function totalesNoIdoneosAction($proceso)
{
if ($proceso < 0) {
$proceso = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId();
}
$user = $this->getUser();
$filtros = array('proceso'=>$proceso);
$addfrom = "";
$addwhere = "AND (rp.proceso = ".$proceso.") ";
$addfrom = " INNER JOIN centro_movilizacion centro_movilizacion ON centro_movilizacion.id = rp.centro_movilizacion ";
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
{
$base = $user->getBaseMovilizacion();
$addfrom = " INNER JOIN proceso_reclutamiento_lugar_base prlb ON prlb.lugar = rp.centro_movilizacion ";
$addwhere .= " AND (prlb.base = ".$base->getId().") AND (prlb.proceso = ".$proceso.") ";
}
else
if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
$user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
{
$centro = $user->getCentroMovilizacion();
$addwhere .= " AND (rp.centro_movilizacion = ".$centro->getId().")";
}
$query =
"SELECT
COALESCE(rp.causa_rechazo, 'DESCONOCIDA') AS causa,
Count(rp.recluta) AS cantidad
FROM
recluta_proceso rp
INNER JOIN
proceso_reclutamiento_lugar_base inprlb ON rp.centro_movilizacion = inprlb.lugar AND rp.proceso = inprlb.proceso".$addfrom."
WHERE
(rp.idoneo = false) AND
(rp.turno IS NOT NULL) ".
$addwhere."
GROUP BY
rp.causa_rechazo;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
return $this->render("ReportesMapas/porcientos_no_idoneos.html.twig" ,
array('datos' => $datos));
}
// TODO: esta por modificar lo q tiene dentro
public function avanceNacionalAction($proceso)
{
if ($proceso < 0) {
$proceso = $this->em->getRepository('App\\Entity\\ProcesoReclutamiento')->findOneBy(array('activo'=>true))->getId();
}
$user = $this->getUser();
$filtros = array('proceso'=>$proceso);
$addfrom = "";
$addwhere = "AND (rp.proceso = ".$proceso.") ";
$addwhere2 = "";
$addfrom = " INNER JOIN centro_movilizacion centro_movilizacion ON centro_movilizacion.id = rp.centro_movilizacion ";
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE') === true)
{
$base = $user->getBaseMovilizacion();
$addfrom .= " INNER JOIN proceso_reclutamiento_lugar_base prlb ON prlb.lugar = rp.centro_movilizacion ";
$addwhere .= " AND (prlb.base = ".$base->getId().") AND (prlb.proceso = ".$proceso.") ";
$addwhere2 .= " AND (prlb.base = ".$base->getId().")";
}
else
if ($user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') === true ||
$user->isRoleAssigned('ROLE_OPERADOR_CENTRO') === true)
{
$centro = $user->getCentroMovilizacion();
$addwhere .= " AND (centro_movilizacion.id = ".$centro->getId().")";
$addwhere2 = "AND (prlb.lugar = ".$centro->getId().") ";
}
$query =
"SELECT
COALESCE(rp.idoneo::int, 0::int) AS resultado,
Count(rp.idoneo) AS cantidad
FROM
recluta_proceso rp
INNER JOIN
proceso_reclutamiento_lugar_base inprlb ON rp.centro_movilizacion = inprlb.lugar AND rp.proceso = inprlb.proceso".$addfrom."
WHERE
(rp.turno IS NOT NULL)".
$addwhere."
GROUP BY
COALESCE(rp.idoneo::int, 0::int)
ORDER BY
COALESCE(rp.idoneo::int, 0::int) DESC;";
$conn = $this->em->getConnection();
$statement = $conn->prepare($query);
$datos = $statement->executeQuery()->fetchAllAssociative();
for ($i=0; $i<count($datos); $i++){
$datos[$i]['resultado'] = ($datos[$i]['resultado'] === 1 ? 'Idóneos' : 'No Idóneos');
}
/*$query2 =
"SELECT
'Registrados' AS resultado,
Count(rp.recluta) AS cantidad
FROM
recluta_proceso rp ".$addfrom."
WHERE
(rp.fecha_resultado IS NULL) and
(rp.turno is not null) ".
$addwhere.";";*/
$query2 =
"SELECT
'Registrados' AS resultado,
Sum(COALESCE(prlb.registrado_masculino,0))+Sum(COALESCE(prlb.registrado_femenino,0)) AS cantidad
FROM
proceso_reclutamiento_lugar_base prlb
WHERE
prlb.proceso = ".$proceso.
$addwhere2.";";
$conn2 = $this->em->getConnection();
$statement2 = $conn2->prepare($query2);
$datos2 = $statement2->executeQuery()->fetchAllAssociative();
//$datos= array_merge($datos, $datos2);
$i=0;
/*for ($i; $i<count($datos); $i++){
if($datos[$i]['resultado'] === 1)
$datos[$i]['resultado'] ='Idóneos';
else
if($datos[$i]['resultado'] === 0)
$datos[$i]['resultado'] ='No Idóneos';
//$datos[$i]['resultado'] = ($datos[$i]['resultado'] === 1 ? 'Idóneos' : 'No Idóneos');
}*/
$datos= array_merge($datos, $datos2);
/*for ($j=0; $j<count($datos); $j++){
$datos2[$i]['resultado'] = 'Registrados';
$i++;
}*/
return $this->render("ReportesMapas/porcientos_avacnes_idoneos.html.twig" ,
array('datos' => $datos));
}
}