/**
  * Cherche les entretiens les plus proche d'une adresse
  *
  * @Template()
  */
 public function neighborAction(Door $door)
 {
     $em = $this->getDoctrine()->getManager();
     // Choper les entretiens à faire
     $repo = $em->getRepository('JLMDailyBundle:Maintenance');
     $maints = $repo->getOpened();
     $repo = $em->getRepository('JLMDailyBundle:Ride');
     $baseUrl = 'http://maps.googleapis.com/maps/api/distancematrix/json?sensor=false&language=fr-FR&origins=' . $door->getCoordinates() . '&destinations=';
     foreach ($maints as $maint) {
         $dest = $maint->getDoor();
         if (!$repo->hasRide($door, $dest)) {
             $url = $baseUrl . $dest->getCoordinates();
             $string = file_get_contents($url);
             $json = json_decode($string);
             if ($json->status == 'OK' && isset($json->rows[0]->elements[0]->duration->value) && isset($json->rows[0]->elements[0]->duration->value)) {
                 $ride = new Ride();
                 $ride->setDeparture($door);
                 $ride->setDestination($dest);
                 $ride->setDuration($json->rows[0]->elements[0]->duration->value);
                 $ride->setDistance($json->rows[0]->elements[0]->distance->value);
                 $em->persist($ride);
             }
         }
     }
     $em->flush();
     $entities = $repo->getMaintenanceNeighbor($door, 30);
     $forms = array();
     foreach ($entities as $entity) {
         $shift = new ShiftTechnician();
         $shift->setBegin(new \DateTime());
         $forms[] = $this->get('form.factory')->createNamed('shiftTechNew' . $entity->getDestination()->getNextMaintenance()->getId(), new AddTechnicianType(), $shift)->createView();
     }
     return array('door' => $door, 'entities' => $entities, 'forms_addTech' => $forms);
 }