<?php
namespace App\Repository;
use App\Crud\Repository\crudRepository;
/**
* App\Repository\ReclutaProcesoRepository
*/
class ReclutaProcesoRepository extends crudRepository
{
function loadResults($params, $filtros, $order = 'ASC')
{
$nombre = isset($filtros['reclutaNombre']) ? $filtros['reclutaNombre'] : null;
$edad = isset($filtros['reclutaEdad']) ? $filtros['reclutaEdad'] : null;
$identificacion = isset($filtros['identificacion']) ? $filtros['identificacion'] : (isset($filtros['reclutaIdentificacion']) ? $filtros['reclutaIdentificacion'] : null);
$asignacionInicio = isset($filtros['asignacionInicio']) ? $filtros['asignacionInicio'] : null;
$base = isset($filtros['reclutaBase']) ? $filtros['reclutaBase'] : null;
if (is_array($base))
$base= implode(',', $base);
$centro = isset($filtros['centroMovilizacion']) ? $filtros['centroMovilizacion'] : null;
$unidad = isset($filtros['unidadMilitar']) ? $filtros['unidadMilitar'] : null;
$centroInstruccion= isset($filtros['reclutaCentroInstruccion']) ? $filtros['reclutaCentroInstruccion'] : null;
$turno = isset($filtros['turno']) ? $filtros['turno'] : null;
unset($filtros['reclutaBase']);
unset($filtros['reclutaNombre']);
unset($filtros['reclutaEdad']);
unset($filtros['reclutaIdentificacion']);
unset($filtros['asignacionInicio']);
unset($filtros['centroMovilizacion']);
if ($params['routeClassName']=='nominaunidadinicio')
{
unset($filtros['unidadMilitar']);
}
$query = parent::loadResults($params, $filtros, $order);
$query->innerJoin('entity.recluta','recluta')->addSelect('recluta');
if ($nombre || $edad || $identificacion)
{
if ($nombre)
$query->andWhere("upper(recluta.nombres) like '%" . strtoupper($nombre) . "%' OR upper(recluta.apellidoMaterno) like '%" . strtoupper($nombre) . "%' OR upper(recluta.apellidoPaterno) like '%" . strtoupper($nombre) . "%'");
if ($identificacion)
$query->andWhere("upper(recluta.identificacion) like '%" . strtoupper($identificacion) . "%'");
if ($edad)
$query->andWhere("recluta.edad = " . $edad);
}
if ($base && (!$centro || $centro == 'not null') && (!$unidad || $unidad == 'not null'))
{
if (!$this->existsAlias($query, 'baseMovilizacion'))
{
$query->innerJoin('entity.baseMovilizacion', 'base')->addSelect('base');
}
$query->andWhere('base.id in ('.$base.')');
}
if ($centro && $centro != 'not null' && (!$unidad || $unidad == 'not null'))
{
if (!$this->existsAlias($query, 'centroMovilizacion'))
{
$query->innerJoin('entity.centroMovilizacion', 'centroMovilizacion')->addSelect('centroMovilizacion');
}
$query->andWhere('centroMovilizacion.id in ('.$centro.')');
}
if ($centroInstruccion)
{
if (!$this->existsAlias($query, 'unidadMilitar'))
{
$query->innerJoin('entity.unidadMilitar', 'unidadMilitar')->addSelect('unidadMilitar');
}
$query->innerJoin('unidadMilitar.centroInstruccion', 'centroInstruccion');
$query->andWhere('centroInstruccion.id in ('.$centroInstruccion.')');
}
if ($asignacionInicio == 'true') {
if (!$this->existsAlias($query, 'procesoReclutamiento'))
{
$query->innerJoin('entity.procesoReclutamiento', 'proceso');
}
$query->andWhere('entity.fechaAsignacion >= proceso.fechaAcuartelamiento')
->andWhere('entity.fechaAsignacion <= proceso.fechaFinDias')
;
}
if ((!$turno || $turno == 'not null') && $params['routeClassName'] != 'aspirantesencuesta' && $params['routeClassName'] != 'aspirantescursos' )
{
$query->andWhere('entity.turno is not null');
}
if ($params['routeClassName'] == 'nominaacuartelados')
{
$query->orderBy('entity.centroMovilizacion ASC, entity.unidadMilitar ASC, recluta.nombres', 'ASC');
}
else if ($params['routeClassName']=='listaasignacionbase')
{
$query->orderBy('entity.centroMovilizacion ASC, entity.unidadMilitar', 'ASC');
}
else if ($params['routeClassName']=='reportebajas')
{
$query->andWhere('entity.idoneo = false')
->andWhere('entity.fechaResultado is not null')
->orderBy('entity.centroMovilizacion ASC, entity.unidadMilitar', 'ASC');
}
else if ($params['routeClassName']=='nominaunidadinicio')
{
$query->andWhere('entity.unidadMilitar = '.$unidad.' OR entity.unidadMilitarInicial = '.$unidad)
->orderBy('recluta.nombres', 'ASC');
}
else if ($params['routeClassName']=='certificadovacunacion')
{
$query->orderBy('recluta.nombres', 'ASC');
}
else
{
$query->orderBy('entity.turno', 'ASC');
}
if (isset($filtros['pregunta']) && $filtros['pregunta'])
{
if ($filtros['pregunta']=='EstudioStr')
{
$filtros['pregunta'] = 'Estudio';
}
$query->andWhere('entity.'.lcfirst($filtros['pregunta']).' is not null');
}
$query->orderBy('entity.id', 'DESC');
return $query;
}
public function getNotificacionesNoLeidas($idUsuario)
{
$query = $this->createQueryBuilder('n')
->innerJoin('n.usuario','u')
->where('n.leida = FALSE')
->andwhere("u.id =".$idUsuario)
->orderBy('n.asunto ASC, n.fechaIngreso','DESC');
return $query->getQuery()->getResult();
}
public function cambiaReclutaUnidad($reclutaProceso, $unidadDestino)
{
$reclutaProceso = $this->find($reclutaProceso);
$sexo = $reclutaProceso->getRecluta()->getSexo();
$unidadOriginal = $reclutaProceso->getUnidadMilitar();
$proceso = $reclutaProceso->getProcesoReclutamiento();
$procesoUnidadOriginal = $this->_em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->findOneBy(array('proceso'=>$proceso->getId(), 'unidad'=>$unidadOriginal->getId()));
$unidadDestino = $this->_em->getRepository('App\\Entity\\UnidadMilitar')->find($unidadDestino);
$procesoUnidadDestino = $this->_em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->findOneBy(array('proceso'=>$proceso->getId(), 'unidad'=>$unidadDestino->getId()));
if (
($sexo=='Masculino' && $procesoUnidadDestino->getCupoMasculino()<=$procesoUnidadDestino->getRegistradoMasculino())
||
($sexo=='Femenino' && $procesoUnidadDestino->getCupoFemenino()<=$procesoUnidadDestino->getRegistradoFemenino())
)
{
return false; //$data = array('ok'=>false, 'error'=>'No hay cupo');
}
else
{
if ($sexo=='Masculino')
{
$procesoUnidadOriginal->setRegistradoMasculino($procesoUnidadOriginal->getRegistradoMasculino()-1);
$procesoUnidadDestino->setRegistradoMasculino($procesoUnidadDestino->getRegistradoMasculino()+1);
}
else
{
$procesoUnidadOriginal->setRegistradoFemenino($procesoUnidadOriginal->getRegistradoFemenino()-1);
$procesoUnidadDestino->setRegistradoFemenino($procesoUnidadDestino->getRegistradoFemenino()+1);
}
$reclutaProceso->setUnidadMilitar($unidadDestino);
$this->_em->persist($reclutaProceso);
$this->_em->persist($procesoUnidadOriginal);
$this->_em->persist($procesoUnidadDestino);
$this->_em->flush();
}
return true;
}
public function loadBasesPorProceso($user, $proceso = -1)
{
$bases = $this->queryBasesPorProceso($user, $proceso);
$bases = $bases->getQuery()->getResult();
return $bases;
}
public function queryBasesPorProceso($user, $proceso = -1)
{
$em = $this->_em;
if ($proceso == -1)
{
$proceso = $em->getRepository('App\\Entity\\ProcesoReclutamiento')
->findOneBy(array('activo'=>true));
$proceso = $proceso->getId();
}
if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
{
$procesoReclutamientoUnidades = $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->createQueryBuilder('pru')
->select('pru_centro.id')
->innerJoin('pru.proceso', 'pru_proceso')
->innerJoin('pru.lugar', 'pru_centro')
->innerJoin('pru.unidad', 'pru_unidad')
->where('pru_proceso.id = '.$proceso)
->andWhere('pru_unidad.id = '.$user->getUnidadMilitar()->getId())
->getQuery()->getDql();
$procesoReclutamientoCentros = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->select('prc_base.id')
->innerJoin('prc.proceso', 'prc_proceso')
->innerJoin('prc.base', 'prc_base')
->innerJoin('prc.lugar', 'prc_centro')
->where('prc_proceso.id = '.$proceso)
->andWhere('prc_centro.id in ('.$procesoReclutamientoUnidades.')')
->getQuery()->getDql();
}
if ($user->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $user->isRoleAssigned('ROLE_COORDINADOR_CENTRO')
|| $user->isRoleAssigned('ROLE_PSICOLOGO')/* || $user->isRoleAssigned('ROLE_PSICOLOGO_JEFE')*/ )
{
$procesoReclutamientoCentros = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->select('prc_base.id')
->innerJoin('prc.proceso', 'prc_proceso')
->innerJoin('prc.base', 'prc_base')
->innerJoin('prc.lugar', 'prc_centro')
->where('prc_proceso.id = '.$proceso)
->andWhere('prc_centro.id = '.$user->getCentroMovilizacion()->getId())
->getQuery()->getDql();
}
if ($user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
{
$procesoReclutamientoCentros = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->select('prc_base.id')
->innerJoin('prc.proceso', 'prc_proceso')
->innerJoin('prc.base', 'prc_base')
->innerJoin('prc.lugar', 'prc_centro')
->innerJoin('prc_centro.centrosInstruccion','centrosInstruccion')
->where('prc_proceso.id = '.$proceso)
->andWhere('centrosInstruccion.id = '.$user->getCentroInstruccion()->getId())
->getQuery()->getDql();
}
$procesoReclutamientoBases = $em->getRepository('App\\Entity\\ProcesoReclutamientoBase')
->createQueryBuilder('prb')
->select('prb_base.id')
->innerJoin('prb.proceso', 'prb_proceso')
->innerJoin('prb.base', 'prb_base')
->where('prb_proceso.id = :PROCESO');
if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD') || $user->isRoleAssigned('ROLE_OPERADOR_CENTRO') ||
$user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') || $user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') ||
$user->isRoleAssigned('ROLE_PSICOLOGO')/* || $user->isRoleAssigned('ROLE_PSICOLOGO_JEFE')*/)
{
$procesoReclutamientoBases->andWhere('prb_base.id in ('.$procesoReclutamientoCentros.')');
}
$procesoReclutamientoBases = $procesoReclutamientoBases->getQuery()->getDql();
$bases = $em->getRepository('App\\Entity\\BaseMovilizacion')
->createQueryBuilder('b')
->where('b.id in ('.$procesoReclutamientoBases.')')
->setParameter('PROCESO', $proceso)
->orderBy('b.nombre');
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE'))
{
$bases->andWhere('b.id = '.$user->getBaseMovilizacion()->getId());
}
return $bases;
}
public function loadCentrosPorBase($user, $base=-1, $proceso=-1)
{
$centros = $this->queryCentrosPorBase($user, $base, $proceso);
$centros = $centros->getQuery()->getResult();
return $centros;
}
public function queryCentrosPorBase($user, $base=-1, $proceso=-1)
{
$em = $this->_em;
if ($proceso == -1)
{
$proceso = $em->getRepository('App\\Entity\\ProcesoReclutamiento')
->findOneBy(array('activo'=>true));
$proceso = $proceso->getId();
}
if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
{
$procesoReclutamientoUnidades = $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->createQueryBuilder('pru')
->select('pru_centro.id')
->innerJoin('pru.proceso', 'pru_proceso')
->innerJoin('pru.lugar', 'pru_centro')
->innerJoin('pru.unidad', 'pru_unidad')
->where('pru_proceso.id = '.$proceso)
->andWhere('pru_unidad.id = '.$user->getUnidadMilitar()->getId())
->getQuery()->getDql();
}
$procesoReclutamientoCentros = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->select('prc_centro.id')
->innerJoin('prc.proceso', 'prc_proceso')
->innerJoin('prc.base', 'prc_base')
->innerJoin('prc.lugar', 'prc_centro')
->where('prc_proceso.id = '.$proceso);
if ($base != -1)
{
$procesoReclutamientoCentros->andWhere('prc_base.id = '.$base);
}
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE'))
{
$procesoReclutamientoCentros
->andWhere('prc_base.id = '.$user->getBaseMovilizacion()->getId());
}
if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD'))
{
$procesoReclutamientoCentros
->andWhere('prc_centro.id in ('.$procesoReclutamientoUnidades.')');
}
$procesoReclutamientoCentros = $procesoReclutamientoCentros->getQuery()->getDql();
$centros = $em->getRepository('App\\Entity\\CentroMovilizacion')
->createQueryBuilder('c')
->where('c.id in ('.$procesoReclutamientoCentros.')')
->orderBy('c.nombre');
if ($user->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $user->isRoleAssigned('ROLE_COORDINADOR_CENTRO') ||
$user->isRoleAssigned('ROLE_PSICOLOGO')/* || $user->isRoleAssigned('ROLE_PSICOLOGO_JEFE')*/ )
{
$centros
->andWhere('c.id = '.$user->getCentroMovilizacion()->getId());
}
if ($user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION'))
{
$centros->innerJoin('c.centrosInstruccion','centrosInstruccion')
->andWhere('centrosInstruccion.id = '.$user->getCentroInstruccion()->getId());
}
return $centros;
}
public function loadUnidadesPorCentro($user, $centro=-1, $proceso=-1)
{
$unidades = $this->queryUnidadesPorCentro($user, $centro, $proceso);
$unidades = $unidades->getQuery()->getResult();
return $unidades;
}
public function queryUnidadesPorCentro($user, $centro=-1, $proceso=-1)
{
$em = $this->_em;
if ($proceso == -1)
{
$proceso = $em->getRepository('App\\Entity\\ProcesoReclutamiento')
->findOneBy(array('activo'=>true));
$proceso = $proceso->getId();
}
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE'))
{
$procesoReclutamientoCentro = $em->getRepository('App\\Entity\\ProcesoReclutamientoCentro')
->createQueryBuilder('prc')
->innerJoin('prc.lugar', 'prc_centro')
->select('prc_centro.id')
->innerJoin('prc.proceso', 'prc_proceso')
->innerJoin('prc.base', 'prc_base')
->where('prc_proceso.id = '.$proceso)
->andWhere('prc_base.id = '.$user->getBaseMovilizacion()->getId())
->getQuery()->getDql();
}
$procesoReclutamientoUnidades = $em->getRepository('App\\Entity\\ProcesoReclutamientoUnidad')
->createQueryBuilder('pru')
->select('pru_unidad.id')
->innerJoin('pru.proceso', 'pru_proceso')
->innerJoin('pru.lugar', 'pru_centro')
->innerJoin('pru.unidad', 'pru_unidad')
->where('pru_proceso.id = '.$proceso);
if ($centro != -1)
{
$procesoReclutamientoUnidades->andWhere('pru_centro.id = '.$centro);
}
if ($user->isRoleAssigned('ROLE_COORDINADOR_BASE'))
{
$procesoReclutamientoUnidades->andWhere('pru_centro.id in ('.$procesoReclutamientoCentro.')');
}
if ($user->isRoleAssigned('ROLE_OPERADOR_CENTRO') || $user->isRoleAssigned('ROLE_COORDINADOR_CENTRO'))
{
$procesoReclutamientoUnidades->andWhere('pru_centro.id = '.$user->getCentroMovilizacion()->getId());
}
$procesoReclutamientoUnidades = $procesoReclutamientoUnidades->getQuery()->getDql();
$unidades = $em->getRepository('App\\Entity\\UnidadMilitar')
->createQueryBuilder('u')
->where('u.id in ('.$procesoReclutamientoUnidades.')')
->orderBy('u.nombre');
if ($user->isRoleAssigned('ROLE_OPERADOR_UNIDAD') && $user->getUnidadMIlitar())
{
$unidades->andWhere('u.id = '.$user->getUnidadMIlitar()->getId());
}
if ($user->isRoleAssigned('ROLE_OPERADOR_INSTRUCCION') && $user->getUnidadMIlitar())
{
$unidades->innerJoin('u.centroInstruccion','instr')
->where('instr.id='.$user->getCentroInstruccion()->getId());
}
return $unidades;
}
}