<?php
namespace App\Cartografia\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use CartografiaBundle\Types\Geometry;
use AppBundle\Comun\Enum\DiaSemanaEnum;
use AppBundle\Comun\Enum\TipoRutaEnum;
use AppBundle\Entity\NmclSentidoRuta;
use AppBundle\Entity\OperRutaDefinicion;
use AppBundle\Entity\OperRutaEjecucion;
use AppBundle\Entity\OperEstudianteRutaPuntoEjecucion;
use AppBundle\Entity\OperCheckListEjec;
use AppBundle\Comun\Enum\EstadoSolicitudEnum;
use AppBundle\Comun\Enum\SeccionesEnum;
use App\Controller\BaseController;
class CartografiaController extends BaseController {
public function indexAction() {
return $this->render('Cartografia/Cartografia/index.html.twig');
}
public function dibujarGeometriaAction($tipoDibujo, $idCampo, $idContenedorMapa) {
$opciones = array('idCampo' => $idCampo, 'tipoDibujo' => $tipoDibujo, 'idContenedorMapa' => $idContenedorMapa);
return $this->render('Cartografia/Cartografia/dibujarGeometria.html.twig', $opciones);
}
public function dibujarPuntoAction($tipoDibujo, $idCampo, $idContenedorMapa) {
$opciones = array('idCampo' => $idCampo, 'tipoDibujo' => $tipoDibujo, 'idContenedorMapa' => $idContenedorMapa);
return $this->render('Cartografia/Cartografia/dibujarPunto.html.twig', $opciones);
}
public function mostrarGeometriaAction($tipoDibujo, $idCampo, $idContenedorMapa,$properties=-1) {
if($properties!=-1){
$em = $this ->em;
$valor = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPuntoEjecucion")->find($properties);
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
array_push($arrayPuntos, $valor->getGeometria());
array_push($arrayPuntos, $valor->getPuntoRecogidaEntrega()->getGeometria());
$geometria = $valor->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$dataPuntos['PUNTO-1'] = array(
'Tipo' => 'PUNTO REPORTADO',
'Ruta'=>$valor->getRuta()->getRuta()->getNumero().' - '.$valor->getRuta()->getRuta()->getSentido(),
'Nombre' => $valor->getEstudiante()->getNombreCompleto(),
'Hora'=>$valor->getFecha()!==null?date_format($valor->getFecha(), 'H:i:s'):'No Informado',
'punto' => $geometria,
'longitud' =>$latlon[1],
'latitud' =>$latlon[0],
'Foto' => 'NO_FOTO',
'Orden' => $valor->getOrden(),
'idPunto' => '1',
'idRuta' => $valor->getRuta()->getRuta()->getNumero(),
'etiqueta' => $valor->getEstudiante()->getNombreCompleto(),
'idFeature'=> 'pto_1',
'idFeatureGroup' => 'ejecucion',
'tipoGeometria' => 'punto',
'tipoPasajero' => 'ESTUDIANTE'
);
$geometria = $valor->getPuntoRecogidaEntrega()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$dataPuntos['PUNTO-2'] = array(
'Tipo' => 'PUNTO SOLICITADO DE SERVICIO',
'Ruta'=>$valor->getRuta()->getRuta()->getNumero().' - '.$valor->getRuta()->getRuta()->getSentido(),
'Nombre' => $valor->getEstudiante()->getNombreCompleto(),
'Direccion' => $valor->getPuntoRecogidaEntrega()->getDireccion(),
'Referencia' => $valor->getPuntoRecogidaEntrega()->getReferenciasUbicacion()?$valor->getPuntoRecogidaEntrega()->getReferenciasUbicacion():'-',
'punto' => $geometria,
'longitud' =>$latlon[1],
'latitud' =>$latlon[0],
'Foto' => $valor->getPuntoRecogidaEntrega()->getFoto() ? $valor->getPuntoRecogidaEntrega()->getFoto()->getUrl() : 'NO_FOTO',
'orden' => $valor->getOrden(),
'Orden' => '2',
'idPunto' => '2',
'idRuta' => $valor->getRuta()->getRuta()->getNumero(),
'etiqueta' => $valor->getPuntoRecogidaEntrega()->getNombre().' - '.$valor->getEstudiante()->getNombreCompleto(),
'idFeature'=> 'pto_2',
'idFeatureGroup' => 'ejecucion',
'tipoGeometria' => 'punto',
'tipoPasajero' => 'ESTUDIANTE'
);
foreach ($dataPuntos as $i => $valorPunto) {
if($valorPunto != null){
$data['PUNTOS'][] = $valorPunto;
}
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
/*$logger = $this->get('logger');
$logger->err($data['PROPERTIES_JSON']);
$logger->err('fin logger');*/
}
}else{
$data=null;
}
$opciones = array('idCampo' => $idCampo, 'tipoDibujo' => $tipoDibujo, 'idContenedorMapa' => $idContenedorMapa,'puntos'=>$data);
return $this->render('Cartografia/Cartografia/mostrarGeometria.html.twig', $opciones);
}
public function cargarRutaAction($idRuta, $color) {
$em = $this ->em;
$ruta = $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->find($idRuta);
$cadenaPuntos = array();
$arregloDatosRuta = array();
$arregloDatosRuta['idRuta'] = $ruta->getId();
$arregloDatosRuta['numero'] = $ruta->getNumero();
$arregloDatosRuta['sentido'] = $ruta->getSentido();
$arregloDatosRuta['idRutaMapa'] = 'rut' . $ruta->getId();
$arregloDatosRuta['estudiantes'] = array();
$arregloDatosRuta['estudiantesJson'] = '';
$arregloDatosRuta['totalEstudiantes'] = 0;
$arregloDatosRuta['totalPermitido'] = 0;
$arregloDatosRuta['cadenaPuntos'] = '';
$parametrosBusqueda = array('ruta' => $idRuta);
$order = array('orden' => 'ASC');
$estudiantes = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy($parametrosBusqueda, $order);
foreach ($estudiantes as $rutaEstudiante) {
$estudiante = $rutaEstudiante->getEstudiante();
if ($estudiante->getFoto())
$arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
else
$arregloDatosEstudiante['foto'] = '';
$arregloDatosEstudiante['Nombre'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$estudiante->getNombreCompleto());
$arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion());
$arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
$arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatosEstudiante['idFeature'] = 'est' . $estudiante->getId(); //Representar la capa en el mapa
$arregloDatosEstudiante['idFeatureGroup'] = 'rut' . $ruta->getId(); //Representar en el grupo la capa en el mapa
$arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
$arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
$arregloDatosEstudiante['tipoGeometria'] = 'punto';
array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
array_push($cadenaPuntos, $rutaEstudiante->getPunto()->getGeometria());
}
if (count($cadenaPuntos)) {
$cadenaPuntos = implode('***', $cadenaPuntos);
$arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
$arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
$arregloDatosRuta['totalEstudiantes'] = count($arregloDatosRuta['estudiantes']);
if ($ruta->getUnidad())
$arregloDatosRuta['totalPermitido'] = $ruta->getUnidad()->getCapacidad();
}
$opciones = array('ruta' => $arregloDatosRuta, 'color' => $color);
return $this->render('Cartografia/Cartografia/cargarRuta.html.twig', $opciones);
}
public function modificarSectorRutaAction($idColegio) {
$opciones = array('idColegio' => $idColegio);
return $this->render('Cartografia/Cartografia/modificarSectorRuta.html.twig', $opciones);
}
public function sectoresRutasAction($idColegio) {
$em = $this ->em;
$qb = $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
->where("osr.geometria is not null")
->andWhere("osr.cliente = :filtroColegio")
->setParameter("filtroColegio", $idColegio);
$resultList = $qb->getQuery()->getResult();
$sectoresRutas = array();
$sectoresRutas['sectores'] = array();
$sectoresRutas['cadenaPuntos'] = '';
$cadenaPuntosSectores = array();
$sectoresRutas['idRutaMapa'] = 'sectores';
$sectoresRutas['sectoresJson'] = '';
foreach ($resultList as $sectorRuta) {
$arregloDatos['id'] = $sectorRuta->getId();
$arregloDatos['idFeature'] = $sectorRuta->getId(); //Representar la capa en el mapa
$arregloDatos['idFeatureGroup'] = 'sectores'; //Representar en el grupo la capa en el mapa
$arregloDatos['nombre'] = $sectorRuta->getNombre();
$arregloDatos['punto'] = $sectorRuta->getGeometria();
$arregloDatos['tipoGeometria'] = 'poligono';
array_push($sectoresRutas['sectores'], $arregloDatos);
array_push($cadenaPuntosSectores, $sectorRuta->getGeometria());
}
if (count($cadenaPuntosSectores)) {
$cadenaPuntosSectores = implode('***', $cadenaPuntosSectores);
$sectoresRutas['cadenaPuntos'] = $cadenaPuntosSectores;
$sectoresRutas['sectoresJson'] = json_encode($sectoresRutas['sectores']);
}
$opciones = array('sectoresRutas' => $sectoresRutas, 'idColegio' => $idColegio);
return $this->render('Cartografia/Cartografia/sectoresRutas.html.twig', $opciones);
}
public function resetearRutasEjecucionAction()
{
$securityContext = $this->get('security.context');
$colegios=$securityContext->getToken()->getUser()->getPersona()->getCoordinador()->getColegios();
$id_colegios =array();
foreach ($colegios as $colegio) {
$id_colegios[]=$colegio->getId();
}
$retornoError = "";
$sql1 = "DELETE FROM oper_estudiante_ruta_punto_ejecucion ;";
$sql2 = "DELETE FROM oper_punto_ejecucion_ruta";
$sql5 = "DELETE FROM oper_check_list_ejec";
$sql3= "DELETE FROM oper_ruta_ejecucion;";
$sql4 = "TRUNCATE TABLE oper_novedad_ruta;";
/*try {
$query1 = $conn->executeQuery($sql1)->execute();
$query2 = $conn->executeQuery($sql2)->execute();
$query5 = $conn->executeQuery($sql5)->execute();
$query4 = $conn->executeQuery($sql4)->execute();
$query3 = $conn->executeQuery($sql3)->execute();
}
catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
}*/
$retornoError ='id_colegios '.implode($id_colegios,',');
$opciones = array('retorno'=>$retornoError);
return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig', $opciones);
}
public function resetearRutasAction()
{
$sql1 = "UPDATE oper_estudiante_ruta_punto SET id_ruta = null, orden = null;";
$sql2 = "DELETE FROM oper_estudiante_ruta_punto_ejecucion";
$sql7 = "DELETE FROM oper_punto_ejecucion_ruta";
$sql8 = "DELETE FROM oper_check_list_ejec";
$sql3 = "DELETE FROM oper_ruta_ejecucion";
$sql4 = "DELETE FROM oper_ruta_definicion";
$sql5 = "TRUNCATE TABLE oper_novedad_ruta;";
$sql6 = "UPDATE oper_clientes SET creacion_inicial_parada = true,creacion_inicial_puerta = true;";
$em = $this ->em;
$conn = $em->getConnection();
$retornoError = "";
try {
$query5 = $conn->executeQuery($sql5)->execute();
$query1 = $conn->executeQuery($sql1)->execute();
$query2 = $conn->executeQuery($sql2)->execute();
$query7 = $conn->executeQuery($sql7)->execute();
$query8 = $conn->executeQuery($sql8)->execute();
$query3 = $conn->executeQuery($sql3)->execute();
$query4 = $conn->executeQuery($sql4)->execute();
$query6 = $conn->executeQuery($sql6)->execute();
}
catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
}
$opciones = array('retorno'=>$retornoError);
return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig', $opciones);
}
public function modificarSectorAction($arregloSectores) {
$em = $this ->em;
$arraySectores = json_decode($arregloSectores);
foreach ($arraySectores as $sector) {
$converted = (array) $sector;
$sect = $em->getRepository("StrategicAppBundle:OperSectorRuta")->find($converted['id']);
$sect->setGeometria($converted['geometria']);
$em->persist($sect);
}
$retornoError = 'OK';
try {
$em->flush();
} catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
}
return new \Symfony\Component\HttpFoundation\Response($retornoError);
}
public function modificarPuntoAction($arregloPuntos) {
$em = $this ->em;
$arrayPuntos = json_decode($arregloPuntos);
foreach ($arrayPuntos as $punto) {
$converted = (array) $punto;
$idPunto=substr($converted['id'], 4, strlen($converted['id']));
$sect = $em->getRepository("StrategicAppBundle:OperRutaPunto")->find($idPunto);
$sect->setGeometria($converted['geometria']);
$em->persist($sect);
}
$retornoError = 'OK';
try {
$em->flush();
} catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
}
return new \Symfony\Component\HttpFoundation\Response($retornoError);
}
public function crearSectorAction($idColegio, $tipoDibujo, $idCampo, $idContenedorMapa) {
$em = $this ->em;
$qb = $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
->where("osr.geometria is not null")
->andWhere("osr.cliente = :filtroColegio")
->setParameter("filtroColegio", $idColegio);
$resultList = $qb->getQuery()->getResult();
$sectoresRutas = array();
$sectoresRutas['sectores'] = array();
$sectoresRutas['idRutaMapa'] = 'sectores';
$sectoresRutas['cadenaPuntos'] = '';
$cadenaPuntosSectores = array();
$sectoresRutas['sectoresJson'] = '';
foreach ($resultList as $sectorRuta) {
$arregloDatos['id'] = $sectorRuta->getId();
$arregloDatos['idFeature'] = $sectorRuta->getId(); //Representar la capa en el mapa
$arregloDatos['idFeatureGroup'] = 'sectores'; //Representar en el grupo la capa en el mapa
$arregloDatos['Nombre'] = $sectorRuta->getNombre();
$arregloDatos['punto'] = $sectorRuta->getGeometria();
$arregloDatos['tipoGeometria'] = 'poligono';
array_push($sectoresRutas['sectores'], $arregloDatos);
array_push($cadenaPuntosSectores, $sectorRuta->getGeometria());
}
if (count($cadenaPuntosSectores)) {
$cadenaPuntosSectores = implode('***', $cadenaPuntosSectores);
$sectoresRutas['cadenaPuntos'] = $cadenaPuntosSectores;
$sectoresRutas['sectoresJson'] = json_encode($sectoresRutas['sectores']);
}
$opciones = array('sectoresRutas' => $sectoresRutas, 'idColegio' => $idColegio, 'idCampo' => $idCampo, 'tipoDibujo' => $tipoDibujo, 'idContenedorMapa' => $idContenedorMapa);
return $this->render('Cartografia/Cartografia/crearSector.html.twig', $opciones);
}
public function seguimientoRutasAction($idColegio, $rutas) {
if (!is_array($rutas))
$arregloRutas = explode(',', $rutas);
else
$arregloRutas = $rutas;
$em = $this ->em;
$qb = $em->getRepository("StrategicAppBundle:OperRutaEjecucion")->createQueryBuilder("ore")
->leftJoin("ore.ruta", "ord")
->where("ore.id in (:arrayRutas)")
->setParameter("arrayRutas", $arregloRutas);
$resultList = $qb->getQuery()->getResult();
$rutasEjecucion = array();
foreach ($resultList as $rutaEjecucion) {
$cadenaPuntos = array();
$cadenaPuntosEstudiantes = array();
$arregloDatosRuta = array();
$rutaActiva = $rutaEjecucion->getId();
$arregloDatosRuta['idRutaEjecucion'] = $rutaEjecucion->getId();
$arregloDatosRuta['idRutaDefinicion'] = $rutaEjecucion->getRuta()->getId();
$arregloDatosRuta['numeroRutaDefinicion'] = $rutaEjecucion->getRuta()->getNumero();
$arregloDatosRuta['idRutaMapa'] = 'rut' . $rutaEjecucion->getId();
$arregloDatosRuta['fechaInicioRutaEjecucion'] = $rutaEjecucion->getFechaInicio();
$arregloDatosRuta['fechaFinRutaEjecucion'] = $rutaEjecucion->getFechaFin();
$arregloDatosRuta['observacionesRutaEjecucion'] = $rutaEjecucion->getObservaciones();
$arregloDatosRuta['puntosRuta'] = array();
$arregloDatosRuta['cadenaPuntos'] = '';
$arregloDatosRuta['puntosJson'] = '';
$arregloDatosRuta['cadenaPuntosEstudiantes'] = '';
$arregloDatosRuta['estudiantesJson'] = '';
$arregloDatosRuta['estudiantes'] = array();
$arregloDatosRuta['estudiantesJson'] = '';
$arregloDatosRuta['recogidos'] = 0;
$arregloDatosRuta['noRecogidos'] = 0;
$arregloDatosRuta['noInformado'] = 0;
$qb = $em->getRepository("StrategicAppBundle:OperPuntoEjecucionRuta")->createQueryBuilder("oerpe")
->where("oerpe.geometria is not null")
->andWhere("oerpe.ruta = :filtroRuta")
->setParameter("filtroRuta", $rutaEjecucion->getId())
->orderBy("oerpe.id");
$resultList = $qb->getQuery()->getResult();
foreach ($resultList as $puntos) {
$arregloDatos['id'] = $puntos->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatos['idFeature'] = 'punt' . $puntos->getId(); //Representar la capa en el mapa
$arregloDatos['idFeatureGroup'] = 'rut' . $rutaEjecucion->getId(); //Representar en el grupo la capa en el mapa
$arregloDatos['punto'] = $puntos->getGeometria();
$arregloDatos['tipoGeometria'] = 'punto';
array_push($arregloDatosRuta['puntosRuta'], $arregloDatos);
array_push($cadenaPuntos, $puntos->getGeometria());
}
$qb = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPuntoEjecucion")->createQueryBuilder("oerpe")
->where("oerpe.ruta = :filtroRuta")
->setParameter("filtroRuta", $rutaEjecucion->getId())
->orderBy("oerpe.orden");
$resultList = $qb->getQuery()->getResult();
foreach ($resultList as $rutaEstudiante) {
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$estudiante = $rutaEstudiante->getEstudiante();
}else{
$tipo='PASAJERO';
$estudiante = $rutaEstudiante->getPersona();
}
if ($estudiante->getFoto())
$arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
else
$arregloDatosEstudiante['foto'] = '';
$arregloDatosEstudiante['Nombre'] = $estudiante->getNombreCompleto();
$arregloDatosEstudiante['Direccion'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getDireccion();
$arregloDatosEstudiante['Referencia'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getReferenciasUbicacion();
$arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatosEstudiante['idFeature'] = 'est_' . $estudiante->getId(); //Representar la capa en el mapa
$arregloDatosEstudiante['idFeatureGroup'] = 'rut' . $rutaEjecucion->getId(); //Representar en el grupo la capa en el mapa
$arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
$arregloDatosEstudiante['punto'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getGeometria();
$arregloDatosEstudiante['tipoGeometria'] = 'punto';
$arregloDatosEstudiante['tipoPasajero'] = $tipo;
if ($rutaEjecucion->getRuta()->getSentido()->getId() == NmclSentidoRuta::CASA_ESCUELA) {
if ($rutaEstudiante->getRecogido() === true) {
$arregloDatosRuta['recogidos'] ++;
$arregloDatosEstudiante['color'] = 'green';
} elseif ($rutaEstudiante->getRecogido() === false) {
$arregloDatosRuta['noRecogidos'] ++;
$arregloDatosEstudiante['color'] = 'red';
} else {
$arregloDatosRuta['noInformado'] ++;
$arregloDatosEstudiante['color'] = '';
}
} else {
if ($rutaEstudiante->getEntregado() === true)
$arregloDatosRuta['recogidos'] ++;
elseif ($rutaEstudiante->getEntregado() === false)
$arregloDatosRuta['noRecogidos'] ++;
else
$arregloDatosRuta['noInformado'] ++;
}
array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
array_push($cadenaPuntosEstudiantes, $rutaEstudiante->getPuntoRecogidaEntrega()->getGeometria());
}
if (count($cadenaPuntos)) {
$cadenaPuntos = implode('***', $cadenaPuntos);
$arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
$arregloDatosRuta['puntosJson'] = json_encode($arregloDatosRuta['puntosRuta']);
}
if (count($cadenaPuntosEstudiantes)) {
$cadenaPuntosEstudiantes = implode('***', $cadenaPuntosEstudiantes);
$arregloDatosRuta['cadenaPuntosEstudiantes'] = $cadenaPuntosEstudiantes;
$arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
}
$rutasEjecucion["$rutaActiva"] = $arregloDatosRuta;
}
$opciones = array('rutasEjecucion' => $rutasEjecucion, 'arrayRutas' => $arregloRutas, 'colegio' => $idColegio);
return $this->render('Cartografia/Cartografia/seguimientoRutas.html.twig', $opciones);
}
public function definicionRutasInicialAction($idColegio, $idOperadora, $puerta) {
$diaSemana = DiaSemanaEnum::LUN;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
$colegio = $idColegio;
$operadora = $idOperadora;
$opciones = array('diaSemana' => $diaSemana, 'sentido' => $sentido, 'colegio' => $colegio, 'operadora' => $operadora, 'puerta' => $puerta);
return $this->render('Cartografia/Cartografia/definicionRutasInicial.html.twig', $opciones);
}
public function definicionRutasDiaAction($idColegio, $idOperadora, $sentido, $diaSemana, $puerta) {
$em = $this ->em;
$colegio = $idColegio;
$operadora = $idOperadora;
$sentidos = array();
$diasSemana = DiaSemanaEnum::getPossibleValues();
$sentidosQuery = $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
$sentidoSel = '';
foreach ($sentidosQuery as $sent) {
if ($sent->getId() == $sentido)
$sentidoSel = $sent->getNombre();
$arr['texto'] = $sent->getNombre();
$arr['valor'] = $sent->getId();
array_push($sentidos, $arr);
}
$opciones = array('diaSemana' => $diaSemana, 'sentido' => $sentido, 'colegio' => $colegio, 'operadora' => $operadora, 'puerta' => $puerta, 'diasSemana' => $diasSemana, 'sentidos' => $sentidos, 'sentidoSel' => $sentidoSel);
return $this->render('Cartografia/Cartografia/definicionRutasDia.html.twig', $opciones);
}
public function rutasDefinidasAction($idColegio, $idOperadora, $sentido, $diaSemana, $puerta) {
$puerta1 = $puerta == 'true';
$rutasDefinidas = $this->buscarRutas($idColegio, $idOperadora, $sentido, $diaSemana, $puerta1);
$rutasDefinidasArray = array();
$em = $this ->em;
foreach ($rutasDefinidas as $ruta) {
$cadenaPuntos = array();
$arregloDatosRuta = array();
$arregloDatosRuta['idRuta'] = $ruta->getId();
$arregloDatosRuta['numero'] = $ruta->getNumero();
$arregloDatosRuta['sentido'] = $ruta->getSentido();
$arregloDatosRuta['idRutaMapa'] = 'rut' . $ruta->getId();
$arregloDatosRuta['estudiantes'] = array();
$arregloDatosRuta['estudiantesJson'] = '';
$arregloDatosRuta['totalEstudiantes'] = 0;
$arregloDatosRuta['totalPermitido'] = 0;
$arregloDatosRuta['cadenaPuntos'] = '';
$rutaId = $ruta->getId();
$parametrosBusqueda = array('ruta' => $rutaId);
$order = array('orden' => 'ASC');
$estudiantes = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy($parametrosBusqueda, $order);
foreach ($estudiantes as $rutaEstudiante) {
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$estudiante = $rutaEstudiante->getEstudiante();
}else{
$tipo='PASAJERO';
$estudiante = $rutaEstudiante->getPersona();
}
if ($estudiante->getFoto())
$arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
else
$arregloDatosEstudiante['foto'] = '';
$arregloDatosEstudiante['Nombre'] = $estudiante->getNombreCompleto();
$arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion());
$arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
$arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatosEstudiante['idFeature'] = 'est' . $estudiante->getId(); //Representar la capa en el mapa
$arregloDatosEstudiante['idFeatureGroup'] = 'rut' . $ruta->getId(); //Representar en el grupo la capa en el mapa
$arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
$arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
$arregloDatosEstudiante['tipoGeometria'] = 'punto';
$arregloDatosEstudiante['tipoPasajero'] = $tipo;
array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
array_push($cadenaPuntos, $rutaEstudiante->getPunto()->getGeometria());
}
if (count($cadenaPuntos)) {
$cadenaPuntos = implode('***', $cadenaPuntos);
$arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
$arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
$arregloDatosRuta['totalEstudiantes'] = count($arregloDatosRuta['estudiantes']);
if ($ruta->getUnidad())
$arregloDatosRuta['totalPermitido'] = $ruta->getUnidad()->getCapacidad();
}
array_push($rutasDefinidasArray, $arregloDatosRuta);
}
$opciones = array('rutasDefinidas' => $rutasDefinidasArray);
return $this->render('Cartografia/Cartografia/rutasDefinidas.html.twig', $opciones);
}
public function estudiantesNoAsignadosAction($idColegio, $sentido, $diaSemana, $puerta) {
$puerta1 = $puerta == 'true';
$rutasEstudiantesNoUbicados = array();
$rutasEstudiantesNoUbicados['estudiantes'] = array();
$rutasEstudiantesNoUbicados['cadenaPuntos'] = '';
$cadenaPuntosNoUbicados = array();
$rutasEstudiantesNoUbicados['idRutaMapa'] = 'noasignado';
$rutasEstudiantesNoUbicados['estudiantesJson'] = '';
$estudiantes = $this->buscarEstudiantes($idColegio, null, $sentido, $diaSemana, $puerta1);
foreach ($estudiantes as $rutaEstudiante) {
$estudiante = $rutaEstudiante->getEstudiante();
if ($estudiante->getFoto())
$arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
else
$arregloDatosEstudiante['foto'] = '';
$arregloDatosEstudiante['Nombre'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$estudiante->getNombreCompleto());
$sector=$rutaEstudiante->getPunto()->getSector()?$rutaEstudiante->getPunto()->getSector():'';
$arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion()).' '. $sector;
$arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
$arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatosEstudiante['idFeature'] = 'est' . $estudiante->getId(); //Representar la capa en el mapa
$arregloDatosEstudiante['idFeatureGroup'] = 'noasignado'; //Representar en el grupo la capa en el mapa
$arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
$arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
$arregloDatosEstudiante['tipoGeometria'] = 'punto';
$arregloDatosEstudiante['tipoPasajero'] = 'ESTUDIANTE';
array_push($rutasEstudiantesNoUbicados['estudiantes'], $arregloDatosEstudiante);
array_push($cadenaPuntosNoUbicados, $rutaEstudiante->getPunto()->getGeometria());
}
if (count($cadenaPuntosNoUbicados)) {
$cadenaPuntosNoUbicados = implode('***', $cadenaPuntosNoUbicados);
$rutasEstudiantesNoUbicados['cadenaPuntos'] = $cadenaPuntosNoUbicados;
$rutasEstudiantesNoUbicados['estudiantesJson'] = json_encode($rutasEstudiantesNoUbicados['estudiantes']);
}
$opciones = array('rutasEstudiantesNoUbicados' => $rutasEstudiantesNoUbicados);
return $this->render('Cartografia/Cartografia/estudiantesNoAsignados.html.twig', $opciones);
}
public function pasajerosNoAsignadosAction($idColegio, $sentido, $diaSemana, $puerta) {
$puerta1 = $puerta == 'true';
$rutasPasajerosNoUbicados = array();
$rutasPasajerosNoUbicados['pasajeros'] = array();
$rutasPasajerosNoUbicados['cadenaPuntos'] = '';
$cadenaPuntosNoUbicados = array();
$rutasPasajerosNoUbicados['idRutaMapa'] = 'pasajeronoasignado';
$rutasPasajerosNoUbicados['pasajerosJson'] = '';
$pasajeros = $this->buscarPasajeros($idColegio, null, $sentido, $diaSemana, $puerta1);
foreach ($pasajeros as $rutaPasajero) {
$pasajero = $rutaPasajero->getPasajero();
$arregloDatosPasajero['foto'] = '';
$arregloDatosPasajero['Nombre'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$pasajero->getNombreCompleto());
$arregloDatosPasajero['Direccion'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaPasajero->getPunto()->getDireccion());
$arregloDatosPasajero['Referencia'] = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaPasajero->getPunto()->getReferenciasUbicacion());
$arregloDatosPasajero['id'] = $rutaPasajero->getId(); //id en la tabla ruta_estudiante_punto
$arregloDatosPasajero['idFeature'] = 'pas' . $pasajero->getId(); //Representar la capa en el mapa
$arregloDatosPasajero['idFeatureGroup'] = 'pasajeronoasignado'; //Representar en el grupo la capa en el mapa
$arregloDatosPasajero['idPasajero'] = $pasajero->getId();
$arregloDatosPasajero['punto'] = $rutaPasajero->getPunto()->getGeometria();
$arregloDatosPasajero['tipoGeometria'] = 'punto';
$arregloDatosPasajero['tipoPasajero'] = 'PASAJERO';
array_push($rutasPasajerosNoUbicados['pasajeros'], $arregloDatosPasajero);
array_push($cadenaPuntosNoUbicados, $rutaPasajero->getPunto()->getGeometria());
}
if (count($cadenaPuntosNoUbicados)) {
$cadenaPuntosNoUbicados = implode('***', $cadenaPuntosNoUbicados);
$rutasPasajerosNoUbicados['cadenaPuntos'] = $cadenaPuntosNoUbicados;
$rutasPasajerosNoUbicados['pasajerosJson'] = json_encode($rutasPasajerosNoUbicados['pasajeros']);
}
$opciones = array('rutasPasajerosNoUbicados' => $rutasPasajerosNoUbicados);
return $this->render('Cartografia/Cartografia/pasajerosNoAsignados.html.twig', $opciones);
}
private function buscarRutas($idColegio, $idOperadora, $sentido, $diaSemana, $puerta)
{
$em = $this ->em;
$user = $this->get('security.context')->getToken()->getUser();
if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
{
$colegio = $user->getCliente();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}else{
$colegio = $user->getColegio();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}
$parametrosBusqueda = array('colegio' => $idColegio, 'sentido' => $sentido, 'transportista' => $idOperadora, 'diaSemana' => $diaSemana, 'puerta' => $puerta, 'periodoEscolar'=>$periodo->getId());
$order = array('numero' => 'ASC');
$rutasDefinidas = $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->findBy($parametrosBusqueda,$order);
return $rutasDefinidas;
}
private function buscarEmpresaRutas($idEmpresa, $idOperadora, $sentido, $diaSemana, $tipoRuta, $sucursal)
{
$em = $this ->em;
$rutasDefinidas = $em->getRepository("StrategicAppBundle:OperEmpresaRutaDefinicion")->createQueryBuilder('r')
->leftJoin('r.empresa','empresa')
->where('empresa.id='.$idEmpresa)
->leftJoin('r.sentido','sentido')
->andWhere('sentido.id='.$sentido)
->leftJoin('r.transportista','transportista')
->andWhere('transportista.id='.$idOperadora)
->andWhere('r.diaSemana=:DIASEMANA')
->setParameter('DIASEMANA',$diaSemana)
->andWhere('r.tipoRuta='.$tipoRuta)
->orderBy('r.numero', 'ASC');
if ($sucursal!='none')
{
$rutasDefinidas->leftJoin('r.sucursales','sucursal')
->andWhere('sucursal.id='.$sucursal);
}
$rutasDefinidas = $rutasDefinidas->getQuery()->getResult();
return $rutasDefinidas;
}
private function buscarEstudiantes($idColegio, $idRuta, $sentido, $diaSemana, $puerta,$nivel=null, $sector=null,$seccion=null)
{
$em = $this ->em;
$colegio = $em->getRepository('StrategicAppBundle:OperClientes')->find($idColegio);
$session = $this->get('session');
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($session,$colegio);
$em = $this ->em;
$user = $this->get('security.context')->getToken()->getUser();
$estudiantesQuery = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->createQueryBuilder("oerp")
->leftJoin("oerp.estudiante", "est")
->leftJoin("oerp.punto", "pto")
->leftJoin("oerp.periodoEscolar", "per")
->where("oerp.sentido = :filtroSentido")
->andWhere("est.colegio = :filtroColegio")
->andWhere("oerp.diaSemana = :filtroDiaSemana")
->andWhere("per.id = ".$periodo->getId())
->setParameter("filtroColegio", $idColegio)
->setParameter("filtroSentido", $sentido)
->setParameter("filtroDiaSemana", $diaSemana)
->orderBy("oerp.orden");
if($nivel && $nivel!='all' && $nivel != 'null'){
$estudiantesQuery ->andWhere("est.nivel in (".$nivel.")");
//->setParameter("filtroNivel", $nivel);
}
if($seccion && $seccion!='all' && $seccion != 'null'){
/*$arrSeccion= explode(',', $seccion);
$secciones=array();
foreach ($arrSeccion as $value) {
$secciones[]=$value;
}*/
$estudiantesQuery ->andWhere("est.seccion in (:secciones)")
->setParameter("secciones", $seccion);
}
if($sector && $sector!='all' && $sector!='null' ){
$estudiantesQuery ->leftJoin('oerp.punto','punto')
->leftJoin('punto.sector','sector')
->andWhere("sector.id in (".$sector.")");
//->setParameter("filtroNivel", $nivel);
}
if ($idRuta)
$estudiantesQuery->andWhere("oerp.ruta = :filtroRuta")
->setParameter("filtroRuta", $idRuta);
else
{
$user = $this->get('security.context')->getToken()->getUser();
if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
{
$colegio = $user->getCliente();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}
else
{
$colegio = $user->getColegio();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}
$estudiantesQuery->andWhere("oerp.ruta IS NULL")
->leftJoin('est.solicitudes', 'solicitud')
->andWhere("solicitud.estado='".EstadoSolicitudEnum::APROBADA."'")
->leftJoin('solicitud.curso', 'periodo')
->andWhere('periodo.id = '.$periodo->getId());
}
if ($puerta)
$estudiantesQuery->andWhere("pto.representanteLegal IS NOT NULL");
else
$estudiantesQuery->andWhere("pto.representanteLegal IS NULL");
$estudiantes = $estudiantesQuery->getQuery()->getResult();
return $estudiantes;
}
private function buscarPasajeros($idColegio, $idRuta, $sentido, $diaSemana, $puerta,$nivel=null, $sector=null)
{
$em = $this ->em;
$session = $this->get('session');
if ($periodosSeleccionados = $session->get('periodos'))
{
if (isset($periodosSeleccionados[$idColegio]))
{
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')->find($periodosSeleccionados[$idColegio]);
}
}
$pasajerosQuery = $em->getRepository("StrategicAppBundle:OperPasajeroRutaPunto")->createQueryBuilder("oerp")
->leftJoin("oerp.persona", "per")
->leftJoin('StrategicAppBundle:OperPasajerosColegio', 'pco', 'WITH', 'pco.persona = per.id')
->leftJoin("oerp.punto", "pto")
->leftJoin("oerp.periodoEscolar", "periodo")
->where("oerp.sentido = :filtroSentido")
->andWhere("periodo.id = ".$periodo->getId())
->andWhere("pco.colegio = :filtroColegio")
->andWhere("oerp.diaSemana = :filtroDiaSemana")
->setParameter("filtroColegio", $idColegio)
->setParameter("filtroSentido", $sentido)
->setParameter("filtroDiaSemana", $diaSemana)
->orderBy("oerp.orden");
if($sector && $sector!='all' && $sector!='null'){
$pasajerosQuery ->leftJoin('pto.sector','sector')
->andWhere("sector.id in (".$sector.")");
//->setParameter("filtroNivel", $nivel);
}
if ($idRuta)
$pasajerosQuery->andWhere("oerp.ruta = :filtroRuta")
->setParameter("filtroRuta", $idRuta);
else
$pasajerosQuery->andWhere("oerp.ruta IS NULL");
$pasajeros = $pasajerosQuery->getQuery()->getResult();
return $pasajeros;
}
private function buscarPasajerosEmpresa($idEmpresa, $idRuta, $sentido, $diaSemana, $tipoRuta, $sucursal)
{
$em = $this ->em;
$pasajeros = $em->getRepository("StrategicAppBundle:OperEmpresaRutaPuntoAsignado")->createQueryBuilder("p")
->where("p.sentido = :SENTIDO")
->andWhere("p.diaSemana = :DIASEMANA")
->setParameter("SENTIDO", $sentido)
->setParameter("DIASEMANA", $diaSemana)
->leftJoin("p.pasajero", "pasajero")
->andWhere('pasajero.tipoRuta='.$tipoRuta)
->leftJoin('pasajero.empresa','empresa')
->andWhere("empresa.id = :EMPRESA")
->setParameter("EMPRESA", $idEmpresa)
->orderBy("p.orden");
if ($sucursal!='none')
{
$pasajeros->leftJoin('pasajero.sucursal', 'sucursal')
->andWhere('sucursal.id='.$sucursal);
}
if ($idRuta)
{
$pasajeros->leftJoin('p.ruta','ruta')
->andWhere("ruta.id = :RUTA")
->setParameter("RUTA", $idRuta);
}
else
$pasajeros->andWhere("p.ruta IS NULL");
$pasajeros = $pasajeros->getQuery()->getResult();
return $pasajeros;
}
public function terminarDefinicionInicialRutasAction($idColegio, $idOperadora, $diaSemana, $puerta) {
$em = $this ->em;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
$colegio = $idColegio;
$operadora = $idOperadora;
$colegioObject = $em->getRepository("StrategicAppBundle:OperClientes")->find($colegio);
$puerta1 = $puerta == 'true';
$retornoError = '';
$rutas = $this->buscarRutas($idColegio, $idOperadora, $sentido, DiaSemanaEnum::LUN, $puerta1);
foreach ($rutas as $ruta) {
$contador = 1;
$estudiantes = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
$maximoEstudiantes = count($estudiantes) + 1;
$estudiantesArray = array();
foreach ($estudiantes as $estudiante) {
///primero arreglo orden por si me borraron alguno de por medio y no reordenaron
$estudiante->setOrden($contador);
$em->persist($estudiante);
$em->flush();
$array['id'] = $estudiante->getEstudiante()->getId();
$array['orden'] = $contador;
$array['ordenInv'] = $maximoEstudiantes - $contador;
$array['punto'] = $estudiante->getPunto()->getId();
array_push($estudiantesArray, $array);
$contador ++;
}
$retornoError = $this->replicarRutaDia($ruta, $diaSemana, $estudiantesArray);
}
if ($retornoError == '')
{
if($puerta1)
$colegioObject->setCreacionInicialPuerta(false);
else
$colegioObject->setCreacionInicialParada(false);
$em->persist($colegioObject);
$em->flush();
}
//}
if ($retornoError == '')
{
$retornoError = 'OK';
}
return new \Symfony\Component\HttpFoundation\Response($retornoError);
}
private function borrarRutasReplicadas()
{
$rutas = $this->buscarRutas($idColegio, $idOperadora, $sentido, DiaSemanaEnum::LUN, $puerta1);
}
private function trabajoHoras($horaini,$horafin, $operacion)
{
$horai = substr($horaini, 0, 2);
$mini = substr($horaini, 3, 2);
$segi = substr($horaini, 6, 2);
$horaf = substr($horafin, 0, 2);
$minf = substr($horafin, 3, 2);
$segf = substr($horafin, 6, 2);
$ini = ((($horai * 60) * 60) + ($mini * 60) + $segi);
$fin = ((($horaf * 60) * 60) + ($minf * 60) + $segf);
if($operacion == 'suma')
{
$dif = $fin + $ini;
}
if ($operacion == 'resta')
{
$dif = $fin - $ini;
}
$difh = floor($dif / 3600);
$difm = floor(($dif - ($difh * 3600)) / 60);
$difs = $dif - ($difm * 60) - ($difh * 3600);
return date("H-i-s",mktime($difh,$difm,$difs));
}
private function replicarRutaDia($ruta, $diaSemana, $estudiantes) {
$diferenciaHoras = $this->trabajoHoras($ruta->getHoraInicio()->format('H-i-s'),$ruta->getHoraFin()->format('H-i-s'),'resta');
$em = $this ->em;
if ($diaSemana != DiaSemanaEnum::LUN) {
$rutaReplica = clone $ruta;
$rutaReplica->setDiaSemana(DiaSemanaEnum::create($diaSemana));
$em->persist($rutaReplica);
}
$rutaReplicaInv = clone $ruta;
$rutaReplicaInv->setDiaSemana(DiaSemanaEnum::create($diaSemana));
$rutaReplicaInv->setSentido($em->getRepository("StrategicAppBundle:NmclSentidoRuta")->find(NmclSentidoRuta::ESCUELA_CASA));
$horaInicio = $ruta->getColegio()->getHoraInicioEscuelaCasa();
$horaFinal = $this->trabajoHoras($horaInicio->format('H-i-s'), $diferenciaHoras,'suma');
$rutaReplicaInv->setHoraInicio($horaInicio);
$horaFinal = \DateTime::createFromFormat ( 'H-i-s' , $horaFinal);
$rutaReplicaInv->setHoraFin($horaFinal);
$em->persist($rutaReplicaInv);
$em->flush();
$retornoError = '';
foreach ($estudiantes as $estudiante) {
$estudiantesQuery = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->createQueryBuilder("oerp")
->where("oerp.estudiante = :filtroEstudiante")
->andWhere("oerp.diaSemana = :filtroDiaSemana")
->andWhere("oerp.ruta IS NULL")
->andWhere("oerp.punto = :filtroPunto")
->setParameter("filtroEstudiante", intval($estudiante['id']))
->setParameter("filtroDiaSemana", $diaSemana)
->setParameter("filtroPunto", intval($estudiante['punto']))
->getQuery()->getResult();
$ordenEstudiante = $estudiante['orden'];
$ordenInvEstudiante = $estudiante['ordenInv'];
foreach ($estudiantesQuery as $estNoAsig) {
if ($estNoAsig->getSentido()->getId() == NmclSentidoRuta::CASA_ESCUELA) {
$estNoAsig->setRuta($rutaReplica);
$estNoAsig->setOrden($ordenEstudiante);
}
if ($estNoAsig->getSentido()->getId() == NmclSentidoRuta::ESCUELA_CASA) {
$estNoAsig->setRuta($rutaReplicaInv);
$estNoAsig->setOrden($ordenInvEstudiante);
}
$em->persist($estNoAsig);
}
try {
$em->flush();
} catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
die();
}
}
return $retornoError;
}
public function generarRutasEjecucionAction()
{
$em = $this ->em;
$securityContext = $this->get('security.context');
$user = $securityContext->getToken()->getUser();
$dias = array('DOM','LUN','MAR','MIE','JUE','VIE','SAB');
$diaSemana = $dias[date('N', time())];
$user = $this->get('security.context')->getToken()->getUser();
if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
{
$colegio = $user->getCliente();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}else{
$colegio = $user->getColegio();
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'),$colegio);
}
$parametros = array('diaSemana' => $diaSemana, 'periodoEscolar'=>$periodo->getId());
$rutas = $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->findBy($parametros);
$retornoError = 'OK';
foreach ($rutas as $ruta) {
$rutaEjecucion = new OperRutaEjecucion();
$rutaEjecucion->setRuta($ruta);
if($ruta->getUnidad())$rutaEjecucion->setUnidad($ruta->getUnidad());
if($ruta->getConductor())$rutaEjecucion->setConductor($ruta->getConductor());
if($ruta->getAsistenteInterno())$rutaEjecucion->setAsistenteInterno($ruta->getAsistenteInterno());
if($ruta->getAsistenteExterno())$rutaEjecucion->setAsistenteExterno($ruta->getAsistenteExterno());
$rutaEjecucion->setFechaParaEjecucion(new \DateTime());
$em->persist($rutaEjecucion);
$em->flush();
//carga de las preguntas del check list a la ruta en ejecución
$preguntas = $em->getRepository("StrategicAppBundle:OperCheckListDef")
->findBy(array('colegio'=>$ruta->getColegio()->getId(), 'activa'=>true));
foreach ($preguntas as $pregunta)
{
$ejecPregunta = new OperCheckListEjec();
$ejecPregunta->setPregunta($pregunta);
$ejecPregunta->setRuta($rutaEjecucion);
$em->persist($ejecPregunta);
}
$em->flush();
//carga de los estudiantes a la ruta en ejecución
$estudiantes = $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy(array('ruta' => $ruta->getId()));
foreach ($estudiantes as $estudiante) {
$estudianteEjecucion = new OperEstudianteRutaPuntoEjecucion();
$estudianteEjecucion->setRuta($rutaEjecucion);
$estudianteEjecucion->setPuntoRecogidaEntrega($estudiante->getPunto());
$estudianteEjecucion->setEstudiante($estudiante->getEstudiante());
$estudianteEjecucion->setOrden($estudiante->getOrden());
$em->persist($estudianteEjecucion);
}
try {
$em->flush();
}
catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
}
}
$opciones = array('retorno'=>$retornoError);
return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig', $opciones);
}
/* * *************************************** POr PUNTOS ****************************************** */
public function definicionRutasInicialPuntosAction($idColegio, $idOperadora, $puerta) {
$diaSemana = DiaSemanaEnum::LUN;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
$colegio = $idColegio;
$operadora = $idOperadora;
$opciones = array('diaSemana' => $diaSemana, 'sentido' => $sentido, 'colegio' => $colegio, 'operadora' => $operadora, 'puerta' => $puerta);
return $this->render('Cartografia/Cartografia/definicionRutasInicialPuntos.html.twig', $opciones);
}
public function definicionRutasDiasPuntosAction($idColegio, $idOperadora, $puerta)
{
$em = $this ->em;
$colegio = $idColegio;
$operadora = $idOperadora;
$sentidos = array();
$idniveles = '0';
$niveles = array();
$sectores = array();
$diaSemana = DiaSemanaEnum::LUN;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
//$nivelesQuery = $em->getRepository("StrategicAppBundle:NmclNivelEscolar") ->findBy( array(), array('orden' => 'ASC') );
/*$nivelesQuery = $em->getRepository("StrategicAppBundle:OperNivelEscolar")->createQueryBuilder("one")
->select("distinct one.nivel, niv.nombre")
->leftJoin("one.nivel", "niv")
->orderBy("niv.orden");*/
$nivelesQuery = $em->getRepository("StrategicAppBundle:OperNivelEscolar")
->createQueryBuilder("one")
->leftJoin("one.nivel", "niv")
->leftJoin("one.colegio", "colegio")
->where('colegio.id='.$idColegio)
->select("DISTINCT niv.id as id", "niv.nombre as nombre", "niv.orden")
->orderBy("niv.orden");
$resultNiveles = $nivelesQuery->getQuery()->getResult();
$nivelSel = '';
$sectorQuery = $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
->where("osr.geometria is not null")
->andWhere("osr.cliente = :filtroColegio")
->setParameter("filtroColegio", $idColegio);
$resultSectores = $sectorQuery->getQuery()->getResult();
$sectorSel = '';
$cliente = $em->getRepository("StrategicAppBundle:OperClientes")->find($idColegio);
if($cliente->getTipoEntidad()->getId()==2)
{
$diasSemana = DiaSemanaEnum::getAdministrativasPossibleValues();
}
else
{
$diasSemana = DiaSemanaEnum::getPossibleValues();
}
if($cliente->getManejaSecciones())
{
$secciones = SeccionesEnum::getPossibleValues();
}else{
$secciones=array();
}
$sentidosQuery = $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
$sentidoSel = '';
$replicaSel = 'Replicar Ambos Sentidos';
foreach ($sentidosQuery as $sent) {
if ($sent->getId() == $sentido)
$sentidoSel = $sent->getNombre();
$arr['texto'] = $sent->getNombre();
$arr['valor'] = $sent->getId();
array_push($sentidos, $arr);
}
foreach ($resultNiveles as $niv) {
/*if ($niv->getId() == $sentido)
$nivelSel = $sent->getNombre();*/
$niveles[$niv["id"]]=$niv["nombre"];
$idniveles=$idniveles.','.$niv["id"];
}
foreach ($resultSectores as $sec) {
$sectores[$sec->getId()]=$sec->__toString();
}
$curso = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
->getPeriodoSeleccionado($this->get('session'), $cliente);
$cursosMostrar = $curso;
$opciones = array('diaSemana' => $diaSemana,
'sentido' => $sentido,
'colegio' => $colegio,
'operadora' => $operadora,
'puerta' => $puerta,
'diasSemana' => $diasSemana,
'sentidos' => $sentidos,
'sentidoSel' => $sentidoSel,
'sectores' => $sectores,
'sector'=>'all',
'niveles' => $niveles,
'nivelSel' => $nivelSel,
'nivel'=>'all',
'replicaSel'=>$replicaSel,
'cursosMostrar'=>$cursosMostrar,
'secciones'=>$secciones,
'seccion'=>'all');
return $this->render('Cartografia/Cartografia/definicionRutasDiasPuntos.html.twig', $opciones);
}
public function definicionRutasEmpresaDiasPuntosAction($idEmpresa, $idOperadora, $administrativa, $sucursal = 'none')
{
$em = $this ->em;
$empresa = $idEmpresa;
$operadora = $idOperadora;
$sentidos = array();
$diaSemana = DiaSemanaEnum::LUN;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
$diasSemana = DiaSemanaEnum::getPossibleValues();
$sentidosQuery = $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
$sentidoSel = '';
$replicaSel = 'Replicar Ambos Sentidos';
foreach ($sentidosQuery as $sent)
{
if ($sent->getId() == $sentido)
$sentidoSel = $sent->getNombre();
$sentidos[$sent->getId()] = $sent->getNombre();
}
if ($administrativa=='true')
$tipoRuta = TipoRutaEnum::getReadableFor(TipoRutaEnum::ADMINISTRATIVAS);
else
$tipoRuta = TipoRutaEnum::getReadableFor(TipoRutaEnum::OPERATIVAS);
$tiposRuta = array('true' =>TipoRutaEnum::getReadableFor(TipoRutaEnum::ADMINISTRATIVAS),
'false'=>TipoRutaEnum::getReadableFor(TipoRutaEnum::OPERATIVAS));
$contratos = $em->getRepository('StrategicAppBundle:OperContratoColegioTransporte')->findBy(array('colegio'=>$idEmpresa));
$operadoras = array();
foreach ($contratos as $contrato)
{
$transportista = $contrato->getTransportista();
$operadoras[$transportista->getId()] = $transportista->__toString();
if ($transportista->getId() == $operadora)
{
$operadoraSel = $transportista->__toString();
}
}
$sucursales = $em->getRepository('StrategicAppBundle:OperClientesSucursales')->findBy(array('cliente'=>$idEmpresa));
if ($sucursal!='none')
{
$sucursal = $em->getRepository('StrategicAppBundle:OperClientesSucursales')->find($sucursal);
}
else
$sucursal = null;
$opciones = array('diaSemana' => $diaSemana, 'sentido' => $sentido, 'empresa' => $empresa, 'operadora' => $operadora,
'administrativa' => $administrativa, 'diasSemana' => $diasSemana, 'sentidos' => $sentidos, 'sentidoSel' => $sentidoSel,
'replicaSel'=>$replicaSel, 'tipoRuta'=>$tipoRuta, 'tiposRuta'=>$tiposRuta, 'operadoraSel'=>$operadoraSel,
'operadoras'=>$operadoras, 'sucursal'=>$sucursal, 'sucursales'=>$sucursales);
return $this->render('Cartografia/Cartografia/definicionRutasEmpresaDiasPuntos.html.twig', $opciones);
}
public function mostrarRutasDiasPuntosAction($idColegio, $idOperadora, $puerta) {
$em = $this ->em;
$colegio = $idColegio;
$operadora = $idOperadora;
$sentidos = array();
$diaSemana = DiaSemanaEnum::LUN;
$sentido = NmclSentidoRuta::CASA_ESCUELA;
$diasSemana = DiaSemanaEnum::getPossibleValues();
$sentidosQuery = $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
$sentidoSel = '';
foreach ($sentidosQuery as $sent) {
if ($sent->getId() == $sentido)
$sentidoSel = $sent->getNombre();
$arr['texto'] = $sent->getNombre();
$arr['valor'] = $sent->getId();
array_push($sentidos, $arr);
}
$opciones = array('diaSemana' => $diaSemana, 'sentido' => $sentido, 'colegio' => $colegio, 'operadora' => $operadora, 'puerta' => $puerta, 'diasSemana' => $diasSemana, 'sentidos' => $sentidos, 'sentidoSel' => $sentidoSel);
return $this->render('Cartografia/Cartografia/mostrarRutasDiasPuntos.html.twig', $opciones);
}
public function estudiantesNoAsignadosPuntosAction($idColegio, $sentido, $diaSemana,$puerta,$nivel=null, $sector=null,$seccion=null,$modificar)
{
$puerta1 = $puerta == 'true';
$em = $this ->em;
$data['ID_RUTA_MAPA'] = 'noasignado';
$data['CADENA_PUNTOS'] = '';
$data['ESTUDIANTES_JSON'] = '';
$data['TOTAL_ESTUDIANTES'] = 0;
$data['PROPERTIES_JSON'] = '';
$orden = 1;
$puntos = $this->buscarEstudiantes($idColegio, null, $sentido, $diaSemana, $puerta1,$nivel, $sector, $seccion);
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalEstudiantes = 0;
foreach ($puntos as $punto) {
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()])) {
if ($puerta1)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$sector= $punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR';
$direccion=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
$refUbicacion=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion());
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => ' '.$direccion. strtoupper($sector),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => $refUbicacion,
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => 'noasignado',
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'noasignado',
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'ESTUDIANTE'
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
$nombreEst=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'ID_ESTUDIANTE' => $punto->getEstudiante()->getId(),
'NOMBRE' => $nombreEst,
'FOTO' => $punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO',
'TIPO_PASAJERO' =>'ESTUDIANTE',
);
$totalEstudiantes ++;
}
foreach ($dataPuntos as $i => $valorPunto) {
if($valorPunto != null){
$data['PUNTOS'][] = $valorPunto;
}
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
/*$logger = $this->get('logger');
$logger->err($data['PROPERTIES_JSON']);
$logger->err('fin logger');*/
}
$opciones = array('puntosNoUbicados' => $data);
if($modificar == 1)
return $this->render('Cartografia/Cartografia/estudiantesNoAsignadosPuntos.html.twig', $opciones);
else
return $this->render('Cartografia/Cartografia/estudiantesNoAsignadosPuntosVisualizar.html.twig', $opciones);
}
public function estudiantesSinSolicitudDeTransporteAction ($idColegio , $sentido, $diaSemana ,$puerta,$nivel=null, $sector=null,$seccion=null )
{
$puerta1 = $puerta;
$em = $this ->em;
$session = $this->get('session');
$idPeriodo = -1;
if ($periodosSeleccionados = $session->get('periodos'))
{
if (isset($periodosSeleccionados[$idColegio]))
{
$periodo = $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')->find($periodosSeleccionados[$idColegio]);
$idPeriodo = $periodo ->getId();
}
}
$data['ID_RUTA_MAPA'] = 'sin_transporte';
$data['CADENA_PUNTOS'] = '';
$data['ESTUDIANTES_JSON'] = '';
$data['TOTAL_ESTUDIANTES'] = 0;
$data['PROPERTIES_JSON'] = '';
$datosEstudiantes= array(); //$this->buscarEstudiantesSinSolicitudDeTransporte($idColegio ,$idPeriodo, $sentido ,$diaSemana, $nivel, $sector );
//-----------------
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalEstudiantes = $orden = 0;
$estudiantes = array();
foreach ($datosEstudiantes as $estud ){
$estData = array('ID_ESTUDIANTE' => $estud->getId(),
'NOMBRE' => $estud->getNombreCompleto(),
'FOTO' => $estud->getFoto() ? $estud->getFoto()->getUrl() : 'NO_FOTO',
'TIPO_PASAJERO' =>'ESTUDIANTE');
$estudiantes[$estud->getId()] = array('ESTUDIANTE'=>$estData) ;
$rutaSentido = $estud->getRutaPuntoDiaSentido($diaSemana,$sentido);
if ($rutaSentido !=null ) {
if ($puerta1)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaSentido ->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaSentido -> getPunto()->getNombre());
$geometria = $rutaSentido->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')', '', $latlon);
$latlon = explode(' ', $latlon);
$sector= $rutaSentido->getPunto()->getSector()?' - '.$rutaSentido->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR';
$dataPuntos = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaSentido->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaSentido->getPunto()->getDireccion()).strtoupper($sector),
'ERROR_GPS' => isset($punto) ? $punto->getPunto()->getErrorGPS() :'',
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$rutaSentido->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' => $latlon[1],
'LATITUD' => $latlon[0],
'FOTO' => $rutaSentido->getPunto()->getFoto() ? $rutaSentido->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $rutaSentido->getPunto()->getId(),
'ID_RUTA' => 'sin_transporte',
'ETIQUETA' => $etiqueta,
'ID_FEATURE' => 'ptoT_' . $rutaSentido->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'sin_transporte',
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'ESTUDIANTE'
);
// --
$data['PUNTOS'][] = $dataPuntos;
$estudiantes[$estud->getId()]['PUNTO']=$dataPuntos ;
$orden += 1;
array_push($arrayPuntos, $rutaSentido->getPunto()->getGeometria());
}
$totalEstudiantes ++;
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
/*$logger = $this->get('logger');
$logger->err($data['PROPERTIES_JSON']);
$logger->err('fin logger');*/
}
$opciones = array('puntosNoUbicados' => $data, 'estudiantes' => $estudiantes);
return $this->render('Cartografia/Cartografia/estudiantesSinSolicitudDeTransporte.html.twig', $opciones);
//--------------------
}
public function pasajerosNoAsignadosPuntosAction($idColegio, $sentido, $diaSemana,$puerta,$nivel=null, $sector=null,$modificar) {
$puerta1 = $puerta == 'true';
$em = $this ->em;
$data['ID_RUTA_MAPA'] = 'pasajeronoasignado';
$data['CADENA_PUNTOS'] = '';
$data['PASAJEROS_JSON'] = '';
$data['TOTAL_PASAJEROS'] = 0;
$data['PROPERTIES_JSON'] = '';
$orden = 1;
$puntos = $this->buscarPasajeros($idColegio, null, $sentido, $diaSemana, $puerta1,$nivel, $sector);
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalPasajeros = 0;
foreach ($puntos as $punto) {
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()])) {
if ($puerta1)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR';
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()).strtoupper($sector),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => 'pasajeronoasignado',
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'pasajeronoasignado',
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'PASAJERO'
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['PASAJEROS'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'ID_PASAJERO' => $punto->getPersona()->getId(),
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto()),
'FOTO' => $punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO',
'TIPO_PASAJERO' =>'PASAJERO',
);
$totalPasajeros ++;
}
foreach ($dataPuntos as $i => $valorPunto) {
if($valorPunto != null){
$data['PUNTOS'][] = $valorPunto;
}
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['TOTAL_PASAJEROS'] = $totalPasajeros;
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
/*$logger = $this->get('logger');
$logger->err($data['PROPERTIES_JSON']);
$logger->err('fin logger');*/
}
$opciones = array('puntosNoUbicados' => $data);
if($modificar == 1)
return $this->render('Cartografia/Cartografia/pasajerosNoAsignadosPuntos.html.twig', $opciones);
else
return $this->render('Cartografia/Cartografia/pasajerosNoAsignadosPuntosVisualizar.html.twig', $opciones);
}
public function pasajerosEmpresaNoAsignadosPuntosAction($idEmpresa, $sentido, $diaSemana,$administrativa,$sucursal,$modificar)
{
$tipoRuta = $administrativa == 'true' ? TipoRutaEnum::ADMINISTRATIVAS : TipoRutaEnum::OPERATIVAS;
$em = $this ->em;
$data['ID_RUTA_MAPA'] = 'pasajeronoasignado';
$data['CADENA_PUNTOS'] = '';
$data['PASAJEROS_JSON'] = '';
$data['TOTAL_PASAJEROS'] = 0;
$data['PROPERTIES_JSON'] = '';
$orden = 1;
$puntos = $this->buscarPasajerosEmpresa($idEmpresa, null, $sentido, $diaSemana, $tipoRuta, $sucursal);
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalPasajeros = 0;
foreach ($puntos as $punto)
{
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()]))
{
if ($tipoRuta == TipoRutaEnum::ADMINISTRATIVAS)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => 'pasajeronoasignado',
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'pasajeronoasignado',
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'PASAJERO'
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['PASAJEROS'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'ID_PASAJERO' => $punto->getPasajero()->getId(),
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto()),
'FOTO' => $punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO',
'TIPO_PASAJERO' =>'PASAJERO',
);
$totalPasajeros ++;
}
foreach ($dataPuntos as $i => $valorPunto)
{
if($valorPunto != null)
{
$data['PUNTOS'][] = $valorPunto;
}
}
if (count($arrayPuntos))
{
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['TOTAL_PASAJEROS'] = $totalPasajeros;
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
/*$logger = $this->get('logger');
$logger->err($data['PROPERTIES_JSON']);
$logger->err('fin logger');*/
}
$opciones = array('puntosNoUbicados' => $data);
if($modificar == 1)
return $this->render('Cartografia/Cartografia/pasajerosEmpresaNoAsignadosPuntos.html.twig', $opciones);
else
return $this->render('Cartografia/Cartografia/pasajerosEmpresaNoAsignadosPuntosVisualizar.html.twig', $opciones);
}
public function rutasDefinidasPuntosAction($idColegio, $idOperadora, $sentido, $diaSemana, $puerta,$modificar) {
$puerta1 = $puerta == 'true';
$rutasDefinidas = $this->buscarRutas($idColegio, $idOperadora, $sentido, $diaSemana, $puerta1);
$rutasDefinidasArray = array();
$em = $this ->em;
foreach ($rutasDefinidas as $ruta) {
try {
$data = array();
if ($ruta) {
$data['ID'] = $ruta->getId();
$data['ID_RUTA_MAPA'] = 'rut_' . $ruta->getId();
$sector=$ruta->getSector()?$ruta->getSector()->getNombre():'';
$data['NOMBRE'] = $ruta->getNumero();
$data['SECTOR'] = $sector;
$data['HORA'] = $ruta->getHoraInicio();
$data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
$data['ASISTENTEEXTERNO'] = $ruta->getAsistenteExterno() ? $ruta->getAsistenteExterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_EXTERNO';
$data['ASISTENTEINTERNO'] = $ruta->getAsistenteInterno() ? $ruta->getAsistenteInterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_INTERNO';
$data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '. $ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
$data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
$data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
$data['ESCUELA']['ID'] = $ruta->getColegio()->getId();
$data['ESCUELA']['NOMBRE'] = $ruta->getColegio()->getNombre();
$data['SENTIDO'] = $ruta->getSentido()->getNombre();
$data['CADENA_PUNTOS'] = '';
$data['TOTAL_ESTUDIANTES'] = 0;
$data['TOTAL_PERMITIDO'] = 0;
$data['PROPERTIES_JSON'] = '';
$data['COLOR_BUS'] = 'green';
$data['MSG_BUS'] = '';
$orden = 1;
$msgError = '';
$puntos = $em->getRepository('StrategicAppBundle:OperEstudianteRutaPunto')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalEstudiantes = 0;
foreach ($puntos as $punto) {
if($punto->getPunto()){
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()])) {
if ($puerta1)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$id_pasajero=$punto->getEstudiante()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
$foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
}else{
$tipo='PASAJERO';
$id_pasajero=$punto->getPersona()->getId();
$nombre=$punto->getPersona()->getNombreCompleto();
$foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
}
$sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR ';
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()).strtoupper($sector),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => $ruta->getId(),
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'rut_' . $ruta->getId(),
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => $tipo,
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$id_pasajero=$punto->getEstudiante()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
$foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
}else{
$tipo='PASAJERO';
$id_pasajero=$punto->getPersona()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
$foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
}
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'TIPO_PASAJERO' => $tipo,
'ID_ESTUDIANTE' => $id_pasajero,
'NOMBRE' => $nombre,
'FOTO' => $foto,
);
/*$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'ID_ESTUDIANTE' => $punto->getEstudiante()->getId(),
'NOMBRE' => $punto->getEstudiante()->getNombreCompleto(),
'FOTO' => $punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO',
);*/
$totalEstudiantes ++;
}
}
$arrayEstudiantes = array();
foreach ($dataPuntos as $valorPunto) {
array_push($arrayEstudiantes, $valorPunto['ESTUDIANTES']);
$data['PUNTOS'][] = $valorPunto;
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['ESTUDIANTES_JSON'] = json_encode($arrayEstudiantes);
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
}
$data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
$data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;
/************** Validaciones para mostrar errores ******************************/
if($data['TOTAL_ESTUDIANTES'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
{
$diferencia = $data['TOTAL_ESTUDIANTES'] - $data['TOTAL_PERMITIDO'];
$msgError .= 'La capacidad del bus está exedida en '.$diferencia.' estudiantes<br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
{
$msgError .= 'No se ha definido conductor para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['UNIDAD'] == 'NO_UNIDAD')
{
$msgError .= 'No se ha definido unidad para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['ASISTENTEEXTERNO'] == 'NO_ASISTENTE_EXTERNO' && $data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
{
$msgError .= 'Debe definir un asistente externo o interno para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if($msgError == '')
{
if($data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
$asistente=$data['ASISTENTEEXTERNO'];
else
$asistente=$data['ASISTENTEINTERNO'];
$msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
$msgError .= 'Unidad a ejecutar la ruta: '. $data['UNIDAD'].'<br>';
$msgError .= 'Capacidad de la unidad: '. $data['TOTAL_PERMITIDO'].' pasajeros<br>';
$msgError .= 'Conductor: '. $data['CONDUCTOR'].'<br>';
$msgError .= 'Asistente: '.$asistente.'<br>';
}
$data['MSG_BUS'] = $msgError;
/****************************************************************************/
} else
$data['ID'] = 'NO_ROUTE';
array_push($rutasDefinidasArray, $data);
} catch (\RuntimeException $e) {
$retornoError = $e->getMessage();
return new \Symfony\Component\HttpFoundation\Response($retornoError);
}
}
$opciones = array('rutasDefinidas' => $rutasDefinidasArray);
if($modificar == 1)
return $this->render('Cartografia/Cartografia/rutasDefinidasPuntos.html.twig', $opciones);
else
return $this->render('Cartografia/Cartografia/rutasDefinidasPuntosVisualizar.html.twig', $opciones);
}
public function rutasEmpresaDefinidasPuntosAction($idEmpresa, $idOperadora, $sentido, $diaSemana, $administrativa, $sucursal, $modificar)
{
$tipoRuta = $administrativa == 'true' ? TipoRutaEnum::ADMINISTRATIVAS : TipoRutaEnum::OPERATIVAS;
$rutasDefinidas = $this->buscarEmpresaRutas($idEmpresa, $idOperadora, $sentido, $diaSemana, $tipoRuta, $sucursal);
$rutasDefinidasArray = array();
$em = $this ->em;
foreach ($rutasDefinidas as $ruta)
{
try
{
$data = array();
if ($ruta)
{
$data['ID'] = $ruta->getId();
$data['ID_RUTA_MAPA'] = 'rut_' . $ruta->getId();
$data['NOMBRE'] = $ruta->getNumero();
$data['HORA'] = $ruta->getHoraInicio();
$data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
$data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '. $ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
$data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
$data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
$data['EMPRESA']['ID'] = $ruta->getEmpresa()->getId();
$data['EMPRESA']['NOMBRE'] = $ruta->getEmpresa()->getNombre();
$data['SENTIDO'] = $ruta->getSentido()->getNombre();
$data['CADENA_PUNTOS'] = '';
$data['TOTAL_PASAJEROS'] = 0;
$data['TOTAL_PERMITIDO'] = 0;
$data['PROPERTIES_JSON'] = '';
$data['COLOR_BUS'] = 'green';
$data['MSG_BUS'] = '';
$orden = 1;
$msgError = '';
$puntos = $em->getRepository('StrategicAppBundle:OperEmpresaRutaPuntoAsignado')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalPasajeros = 0;
foreach ($puntos as $punto)
{
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()]))
{
if ($tipoRuta == TipoRutaEnum::ADMINISTRATIVAS)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => $ruta->getId(),
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'rut_' . $ruta->getId(),
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'PASAJERO',
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
$id_pasajero=$punto->getPasajero()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto());
$foto=$punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['PASAJEROS'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'TIPO_PASAJERO' => 'PASAJERO',
'ID_PASAJERO' => $id_pasajero,
'NOMBRE' => $nombre,
'FOTO' => $foto,
);
$totalPasajeros ++;
}
$arrayPasajeros = array();
foreach ($dataPuntos as $valorPunto)
{
array_push($arrayPasajeros, $valorPunto['PASAJEROS']);
$data['PUNTOS'][] = $valorPunto;
}
if (count($arrayPuntos))
{
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['ESTUDIANTES_JSON'] = json_encode($arrayPasajeros);
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
}
$data['TOTAL_PASAJEROS'] = $totalPasajeros;
$data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;
/************** Validaciones para mostrar errores ******************************/
if($data['TOTAL_PASAJEROS'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
{
$diferencia = $data['TOTAL_PASAJEROS'] - $data['TOTAL_PERMITIDO'];
$msgError .= 'La capacidad del bus está exedida en '.$diferencia.' pasajeros<br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
{
$msgError .= 'No se ha definido conductor para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['UNIDAD'] == 'NO_UNIDAD')
{
$msgError .= 'No se ha definido unidad para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if($msgError == '')
{
$msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
$msgError .= 'Unidad a ejecutar la ruta: '. $data['UNIDAD'].'<br>';
$msgError .= 'Capacidad de la unidad: '. $data['TOTAL_PERMITIDO'].' pasajeros<br>';
$msgError .= 'Conductor: '. $data['CONDUCTOR'].'<br>';
}
$data['MSG_BUS'] = $msgError;
/****************************************************************************/
}
else
$data['ID'] = 'NO_ROUTE';
array_push($rutasDefinidasArray, $data);
}
catch (\RuntimeException $e)
{
$retornoError = $e->getMessage();
return new \Symfony\Component\HttpFoundation\Response($retornoError);
}
}
$opciones = array('rutasDefinidas' => $rutasDefinidasArray);
if($modificar == 1)
return $this->render('Cartografia/Cartografia/rutasEmpresaDefinidasPuntos.html.twig', $opciones);
else
return $this->render('Cartografia/Cartografia/rutasEmpresaDefinidasPuntosVisualizar.html.twig', $opciones);
}
public function cargarRutaPuntoAction($idRuta, $color) {
$em = $this ->em;
$ruta = $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->find($idRuta);
$data = array();
if ($ruta)
{
$data['ID'] = $ruta->getId();
$data['ID_RUTA_MAPA'] = 'rut_' . $ruta->getId();
$sector=$ruta->getSector()?$ruta->getSector()->getNombre():'';
$data['NOMBRE'] = $ruta->getNumero();
$data['SECTOR'] = $sector;
$data['HORA'] = $ruta->getHoraInicio();
$data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
$data['ASISTENTEEXTERNO'] = $ruta->getAsistenteExterno() ? $ruta->getAsistenteExterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_EXTERNO';
$data['ASISTENTEINTERNO'] = $ruta->getAsistenteInterno() ? $ruta->getAsistenteInterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_INTERNO';
$data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '. $ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
$data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
$data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
$data['ESCUELA']['ID'] = $ruta->getColegio()->getId();
$data['ESCUELA']['NOMBRE'] = $ruta->getColegio()->getNombre();
$data['SENTIDO'] = $ruta->getSentido()->getNombre();
$data['CADENA_PUNTOS'] = '';
$data['TOTAL_ESTUDIANTES'] = 0;
$data['TOTAL_PERMITIDO'] = 0;
$data['PROPERTIES_JSON'] = '';
$data['COLOR_BUS'] = 'green';
$data['MSG_BUS'] = '';
$orden = 1;
$msgError = '';
$puntos = $em->getRepository('StrategicAppBundle:OperEstudianteRutaPunto')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalEstudiantes = 0;
foreach ($puntos as $punto) {
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()])) {
if ($ruta->getPuerta())
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$id_pasajero=$punto->getEstudiante()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
$foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
}else{
$tipo='PASAJERO';
$id_pasajero=$punto->getPersona()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
$foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
}
$sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR ';
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()). strtoupper($sector),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => $ruta->getId(),
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'rut_' . $ruta->getId(),
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => $tipo,
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
if($punto->getEstudiante()){
$tipo='ESTUDIANTE';
$id_pasajero=$punto->getEstudiante()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
$foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
}else{
$tipo='PASAJERO';
$id_pasajero=$punto->getPersona()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
$foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
}
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'TIPO_PASAJERO' => $tipo,
'ID_ESTUDIANTE' => $id_pasajero,
'NOMBRE' => $nombre,
'FOTO' => $foto,
);
$totalEstudiantes ++;
}
$arrayEstudiantes = array();
foreach ($dataPuntos as $valorPunto) {
array_push($arrayEstudiantes, $valorPunto['ESTUDIANTES']);
$data['PUNTOS'][] = $valorPunto;
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['ESTUDIANTES_JSON'] = json_encode($arrayEstudiantes);
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
}
$data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
$data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;
/************** Validaciones para mostrar errores ******************************/
if($data['TOTAL_ESTUDIANTES'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
{
$diferencia = $data['TOTAL_ESTUDIANTES'] - $data['TOTAL_PERMITIDO'];
$msgError .= 'La capacidad del bus está exedida en '.$diferencia.' estudiantes<br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
{
$msgError .= 'No se ha definido conductor para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['UNIDAD'] == 'NO_UNIDAD')
{
$msgError .= 'No se ha definido unidad para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['ASISTENTEEXTERNO'] == 'NO_ASISTENTE_EXTERNO' && $data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
{
$msgError .= 'Debe definir un asistente externo o interno para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if($msgError == '')
{
if($data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
$asistente=$data['ASISTENTEEXTERNO'];
else
$asistente=$data['ASISTENTEINTERNO'];
$msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
$msgError .= 'Unidad a ejecutar la ruta: '. $data['UNIDAD'].'<br>';
$msgError .= 'Capacidad de la unidad: '. $data['TOTAL_PERMITIDO'].' pasajeros<br>';
$msgError .= 'Conductor: '. $data['CONDUCTOR'].'<br>';
$msgError .= 'Asistente: '.$asistente.'<br>';
}
$data['MSG_BUS'] = $msgError;
}
else
$data['ID'] = 'NO_ROUTE';
$opciones = array('ruta' => $data, 'color' => $color);
return $this->render('Cartografia/Cartografia/cargarRutaPunto.html.twig', $opciones);
}
public function cargarEmpresaRutaPuntoAction($idRuta, $color)
{
$em = $this ->em;
$ruta = $em->getRepository("StrategicAppBundle:OperEmpresaRutaDefinicion")->find($idRuta);
$data = array();
if ($ruta)
{
$data['ID'] = $ruta->getId();
$data['ID_RUTA_MAPA'] = 'rut_' . $ruta->getId();
$data['NOMBRE'] = $ruta->getNumero();
$data['HORA'] = $ruta->getHoraInicio();
$data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
$data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '. $ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
$data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
$data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
$data['EMPRESA']['ID'] = $ruta->getEmpresa()->getId();
$data['EMPRESA']['NOMBRE'] = $ruta->getEmpresa()->getNombre();
$data['SENTIDO'] = $ruta->getSentido()->getNombre();
$data['CADENA_PUNTOS'] = '';
$data['TOTAL_PASAJEROS'] = 0;
$data['TOTAL_PERMITIDO'] = 0;
$data['PROPERTIES_JSON'] = '';
$data['COLOR_BUS'] = 'green';
$data['MSG_BUS'] = '';
$orden = 1;
$msgError = '';
$puntos = $em->getRepository('StrategicAppBundle:OperEmpresaRutaPuntoAsignado')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
$data['PUNTOS'] = array();
$dataPuntos = array();
$arrayPuntos = array();
$totalPasajeros = 0;
foreach ($puntos as $punto)
{
if (!isset($dataPuntos['PUNTO-' . $punto->getPunto()->getId()]))
{
if ($ruta->getTipoRuta()->getValue()==TipoRutaEnum::ADMINISTRATIVAS)
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion());
else
$etiqueta = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre());
$geometria = $punto->getPunto()->getGeometria();
$latlon = str_replace('POINT(', '', $geometria);
$latlon = str_replace(')','',$latlon);
$latlon = explode(' ', $latlon);
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()] = array(
'NOMBRE' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getNombre()),
'DIRECCION' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),
'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
'GEOMETRIA' => $geometria,
'LONGITUD' =>$latlon[1],
'LATITUD' =>$latlon[0],
'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
'ORDEN' => $orden,
'ID_PUNTO' => $punto->getPunto()->getId(),
'ID_RUTA' => $ruta->getId(),
'ETIQUETA' => $etiqueta,
'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
'ID_FEATURE_GROUP' => 'rut_' . $ruta->getId(),
'TIPO_GEOMETRIA' => 'punto',
'TIPO_PASAJERO' => 'PASAJERO',
);
$orden += 1;
array_push($arrayPuntos, $punto->getPunto()->getGeometria());
}
$id_pasajero=$punto->getPasajero()->getId();
$nombre=preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto());
$foto=$punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['PASAJEROS'][] = array(
'ID' => $punto->getId(),
'ORDEN' => $punto->getOrden(),
'TIPO_PASAJERO' => 'PASAJERO',
'ID_PASAJERO' => $id_pasajero,
'NOMBRE' => $nombre,
'FOTO' => $foto,
);
$totalPasajeros ++;
}
$arrayPasajeros = array();
foreach ($dataPuntos as $valorPunto) {
array_push($arrayPasajeros, $valorPunto['PASAJEROS']);
$data['PUNTOS'][] = $valorPunto;
}
if (count($arrayPuntos)) {
$arrayPuntos = implode('***', $arrayPuntos);
$data['CADENA_PUNTOS'] = $arrayPuntos;
$data['ESTUDIANTES_JSON'] = json_encode($arrayPasajeros);
$data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
}
$data['TOTAL_PASAJEROS'] = $totalPasajeros;
$data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;
/************** Validaciones para mostrar errores ******************************/
if($data['TOTAL_PASAJEROS'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
{
$diferencia = $data['TOTAL_PASAJEROS'] - $data['TOTAL_PERMITIDO'];
$msgError .= 'La capacidad del bus está exedida en '.$diferencia.' pasajeros<br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
{
$msgError .= 'No se ha definido conductor para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if( $data['UNIDAD'] == 'NO_UNIDAD')
{
$msgError .= 'No se ha definido unidad para la ruta <br>';
$data['COLOR_BUS'] = 'red';
}
if($msgError == '')
{
$msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
$msgError .= 'Unidad a ejecutar la ruta: '. $data['UNIDAD'].'<br>';
$msgError .= 'Capacidad de la unidad: '. $data['TOTAL_PERMITIDO'].' pasajeros<br>';
$msgError .= 'Conductor: '. $data['CONDUCTOR'].'<br>';
}
$data['MSG_BUS'] = $msgError;
}
else
$data['ID'] = 'NO_ROUTE';
$opciones = array('ruta' => $data, 'color' => $color);
return $this->render('Cartografia/Cartografia/cargarEmpresaRutaPunto.html.twig', $opciones);
}
private function buscarEstudiantesSinSolicitudDeTransporte($idColegio,$idPeriodo ,$sentido ,$diaSemana, $nivel =null, $sector=null ){
$entiyManager = $this->em;
//** obtener los id de estudiantes que tienen entrada en ruta punto */
$queryEstudRP = $entiyManager->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")
->createQueryBuilder("eRutaPunto")
->leftJoin("eRutaPunto.estudiante", "est_rp")
->leftJoin("est_rp.colegio", "est_rp_colegio")
->leftJoin("est_rp.nivel", "est_rp_nivel")
->leftJoin("eRutaPunto.periodoEscolar ", "est_rp_periodoEsc")
->where(" ( est_rp_colegio.id = $idColegio ) " )
->andWhere("( eRutaPunto.diaSemana = :filtroDiaSemana )")
->andWhere("( eRutaPunto.sentido = :filtroSentido )")
->andWhere("( est_rp_periodoEsc.id = $idPeriodo )")
->andWhere("( est_rp_nivel.sigla not in ('EGRESADO','RETIRADO') )");
if($sector && $sector!='all' && $sector!='null'){
$queryEstudRP ->leftJoin('eRutaPunto.punto','est_rp_punto')
->leftJoin('est_rp_punto.sector','est_rp_sector')
->andWhere("est_rp_sector.id in (".$sector.")");
}
if($nivel && $nivel!='all'){
$queryEstudRP ->andWhere("est_rp_nivel.id in (".$nivel.")");
}
$DQLEstudRP= $queryEstudRP ->select(' distinct est_rp.id') ->getQuery()->getDQL();
//** obtener los id de estudiantes con entradas en solicitudDETransporte */
$qSolicitudes = $entiyManager->getRepository("StrategicAppBundle:OperSolicitudTransporteEstudiante")
->createQueryBuilder("est_solc")
->leftJoin('est_solc.estudiante', 'est_solc_estudiante')
->leftJoin('est_solc_estudiante.nivel', 'est_solc_nivel')
->leftJoin('est_solc_estudiante.colegio', 'est_solc_colegio')
->leftJoin('est_solc.curso', 'est_solc_periodo')
->where('est_solc_periodo.id=' . $idPeriodo )
->andWhere('est_solc_colegio.id = ' . $idColegio )
->andWhere(" est_solc.estado <> 'RECHAZADA' " )
->select('distinct est_solc_estudiante.id ');
if($nivel && $nivel!='all'){
$qSolicitudes ->andWhere("est_solc_nivel.id in ( $nivel ) ");
}
$DQLSolExistentes = $qSolicitudes ->getDQL();
/*** los estudiante que no tienen entrada en rutaPunto y no tienen entrada en solicitude de tranporte */
$estudiantesQuery = $entiyManager->getRepository("StrategicAppBundle:OperEstudiantes")
->createQueryBuilder("estud")
->leftJoin("estud.colegio", "est_colegio")
->leftJoin("estud.nivel", "est_nivel")
->leftJoin("estud.rutas", "est_rutas")
->leftJoin("est_colegio.periodosEscolares", "per")
->select('estud,est_rutas')
->where(" ( est_colegio.id = $idColegio ) " )
->andWhere("( est_nivel.sigla not in ('EGRESADO','RETIRADO') )")
->andWhere(' estud.id NOT IN ( '. $DQLEstudRP. ' )')
->andWhere(' estud.id NOT IN ( '. $DQLSolExistentes. ' )')
->andWhere("( per.id = $idPeriodo)")
->setParameter("filtroSentido", $sentido)
->setParameter("filtroDiaSemana", $diaSemana);
if($nivel && $nivel!='all'){
$estudiantesQuery ->andWhere("est_nivel.id in (".$nivel.")");
//->setParameter("filtroNivel", $nivel);
}
$estudiantes = $estudiantesQuery->getQuery()->getResult();
return $estudiantes;
}
}