src/Cartografia/Controller/CartografiaController.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Cartografia\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  4. use CartografiaBundle\Types\Geometry;
  5. use AppBundle\Comun\Enum\DiaSemanaEnum;
  6. use AppBundle\Comun\Enum\TipoRutaEnum;
  7. use AppBundle\Entity\NmclSentidoRuta;
  8. use AppBundle\Entity\OperRutaDefinicion;
  9. use AppBundle\Entity\OperRutaEjecucion;
  10. use AppBundle\Entity\OperEstudianteRutaPuntoEjecucion;
  11. use AppBundle\Entity\OperCheckListEjec;
  12. use AppBundle\Comun\Enum\EstadoSolicitudEnum;
  13. use AppBundle\Comun\Enum\SeccionesEnum;
  14. use App\Controller\BaseController;
  15. class CartografiaController extends BaseController {
  16.     public function indexAction() {
  17.         return $this->render('Cartografia/Cartografia/index.html.twig');
  18.     }
  19.     public function dibujarGeometriaAction($tipoDibujo$idCampo$idContenedorMapa) {
  20.         $opciones = array('idCampo' => $idCampo'tipoDibujo' => $tipoDibujo'idContenedorMapa' => $idContenedorMapa);
  21.         return $this->render('Cartografia/Cartografia/dibujarGeometria.html.twig'$opciones);
  22.     }
  23.     
  24.     public function dibujarPuntoAction($tipoDibujo$idCampo$idContenedorMapa) {
  25.         $opciones = array('idCampo' => $idCampo'tipoDibujo' => $tipoDibujo'idContenedorMapa' => $idContenedorMapa);
  26.         return $this->render('Cartografia/Cartografia/dibujarPunto.html.twig'$opciones);
  27.     }
  28.     public function mostrarGeometriaAction($tipoDibujo$idCampo$idContenedorMapa,$properties=-1) {
  29.         
  30.         if($properties!=-1){
  31.             $em $this ->em;
  32.             $valor $em->getRepository("StrategicAppBundle:OperEstudianteRutaPuntoEjecucion")->find($properties);
  33.                     
  34.             $data['PUNTOS'] = array();
  35.             $dataPuntos = array();
  36.             $arrayPuntos = array();
  37.         
  38.             array_push($arrayPuntos$valor->getGeometria());
  39.             array_push($arrayPuntos$valor->getPuntoRecogidaEntrega()->getGeometria());            
  40.             
  41.             $geometria $valor->getGeometria();
  42.             $latlon str_replace('POINT('''$geometria);
  43.             $latlon str_replace(')','',$latlon);
  44.             $latlon explode(' '$latlon);
  45.             $dataPuntos['PUNTO-1'] = array(                            
  46.                 'Tipo' => 'PUNTO REPORTADO',                                
  47.                 'Ruta'=>$valor->getRuta()->getRuta()->getNumero().' - '.$valor->getRuta()->getRuta()->getSentido(),
  48.                 'Nombre' => $valor->getEstudiante()->getNombreCompleto(),
  49.                 'Hora'=>$valor->getFecha()!==null?date_format($valor->getFecha(), 'H:i:s'):'No Informado',
  50.                 'punto' => $geometria,
  51.                 'longitud' =>$latlon[1],
  52.                 'latitud' =>$latlon[0],
  53.                 'Foto' => 'NO_FOTO',
  54.                 'Orden' => $valor->getOrden(),
  55.                 'idPunto' => '1'
  56.                 'idRuta' => $valor->getRuta()->getRuta()->getNumero(),
  57.                 'etiqueta' => $valor->getEstudiante()->getNombreCompleto(),
  58.                 'idFeature'=> 'pto_1',
  59.                 'idFeatureGroup' => 'ejecucion',
  60.                 'tipoGeometria' => 'punto',
  61.                 'tipoPasajero' => 'ESTUDIANTE'                                
  62.             );
  63.             
  64.             $geometria $valor->getPuntoRecogidaEntrega()->getGeometria();
  65.             $latlon str_replace('POINT('''$geometria);
  66.             $latlon str_replace(')','',$latlon);
  67.             $latlon explode(' '$latlon);
  68.             
  69.             $dataPuntos['PUNTO-2'] = array(    
  70.                 'Tipo' => 'PUNTO SOLICITADO DE SERVICIO',
  71.                 'Ruta'=>$valor->getRuta()->getRuta()->getNumero().' - '.$valor->getRuta()->getRuta()->getSentido(),   
  72.                 'Nombre' => $valor->getEstudiante()->getNombreCompleto(),
  73.                 'Direccion' => $valor->getPuntoRecogidaEntrega()->getDireccion(),
  74.                 'Referencia' => $valor->getPuntoRecogidaEntrega()->getReferenciasUbicacion()?$valor->getPuntoRecogidaEntrega()->getReferenciasUbicacion():'-',                             
  75.                 'punto' => $geometria,
  76.                 'longitud' =>$latlon[1],
  77.                 'latitud' =>$latlon[0],
  78.                 'Foto' => $valor->getPuntoRecogidaEntrega()->getFoto() ? $valor->getPuntoRecogidaEntrega()->getFoto()->getUrl() : 'NO_FOTO',
  79.                 'orden' => $valor->getOrden(),
  80.                 'Orden' => '2'
  81.                 'idPunto' => '2'
  82.                 'idRuta' => $valor->getRuta()->getRuta()->getNumero(),
  83.                 'etiqueta' => $valor->getPuntoRecogidaEntrega()->getNombre().' - '.$valor->getEstudiante()->getNombreCompleto(),
  84.                 'idFeature'=> 'pto_2',
  85.                 'idFeatureGroup' => 'ejecucion',
  86.                 'tipoGeometria' => 'punto',
  87.                 'tipoPasajero' => 'ESTUDIANTE'                                
  88.             );
  89.             
  90.           foreach ($dataPuntos as  $i => $valorPunto) {
  91.             if($valorPunto != null){
  92.                 $data['PUNTOS'][] = $valorPunto;
  93.             }
  94.           }
  95.           
  96.           if (count($arrayPuntos)) {
  97.             $arrayPuntos implode('***'$arrayPuntos);
  98.             $data['CADENA_PUNTOS'] = $arrayPuntos;
  99.             $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  100.            
  101.             /*$logger = $this->get('logger');
  102.             $logger->err($data['PROPERTIES_JSON']);
  103.             $logger->err('fin logger');*/
  104.             }
  105.         }else{
  106.             $data=null;
  107.         }
  108.         $opciones = array('idCampo' => $idCampo'tipoDibujo' => $tipoDibujo'idContenedorMapa' => $idContenedorMapa,'puntos'=>$data);
  109.         return $this->render('Cartografia/Cartografia/mostrarGeometria.html.twig'$opciones);
  110.     }
  111.     
  112.    
  113.    
  114.     public function cargarRutaAction($idRuta$color) {
  115.         $em $this ->em;
  116.         $ruta $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->find($idRuta);
  117.         $cadenaPuntos = array();
  118.         $arregloDatosRuta = array();
  119.         $arregloDatosRuta['idRuta'] = $ruta->getId();
  120.         $arregloDatosRuta['numero'] = $ruta->getNumero();
  121.         $arregloDatosRuta['sentido'] = $ruta->getSentido();
  122.         $arregloDatosRuta['idRutaMapa'] = 'rut' $ruta->getId();
  123.         $arregloDatosRuta['estudiantes'] = array();
  124.         $arregloDatosRuta['estudiantesJson'] = '';
  125.         $arregloDatosRuta['totalEstudiantes'] = 0;
  126.         $arregloDatosRuta['totalPermitido'] = 0;
  127.         $arregloDatosRuta['cadenaPuntos'] = '';
  128.         $parametrosBusqueda = array('ruta' => $idRuta);
  129.         $order = array('orden' => 'ASC');
  130.         $estudiantes $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy($parametrosBusqueda$order);
  131.         foreach ($estudiantes as $rutaEstudiante) {
  132.             $estudiante $rutaEstudiante->getEstudiante();
  133.             if ($estudiante->getFoto())
  134.                 $arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
  135.             else
  136.                 $arregloDatosEstudiante['foto'] = '';
  137.             $arregloDatosEstudiante['Nombre'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$estudiante->getNombreCompleto());
  138.             $arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion());
  139.             $arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
  140.             $arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
  141.             $arregloDatosEstudiante['idFeature'] = 'est' $estudiante->getId(); //Representar la capa en el mapa
  142.             $arregloDatosEstudiante['idFeatureGroup'] = 'rut' $ruta->getId(); //Representar en el grupo la capa en el mapa
  143.             $arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
  144.             $arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
  145.             $arregloDatosEstudiante['tipoGeometria'] = 'punto';
  146.             array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
  147.             array_push($cadenaPuntos$rutaEstudiante->getPunto()->getGeometria());
  148.         }
  149.         if (count($cadenaPuntos)) {
  150.             $cadenaPuntos implode('***'$cadenaPuntos);
  151.             $arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
  152.             $arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
  153.             $arregloDatosRuta['totalEstudiantes'] = count($arregloDatosRuta['estudiantes']);
  154.             if ($ruta->getUnidad())
  155.                 $arregloDatosRuta['totalPermitido'] = $ruta->getUnidad()->getCapacidad();
  156.         }
  157.         $opciones = array('ruta' => $arregloDatosRuta'color' => $color);
  158.         return $this->render('Cartografia/Cartografia/cargarRuta.html.twig'$opciones);
  159.     }
  160.     public function modificarSectorRutaAction($idColegio) {
  161.         $opciones = array('idColegio' => $idColegio);
  162.         return $this->render('Cartografia/Cartografia/modificarSectorRuta.html.twig'$opciones);
  163.     }
  164.     public function sectoresRutasAction($idColegio) {
  165.         $em $this ->em;
  166.         $qb $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
  167.                 ->where("osr.geometria is not null")
  168.                 ->andWhere("osr.cliente = :filtroColegio")
  169.                 ->setParameter("filtroColegio"$idColegio);
  170.         $resultList $qb->getQuery()->getResult();
  171.         $sectoresRutas = array();
  172.         $sectoresRutas['sectores'] = array();
  173.         $sectoresRutas['cadenaPuntos'] = '';
  174.         $cadenaPuntosSectores = array();
  175.         $sectoresRutas['idRutaMapa'] = 'sectores';
  176.         $sectoresRutas['sectoresJson'] = '';
  177.         foreach ($resultList as $sectorRuta) {
  178.             $arregloDatos['id'] = $sectorRuta->getId();
  179.             $arregloDatos['idFeature'] = $sectorRuta->getId(); //Representar la capa en el mapa
  180.             $arregloDatos['idFeatureGroup'] = 'sectores'//Representar en el grupo la capa en el mapa             
  181.             $arregloDatos['nombre'] = $sectorRuta->getNombre();
  182.             $arregloDatos['punto'] = $sectorRuta->getGeometria();
  183.             $arregloDatos['tipoGeometria'] = 'poligono';
  184.             array_push($sectoresRutas['sectores'], $arregloDatos);
  185.             array_push($cadenaPuntosSectores$sectorRuta->getGeometria());
  186.         }
  187.         if (count($cadenaPuntosSectores)) {
  188.             $cadenaPuntosSectores implode('***'$cadenaPuntosSectores);
  189.             $sectoresRutas['cadenaPuntos'] = $cadenaPuntosSectores;
  190.             $sectoresRutas['sectoresJson'] = json_encode($sectoresRutas['sectores']);
  191.         }
  192.         $opciones = array('sectoresRutas' => $sectoresRutas'idColegio' => $idColegio);
  193.         return $this->render('Cartografia/Cartografia/sectoresRutas.html.twig'$opciones);
  194.     }
  195.     
  196.     
  197.     
  198.     public function resetearRutasEjecucionAction()
  199.     {
  200.         $securityContext $this->get('security.context');
  201.         $colegios=$securityContext->getToken()->getUser()->getPersona()->getCoordinador()->getColegios();
  202.         
  203.         $id_colegios =array();
  204.         foreach ($colegios as $colegio) {
  205.             $id_colegios[]=$colegio->getId();
  206.         }
  207.         $retornoError "";
  208.         
  209.         $sql1 "DELETE FROM oper_estudiante_ruta_punto_ejecucion ;";
  210.         $sql2 "DELETE FROM oper_punto_ejecucion_ruta";
  211.         $sql5 "DELETE FROM oper_check_list_ejec";
  212.         $sql3"DELETE FROM oper_ruta_ejecucion;";
  213.         $sql4 "TRUNCATE TABLE oper_novedad_ruta;";
  214.         
  215.         /*try {                
  216.                 $query1 = $conn->executeQuery($sql1)->execute();
  217.                 $query2 = $conn->executeQuery($sql2)->execute(); 
  218.                 $query5 = $conn->executeQuery($sql5)->execute();
  219.                 $query4 = $conn->executeQuery($sql4)->execute(); 
  220.                 $query3 = $conn->executeQuery($sql3)->execute();              
  221.                
  222.            } 
  223.         catch (\RuntimeException $e) {
  224.                $retornoError = $e->getMessage();
  225.            }*/
  226.         $retornoError ='id_colegios '.implode($id_colegios,','); 
  227.         $opciones = array('retorno'=>$retornoError);
  228.         return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig'$opciones); 
  229.          
  230.     }
  231.     
  232.     public function resetearRutasAction()
  233.     {
  234.         
  235.         
  236.         $sql1 "UPDATE oper_estudiante_ruta_punto SET id_ruta = null, orden = null;";
  237.         $sql2 "DELETE FROM oper_estudiante_ruta_punto_ejecucion";
  238.         $sql7 "DELETE FROM oper_punto_ejecucion_ruta";  
  239.         $sql8 "DELETE FROM oper_check_list_ejec";         
  240.         $sql3 "DELETE FROM oper_ruta_ejecucion";
  241.         $sql4 "DELETE FROM oper_ruta_definicion";              
  242.         $sql5 "TRUNCATE TABLE oper_novedad_ruta;";
  243.         $sql6 "UPDATE oper_clientes SET creacion_inicial_parada = true,creacion_inicial_puerta = true;";
  244.         
  245.                 
  246.         $em $this ->em;
  247.         $conn $em->getConnection();
  248.         
  249.         
  250.         $retornoError "";
  251.         
  252.         
  253.         try {
  254.                 $query5 $conn->executeQuery($sql5)->execute();
  255.                 $query1 $conn->executeQuery($sql1)->execute();
  256.                 $query2 $conn->executeQuery($sql2)->execute();
  257.                 $query7 $conn->executeQuery($sql7)->execute();
  258.                 $query8 $conn->executeQuery($sql8)->execute();
  259.                 $query3 $conn->executeQuery($sql3)->execute();
  260.                 $query4 $conn->executeQuery($sql4)->execute();                
  261.                 $query6 $conn->executeQuery($sql6)->execute();
  262.                
  263.            } 
  264.         catch (\RuntimeException $e) {
  265.                $retornoError $e->getMessage();
  266.            }
  267.         
  268.         $opciones = array('retorno'=>$retornoError);
  269.         return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig'$opciones); 
  270.     }        
  271.     
  272.     
  273.     public function modificarSectorAction($arregloSectores) {
  274.         $em $this ->em;
  275.         $arraySectores json_decode($arregloSectores);
  276.         foreach ($arraySectores as $sector) {
  277.             $converted = (array) $sector;
  278.             $sect $em->getRepository("StrategicAppBundle:OperSectorRuta")->find($converted['id']);
  279.             $sect->setGeometria($converted['geometria']);
  280.             $em->persist($sect);
  281.         }
  282.         $retornoError 'OK';
  283.         try {
  284.             $em->flush();
  285.         } catch (\RuntimeException $e) {
  286.             $retornoError $e->getMessage();
  287.         }
  288.         return new \Symfony\Component\HttpFoundation\Response($retornoError);
  289.     }
  290.     
  291.     
  292.     
  293.     public function modificarPuntoAction($arregloPuntos) {
  294.         $em $this ->em;
  295.         $arrayPuntos json_decode($arregloPuntos);
  296.         foreach ($arrayPuntos as $punto) {
  297.             $converted = (array) $punto;
  298.             $idPunto=substr($converted['id'], 4strlen($converted['id']));
  299.             $sect $em->getRepository("StrategicAppBundle:OperRutaPunto")->find($idPunto);
  300.             $sect->setGeometria($converted['geometria']);
  301.             $em->persist($sect);
  302.         }
  303.         $retornoError 'OK';
  304.         try {
  305.             $em->flush();
  306.         } catch (\RuntimeException $e) {
  307.             $retornoError $e->getMessage();
  308.         }
  309.         return new \Symfony\Component\HttpFoundation\Response($retornoError);
  310.     }
  311.     
  312.     
  313.     public function crearSectorAction($idColegio$tipoDibujo$idCampo$idContenedorMapa) {
  314.         $em $this ->em;
  315.         $qb $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
  316.                 ->where("osr.geometria is not null")
  317.                 ->andWhere("osr.cliente = :filtroColegio")
  318.                 ->setParameter("filtroColegio"$idColegio);
  319.         $resultList $qb->getQuery()->getResult();
  320.         $sectoresRutas = array();
  321.         $sectoresRutas['sectores'] = array();
  322.         $sectoresRutas['idRutaMapa'] = 'sectores';
  323.         $sectoresRutas['cadenaPuntos'] = '';
  324.         $cadenaPuntosSectores = array();
  325.         $sectoresRutas['sectoresJson'] = '';
  326.         foreach ($resultList as $sectorRuta) {
  327.             $arregloDatos['id'] = $sectorRuta->getId();
  328.             $arregloDatos['idFeature'] = $sectorRuta->getId(); //Representar la capa en el mapa
  329.             $arregloDatos['idFeatureGroup'] = 'sectores'//Representar en el grupo la capa en el mapa             
  330.             $arregloDatos['Nombre'] = $sectorRuta->getNombre();
  331.             $arregloDatos['punto'] = $sectorRuta->getGeometria();
  332.             $arregloDatos['tipoGeometria'] = 'poligono';
  333.             array_push($sectoresRutas['sectores'], $arregloDatos);
  334.             array_push($cadenaPuntosSectores$sectorRuta->getGeometria());
  335.         }
  336.         if (count($cadenaPuntosSectores)) {
  337.             $cadenaPuntosSectores implode('***'$cadenaPuntosSectores);
  338.             $sectoresRutas['cadenaPuntos'] = $cadenaPuntosSectores;
  339.             $sectoresRutas['sectoresJson'] = json_encode($sectoresRutas['sectores']);
  340.         }
  341.         $opciones = array('sectoresRutas' => $sectoresRutas'idColegio' => $idColegio'idCampo' => $idCampo'tipoDibujo' => $tipoDibujo'idContenedorMapa' => $idContenedorMapa);
  342.         return $this->render('Cartografia/Cartografia/crearSector.html.twig'$opciones);
  343.     }
  344.     public function seguimientoRutasAction($idColegio$rutas) {
  345.         if (!is_array($rutas))
  346.             $arregloRutas explode(','$rutas);
  347.         else
  348.             $arregloRutas $rutas;
  349.         $em $this ->em;
  350.         $qb $em->getRepository("StrategicAppBundle:OperRutaEjecucion")->createQueryBuilder("ore")
  351.                 ->leftJoin("ore.ruta""ord")
  352.                 ->where("ore.id in (:arrayRutas)")
  353.                 ->setParameter("arrayRutas"$arregloRutas);
  354.         $resultList $qb->getQuery()->getResult();
  355.         $rutasEjecucion = array();
  356.         foreach ($resultList as $rutaEjecucion) {
  357.             $cadenaPuntos = array();
  358.             $cadenaPuntosEstudiantes = array();
  359.             $arregloDatosRuta = array();
  360.             $rutaActiva $rutaEjecucion->getId();
  361.             $arregloDatosRuta['idRutaEjecucion'] = $rutaEjecucion->getId();
  362.             $arregloDatosRuta['idRutaDefinicion'] = $rutaEjecucion->getRuta()->getId();
  363.             $arregloDatosRuta['numeroRutaDefinicion'] = $rutaEjecucion->getRuta()->getNumero();
  364.             $arregloDatosRuta['idRutaMapa'] = 'rut' $rutaEjecucion->getId();
  365.             $arregloDatosRuta['fechaInicioRutaEjecucion'] = $rutaEjecucion->getFechaInicio();
  366.             $arregloDatosRuta['fechaFinRutaEjecucion'] = $rutaEjecucion->getFechaFin();
  367.             $arregloDatosRuta['observacionesRutaEjecucion'] = $rutaEjecucion->getObservaciones();
  368.             $arregloDatosRuta['puntosRuta'] = array();
  369.             $arregloDatosRuta['cadenaPuntos'] = '';
  370.             $arregloDatosRuta['puntosJson'] = '';
  371.             $arregloDatosRuta['cadenaPuntosEstudiantes'] = '';
  372.             $arregloDatosRuta['estudiantesJson'] = '';
  373.             $arregloDatosRuta['estudiantes'] = array();
  374.             $arregloDatosRuta['estudiantesJson'] = '';
  375.             $arregloDatosRuta['recogidos'] = 0;
  376.             $arregloDatosRuta['noRecogidos'] = 0;
  377.             $arregloDatosRuta['noInformado'] = 0;
  378.             $qb $em->getRepository("StrategicAppBundle:OperPuntoEjecucionRuta")->createQueryBuilder("oerpe")
  379.                     ->where("oerpe.geometria is not null")
  380.                     ->andWhere("oerpe.ruta = :filtroRuta")
  381.                     ->setParameter("filtroRuta"$rutaEjecucion->getId())
  382.                     ->orderBy("oerpe.id");
  383.             $resultList $qb->getQuery()->getResult();
  384.             foreach ($resultList as $puntos) {
  385.                 $arregloDatos['id'] = $puntos->getId(); //id en la tabla ruta_estudiante_punto
  386.                 $arregloDatos['idFeature'] = 'punt' $puntos->getId(); //Representar la capa en el mapa
  387.                 $arregloDatos['idFeatureGroup'] = 'rut' $rutaEjecucion->getId(); //Representar en el grupo la capa en el mapa
  388.                 $arregloDatos['punto'] = $puntos->getGeometria();
  389.                 $arregloDatos['tipoGeometria'] = 'punto';
  390.                 array_push($arregloDatosRuta['puntosRuta'], $arregloDatos);
  391.                 array_push($cadenaPuntos$puntos->getGeometria());
  392.             }
  393.             $qb $em->getRepository("StrategicAppBundle:OperEstudianteRutaPuntoEjecucion")->createQueryBuilder("oerpe")
  394.                     ->where("oerpe.ruta = :filtroRuta")
  395.                     ->setParameter("filtroRuta"$rutaEjecucion->getId())
  396.                     ->orderBy("oerpe.orden");
  397.             $resultList $qb->getQuery()->getResult();
  398.             foreach ($resultList as $rutaEstudiante) {
  399.                 if($punto->getEstudiante()){
  400.                     $tipo='ESTUDIANTE';
  401.                     $estudiante $rutaEstudiante->getEstudiante();
  402.                 }else{
  403.                     $tipo='PASAJERO';
  404.                     $estudiante $rutaEstudiante->getPersona();
  405.                 }   
  406.                 
  407.                 if ($estudiante->getFoto())
  408.                     $arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
  409.                 else
  410.                     $arregloDatosEstudiante['foto'] = '';
  411.                 $arregloDatosEstudiante['Nombre'] = $estudiante->getNombreCompleto();
  412.                 $arregloDatosEstudiante['Direccion'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getDireccion();
  413.                 $arregloDatosEstudiante['Referencia'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getReferenciasUbicacion();
  414.                 $arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
  415.                 $arregloDatosEstudiante['idFeature'] = 'est_' $estudiante->getId(); //Representar la capa en el mapa
  416.                 $arregloDatosEstudiante['idFeatureGroup'] = 'rut' $rutaEjecucion->getId(); //Representar en el grupo la capa en el mapa
  417.                 $arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
  418.                 $arregloDatosEstudiante['punto'] = $rutaEstudiante->getPuntoRecogidaEntrega()->getGeometria();
  419.                 $arregloDatosEstudiante['tipoGeometria'] = 'punto';
  420.                 $arregloDatosEstudiante['tipoPasajero'] = $tipo;
  421.                 if ($rutaEjecucion->getRuta()->getSentido()->getId() == NmclSentidoRuta::CASA_ESCUELA) {
  422.                     if ($rutaEstudiante->getRecogido() === true) {
  423.                         $arregloDatosRuta['recogidos'] ++;
  424.                         $arregloDatosEstudiante['color'] = 'green';
  425.                     } elseif ($rutaEstudiante->getRecogido() === false) {
  426.                         $arregloDatosRuta['noRecogidos'] ++;
  427.                         $arregloDatosEstudiante['color'] = 'red';
  428.                     } else {
  429.                         $arregloDatosRuta['noInformado'] ++;
  430.                         $arregloDatosEstudiante['color'] = '';
  431.                     }
  432.                 } else {
  433.                     if ($rutaEstudiante->getEntregado() === true)
  434.                         $arregloDatosRuta['recogidos'] ++;
  435.                     elseif ($rutaEstudiante->getEntregado() === false)
  436.                         $arregloDatosRuta['noRecogidos'] ++;
  437.                     else
  438.                         $arregloDatosRuta['noInformado'] ++;
  439.                 }
  440.                 array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
  441.                 array_push($cadenaPuntosEstudiantes$rutaEstudiante->getPuntoRecogidaEntrega()->getGeometria());
  442.             }
  443.             if (count($cadenaPuntos)) {
  444.                 $cadenaPuntos implode('***'$cadenaPuntos);
  445.                 $arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
  446.                 $arregloDatosRuta['puntosJson'] = json_encode($arregloDatosRuta['puntosRuta']);
  447.             }
  448.             if (count($cadenaPuntosEstudiantes)) {
  449.                 $cadenaPuntosEstudiantes implode('***'$cadenaPuntosEstudiantes);
  450.                 $arregloDatosRuta['cadenaPuntosEstudiantes'] = $cadenaPuntosEstudiantes;
  451.                 $arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
  452.             }
  453.             $rutasEjecucion["$rutaActiva"] = $arregloDatosRuta;
  454.         }
  455.         $opciones = array('rutasEjecucion' => $rutasEjecucion'arrayRutas' => $arregloRutas'colegio' => $idColegio);
  456.         return $this->render('Cartografia/Cartografia/seguimientoRutas.html.twig'$opciones);
  457.     }
  458.     public function definicionRutasInicialAction($idColegio$idOperadora$puerta) {
  459.         $diaSemana DiaSemanaEnum::LUN;
  460.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  461.         $colegio $idColegio;
  462.         $operadora $idOperadora;
  463.         $opciones = array('diaSemana' => $diaSemana'sentido' => $sentido'colegio' => $colegio'operadora' => $operadora'puerta' => $puerta);
  464.         return $this->render('Cartografia/Cartografia/definicionRutasInicial.html.twig'$opciones);
  465.     }
  466.     public function definicionRutasDiaAction($idColegio$idOperadora$sentido$diaSemana$puerta) {
  467.         $em $this ->em;
  468.         $colegio $idColegio;
  469.         $operadora $idOperadora;
  470.         $sentidos = array();
  471.         $diasSemana DiaSemanaEnum::getPossibleValues();
  472.         $sentidosQuery $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
  473.         $sentidoSel '';
  474.         foreach ($sentidosQuery as $sent) {
  475.             if ($sent->getId() == $sentido)
  476.                 $sentidoSel $sent->getNombre();
  477.             $arr['texto'] = $sent->getNombre();
  478.             $arr['valor'] = $sent->getId();
  479.             array_push($sentidos$arr);
  480.         }
  481.         $opciones = array('diaSemana' => $diaSemana'sentido' => $sentido'colegio' => $colegio'operadora' => $operadora'puerta' => $puerta'diasSemana' => $diasSemana'sentidos' => $sentidos'sentidoSel' => $sentidoSel);
  482.         return $this->render('Cartografia/Cartografia/definicionRutasDia.html.twig'$opciones);
  483.     }
  484.     public function rutasDefinidasAction($idColegio$idOperadora$sentido$diaSemana$puerta) {
  485.         $puerta1 $puerta == 'true';
  486.         $rutasDefinidas $this->buscarRutas($idColegio$idOperadora$sentido$diaSemana$puerta1);
  487.         $rutasDefinidasArray = array();
  488.         $em $this ->em;
  489.         foreach ($rutasDefinidas as $ruta) {
  490.             $cadenaPuntos = array();
  491.             $arregloDatosRuta = array();
  492.             $arregloDatosRuta['idRuta'] = $ruta->getId();
  493.             $arregloDatosRuta['numero'] = $ruta->getNumero();
  494.             $arregloDatosRuta['sentido'] = $ruta->getSentido();
  495.             $arregloDatosRuta['idRutaMapa'] = 'rut' $ruta->getId();
  496.             $arregloDatosRuta['estudiantes'] = array();
  497.             $arregloDatosRuta['estudiantesJson'] = '';
  498.             $arregloDatosRuta['totalEstudiantes'] = 0;
  499.             $arregloDatosRuta['totalPermitido'] = 0;
  500.             $arregloDatosRuta['cadenaPuntos'] = '';
  501.             $rutaId $ruta->getId();
  502.             $parametrosBusqueda = array('ruta' => $rutaId);
  503.             $order = array('orden' => 'ASC');
  504.             $estudiantes $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy($parametrosBusqueda$order);
  505.             foreach ($estudiantes as $rutaEstudiante) {
  506.                 
  507.                 if($punto->getEstudiante()){
  508.                     $tipo='ESTUDIANTE';
  509.                     $estudiante $rutaEstudiante->getEstudiante();
  510.                 }else{
  511.                     $tipo='PASAJERO';
  512.                     $estudiante $rutaEstudiante->getPersona();
  513.                 }   
  514.                 
  515.                 if ($estudiante->getFoto())
  516.                     $arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
  517.                 else
  518.                     $arregloDatosEstudiante['foto'] = '';
  519.                 $arregloDatosEstudiante['Nombre'] = $estudiante->getNombreCompleto();
  520.                 $arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion());
  521.                 $arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
  522.                 $arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
  523.                 $arregloDatosEstudiante['idFeature'] = 'est' $estudiante->getId(); //Representar la capa en el mapa
  524.                 $arregloDatosEstudiante['idFeatureGroup'] = 'rut' $ruta->getId(); //Representar en el grupo la capa en el mapa
  525.                 $arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
  526.                 $arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
  527.                 $arregloDatosEstudiante['tipoGeometria'] = 'punto';
  528.                 $arregloDatosEstudiante['tipoPasajero'] = $tipo;
  529.                 array_push($arregloDatosRuta['estudiantes'], $arregloDatosEstudiante);
  530.                 array_push($cadenaPuntos$rutaEstudiante->getPunto()->getGeometria());
  531.             }
  532.             if (count($cadenaPuntos)) {
  533.                 $cadenaPuntos implode('***'$cadenaPuntos);
  534.                 $arregloDatosRuta['cadenaPuntos'] = $cadenaPuntos;
  535.                 $arregloDatosRuta['estudiantesJson'] = json_encode($arregloDatosRuta['estudiantes']);
  536.                 $arregloDatosRuta['totalEstudiantes'] = count($arregloDatosRuta['estudiantes']);
  537.                 if ($ruta->getUnidad())
  538.                     $arregloDatosRuta['totalPermitido'] = $ruta->getUnidad()->getCapacidad();
  539.             }
  540.             array_push($rutasDefinidasArray$arregloDatosRuta);
  541.         }
  542.         $opciones = array('rutasDefinidas' => $rutasDefinidasArray);
  543.         return $this->render('Cartografia/Cartografia/rutasDefinidas.html.twig'$opciones);
  544.     }
  545.     public function estudiantesNoAsignadosAction($idColegio$sentido$diaSemana$puerta) {
  546.         $puerta1 $puerta == 'true';
  547.         $rutasEstudiantesNoUbicados = array();
  548.         $rutasEstudiantesNoUbicados['estudiantes'] = array();
  549.         $rutasEstudiantesNoUbicados['cadenaPuntos'] = '';
  550.         $cadenaPuntosNoUbicados = array();
  551.         $rutasEstudiantesNoUbicados['idRutaMapa'] = 'noasignado';
  552.         $rutasEstudiantesNoUbicados['estudiantesJson'] = '';
  553.         $estudiantes $this->buscarEstudiantes($idColegionull$sentido$diaSemana$puerta1);
  554.         foreach ($estudiantes as $rutaEstudiante) {
  555.            
  556.             $estudiante $rutaEstudiante->getEstudiante();
  557.           
  558.             if ($estudiante->getFoto())
  559.                 $arregloDatosEstudiante['foto'] = $estudiante->getFoto()->getUrl();
  560.             else
  561.                 $arregloDatosEstudiante['foto'] = '';
  562.             
  563.             $arregloDatosEstudiante['Nombre'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$estudiante->getNombreCompleto());
  564.             $sector=$rutaEstudiante->getPunto()->getSector()?$rutaEstudiante->getPunto()->getSector():'';
  565.             $arregloDatosEstudiante['Direccion'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getDireccion()).' '$sector;
  566.             $arregloDatosEstudiante['Referencia'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaEstudiante->getPunto()->getReferenciasUbicacion());
  567.             $arregloDatosEstudiante['id'] = $rutaEstudiante->getId(); //id en la tabla ruta_estudiante_punto
  568.             $arregloDatosEstudiante['idFeature'] = 'est' $estudiante->getId(); //Representar la capa en el mapa
  569.             $arregloDatosEstudiante['idFeatureGroup'] = 'noasignado'//Representar en el grupo la capa en el mapa
  570.             $arregloDatosEstudiante['idEstudiante'] = $estudiante->getId();
  571.             $arregloDatosEstudiante['punto'] = $rutaEstudiante->getPunto()->getGeometria();
  572.             $arregloDatosEstudiante['tipoGeometria'] = 'punto';
  573.             $arregloDatosEstudiante['tipoPasajero'] = 'ESTUDIANTE';
  574.             array_push($rutasEstudiantesNoUbicados['estudiantes'], $arregloDatosEstudiante);
  575.             array_push($cadenaPuntosNoUbicados$rutaEstudiante->getPunto()->getGeometria());
  576.         }
  577.         if (count($cadenaPuntosNoUbicados)) {
  578.             $cadenaPuntosNoUbicados implode('***'$cadenaPuntosNoUbicados);
  579.             $rutasEstudiantesNoUbicados['cadenaPuntos'] = $cadenaPuntosNoUbicados;
  580.             $rutasEstudiantesNoUbicados['estudiantesJson'] = json_encode($rutasEstudiantesNoUbicados['estudiantes']);
  581.         }
  582.         $opciones = array('rutasEstudiantesNoUbicados' => $rutasEstudiantesNoUbicados);
  583.         return $this->render('Cartografia/Cartografia/estudiantesNoAsignados.html.twig'$opciones);
  584.     }
  585.     public function pasajerosNoAsignadosAction($idColegio$sentido$diaSemana$puerta) {
  586.         $puerta1 $puerta == 'true';
  587.         $rutasPasajerosNoUbicados = array();
  588.         $rutasPasajerosNoUbicados['pasajeros'] = array();
  589.         $rutasPasajerosNoUbicados['cadenaPuntos'] = '';
  590.         $cadenaPuntosNoUbicados = array();
  591.         $rutasPasajerosNoUbicados['idRutaMapa'] = 'pasajeronoasignado';
  592.         $rutasPasajerosNoUbicados['pasajerosJson'] = '';
  593.         $pasajeros $this->buscarPasajeros($idColegionull$sentido$diaSemana$puerta1);
  594.         foreach ($pasajeros as $rutaPasajero) {
  595.             $pasajero $rutaPasajero->getPasajero();
  596.             $arregloDatosPasajero['foto'] = '';
  597.             
  598.                 
  599.             $arregloDatosPasajero['Nombre'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$pasajero->getNombreCompleto());
  600.             $arregloDatosPasajero['Direccion'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaPasajero->getPunto()->getDireccion());
  601.             $arregloDatosPasajero['Referencia'] = preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaPasajero->getPunto()->getReferenciasUbicacion());
  602.             $arregloDatosPasajero['id'] = $rutaPasajero->getId(); //id en la tabla ruta_estudiante_punto
  603.             $arregloDatosPasajero['idFeature'] = 'pas' $pasajero->getId(); //Representar la capa en el mapa
  604.             $arregloDatosPasajero['idFeatureGroup'] = 'pasajeronoasignado'//Representar en el grupo la capa en el mapa
  605.             $arregloDatosPasajero['idPasajero'] = $pasajero->getId();
  606.             $arregloDatosPasajero['punto'] = $rutaPasajero->getPunto()->getGeometria();
  607.             $arregloDatosPasajero['tipoGeometria'] = 'punto';
  608.             $arregloDatosPasajero['tipoPasajero'] = 'PASAJERO';
  609.             array_push($rutasPasajerosNoUbicados['pasajeros'], $arregloDatosPasajero);
  610.             array_push($cadenaPuntosNoUbicados$rutaPasajero->getPunto()->getGeometria());
  611.         }
  612.         if (count($cadenaPuntosNoUbicados)) {
  613.             $cadenaPuntosNoUbicados implode('***'$cadenaPuntosNoUbicados);
  614.             $rutasPasajerosNoUbicados['cadenaPuntos'] = $cadenaPuntosNoUbicados;
  615.             $rutasPasajerosNoUbicados['pasajerosJson'] = json_encode($rutasPasajerosNoUbicados['pasajeros']);
  616.         }
  617.         $opciones = array('rutasPasajerosNoUbicados' => $rutasPasajerosNoUbicados);
  618.         return $this->render('Cartografia/Cartografia/pasajerosNoAsignados.html.twig'$opciones);
  619.     }
  620.     
  621.     private function buscarRutas($idColegio$idOperadora$sentido$diaSemana$puerta
  622.     {
  623.         $em $this ->em;
  624.         
  625.         $user $this->get('security.context')->getToken()->getUser();       
  626.         if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
  627.         { 
  628.             $colegio $user->getCliente();
  629.             $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  630.                           ->getPeriodoSeleccionado($this->get('session'),$colegio);           
  631.             
  632.         }else{
  633.             
  634.             $colegio $user->getColegio();
  635.             $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  636.                           ->getPeriodoSeleccionado($this->get('session'),$colegio);   
  637.             
  638.         }             
  639.         
  640.         $parametrosBusqueda = array('colegio' => $idColegio'sentido' => $sentido'transportista' => $idOperadora'diaSemana' => $diaSemana'puerta' => $puerta'periodoEscolar'=>$periodo->getId());
  641.        
  642.         $order = array('numero' => 'ASC');
  643.         $rutasDefinidas $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->findBy($parametrosBusqueda,$order);
  644.         return $rutasDefinidas;
  645.     }
  646.     private function buscarEmpresaRutas($idEmpresa$idOperadora$sentido$diaSemana$tipoRuta$sucursal)
  647.     {
  648.         $em $this ->em;
  649.         $rutasDefinidas $em->getRepository("StrategicAppBundle:OperEmpresaRutaDefinicion")->createQueryBuilder('r')
  650.                 ->leftJoin('r.empresa','empresa')
  651.                 ->where('empresa.id='.$idEmpresa)
  652.                 ->leftJoin('r.sentido','sentido')
  653.                 ->andWhere('sentido.id='.$sentido)
  654.                 ->leftJoin('r.transportista','transportista')
  655.                 ->andWhere('transportista.id='.$idOperadora)
  656.                 ->andWhere('r.diaSemana=:DIASEMANA')
  657.                 ->setParameter('DIASEMANA',$diaSemana)
  658.                 ->andWhere('r.tipoRuta='.$tipoRuta)
  659.                 ->orderBy('r.numero''ASC');
  660.         if ($sucursal!='none')
  661.         {
  662.             $rutasDefinidas->leftJoin('r.sucursales','sucursal')
  663.                     ->andWhere('sucursal.id='.$sucursal);
  664.         }
  665.         $rutasDefinidas $rutasDefinidas->getQuery()->getResult();
  666.         return $rutasDefinidas;
  667.     }
  668.     private function buscarEstudiantes($idColegio$idRuta$sentido$diaSemana$puerta,$nivel=null$sector=null,$seccion=null)
  669.     {
  670.         $em $this ->em;
  671.         $colegio $em->getRepository('StrategicAppBundle:OperClientes')->find($idColegio);
  672.         $session =  $this->get('session');
  673.         $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  674.                       ->getPeriodoSeleccionado($session,$colegio);   
  675.         
  676.         $em $this ->em;
  677.         $user $this->get('security.context')->getToken()->getUser();                
  678.         $estudiantesQuery $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->createQueryBuilder("oerp")
  679.                 ->leftJoin("oerp.estudiante""est")
  680.                 ->leftJoin("oerp.punto""pto")
  681.                 ->leftJoin("oerp.periodoEscolar""per")
  682.                 ->where("oerp.sentido = :filtroSentido")
  683.                 ->andWhere("est.colegio = :filtroColegio")
  684.                 ->andWhere("oerp.diaSemana = :filtroDiaSemana")  
  685.                 ->andWhere("per.id = ".$periodo->getId())
  686.                 ->setParameter("filtroColegio"$idColegio)
  687.                 ->setParameter("filtroSentido"$sentido)
  688.                 ->setParameter("filtroDiaSemana"$diaSemana)
  689.                 ->orderBy("oerp.orden");
  690.         if($nivel && $nivel!='all' &&  $nivel != 'null'){
  691.              $estudiantesQuery ->andWhere("est.nivel in (".$nivel.")");
  692.                     //->setParameter("filtroNivel", $nivel);
  693.         }
  694.         
  695.         if($seccion && $seccion!='all' &&  $seccion != 'null'){
  696.              /*$arrSeccion=  explode(',', $seccion);
  697.              $secciones=array();
  698.              foreach ($arrSeccion as $value) {
  699.                  $secciones[]=$value;                                  
  700.              }*/
  701.              $estudiantesQuery ->andWhere("est.seccion in (:secciones)")
  702.                                 ->setParameter("secciones"$seccion);
  703.         }
  704.         
  705.         
  706.         if($sector && $sector!='all' && $sector!='null' ){
  707.              $estudiantesQuery ->leftJoin('oerp.punto','punto')
  708.                      ->leftJoin('punto.sector','sector')
  709.                      ->andWhere("sector.id in (".$sector.")");
  710.                     //->setParameter("filtroNivel", $nivel);
  711.         }
  712.         
  713.         if ($idRuta)
  714.             $estudiantesQuery->andWhere("oerp.ruta = :filtroRuta")
  715.                     ->setParameter("filtroRuta"$idRuta);
  716.         else
  717.         { 
  718.             
  719.             $user $this->get('security.context')->getToken()->getUser();       
  720.             if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
  721.             { 
  722.                 $colegio $user->getCliente();
  723.                 $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  724.                               ->getPeriodoSeleccionado($this->get('session'),$colegio);           
  725.             }
  726.             else
  727.             {
  728.                 $colegio $user->getColegio();
  729.                 $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  730.                               ->getPeriodoSeleccionado($this->get('session'),$colegio);   
  731.             }   
  732.             $estudiantesQuery->andWhere("oerp.ruta IS NULL")
  733.                     ->leftJoin('est.solicitudes''solicitud')
  734.                     ->andWhere("solicitud.estado='".EstadoSolicitudEnum::APROBADA."'")
  735.                     ->leftJoin('solicitud.curso''periodo')
  736.                     ->andWhere('periodo.id = '.$periodo->getId());
  737.         }
  738.         if ($puerta)
  739.             $estudiantesQuery->andWhere("pto.representanteLegal IS NOT NULL");
  740.         else
  741.             $estudiantesQuery->andWhere("pto.representanteLegal IS NULL");
  742.         $estudiantes $estudiantesQuery->getQuery()->getResult();
  743.         return $estudiantes;
  744.     }
  745.     
  746.     private function buscarPasajeros($idColegio$idRuta$sentido$diaSemana$puerta,$nivel=null$sector=null)
  747.     {
  748.         $em $this ->em;
  749.         
  750.         $session =  $this->get('session');
  751.             if ($periodosSeleccionados $session->get('periodos'))
  752.             {
  753.                 if (isset($periodosSeleccionados[$idColegio]))
  754.                 {
  755.                     $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')->find($periodosSeleccionados[$idColegio]);                    
  756.                 }
  757.             }
  758.             
  759.         $pasajerosQuery $em->getRepository("StrategicAppBundle:OperPasajeroRutaPunto")->createQueryBuilder("oerp")
  760.                 ->leftJoin("oerp.persona""per")
  761.                 ->leftJoin('StrategicAppBundle:OperPasajerosColegio''pco''WITH''pco.persona = per.id')
  762.                 ->leftJoin("oerp.punto""pto")
  763.                 ->leftJoin("oerp.periodoEscolar""periodo")
  764.                 ->where("oerp.sentido = :filtroSentido")
  765.                 ->andWhere("periodo.id = ".$periodo->getId())                
  766.                 ->andWhere("pco.colegio = :filtroColegio")
  767.                 ->andWhere("oerp.diaSemana = :filtroDiaSemana")               
  768.                 ->setParameter("filtroColegio"$idColegio)
  769.                 ->setParameter("filtroSentido"$sentido)
  770.                 ->setParameter("filtroDiaSemana"$diaSemana)               
  771.                 ->orderBy("oerp.orden");
  772.         
  773.         if($sector && $sector!='all' && $sector!='null'){
  774.              $pasajerosQuery ->leftJoin('pto.sector','sector')
  775.                      ->andWhere("sector.id in (".$sector.")");
  776.                     //->setParameter("filtroNivel", $nivel);
  777.         }
  778.         if ($idRuta)
  779.             $pasajerosQuery->andWhere("oerp.ruta = :filtroRuta")
  780.                     ->setParameter("filtroRuta"$idRuta);
  781.         else
  782.             $pasajerosQuery->andWhere("oerp.ruta IS NULL");        
  783.         $pasajeros $pasajerosQuery->getQuery()->getResult();
  784.         return $pasajeros;
  785.     }
  786.     
  787.     private function buscarPasajerosEmpresa($idEmpresa$idRuta$sentido$diaSemana$tipoRuta$sucursal)
  788.     {
  789.         $em $this ->em;
  790.         $pasajeros $em->getRepository("StrategicAppBundle:OperEmpresaRutaPuntoAsignado")->createQueryBuilder("p")
  791.                         ->where("p.sentido = :SENTIDO")
  792.                         ->andWhere("p.diaSemana = :DIASEMANA")               
  793.                         ->setParameter("SENTIDO"$sentido)
  794.                         ->setParameter("DIASEMANA"$diaSemana)               
  795.                         ->leftJoin("p.pasajero""pasajero")
  796.                         ->andWhere('pasajero.tipoRuta='.$tipoRuta)
  797.                         ->leftJoin('pasajero.empresa','empresa')
  798.                         ->andWhere("empresa.id = :EMPRESA")
  799.                         ->setParameter("EMPRESA"$idEmpresa)
  800.                         ->orderBy("p.orden");
  801.         
  802.         if ($sucursal!='none')
  803.         {
  804.             $pasajeros->leftJoin('pasajero.sucursal''sucursal')
  805.                     ->andWhere('sucursal.id='.$sucursal);
  806.         }
  807.         
  808.         if ($idRuta)
  809.         {
  810.             $pasajeros->leftJoin('p.ruta','ruta')
  811.                       ->andWhere("ruta.id = :RUTA")
  812.                       ->setParameter("RUTA"$idRuta);
  813.         }
  814.         else
  815.             $pasajeros->andWhere("p.ruta IS NULL");        
  816.         $pasajeros $pasajeros->getQuery()->getResult();
  817.         return $pasajeros;
  818.     }
  819.     
  820.     public function terminarDefinicionInicialRutasAction($idColegio$idOperadora$diaSemana$puerta) {
  821.         $em $this ->em;
  822.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  823.         $colegio $idColegio;
  824.         $operadora $idOperadora;
  825.         $colegioObject $em->getRepository("StrategicAppBundle:OperClientes")->find($colegio);
  826.         $puerta1 $puerta == 'true';
  827.         $retornoError '';
  828.         $rutas $this->buscarRutas($idColegio$idOperadora$sentidoDiaSemanaEnum::LUN$puerta1);   
  829.             
  830.             foreach ($rutas as $ruta) {
  831.                 $contador 1;
  832.                 $estudiantes $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
  833.                 $maximoEstudiantes count($estudiantes) + 1;
  834.                 $estudiantesArray = array();
  835.                 foreach ($estudiantes as $estudiante) {
  836.                     ///primero arreglo orden por si me borraron alguno de por medio y no reordenaron
  837.                     $estudiante->setOrden($contador);
  838.                     $em->persist($estudiante);
  839.                     $em->flush();
  840.                     $array['id'] = $estudiante->getEstudiante()->getId();
  841.                     $array['orden'] = $contador;
  842.                     $array['ordenInv'] = $maximoEstudiantes $contador;
  843.                     $array['punto'] = $estudiante->getPunto()->getId();
  844.                     array_push($estudiantesArray$array);
  845.                     $contador ++;
  846.                 }
  847.                 $retornoError $this->replicarRutaDia($ruta$diaSemana$estudiantesArray);
  848.             }
  849.             if ($retornoError == '')
  850.             {    
  851.                 if($puerta1)
  852.                     $colegioObject->setCreacionInicialPuerta(false);
  853.                 else
  854.                     $colegioObject->setCreacionInicialParada(false);
  855.                 $em->persist($colegioObject);
  856.                 $em->flush();
  857.             }
  858.         
  859.         //}
  860.         if ($retornoError == '')
  861.         {    
  862.                 $retornoError 'OK';
  863.         }   
  864.         return new \Symfony\Component\HttpFoundation\Response($retornoError);
  865.     }
  866.     
  867.     private function borrarRutasReplicadas()
  868.     {
  869.         
  870.         $rutas $this->buscarRutas($idColegio$idOperadora$sentidoDiaSemanaEnum::LUN$puerta1);
  871.         
  872.         
  873.         
  874.     }     
  875.     
  876.     private function trabajoHoras($horaini,$horafin$operacion)
  877.     {
  878.       
  879.         
  880.         $horai substr($horaini02);
  881.         $mini substr($horaini32);
  882.         $segi substr($horaini62);
  883.         $horaf substr($horafin02);
  884.         $minf substr($horafin32);
  885.         $segf substr($horafin62);
  886.         $ini = ((($horai 60) * 60) + ($mini 60) + $segi);
  887.         $fin = ((($horaf 60) * 60) + ($minf 60) + $segf);
  888.        
  889.         if($operacion == 'suma')
  890.         {
  891.             $dif $fin $ini;  
  892.             
  893.         }
  894.         
  895.         if ($operacion == 'resta')
  896.         {    
  897.             $dif $fin $ini;           
  898.         }
  899.        
  900.         $difh floor($dif 3600);
  901.         $difm floor(($dif - ($difh 3600)) / 60);
  902.         $difs $dif - ($difm 60) - ($difh 3600);
  903.         return date("H-i-s",mktime($difh,$difm,$difs));
  904.     }
  905.     private function replicarRutaDia($ruta$diaSemana$estudiantes) {
  906.         $diferenciaHoras $this->trabajoHoras($ruta->getHoraInicio()->format('H-i-s'),$ruta->getHoraFin()->format('H-i-s'),'resta'); 
  907.        
  908.         $em $this ->em;
  909.         if ($diaSemana != DiaSemanaEnum::LUN) {
  910.             $rutaReplica = clone $ruta;
  911.             $rutaReplica->setDiaSemana(DiaSemanaEnum::create($diaSemana));      
  912.             $em->persist($rutaReplica);
  913.         }
  914.         $rutaReplicaInv = clone $ruta;
  915.         $rutaReplicaInv->setDiaSemana(DiaSemanaEnum::create($diaSemana));
  916.         $rutaReplicaInv->setSentido($em->getRepository("StrategicAppBundle:NmclSentidoRuta")->find(NmclSentidoRuta::ESCUELA_CASA));
  917.         
  918.                
  919.         $horaInicio $ruta->getColegio()->getHoraInicioEscuelaCasa();        
  920.         $horaFinal $this->trabajoHoras($horaInicio->format('H-i-s'), $diferenciaHoras,'suma');   
  921.         
  922.         $rutaReplicaInv->setHoraInicio($horaInicio);
  923.         $horaFinal \DateTime::createFromFormat 'H-i-s' $horaFinal);
  924.         $rutaReplicaInv->setHoraFin($horaFinal);
  925.         
  926.         
  927.         $em->persist($rutaReplicaInv);
  928.         $em->flush();
  929.         $retornoError '';
  930.         foreach ($estudiantes as $estudiante) {
  931.             $estudiantesQuery $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->createQueryBuilder("oerp")
  932.                             ->where("oerp.estudiante = :filtroEstudiante")
  933.                             ->andWhere("oerp.diaSemana = :filtroDiaSemana")
  934.                             ->andWhere("oerp.ruta IS NULL")
  935.                             ->andWhere("oerp.punto = :filtroPunto")
  936.                             ->setParameter("filtroEstudiante"intval($estudiante['id']))
  937.                             ->setParameter("filtroDiaSemana"$diaSemana)
  938.                             ->setParameter("filtroPunto"intval($estudiante['punto']))
  939.                             ->getQuery()->getResult();
  940.             $ordenEstudiante $estudiante['orden'];
  941.             $ordenInvEstudiante $estudiante['ordenInv'];
  942.             foreach ($estudiantesQuery as $estNoAsig) {
  943.                 if ($estNoAsig->getSentido()->getId() == NmclSentidoRuta::CASA_ESCUELA) {
  944.                     $estNoAsig->setRuta($rutaReplica);
  945.                     $estNoAsig->setOrden($ordenEstudiante);
  946.                 }
  947.                 if ($estNoAsig->getSentido()->getId() == NmclSentidoRuta::ESCUELA_CASA) {
  948.                     $estNoAsig->setRuta($rutaReplicaInv);
  949.                     $estNoAsig->setOrden($ordenInvEstudiante);
  950.                 }
  951.                 $em->persist($estNoAsig);
  952.             }
  953.             try {
  954.                 $em->flush();
  955.             } catch (\RuntimeException $e) {
  956.                 $retornoError $e->getMessage();
  957.                 die();
  958.             }
  959.         }
  960.         return $retornoError;
  961.     }
  962.     
  963.     
  964.     public function generarRutasEjecucionAction() 
  965.     {
  966.         $em $this ->em;
  967.         $securityContext $this->get('security.context');
  968.         $user $securityContext->getToken()->getUser();
  969.         
  970.         $dias = array('DOM','LUN','MAR','MIE','JUE','VIE','SAB');
  971.         $diaSemana $dias[date('N',  time())];        
  972.                    
  973.         
  974.          $user $this->get('security.context')->getToken()->getUser();       
  975.         if ($user->isRoleAssigned('ROLE_ESCOLAR_FUNCIONARIO') || $user->isRoleAssigned('ROLE_ESCOLAR_COORDINADOR') || $user->isRoleAssigned('ROLE_ESCOLAR_ADMIN') || $user->isRoleAssigned('ROLE_ESCOLAR_REGISTRADOR') )
  976.         { 
  977.             $colegio $user->getCliente();
  978.             $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  979.                           ->getPeriodoSeleccionado($this->get('session'),$colegio);           
  980.         }else{
  981.             $colegio $user->getColegio();
  982.             $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  983.                           ->getPeriodoSeleccionado($this->get('session'),$colegio);   
  984.         } 
  985.         
  986.         $parametros = array('diaSemana' => $diaSemana'periodoEscolar'=>$periodo->getId());
  987.         $rutas $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->findBy($parametros);
  988.         
  989.         $retornoError 'OK';
  990.         foreach ($rutas as $ruta) {
  991.             $rutaEjecucion = new OperRutaEjecucion();
  992.             $rutaEjecucion->setRuta($ruta); 
  993.             if($ruta->getUnidad())$rutaEjecucion->setUnidad($ruta->getUnidad()); 
  994.             if($ruta->getConductor())$rutaEjecucion->setConductor($ruta->getConductor()); 
  995.             if($ruta->getAsistenteInterno())$rutaEjecucion->setAsistenteInterno($ruta->getAsistenteInterno()); 
  996.             if($ruta->getAsistenteExterno())$rutaEjecucion->setAsistenteExterno($ruta->getAsistenteExterno()); 
  997.             $rutaEjecucion->setFechaParaEjecucion(new \DateTime());
  998.             $em->persist($rutaEjecucion);
  999.             $em->flush();
  1000.             //carga de las preguntas del check list a la ruta en ejecución
  1001.             $preguntas $em->getRepository("StrategicAppBundle:OperCheckListDef")
  1002.                             ->findBy(array('colegio'=>$ruta->getColegio()->getId(), 'activa'=>true));
  1003.             foreach ($preguntas as $pregunta)
  1004.             {
  1005.                 $ejecPregunta = new OperCheckListEjec();
  1006.                 $ejecPregunta->setPregunta($pregunta);
  1007.                 $ejecPregunta->setRuta($rutaEjecucion);
  1008.                 $em->persist($ejecPregunta);
  1009.             }    
  1010.             $em->flush();
  1011.             
  1012.             //carga de los estudiantes a la ruta en ejecución
  1013.             $estudiantes $em->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")->findBy(array('ruta' => $ruta->getId()));
  1014.             foreach ($estudiantes as $estudiante) {
  1015.                 $estudianteEjecucion = new OperEstudianteRutaPuntoEjecucion();
  1016.                 $estudianteEjecucion->setRuta($rutaEjecucion);
  1017.                 $estudianteEjecucion->setPuntoRecogidaEntrega($estudiante->getPunto());
  1018.                 $estudianteEjecucion->setEstudiante($estudiante->getEstudiante());
  1019.                 $estudianteEjecucion->setOrden($estudiante->getOrden());
  1020.                 $em->persist($estudianteEjecucion);
  1021.             }
  1022.             try {
  1023.                  $em->flush();
  1024.             } 
  1025.             catch (\RuntimeException $e) {
  1026.             
  1027.                 $retornoError $e->getMessage();
  1028.             
  1029.             }
  1030.            
  1031.         }
  1032.         $opciones = array('retorno'=>$retornoError);
  1033.         return $this->render('Cartografia/Cartografia/rutasEjecucionGeneradas.html.twig'$opciones); 
  1034.     }
  1035.     /*     * ***************************************   POr PUNTOS  ****************************************** */
  1036.     public function definicionRutasInicialPuntosAction($idColegio$idOperadora$puerta) {
  1037.         $diaSemana DiaSemanaEnum::LUN;
  1038.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  1039.         $colegio $idColegio;
  1040.         $operadora $idOperadora;
  1041.         $opciones = array('diaSemana' => $diaSemana'sentido' => $sentido'colegio' => $colegio'operadora' => $operadora'puerta' => $puerta);
  1042.         return $this->render('Cartografia/Cartografia/definicionRutasInicialPuntos.html.twig'$opciones);
  1043.     }
  1044.     public function definicionRutasDiasPuntosAction($idColegio$idOperadora$puerta
  1045.     {
  1046.         $em $this ->em;
  1047.         $colegio $idColegio;
  1048.         $operadora $idOperadora;
  1049.         $sentidos = array();
  1050.         $idniveles '0';
  1051.         $niveles = array();
  1052.         $sectores = array();
  1053.         $diaSemana DiaSemanaEnum::LUN;        
  1054.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  1055.               
  1056.         //$nivelesQuery = $em->getRepository("StrategicAppBundle:NmclNivelEscolar") ->findBy( array(), array('orden' => 'ASC') );
  1057.         /*$nivelesQuery = $em->getRepository("StrategicAppBundle:OperNivelEscolar")->createQueryBuilder("one")
  1058.                 ->select("distinct one.nivel, niv.nombre")
  1059.                 ->leftJoin("one.nivel", "niv")
  1060.                 ->orderBy("niv.orden");*/
  1061.         $nivelesQuery $em->getRepository("StrategicAppBundle:OperNivelEscolar")
  1062.                 ->createQueryBuilder("one")
  1063.                 ->leftJoin("one.nivel""niv")
  1064.                 ->leftJoin("one.colegio""colegio")
  1065.                 ->where('colegio.id='.$idColegio)
  1066.                 ->select("DISTINCT niv.id as id""niv.nombre as nombre""niv.orden")
  1067.                 ->orderBy("niv.orden");
  1068.         $resultNiveles $nivelesQuery->getQuery()->getResult(); 
  1069.         $nivelSel '';
  1070.         
  1071.         $sectorQuery $em->getRepository("StrategicAppBundle:OperSectorRuta")->createQueryBuilder("osr")
  1072.                 ->where("osr.geometria is not null")
  1073.                 ->andWhere("osr.cliente = :filtroColegio")
  1074.                 ->setParameter("filtroColegio"$idColegio);
  1075.         $resultSectores $sectorQuery->getQuery()->getResult(); 
  1076.         $sectorSel '';
  1077.         
  1078.         $cliente $em->getRepository("StrategicAppBundle:OperClientes")->find($idColegio);
  1079.         if($cliente->getTipoEntidad()->getId()==2)
  1080.         {
  1081.             $diasSemana DiaSemanaEnum::getAdministrativasPossibleValues();
  1082.         }
  1083.         else
  1084.         {
  1085.             $diasSemana DiaSemanaEnum::getPossibleValues();
  1086.         }
  1087.         
  1088.         
  1089.         if($cliente->getManejaSecciones())
  1090.         {
  1091.             $secciones SeccionesEnum::getPossibleValues();
  1092.         }else{
  1093.             $secciones=array();
  1094.             
  1095.         }      
  1096.         
  1097.         $sentidosQuery $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
  1098.         $sentidoSel '';
  1099.         $replicaSel 'Replicar Ambos Sentidos';
  1100.         foreach ($sentidosQuery as $sent) {
  1101.             if ($sent->getId() == $sentido)
  1102.                 $sentidoSel $sent->getNombre();
  1103.             $arr['texto'] = $sent->getNombre();
  1104.             $arr['valor'] = $sent->getId();
  1105.             array_push($sentidos$arr);       
  1106.         }
  1107.         
  1108.         foreach ($resultNiveles as $niv) {
  1109.             /*if ($niv->getId() == $sentido)
  1110.                 $nivelSel = $sent->getNombre();*/
  1111.             $niveles[$niv["id"]]=$niv["nombre"];
  1112.             $idniveles=$idniveles.','.$niv["id"];
  1113.         }
  1114.        
  1115.         foreach ($resultSectores as $sec) {
  1116.             $sectores[$sec->getId()]=$sec->__toString();
  1117.         }
  1118.                             
  1119.         $curso $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')
  1120.                  ->getPeriodoSeleccionado($this->get('session'), $cliente);
  1121.         $cursosMostrar $curso;
  1122.                 
  1123.                 
  1124.         $opciones = array('diaSemana' => $diaSemana,
  1125.             'sentido' => $sentido,
  1126.             'colegio' => $colegio
  1127.             'operadora' => $operadora
  1128.             'puerta' => $puerta
  1129.             'diasSemana' => $diasSemana
  1130.             'sentidos' => $sentidos
  1131.             'sentidoSel' => $sentidoSel
  1132.             'sectores' => $sectores,
  1133.             'sector'=>'all'
  1134.             'niveles' => $niveles
  1135.             'nivelSel' => $nivelSel,
  1136.             'nivel'=>'all',
  1137.             'replicaSel'=>$replicaSel,
  1138.             'cursosMostrar'=>$cursosMostrar,
  1139.             'secciones'=>$secciones,
  1140.             'seccion'=>'all');
  1141.         return $this->render('Cartografia/Cartografia/definicionRutasDiasPuntos.html.twig'$opciones);
  1142.     }
  1143.     
  1144.     public function definicionRutasEmpresaDiasPuntosAction($idEmpresa$idOperadora$administrativa$sucursal 'none'
  1145.     {
  1146.         $em $this ->em;
  1147.         $empresa $idEmpresa;
  1148.         $operadora $idOperadora;
  1149.         $sentidos = array();
  1150.         $diaSemana DiaSemanaEnum::LUN;        
  1151.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  1152.         
  1153.         $diasSemana DiaSemanaEnum::getPossibleValues();
  1154.         
  1155.         $sentidosQuery $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
  1156.         $sentidoSel '';
  1157.         $replicaSel 'Replicar Ambos Sentidos';
  1158.         foreach ($sentidosQuery as $sent)
  1159.         {
  1160.             if ($sent->getId() == $sentido)
  1161.                 $sentidoSel $sent->getNombre();
  1162.             $sentidos[$sent->getId()] = $sent->getNombre();       
  1163.         }
  1164.         
  1165.         if ($administrativa=='true')
  1166.             $tipoRuta TipoRutaEnum::getReadableFor(TipoRutaEnum::ADMINISTRATIVAS);
  1167.         else
  1168.             $tipoRuta TipoRutaEnum::getReadableFor(TipoRutaEnum::OPERATIVAS);
  1169.         $tiposRuta = array('true' =>TipoRutaEnum::getReadableFor(TipoRutaEnum::ADMINISTRATIVAS), 
  1170.                            'false'=>TipoRutaEnum::getReadableFor(TipoRutaEnum::OPERATIVAS));
  1171.         
  1172.         $contratos $em->getRepository('StrategicAppBundle:OperContratoColegioTransporte')->findBy(array('colegio'=>$idEmpresa));
  1173.         $operadoras = array();
  1174.         foreach ($contratos as $contrato)
  1175.         {
  1176.             $transportista $contrato->getTransportista();
  1177.             $operadoras[$transportista->getId()] = $transportista->__toString();
  1178.             if ($transportista->getId() == $operadora)
  1179.             {
  1180.                 $operadoraSel $transportista->__toString();
  1181.             }
  1182.         }
  1183.         
  1184.         $sucursales $em->getRepository('StrategicAppBundle:OperClientesSucursales')->findBy(array('cliente'=>$idEmpresa));
  1185.         if ($sucursal!='none')
  1186.         {
  1187.             $sucursal $em->getRepository('StrategicAppBundle:OperClientesSucursales')->find($sucursal);
  1188.         }
  1189.         else
  1190.             $sucursal null;
  1191.         
  1192.         $opciones = array('diaSemana' => $diaSemana'sentido' => $sentido'empresa' => $empresa'operadora' => $operadora,
  1193.                           'administrativa' => $administrativa'diasSemana' => $diasSemana'sentidos' => $sentidos'sentidoSel' => $sentidoSel,
  1194.                           'replicaSel'=>$replicaSel'tipoRuta'=>$tipoRuta'tiposRuta'=>$tiposRuta'operadoraSel'=>$operadoraSel,
  1195.                           'operadoras'=>$operadoras'sucursal'=>$sucursal'sucursales'=>$sucursales);
  1196.         return $this->render('Cartografia/Cartografia/definicionRutasEmpresaDiasPuntos.html.twig'$opciones);
  1197.     }
  1198.     
  1199.     
  1200.     public function mostrarRutasDiasPuntosAction($idColegio$idOperadora$puerta) {
  1201.         $em $this ->em;
  1202.         $colegio $idColegio;
  1203.         $operadora $idOperadora;
  1204.         $sentidos = array();
  1205.         
  1206.         $diaSemana DiaSemanaEnum::LUN;        
  1207.         $sentido NmclSentidoRuta::CASA_ESCUELA;
  1208.         $diasSemana DiaSemanaEnum::getPossibleValues();
  1209.         $sentidosQuery $em->getRepository("StrategicAppBundle:NmclSentidoRuta")->findAll();
  1210.         $sentidoSel '';
  1211.         foreach ($sentidosQuery as $sent) {
  1212.             if ($sent->getId() == $sentido)
  1213.                 $sentidoSel $sent->getNombre();
  1214.             $arr['texto'] = $sent->getNombre();
  1215.             $arr['valor'] = $sent->getId();
  1216.             array_push($sentidos$arr);
  1217.         }
  1218.         $opciones = array('diaSemana' => $diaSemana'sentido' => $sentido'colegio' => $colegio'operadora' => $operadora'puerta' => $puerta'diasSemana' => $diasSemana'sentidos' => $sentidos'sentidoSel' => $sentidoSel);
  1219.         return $this->render('Cartografia/Cartografia/mostrarRutasDiasPuntos.html.twig'$opciones);
  1220.     }
  1221.     public function  estudiantesNoAsignadosPuntosAction($idColegio$sentido$diaSemana,$puerta,$nivel=null$sector=null,$seccion=null,$modificar
  1222.     {
  1223.         $puerta1 $puerta == 'true';
  1224.         $em $this ->em;
  1225.         $data['ID_RUTA_MAPA'] = 'noasignado';
  1226.         $data['CADENA_PUNTOS'] = '';
  1227.         $data['ESTUDIANTES_JSON'] = '';
  1228.         $data['TOTAL_ESTUDIANTES'] = 0;
  1229.         $data['PROPERTIES_JSON'] = '';
  1230.         $orden 1;
  1231.         $puntos =  $this->buscarEstudiantes($idColegionull$sentido$diaSemana$puerta1,$nivel$sector$seccion);
  1232.         
  1233.         $data['PUNTOS'] = array();
  1234.         $dataPuntos = array();
  1235.         $arrayPuntos = array();
  1236.         $totalEstudiantes 0;
  1237.         foreach ($puntos as $punto) {
  1238.             if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) {
  1239.                 if ($puerta1)
  1240.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1241.                 else
  1242.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1243.                 
  1244.                 $geometria $punto->getPunto()->getGeometria();
  1245.                 $latlon str_replace('POINT('''$geometria);
  1246.                 $latlon str_replace(')','',$latlon);
  1247.                 $latlon explode(' '$latlon);
  1248.                 
  1249.                 $sector$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR';
  1250.                 
  1251.                 $direccion=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1252.                 $refUbicacion=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion());
  1253.                         
  1254.                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1255.                     'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1256.                     'DIRECCION' => ' '.$direccionstrtoupper($sector),
  1257.                     'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),                   
  1258.                     'REFERENCIA' => $refUbicacion,
  1259.                     'GEOMETRIA' => $geometria,
  1260.                     'LONGITUD' =>$latlon[1],
  1261.                     'LATITUD' =>$latlon[0],
  1262.                     'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1263.                     'ORDEN' => $orden,
  1264.                     'ID_PUNTO' => $punto->getPunto()->getId(), 
  1265.                     'ID_RUTA' => 'noasignado',
  1266.                     'ETIQUETA' => $etiqueta,
  1267.                     'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  1268.                     'ID_FEATURE_GROUP' => 'noasignado',
  1269.                     'TIPO_GEOMETRIA' => 'punto',
  1270.                     'TIPO_PASAJERO' => 'ESTUDIANTE'  
  1271.                     
  1272.                 );
  1273.                 $orden += 1;
  1274.                 array_push($arrayPuntos$punto->getPunto()->getGeometria());
  1275.                 
  1276.             }
  1277.             
  1278.             $nombreEst=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
  1279.             $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
  1280.                 'ID' => $punto->getId(),
  1281.                 'ORDEN' => $punto->getOrden(),
  1282.                 'ID_ESTUDIANTE' => $punto->getEstudiante()->getId(),
  1283.                 'NOMBRE' => $nombreEst,
  1284.                 'FOTO' => $punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO',
  1285.                 'TIPO_PASAJERO' =>'ESTUDIANTE',
  1286.                
  1287.             );
  1288.             
  1289.                       
  1290.             $totalEstudiantes ++;
  1291.         }
  1292.         
  1293.         foreach ($dataPuntos as  $i => $valorPunto) {
  1294.             if($valorPunto != null){
  1295.                 $data['PUNTOS'][] = $valorPunto;
  1296.             }
  1297.         }
  1298.         if (count($arrayPuntos)) {
  1299.             $arrayPuntos implode('***'$arrayPuntos);
  1300.             $data['CADENA_PUNTOS'] = $arrayPuntos;
  1301.             $data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
  1302.             $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1303.                 
  1304.             /*$logger = $this->get('logger');
  1305.             $logger->err($data['PROPERTIES_JSON']);
  1306.             $logger->err('fin logger');*/
  1307.         }
  1308.         $opciones = array('puntosNoUbicados' => $data);
  1309.         if($modificar == 1)
  1310.             return $this->render('Cartografia/Cartografia/estudiantesNoAsignadosPuntos.html.twig'$opciones);
  1311.         else
  1312.             return $this->render('Cartografia/Cartografia/estudiantesNoAsignadosPuntosVisualizar.html.twig'$opciones); 
  1313.     }
  1314.     
  1315.     public function  estudiantesSinSolicitudDeTransporteAction ($idColegio $sentido$diaSemana ,$puerta,$nivel=null$sector=null,$seccion=null   )
  1316.     {
  1317.         $puerta1  $puerta;
  1318.         $em $this ->em;
  1319.         $session =  $this->get('session');
  1320.         $idPeriodo = -1;
  1321.         if ($periodosSeleccionados $session->get('periodos'))
  1322.         {
  1323.             if (isset($periodosSeleccionados[$idColegio]))
  1324.             {
  1325.                 $periodo $em->getRepository('StrategicAppBundle:OperPeriodoEscolar')->find($periodosSeleccionados[$idColegio]);
  1326.                 $idPeriodo $periodo ->getId();
  1327.             }
  1328.         }
  1329.         $data['ID_RUTA_MAPA'] = 'sin_transporte';
  1330.         $data['CADENA_PUNTOS'] = '';
  1331.         $data['ESTUDIANTES_JSON'] = '';
  1332.         $data['TOTAL_ESTUDIANTES'] = 0;
  1333.         $data['PROPERTIES_JSON'] = '';
  1334.         $datosEstudiantes= array(); //$this->buscarEstudiantesSinSolicitudDeTransporte($idColegio ,$idPeriodo, $sentido ,$diaSemana, $nivel, $sector   );
  1335.         //-----------------
  1336.         $data['PUNTOS'] = array();
  1337.         $dataPuntos = array();
  1338.         $arrayPuntos = array();
  1339.         $totalEstudiantes $orden 0;
  1340.         $estudiantes =  array();
  1341.         foreach ($datosEstudiantes as $estud ){
  1342.             $estData = array('ID_ESTUDIANTE' => $estud->getId(),
  1343.                 'NOMBRE' => $estud->getNombreCompleto(),
  1344.                 'FOTO' => $estud->getFoto() ? $estud->getFoto()->getUrl() : 'NO_FOTO',
  1345.                 'TIPO_PASAJERO' =>'ESTUDIANTE');
  1346.                 $estudiantes[$estud->getId()] = array('ESTUDIANTE'=>$estData) ;
  1347.            $rutaSentido $estud->getRutaPuntoDiaSentido($diaSemana,$sentido);
  1348.             if ($rutaSentido !=null ) {
  1349.                     if ($puerta1)
  1350.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaSentido ->getPunto()->getDireccion());
  1351.                     else
  1352.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaSentido -> getPunto()->getNombre());
  1353.                         $geometria $rutaSentido->getPunto()->getGeometria();
  1354.                         $latlon str_replace('POINT('''$geometria);
  1355.                         $latlon str_replace(')'''$latlon);
  1356.                         $latlon explode(' '$latlon);
  1357.                         
  1358.                         $sector$rutaSentido->getPunto()->getSector()?' - '.$rutaSentido->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR';
  1359.                         
  1360.                         
  1361.                         $dataPuntos = array(
  1362.                             'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaSentido->getPunto()->getNombre()),
  1363.                             'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaSentido->getPunto()->getDireccion()).strtoupper($sector),
  1364.                             'ERROR_GPS' => isset($punto)  ? $punto->getPunto()->getErrorGPS() :'',
  1365.                             'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$rutaSentido->getPunto()->getReferenciasUbicacion()),
  1366.                             'GEOMETRIA' => $geometria,
  1367.                             'LONGITUD' => $latlon[1],
  1368.                             'LATITUD' => $latlon[0],
  1369.                             'FOTO' => $rutaSentido->getPunto()->getFoto() ? $rutaSentido->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1370.                             'ORDEN' => $orden,
  1371.                             'ID_PUNTO' => $rutaSentido->getPunto()->getId(),
  1372.                             'ID_RUTA' => 'sin_transporte',
  1373.                             'ETIQUETA' => $etiqueta,
  1374.                             'ID_FEATURE' => 'ptoT_' $rutaSentido->getPunto()->getId(),
  1375.                             'ID_FEATURE_GROUP' => 'sin_transporte',
  1376.                             'TIPO_GEOMETRIA' => 'punto',
  1377.                             'TIPO_PASAJERO' => 'ESTUDIANTE'
  1378.                         );
  1379.                         // --
  1380.                     $data['PUNTOS'][] = $dataPuntos;
  1381.                     $estudiantes[$estud->getId()]['PUNTO']=$dataPuntos ;
  1382.                         $orden += 1;
  1383.                         array_push($arrayPuntos$rutaSentido->getPunto()->getGeometria());
  1384.                 }
  1385.                 $totalEstudiantes ++;
  1386.              }
  1387.             if (count($arrayPuntos)) {
  1388.                 $arrayPuntos implode('***'$arrayPuntos);
  1389.                 $data['CADENA_PUNTOS'] = $arrayPuntos;
  1390.                 $data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
  1391.                 $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1392.                 /*$logger = $this->get('logger');
  1393.                 $logger->err($data['PROPERTIES_JSON']);
  1394.                 $logger->err('fin logger');*/
  1395.             }
  1396.             $opciones = array('puntosNoUbicados' => $data'estudiantes' => $estudiantes);
  1397.             return $this->render('Cartografia/Cartografia/estudiantesSinSolicitudDeTransporte.html.twig'$opciones);
  1398.         //--------------------
  1399.         }
  1400.     
  1401.     public function  pasajerosNoAsignadosPuntosAction($idColegio$sentido$diaSemana,$puerta,$nivel=null$sector=null,$modificar) {
  1402.         
  1403.         $puerta1 $puerta == 'true';
  1404.         $em $this ->em;
  1405.         $data['ID_RUTA_MAPA'] = 'pasajeronoasignado';
  1406.         $data['CADENA_PUNTOS'] = '';
  1407.         $data['PASAJEROS_JSON'] = '';
  1408.         $data['TOTAL_PASAJEROS'] = 0;
  1409.         $data['PROPERTIES_JSON'] = '';
  1410.         $orden 1;
  1411.         $puntos =  $this->buscarPasajeros($idColegionull$sentido$diaSemana$puerta1,$nivel$sector);
  1412.         
  1413.         $data['PUNTOS'] = array();
  1414.         $dataPuntos = array();
  1415.         $arrayPuntos = array();
  1416.         $totalPasajeros 0;
  1417.         foreach ($puntos as $punto) {
  1418.             if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) {
  1419.                 if ($puerta1)
  1420.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1421.                 else
  1422.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1423.                 
  1424.                 $geometria $punto->getPunto()->getGeometria();
  1425.                 $latlon str_replace('POINT('''$geometria);
  1426.                 $latlon str_replace(')','',$latlon);
  1427.                 $latlon explode(' '$latlon);
  1428.                 $sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR'
  1429.                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1430.                     'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1431.                     'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()).strtoupper($sector),
  1432.                     'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  1433.                     'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  1434.                     'GEOMETRIA' => $geometria,
  1435.                     'LONGITUD' =>$latlon[1],
  1436.                     'LATITUD' =>$latlon[0],
  1437.                     'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1438.                     'ORDEN' => $orden,
  1439.                     'ID_PUNTO' => $punto->getPunto()->getId(), 
  1440.                     'ID_RUTA' => 'pasajeronoasignado',
  1441.                     'ETIQUETA' => $etiqueta,
  1442.                     'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  1443.                     'ID_FEATURE_GROUP' => 'pasajeronoasignado',
  1444.                     'TIPO_GEOMETRIA' => 'punto',
  1445.                     'TIPO_PASAJERO' => 'PASAJERO'
  1446.                     
  1447.                 );
  1448.                 $orden += 1;
  1449.                 array_push($arrayPuntos$punto->getPunto()->getGeometria());
  1450.                 
  1451.             }
  1452.             $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['PASAJEROS'][] = array(
  1453.                 'ID' => $punto->getId(),
  1454.                 'ORDEN' => $punto->getOrden(),
  1455.                 'ID_PASAJERO' => $punto->getPersona()->getId(),
  1456.                 'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto()),
  1457.                 'FOTO' => $punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO',
  1458.                 'TIPO_PASAJERO' =>'PASAJERO',
  1459.                
  1460.             );
  1461.             
  1462.                       
  1463.             $totalPasajeros ++;
  1464.         }
  1465.         
  1466.         foreach ($dataPuntos as  $i => $valorPunto) {
  1467.             if($valorPunto != null){
  1468.                 $data['PUNTOS'][] = $valorPunto;
  1469.             }
  1470.         }
  1471.         if (count($arrayPuntos)) {
  1472.             $arrayPuntos implode('***'$arrayPuntos);
  1473.             $data['CADENA_PUNTOS'] = $arrayPuntos;
  1474.             $data['TOTAL_PASAJEROS'] = $totalPasajeros;
  1475.             $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1476.                 
  1477.             /*$logger = $this->get('logger');
  1478.             $logger->err($data['PROPERTIES_JSON']);
  1479.             $logger->err('fin logger');*/
  1480.         }
  1481.         $opciones = array('puntosNoUbicados' => $data);
  1482.         if($modificar == 1)
  1483.             return $this->render('Cartografia/Cartografia/pasajerosNoAsignadosPuntos.html.twig'$opciones);
  1484.         else
  1485.             return $this->render('Cartografia/Cartografia/pasajerosNoAsignadosPuntosVisualizar.html.twig'$opciones); 
  1486.     }
  1487.     public function pasajerosEmpresaNoAsignadosPuntosAction($idEmpresa$sentido$diaSemana,$administrativa,$sucursal,$modificar)
  1488.     {
  1489.         $tipoRuta $administrativa == 'true' TipoRutaEnum::ADMINISTRATIVAS TipoRutaEnum::OPERATIVAS;
  1490.         $em $this ->em;
  1491.         $data['ID_RUTA_MAPA'] = 'pasajeronoasignado';
  1492.         $data['CADENA_PUNTOS'] = '';
  1493.         $data['PASAJEROS_JSON'] = '';
  1494.         $data['TOTAL_PASAJEROS'] = 0;
  1495.         $data['PROPERTIES_JSON'] = '';
  1496.         $orden 1;
  1497.         $puntos =  $this->buscarPasajerosEmpresa($idEmpresanull$sentido$diaSemana$tipoRuta$sucursal);
  1498.         
  1499.         $data['PUNTOS'] = array();
  1500.         $dataPuntos = array();
  1501.         $arrayPuntos = array();
  1502.         $totalPasajeros 0;
  1503.         foreach ($puntos as $punto
  1504.         {
  1505.             if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()]))
  1506.             {
  1507.                 if ($tipoRuta == TipoRutaEnum::ADMINISTRATIVAS)
  1508.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1509.                 else
  1510.                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1511.                 
  1512.                 $geometria $punto->getPunto()->getGeometria();
  1513.                 $latlon str_replace('POINT('''$geometria);
  1514.                 $latlon str_replace(')','',$latlon);
  1515.                 $latlon explode(' '$latlon);
  1516.                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1517.                     'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1518.                     'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
  1519.                     'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  1520.                     'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  1521.                     'GEOMETRIA' => $geometria,
  1522.                     'LONGITUD' =>$latlon[1],
  1523.                     'LATITUD' =>$latlon[0],
  1524.                     'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1525.                     'ORDEN' => $orden,
  1526.                     'ID_PUNTO' => $punto->getPunto()->getId(), 
  1527.                     'ID_RUTA' => 'pasajeronoasignado',
  1528.                     'ETIQUETA' => $etiqueta,
  1529.                     'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  1530.                     'ID_FEATURE_GROUP' => 'pasajeronoasignado',
  1531.                     'TIPO_GEOMETRIA' => 'punto',
  1532.                     'TIPO_PASAJERO' => 'PASAJERO'
  1533.                 );
  1534.                 $orden += 1;
  1535.                 array_push($arrayPuntos$punto->getPunto()->getGeometria());
  1536.                 
  1537.             }
  1538.             $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['PASAJEROS'][] = array(
  1539.                 'ID' => $punto->getId(),
  1540.                 'ORDEN' => $punto->getOrden(),
  1541.                 'ID_PASAJERO' => $punto->getPasajero()->getId(),
  1542.                 'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto()),
  1543.                 'FOTO' => $punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO',
  1544.                 'TIPO_PASAJERO' =>'PASAJERO',
  1545.             );
  1546.                       
  1547.             $totalPasajeros ++;
  1548.         }
  1549.         
  1550.         foreach ($dataPuntos as  $i => $valorPunto)
  1551.         {
  1552.             if($valorPunto != null)
  1553.             {
  1554.                 $data['PUNTOS'][] = $valorPunto;
  1555.             }
  1556.         }
  1557.         if (count($arrayPuntos))
  1558.         {
  1559.             $arrayPuntos implode('***'$arrayPuntos);
  1560.             $data['CADENA_PUNTOS'] = $arrayPuntos;
  1561.             $data['TOTAL_PASAJEROS'] = $totalPasajeros;
  1562.             $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1563.                 
  1564.             /*$logger = $this->get('logger');
  1565.             $logger->err($data['PROPERTIES_JSON']);
  1566.             $logger->err('fin logger');*/
  1567.         }
  1568.         $opciones = array('puntosNoUbicados' => $data);
  1569.         if($modificar == 1)
  1570.             return $this->render('Cartografia/Cartografia/pasajerosEmpresaNoAsignadosPuntos.html.twig'$opciones);
  1571.         else
  1572.             return $this->render('Cartografia/Cartografia/pasajerosEmpresaNoAsignadosPuntosVisualizar.html.twig'$opciones); 
  1573.     }
  1574.     public function  rutasDefinidasPuntosAction($idColegio$idOperadora$sentido$diaSemana$puerta,$modificar) {
  1575.         
  1576.         $puerta1 $puerta == 'true';
  1577.         $rutasDefinidas $this->buscarRutas($idColegio$idOperadora$sentido$diaSemana$puerta1);
  1578.         $rutasDefinidasArray = array();
  1579.         $em $this ->em;
  1580.         foreach ($rutasDefinidas as $ruta) {
  1581.             try {
  1582.                 $data = array();
  1583.                 if ($ruta) {
  1584.                     $data['ID'] = $ruta->getId();
  1585.                     $data['ID_RUTA_MAPA'] = 'rut_' $ruta->getId();
  1586.                     $sector=$ruta->getSector()?$ruta->getSector()->getNombre():'';
  1587.                     $data['NOMBRE'] = $ruta->getNumero();
  1588.                     $data['SECTOR'] = $sector;
  1589.                     $data['HORA'] = $ruta->getHoraInicio();
  1590.                     $data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
  1591.                     $data['ASISTENTEEXTERNO'] = $ruta->getAsistenteExterno() ? $ruta->getAsistenteExterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_EXTERNO';
  1592.                     $data['ASISTENTEINTERNO'] = $ruta->getAsistenteInterno() ? $ruta->getAsistenteInterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_INTERNO';
  1593.                     $data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '$ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
  1594.                     $data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
  1595.                     $data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
  1596.                     $data['ESCUELA']['ID'] = $ruta->getColegio()->getId();
  1597.                     $data['ESCUELA']['NOMBRE'] = $ruta->getColegio()->getNombre();
  1598.                     $data['SENTIDO'] = $ruta->getSentido()->getNombre();
  1599.                     $data['CADENA_PUNTOS'] = '';
  1600.                     $data['TOTAL_ESTUDIANTES'] = 0;
  1601.                     $data['TOTAL_PERMITIDO'] = 0;
  1602.                     $data['PROPERTIES_JSON'] = '';
  1603.                     $data['COLOR_BUS'] = 'green';
  1604.                     $data['MSG_BUS'] = '';
  1605.                     
  1606.                     
  1607.                     $orden 1;
  1608.                     $msgError '';
  1609.                     
  1610.                     $puntos $em->getRepository('StrategicAppBundle:OperEstudianteRutaPunto')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));                    
  1611.                     $data['PUNTOS'] = array();
  1612.                     $dataPuntos = array();
  1613.                     $arrayPuntos = array();
  1614.                     $totalEstudiantes 0;
  1615.                     foreach ($puntos as $punto) {
  1616.                         if($punto->getPunto()){
  1617.                             
  1618.                             if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) {
  1619.                                 if ($puerta1)
  1620.                                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1621.                                 else
  1622.                                     $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1623.                                 $geometria $punto->getPunto()->getGeometria();
  1624.                                 $latlon str_replace('POINT('''$geometria);
  1625.                                 $latlon str_replace(')','',$latlon);
  1626.                                 $latlon explode(' '$latlon);
  1627.                                 if($punto->getEstudiante()){
  1628.                                     $tipo='ESTUDIANTE';
  1629.                                     $id_pasajero=$punto->getEstudiante()->getId();
  1630.                                     $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
  1631.                                     $foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
  1632.                                 }else{
  1633.                                     $tipo='PASAJERO';
  1634.                                     $id_pasajero=$punto->getPersona()->getId();
  1635.                                     $nombre=$punto->getPersona()->getNombreCompleto();
  1636.                                     $foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  1637.                                 } 
  1638.                                 
  1639.                                 $sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR ';
  1640.                                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1641.                                     'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1642.                                     'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()).strtoupper($sector),
  1643.                                     'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  1644.                                     'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  1645.                                     'GEOMETRIA' => $geometria,
  1646.                                     'LONGITUD' =>$latlon[1],
  1647.                                     'LATITUD' =>$latlon[0],                                
  1648.                                     'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1649.                                     'ORDEN' => $orden,
  1650.                                     'ID_PUNTO' => $punto->getPunto()->getId(),
  1651.                                     'ID_RUTA' => $ruta->getId(),
  1652.                                     'ETIQUETA' => $etiqueta,
  1653.                                     'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  1654.                                     'ID_FEATURE_GROUP' => 'rut_' $ruta->getId(),
  1655.                                     'TIPO_GEOMETRIA' => 'punto',
  1656.                                     'TIPO_PASAJERO' => $tipo,
  1657.                                 );
  1658.                                 $orden += 1;
  1659.                                 array_push($arrayPuntos$punto->getPunto()->getGeometria());
  1660.                             }
  1661.                         
  1662.                         
  1663.                         if($punto->getEstudiante()){
  1664.                             $tipo='ESTUDIANTE';
  1665.                             $id_pasajero=$punto->getEstudiante()->getId();
  1666.                             $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
  1667.                             $foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
  1668.                         }else{
  1669.                             $tipo='PASAJERO';
  1670.                             $id_pasajero=$punto->getPersona()->getId();
  1671.                             $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
  1672.                             $foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  1673.                         }    
  1674.                         $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
  1675.                             'ID' => $punto->getId(),
  1676.                             'ORDEN' => $punto->getOrden(),
  1677.                             'TIPO_PASAJERO' => $tipo,
  1678.                             'ID_ESTUDIANTE' => $id_pasajero,
  1679.                             'NOMBRE' => $nombre,
  1680.                             'FOTO' => $foto,
  1681.                         );
  1682.                         /*$dataPuntos['PUNTO-' . $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
  1683.                             'ID' => $punto->getId(),
  1684.                             'ORDEN' => $punto->getOrden(),
  1685.                             'ID_ESTUDIANTE' => $punto->getEstudiante()->getId(),
  1686.                             'NOMBRE' => $punto->getEstudiante()->getNombreCompleto(),
  1687.                             'FOTO' => $punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO',
  1688.                            
  1689.                         );*/
  1690.                         $totalEstudiantes ++;
  1691.                         }
  1692.                     }
  1693.                     $arrayEstudiantes = array();
  1694.                     foreach ($dataPuntos as $valorPunto) {                        
  1695.                         array_push($arrayEstudiantes$valorPunto['ESTUDIANTES']);                        
  1696.                         $data['PUNTOS'][] = $valorPunto;
  1697.                     }
  1698.                     if (count($arrayPuntos)) {
  1699.                         $arrayPuntos implode('***'$arrayPuntos);
  1700.                         $data['CADENA_PUNTOS'] = $arrayPuntos;                    
  1701.                         $data['ESTUDIANTES_JSON'] = json_encode($arrayEstudiantes);
  1702.                         $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1703.                     }
  1704.                     
  1705.                     $data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
  1706.                     $data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;   
  1707.                     
  1708.                     /************** Validaciones para mostrar errores ******************************/
  1709.                     if($data['TOTAL_ESTUDIANTES'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
  1710.                     {
  1711.                         $diferencia =  $data['TOTAL_ESTUDIANTES'] - $data['TOTAL_PERMITIDO'];                        
  1712.                         $msgError .= 'La capacidad del bus está exedida en '.$diferencia.' estudiantes<br>';
  1713.                         $data['COLOR_BUS'] = 'red';
  1714.                         
  1715.                     }
  1716.                     if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
  1717.                     {
  1718.                         $msgError .= 'No se ha definido conductor para la ruta <br>';
  1719.                         $data['COLOR_BUS'] = 'red';
  1720.                         
  1721.                     }
  1722.                     
  1723.                     if( $data['UNIDAD'] == 'NO_UNIDAD')
  1724.                     {
  1725.                         $msgError .= 'No se ha definido unidad para la ruta <br>';
  1726.                         $data['COLOR_BUS'] = 'red';
  1727.                         
  1728.                     }
  1729.                     if( $data['ASISTENTEEXTERNO'] == 'NO_ASISTENTE_EXTERNO' && $data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
  1730.                     {
  1731.                         $msgError .= 'Debe definir un asistente externo o interno para la ruta <br>';
  1732.                         $data['COLOR_BUS'] = 'red';
  1733.                         
  1734.                     }
  1735.                     
  1736.                     if($msgError == '')
  1737.                     {
  1738.                         if($data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
  1739.                             $asistente=$data['ASISTENTEEXTERNO'];
  1740.                         else
  1741.                             $asistente=$data['ASISTENTEINTERNO'];
  1742.                     
  1743.                       $msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
  1744.                       $msgError .= 'Unidad a ejecutar la ruta: '$data['UNIDAD'].'<br>';
  1745.                       $msgError .= 'Capacidad de la unidad: '$data['TOTAL_PERMITIDO'].' pasajeros<br>';
  1746.                       $msgError .= 'Conductor: '$data['CONDUCTOR'].'<br>';
  1747.                       $msgError .= 'Asistente: '.$asistente.'<br>';
  1748.                     }    
  1749.                     $data['MSG_BUS'] = $msgError;
  1750.                     
  1751.                     
  1752.                     /****************************************************************************/
  1753.                     
  1754.                     
  1755.                     
  1756.                     
  1757.                     
  1758.                     
  1759.                     
  1760.                 } else
  1761.                     $data['ID'] = 'NO_ROUTE';
  1762.                 array_push($rutasDefinidasArray$data);
  1763.             } catch (\RuntimeException $e) {
  1764.                 $retornoError $e->getMessage();
  1765.                  return new \Symfony\Component\HttpFoundation\Response($retornoError);
  1766.             }
  1767.         }
  1768.         $opciones = array('rutasDefinidas' => $rutasDefinidasArray);
  1769.         if($modificar == 1)
  1770.             return $this->render('Cartografia/Cartografia/rutasDefinidasPuntos.html.twig'$opciones);
  1771.         else
  1772.             return $this->render('Cartografia/Cartografia/rutasDefinidasPuntosVisualizar.html.twig'$opciones);
  1773.     }
  1774.     
  1775.     public function  rutasEmpresaDefinidasPuntosAction($idEmpresa$idOperadora$sentido$diaSemana$administrativa$sucursal$modificar)
  1776.     {
  1777.         $tipoRuta $administrativa == 'true' TipoRutaEnum::ADMINISTRATIVAS TipoRutaEnum::OPERATIVAS;
  1778.         $rutasDefinidas $this->buscarEmpresaRutas($idEmpresa$idOperadora$sentido$diaSemana$tipoRuta$sucursal);
  1779.         $rutasDefinidasArray = array();
  1780.         $em $this ->em;
  1781.         foreach ($rutasDefinidas as $ruta)
  1782.         {
  1783.             try
  1784.             {
  1785.                 $data = array();
  1786.                 if ($ruta
  1787.                 {
  1788.                     $data['ID'] = $ruta->getId();
  1789.                     $data['ID_RUTA_MAPA'] = 'rut_' $ruta->getId();
  1790.                     $data['NOMBRE'] = $ruta->getNumero();
  1791.                     $data['HORA'] = $ruta->getHoraInicio();
  1792.                     $data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
  1793.                     $data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '$ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
  1794.                     $data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
  1795.                     $data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
  1796.                     $data['EMPRESA']['ID'] = $ruta->getEmpresa()->getId();
  1797.                     $data['EMPRESA']['NOMBRE'] = $ruta->getEmpresa()->getNombre();
  1798.                     $data['SENTIDO'] = $ruta->getSentido()->getNombre();
  1799.                     $data['CADENA_PUNTOS'] = '';
  1800.                     $data['TOTAL_PASAJEROS'] = 0;
  1801.                     $data['TOTAL_PERMITIDO'] = 0;
  1802.                     $data['PROPERTIES_JSON'] = '';
  1803.                     $data['COLOR_BUS'] = 'green';
  1804.                     $data['MSG_BUS'] = '';
  1805.                     
  1806.                     $orden 1;
  1807.                     $msgError '';
  1808.                     
  1809.                     $puntos $em->getRepository('StrategicAppBundle:OperEmpresaRutaPuntoAsignado')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
  1810.                     $data['PUNTOS'] = array();
  1811.                     $dataPuntos = array();
  1812.                     $arrayPuntos = array();
  1813.                     $totalPasajeros 0;
  1814.                     foreach ($puntos as $punto)
  1815.                     {
  1816.                         if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) 
  1817.                         {
  1818.                             if ($tipoRuta == TipoRutaEnum::ADMINISTRATIVAS)
  1819.                                 $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1820.                             else
  1821.                                 $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1822.                             
  1823.                             $geometria $punto->getPunto()->getGeometria();
  1824.                             $latlon str_replace('POINT('''$geometria);
  1825.                             $latlon str_replace(')','',$latlon);
  1826.                             $latlon explode(' '$latlon);
  1827.                             
  1828.                             
  1829.                             $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1830.                                 'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1831.                                 'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
  1832.                                 'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  1833.                                 'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  1834.                                 'GEOMETRIA' => $geometria,
  1835.                                 'LONGITUD' =>$latlon[1],
  1836.                                 'LATITUD' =>$latlon[0],                                
  1837.                                 'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  1838.                                 'ORDEN' => $orden,
  1839.                                 'ID_PUNTO' => $punto->getPunto()->getId(),
  1840.                                 'ID_RUTA' => $ruta->getId(),
  1841.                                 'ETIQUETA' => $etiqueta,
  1842.                                 'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  1843.                                 'ID_FEATURE_GROUP' => 'rut_' $ruta->getId(),
  1844.                                 'TIPO_GEOMETRIA' => 'punto',
  1845.                                 'TIPO_PASAJERO' => 'PASAJERO',
  1846.                                
  1847.                             );
  1848.                             $orden += 1;
  1849.                             array_push($arrayPuntos$punto->getPunto()->getGeometria());
  1850.                         }
  1851.                         
  1852.                         $id_pasajero=$punto->getPasajero()->getId();
  1853.                         $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto());
  1854.                         $foto=$punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  1855.                         
  1856.                         $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['PASAJEROS'][] = array(
  1857.                             'ID' => $punto->getId(),
  1858.                             'ORDEN' => $punto->getOrden(),
  1859.                             'TIPO_PASAJERO' => 'PASAJERO',
  1860.                             'ID_PASAJERO' => $id_pasajero,
  1861.                             'NOMBRE' => $nombre,
  1862.                             'FOTO' => $foto,
  1863.                         );
  1864.                         $totalPasajeros ++;
  1865.                     }
  1866.                     $arrayPasajeros = array();
  1867.                     foreach ($dataPuntos as $valorPunto)
  1868.                     {                        
  1869.                         array_push($arrayPasajeros$valorPunto['PASAJEROS']);                        
  1870.                         $data['PUNTOS'][] = $valorPunto;
  1871.                     }
  1872.                     if (count($arrayPuntos))
  1873.                     {
  1874.                         $arrayPuntos implode('***'$arrayPuntos);
  1875.                         $data['CADENA_PUNTOS'] = $arrayPuntos;                    
  1876.                         $data['ESTUDIANTES_JSON'] = json_encode($arrayPasajeros);
  1877.                         $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  1878.                     }
  1879.                     
  1880.                     $data['TOTAL_PASAJEROS'] = $totalPasajeros;
  1881.                     $data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;   
  1882.                     
  1883.                     /************** Validaciones para mostrar errores ******************************/
  1884.                     if($data['TOTAL_PASAJEROS'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
  1885.                     {
  1886.                         $diferencia =  $data['TOTAL_PASAJEROS'] - $data['TOTAL_PERMITIDO'];                        
  1887.                         $msgError .= 'La capacidad del bus está exedida en '.$diferencia.' pasajeros<br>';
  1888.                         $data['COLOR_BUS'] = 'red';
  1889.                         
  1890.                     }
  1891.                     if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
  1892.                     {
  1893.                         $msgError .= 'No se ha definido conductor para la ruta <br>';
  1894.                         $data['COLOR_BUS'] = 'red';
  1895.                         
  1896.                     }
  1897.                     
  1898.                     if( $data['UNIDAD'] == 'NO_UNIDAD')
  1899.                     {
  1900.                         $msgError .= 'No se ha definido unidad para la ruta <br>';
  1901.                         $data['COLOR_BUS'] = 'red';
  1902.                         
  1903.                     }
  1904.                     if($msgError == '')
  1905.                     {
  1906.                         $msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
  1907.                         $msgError .= 'Unidad a ejecutar la ruta: '$data['UNIDAD'].'<br>';
  1908.                         $msgError .= 'Capacidad de la unidad: '$data['TOTAL_PERMITIDO'].' pasajeros<br>';
  1909.                         $msgError .= 'Conductor: '$data['CONDUCTOR'].'<br>';
  1910.                     }    
  1911.                     $data['MSG_BUS'] = $msgError;
  1912.                     
  1913.                     /****************************************************************************/
  1914.                 }
  1915.                 else
  1916.                     $data['ID'] = 'NO_ROUTE';
  1917.                 array_push($rutasDefinidasArray$data);
  1918.             }
  1919.             catch (\RuntimeException $e)
  1920.             {
  1921.                 $retornoError $e->getMessage();
  1922.                 return new \Symfony\Component\HttpFoundation\Response($retornoError);
  1923.             }
  1924.         }
  1925.         $opciones = array('rutasDefinidas' => $rutasDefinidasArray);
  1926.         if($modificar == 1)
  1927.             return $this->render('Cartografia/Cartografia/rutasEmpresaDefinidasPuntos.html.twig'$opciones);
  1928.         else
  1929.             return $this->render('Cartografia/Cartografia/rutasEmpresaDefinidasPuntosVisualizar.html.twig'$opciones);
  1930.     }
  1931.     
  1932.     
  1933.     public function cargarRutaPuntoAction($idRuta$color) {
  1934.         $em $this ->em;
  1935.         $ruta $em->getRepository("StrategicAppBundle:OperRutaDefinicion")->find($idRuta);
  1936.         
  1937.         $data = array();
  1938.         if ($ruta
  1939.         {
  1940.             $data['ID'] = $ruta->getId();
  1941.             $data['ID_RUTA_MAPA'] = 'rut_' $ruta->getId();
  1942.             $sector=$ruta->getSector()?$ruta->getSector()->getNombre():'';
  1943.             $data['NOMBRE'] = $ruta->getNumero();
  1944.             $data['SECTOR'] = $sector;
  1945.             $data['HORA'] = $ruta->getHoraInicio();
  1946.             $data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
  1947.             $data['ASISTENTEEXTERNO'] = $ruta->getAsistenteExterno() ? $ruta->getAsistenteExterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_EXTERNO';
  1948.             $data['ASISTENTEINTERNO'] = $ruta->getAsistenteInterno() ? $ruta->getAsistenteInterno()->getPersona()->getNombreCompleto() : 'NO_ASISTENTE_INTERNO';
  1949.             $data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '$ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
  1950.             $data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
  1951.             $data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
  1952.             $data['ESCUELA']['ID'] = $ruta->getColegio()->getId();
  1953.             $data['ESCUELA']['NOMBRE'] = $ruta->getColegio()->getNombre();
  1954.             $data['SENTIDO'] = $ruta->getSentido()->getNombre();
  1955.             $data['CADENA_PUNTOS'] = '';
  1956.             $data['TOTAL_ESTUDIANTES'] = 0;
  1957.             $data['TOTAL_PERMITIDO'] = 0;
  1958.             $data['PROPERTIES_JSON'] = '';
  1959.             $data['COLOR_BUS'] = 'green';
  1960.             $data['MSG_BUS'] = '';
  1961.                     
  1962.             $orden 1;
  1963.             $msgError '';
  1964.             
  1965.             $puntos $em->getRepository('StrategicAppBundle:OperEstudianteRutaPunto')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
  1966.             $data['PUNTOS'] = array();
  1967.             $dataPuntos = array();
  1968.             $arrayPuntos = array();
  1969.             $totalEstudiantes 0;
  1970.             foreach ($puntos as $punto) {
  1971.                 if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) {
  1972.                     if ($ruta->getPuerta())
  1973.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  1974.                     else
  1975.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  1976.                     $geometria $punto->getPunto()->getGeometria();
  1977.                     $latlon str_replace('POINT('''$geometria);
  1978.                     $latlon str_replace(')','',$latlon);
  1979.                     $latlon explode(' '$latlon);
  1980.                                            
  1981.                     if($punto->getEstudiante()){
  1982.                         $tipo='ESTUDIANTE';
  1983.                         $id_pasajero=$punto->getEstudiante()->getId();
  1984.                         $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
  1985.                         $foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
  1986.                     }else{
  1987.                         $tipo='PASAJERO';
  1988.                         $id_pasajero=$punto->getPersona()->getId();
  1989.                         $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
  1990.                         $foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  1991.                     }
  1992.                     
  1993.                     $sector=$punto->getPunto()->getSector()?' - '.$punto->getPunto()->getSector()->getNombre():' - NO TIENE SECTOR ';
  1994.                     
  1995.                     $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  1996.                         'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  1997.                         'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()).  strtoupper($sector),
  1998.                         'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  1999.                         'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  2000.                         'GEOMETRIA' => $geometria,
  2001.                         'LONGITUD' =>$latlon[1],
  2002.                         'LATITUD' =>$latlon[0],                                
  2003.                         'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  2004.                         'ORDEN' => $orden,
  2005.                         'ID_PUNTO' => $punto->getPunto()->getId(),
  2006.                         'ID_RUTA' => $ruta->getId(),
  2007.                         'ETIQUETA' => $etiqueta,
  2008.                         'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  2009.                         'ID_FEATURE_GROUP' => 'rut_' $ruta->getId(),
  2010.                         'TIPO_GEOMETRIA' => 'punto',
  2011.                         'TIPO_PASAJERO' => $tipo,
  2012.                     );
  2013.                     $orden += 1;
  2014.                     array_push($arrayPuntos$punto->getPunto()->getGeometria());
  2015.                 }
  2016.                  
  2017.                 if($punto->getEstudiante()){
  2018.                     $tipo='ESTUDIANTE';
  2019.                     $id_pasajero=$punto->getEstudiante()->getId();
  2020.                     $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getEstudiante()->getNombreCompleto());
  2021.                     $foto=$punto->getEstudiante()->getFoto() ? $punto->getEstudiante()->getFoto()->getUrl() : 'NO_FOTO';
  2022.                 }else{
  2023.                     $tipo='PASAJERO';
  2024.                     $id_pasajero=$punto->getPersona()->getId();
  2025.                     $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPersona()->getNombreCompleto());
  2026.                     $foto=$punto->getPersona()->getFoto() ? $punto->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  2027.                     }
  2028.                     
  2029.                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['ESTUDIANTES'][] = array(
  2030.                     'ID' => $punto->getId(),
  2031.                     'ORDEN' => $punto->getOrden(),
  2032.                     'TIPO_PASAJERO' => $tipo,
  2033.                     'ID_ESTUDIANTE' => $id_pasajero,
  2034.                     'NOMBRE' => $nombre,
  2035.                     'FOTO' => $foto,
  2036.                 );
  2037.                 $totalEstudiantes ++;
  2038.             }
  2039.             $arrayEstudiantes = array();
  2040.             foreach ($dataPuntos as $valorPunto) {                        
  2041.                 array_push($arrayEstudiantes$valorPunto['ESTUDIANTES']);                        
  2042.                 $data['PUNTOS'][] = $valorPunto;
  2043.             }
  2044.             if (count($arrayPuntos)) {
  2045.                 $arrayPuntos implode('***'$arrayPuntos);
  2046.                 $data['CADENA_PUNTOS'] = $arrayPuntos;                                     
  2047.                 $data['ESTUDIANTES_JSON'] = json_encode($arrayEstudiantes);
  2048.                 $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  2049.             }
  2050.             
  2051.             $data['TOTAL_ESTUDIANTES'] = $totalEstudiantes;
  2052.             $data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;   
  2053.             /************** Validaciones para mostrar errores ******************************/
  2054.             if($data['TOTAL_ESTUDIANTES'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
  2055.             {
  2056.                 $diferencia =  $data['TOTAL_ESTUDIANTES'] - $data['TOTAL_PERMITIDO'];
  2057.                 $msgError .= 'La capacidad del bus está exedida en '.$diferencia.' estudiantes<br>';
  2058.                 $data['COLOR_BUS'] = 'red';
  2059.             }
  2060.             if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
  2061.             {
  2062.                 $msgError .= 'No se ha definido conductor para la ruta <br>';
  2063.                 $data['COLOR_BUS'] = 'red';
  2064.             }
  2065.             if( $data['UNIDAD'] == 'NO_UNIDAD')
  2066.             {
  2067.                 $msgError .= 'No se ha definido unidad para la ruta <br>';
  2068.                 $data['COLOR_BUS'] = 'red';
  2069.             }
  2070.             if( $data['ASISTENTEEXTERNO'] == 'NO_ASISTENTE_EXTERNO' && $data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
  2071.             {
  2072.                 $msgError .= 'Debe definir un asistente externo o interno para la ruta <br>';
  2073.                 $data['COLOR_BUS'] = 'red';
  2074.             }
  2075.             if($msgError == '')
  2076.             {
  2077.               if($data['ASISTENTEINTERNO'] == 'NO_ASISTENTE_INTERNO')
  2078.                             $asistente=$data['ASISTENTEEXTERNO'];
  2079.                else
  2080.                             $asistente=$data['ASISTENTEINTERNO'];
  2081.               
  2082.               $msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
  2083.               $msgError .= 'Unidad a ejecutar la ruta: '$data['UNIDAD'].'<br>';
  2084.               $msgError .= 'Capacidad de la unidad: '$data['TOTAL_PERMITIDO'].' pasajeros<br>';
  2085.               $msgError .= 'Conductor: '$data['CONDUCTOR'].'<br>';
  2086.               $msgError .= 'Asistente: '.$asistente.'<br>';
  2087.             }    
  2088.             $data['MSG_BUS'] = $msgError;
  2089.         } 
  2090.         else
  2091.            $data['ID'] = 'NO_ROUTE';
  2092.         $opciones = array('ruta' => $data'color' => $color);
  2093.         return $this->render('Cartografia/Cartografia/cargarRutaPunto.html.twig'$opciones);
  2094.     }
  2095.     public function cargarEmpresaRutaPuntoAction($idRuta$color)
  2096.     {
  2097.         $em $this ->em;
  2098.         $ruta $em->getRepository("StrategicAppBundle:OperEmpresaRutaDefinicion")->find($idRuta);
  2099.         
  2100.         $data = array();
  2101.         if ($ruta
  2102.         {
  2103.             $data['ID'] = $ruta->getId();
  2104.             $data['ID_RUTA_MAPA'] = 'rut_' $ruta->getId();
  2105.             $data['NOMBRE'] = $ruta->getNumero();
  2106.             $data['HORA'] = $ruta->getHoraInicio();
  2107.             $data['CONDUCTOR'] = $ruta->getConductor() ? $ruta->getConductor()->getPersona()->getNombreCompleto() : 'NO_CONDUCTOR';
  2108.             $data['UNIDAD'] = $ruta->getUnidad() ? $ruta->getUnidad()->getPlaca().' - '$ruta->getUnidad()->getNumero() : 'NO_UNIDAD';
  2109.             $data['OPERADORA']['ID'] = $ruta->getTransportista()->getId();
  2110.             $data['OPERADORA']['NOMBRE'] = $ruta->getTransportista()->getNombre();
  2111.             $data['EMPRESA']['ID'] = $ruta->getEmpresa()->getId();
  2112.             $data['EMPRESA']['NOMBRE'] = $ruta->getEmpresa()->getNombre();
  2113.             $data['SENTIDO'] = $ruta->getSentido()->getNombre();
  2114.             $data['CADENA_PUNTOS'] = '';
  2115.             $data['TOTAL_PASAJEROS'] = 0;
  2116.             $data['TOTAL_PERMITIDO'] = 0;
  2117.             $data['PROPERTIES_JSON'] = '';
  2118.             $data['COLOR_BUS'] = 'green';
  2119.             $data['MSG_BUS'] = '';
  2120.                     
  2121.             $orden 1;
  2122.             $msgError '';
  2123.             
  2124.             $puntos $em->getRepository('StrategicAppBundle:OperEmpresaRutaPuntoAsignado')->findBy(array('ruta' => $ruta->getId()), array('orden' => 'ASC'));
  2125.             $data['PUNTOS'] = array();
  2126.             $dataPuntos = array();
  2127.             $arrayPuntos = array();
  2128.             $totalPasajeros 0;
  2129.             foreach ($puntos as $punto
  2130.             {
  2131.                 if (!isset($dataPuntos['PUNTO-' $punto->getPunto()->getId()])) 
  2132.                 {
  2133.                     if ($ruta->getTipoRuta()->getValue()==TipoRutaEnum::ADMINISTRATIVAS)
  2134.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion());
  2135.                     else
  2136.                         $etiqueta preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre());
  2137.                     $geometria $punto->getPunto()->getGeometria();
  2138.                     $latlon str_replace('POINT('''$geometria);
  2139.                     $latlon str_replace(')','',$latlon);
  2140.                     $latlon explode(' '$latlon);
  2141.                     
  2142.                     
  2143.                     $dataPuntos['PUNTO-' $punto->getPunto()->getId()] = array(
  2144.                         'NOMBRE' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getNombre()),
  2145.                         'DIRECCION' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getDireccion()),
  2146.                         'ERROR_GPS' => $punto->getPunto()->getErrorGPS(),  
  2147.                         'REFERENCIA' => preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPunto()->getReferenciasUbicacion()),
  2148.                         'GEOMETRIA' => $geometria,
  2149.                         'LONGITUD' =>$latlon[1],
  2150.                         'LATITUD' =>$latlon[0],                                
  2151.                         'FOTO' => $punto->getPunto()->getFoto() ? $punto->getPunto()->getFoto()->getUrl() : 'NO_FOTO',
  2152.                         'ORDEN' => $orden,
  2153.                         'ID_PUNTO' => $punto->getPunto()->getId(),
  2154.                         'ID_RUTA' => $ruta->getId(),
  2155.                         'ETIQUETA' => $etiqueta,
  2156.                         'ID_FEATURE'=> 'pto_'.$punto->getPunto()->getId(),
  2157.                         'ID_FEATURE_GROUP' => 'rut_' $ruta->getId(),
  2158.                         'TIPO_GEOMETRIA' => 'punto',
  2159.                         'TIPO_PASAJERO' => 'PASAJERO',
  2160.                     );
  2161.                     $orden += 1;
  2162.                     array_push($arrayPuntos$punto->getPunto()->getGeometria());
  2163.                 }
  2164.                 
  2165.                 $id_pasajero=$punto->getPasajero()->getId();
  2166.                 $nombre=preg_replace(array('/[^a-z0-9]/i''/[-]+/') , ' ',$punto->getPasajero()->getPersona()->getNombreCompleto());
  2167.                 $foto=$punto->getPasajero()->getPersona()->getFoto() ? $punto->getPasajero()->getPersona()->getFoto()->getUrl() : 'NO_FOTO';
  2168.                  
  2169.                 $dataPuntos['PUNTO-' $punto->getPunto()->getId()]['PASAJEROS'][] = array(
  2170.                     'ID' => $punto->getId(),
  2171.                     'ORDEN' => $punto->getOrden(),
  2172.                     'TIPO_PASAJERO' => 'PASAJERO',
  2173.                     'ID_PASAJERO' => $id_pasajero,
  2174.                     'NOMBRE' => $nombre,
  2175.                     'FOTO' => $foto,
  2176.                 );
  2177.                 $totalPasajeros ++;
  2178.             }
  2179.             $arrayPasajeros = array();
  2180.             foreach ($dataPuntos as $valorPunto) {                        
  2181.                 array_push($arrayPasajeros$valorPunto['PASAJEROS']);                        
  2182.                 $data['PUNTOS'][] = $valorPunto;
  2183.             }
  2184.             if (count($arrayPuntos)) {
  2185.                 $arrayPuntos implode('***'$arrayPuntos);
  2186.                 $data['CADENA_PUNTOS'] = $arrayPuntos;                                     
  2187.                 $data['ESTUDIANTES_JSON'] = json_encode($arrayPasajeros);
  2188.                 $data['PROPERTIES_JSON'] = json_encode($data['PUNTOS']);
  2189.             }
  2190.             
  2191.             $data['TOTAL_PASAJEROS'] = $totalPasajeros;
  2192.             $data['TOTAL_PERMITIDO'] = ($ruta->getUnidad()) ? $ruta->getUnidad()->getCapacidad() : 0;   
  2193.             /************** Validaciones para mostrar errores ******************************/
  2194.             if($data['TOTAL_PASAJEROS'] > $data['TOTAL_PERMITIDO'] && $data['TOTAL_PERMITIDO'] != 0)
  2195.             {
  2196.                 $diferencia =  $data['TOTAL_PASAJEROS'] - $data['TOTAL_PERMITIDO'];
  2197.                 $msgError .= 'La capacidad del bus está exedida en '.$diferencia.' pasajeros<br>';
  2198.                 $data['COLOR_BUS'] = 'red';
  2199.             }
  2200.             if( $data['CONDUCTOR'] == 'NO_CONDUCTOR')
  2201.             {
  2202.                 $msgError .= 'No se ha definido conductor para la ruta <br>';
  2203.                 $data['COLOR_BUS'] = 'red';
  2204.             }
  2205.             if( $data['UNIDAD'] == 'NO_UNIDAD')
  2206.             {
  2207.                 $msgError .= 'No se ha definido unidad para la ruta <br>';
  2208.                 $data['COLOR_BUS'] = 'red';
  2209.             }
  2210.             if($msgError == '')
  2211.             {
  2212.               $msgError .= 'Esta ruta esta definida con los parámetros establecidos:<br>';
  2213.               $msgError .= 'Unidad a ejecutar la ruta: '$data['UNIDAD'].'<br>';
  2214.               $msgError .= 'Capacidad de la unidad: '$data['TOTAL_PERMITIDO'].' pasajeros<br>';
  2215.               $msgError .= 'Conductor: '$data['CONDUCTOR'].'<br>';
  2216.             }    
  2217.             $data['MSG_BUS'] = $msgError;
  2218.         } 
  2219.         else
  2220.            $data['ID'] = 'NO_ROUTE';
  2221.         $opciones = array('ruta' => $data'color' => $color);
  2222.         return $this->render('Cartografia/Cartografia/cargarEmpresaRutaPunto.html.twig'$opciones);
  2223.     }
  2224.     private function buscarEstudiantesSinSolicitudDeTransporte($idColegio,$idPeriodo ,$sentido ,$diaSemana$nivel =null$sector=null   ){
  2225.         $entiyManager  $this->em;
  2226.         //** obtener  los id de estudiantes que tienen entrada en ruta punto  */
  2227.         $queryEstudRP $entiyManager->getRepository("StrategicAppBundle:OperEstudianteRutaPunto")
  2228.                    ->createQueryBuilder("eRutaPunto")
  2229.                          ->leftJoin("eRutaPunto.estudiante""est_rp")
  2230.                          ->leftJoin("est_rp.colegio",  "est_rp_colegio")
  2231.                          ->leftJoin("est_rp.nivel""est_rp_nivel")
  2232.                          ->leftJoin("eRutaPunto.periodoEscolar ""est_rp_periodoEsc")
  2233.                             ->where(" ( est_rp_colegio.id = $idColegio )  " )
  2234.                                 ->andWhere("( eRutaPunto.diaSemana = :filtroDiaSemana )")
  2235.                                 ->andWhere("( eRutaPunto.sentido = :filtroSentido  )")
  2236.                                 ->andWhere("( est_rp_periodoEsc.id =   $idPeriodo   )")
  2237.                                 ->andWhere("( est_rp_nivel.sigla not in ('EGRESADO','RETIRADO') )");
  2238.         if($sector && $sector!='all' && $sector!='null'){
  2239.             $queryEstudRP  ->leftJoin('eRutaPunto.punto','est_rp_punto')
  2240.                         ->leftJoin('est_rp_punto.sector','est_rp_sector')
  2241.                         ->andWhere("est_rp_sector.id in (".$sector.")");
  2242.         }
  2243.         if($nivel && $nivel!='all'){
  2244.             $queryEstudRP ->andWhere("est_rp_nivel.id in (".$nivel.")");
  2245.         }
  2246.         $DQLEstudRP$queryEstudRP  ->select(' distinct est_rp.id') ->getQuery()->getDQL();
  2247.       //** obtener los id de estudiantes con entradas en solicitudDETransporte */
  2248.         $qSolicitudes $entiyManager->getRepository("StrategicAppBundle:OperSolicitudTransporteEstudiante")
  2249.             ->createQueryBuilder("est_solc")
  2250.             ->leftJoin('est_solc.estudiante''est_solc_estudiante')
  2251.             ->leftJoin('est_solc_estudiante.nivel''est_solc_nivel')
  2252.             ->leftJoin('est_solc_estudiante.colegio''est_solc_colegio')
  2253.             ->leftJoin('est_solc.curso''est_solc_periodo')
  2254.             ->where('est_solc_periodo.id=' $idPeriodo )
  2255.             ->andWhere('est_solc_colegio.id = ' $idColegio )
  2256.             ->andWhere(" est_solc.estado <> 'RECHAZADA' "  )
  2257.             ->select('distinct est_solc_estudiante.id ');
  2258.         if($nivel && $nivel!='all'){
  2259.              $qSolicitudes ->andWhere("est_solc_nivel.id   in (  $nivel ) ");
  2260.         }
  2261.         $DQLSolExistentes $qSolicitudes ->getDQL();
  2262.           /*** los estudiante que no tienen entrada en rutaPunto y no tienen entrada en solicitude de tranporte */
  2263.          $estudiantesQuery $entiyManager->getRepository("StrategicAppBundle:OperEstudiantes")
  2264.                      ->createQueryBuilder("estud")
  2265.                      ->leftJoin("estud.colegio""est_colegio")
  2266.                      ->leftJoin("estud.nivel""est_nivel")
  2267.                      ->leftJoin("estud.rutas""est_rutas")
  2268.                      ->leftJoin("est_colegio.periodosEscolares""per")
  2269.                      ->select('estud,est_rutas')
  2270.                           ->where(" ( est_colegio.id =  $idColegio )  " )
  2271.                           ->andWhere("( est_nivel.sigla not in ('EGRESADO','RETIRADO') )")
  2272.                           ->andWhere('  estud.id NOT IN ( '$DQLEstudRP' )')
  2273.                           ->andWhere('  estud.id NOT IN ( '$DQLSolExistentes' )')
  2274.                          ->andWhere("( per.id = $idPeriodo)")
  2275.                       ->setParameter("filtroSentido"$sentido)
  2276.                       ->setParameter("filtroDiaSemana"$diaSemana);
  2277.         if($nivel && $nivel!='all'){
  2278.              $estudiantesQuery ->andWhere("est_nivel.id in (".$nivel.")");
  2279.                     //->setParameter("filtroNivel", $nivel);
  2280.         }
  2281.          $estudiantes $estudiantesQuery->getQuery()->getResult();
  2282.         return $estudiantes;
  2283.     }
  2284. }