소스 검색

Merged in FD3-306 (pull request #49)

FD3-306

Approved-by: Guillermo Espinoza <guillermo@interlink.com.ar>
Gabriel Gosparo 7 년 전
부모
커밋
3a02b4c534
3개의 변경된 파일38개의 추가작업 그리고 54개의 파일을 삭제
  1. 22 39
      src/FTTHBundle/Controller/ONUController.php
  2. 11 12
      src/FTTHBundle/Entity/NAP.php
  3. 5 3
      src/FTTHBundle/Resources/views/ONU/form.html.twig

+ 22 - 39
src/FTTHBundle/Controller/ONUController.php

@@ -2,6 +2,7 @@
 
 namespace FTTHBundle\Controller;
 
+use MapBundle\Util\GeoDecode;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
@@ -186,36 +187,6 @@ class ONUController extends Controller
         return $response;
     }
 
-    /**
-     * Calcula la distancia cartografica (NO TOPOGRAFICA) entre 2 coordenadas.
-     * @param $lat1
-     * @param $lng1
-     * @param $lat2
-     * @param $lng2
-     * @param bool $km Me dice si quiero la distancia en kilometros. Por defecto esta en metros.
-     * @return float|int Retorna la distancia en metros
-     */
-    private function distanceGeoPoints($lat1, $lng1, $lat2, $lng2, $km = false)
-    {
-        // curvatura de la tierra
-        $earthRadius = 3958.75;
-
-        $dLat = deg2rad($lat2 - $lat1);
-        $dLng = deg2rad($lng2 - $lng1);
-
-        $a = sin($dLat / 2) * sin($dLat / 2) +
-            cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
-            sin($dLng / 2) * sin($dLng / 2);
-        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
-        $dist = $earthRadius * $c;
-
-        // from miles
-        $meterConversion = 1609;
-        $geopointDistance = $dist * $meterConversion;
-        // divido por 1000 para pasarlo de metros a kilometros
-        return round(($km ? ($geopointDistance / 1000) : $geopointDistance), 3, PHP_ROUND_HALF_UP);
-    }
-
     /**
      * Calcula la distancia de los NAP al punto pasado.
      * @param $lat
@@ -231,30 +202,42 @@ class ONUController extends Controller
         $query = $qb->select('n')
             ->from(NAP::class, 'n');
         $napsQuery = $query->getQuery()->execute();
+        $geodecode = new GeoDecode();
         foreach ($napsQuery as $nap) {
-            $extraData = $nap->getExtraData();
-            if ($extraData) {
-                $extraData = json_decode($extraData, true);
+            if ($nap->getExtraData() != null) {
                 $nap->setContainer($this->container);
-                if (isset($extraData['lat']) && isset($extraData['lng'])) {
-                    $distance = $this->distanceGeoPoints($lat, $lng, $extraData['lat'], $extraData['lng'], true);
+                $dataNap = [
+                    'id' => $nap->getId(),
+                    'name' => $nap->getName(),
+                    'distance' => -1,
+                    'freePort' => $nap->getFreePort(),
+                    'address' => '',
+                    'olt' => ($nap->getOlt() != null ? $nap->getOlt()->getName() : "SIN OLT"),
+                    'slot' => $nap->getSlot(),
+                    'link' => $nap->getLink()
+                ];
+                if ($nap->getlat() != null && $nap->getlng() != null) {
+                    $distance = $geodecode->distanceGeoPoints($lat, $lng, $nap->getlat(), $nap->getlng(), true);
                     if ($this->container->hasParameter('onu.distance.nap')) {
                         if ($this->container->getParameter('onu.distance.nap') >= $distance ||
                             $napId == $nap->getId()) {
                             // controlo la distancia y el codigo de nap
-                            $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => $distance, 'freePort' => $nap->getFreePort(), 'address' => $extraData['Address'], 'slot' => $extraData['slot'], 'link' => $extraData['link']];
+                            $dataNap['distance'] = $distance;
+                            $dataNap['address'] = $nap->getAddress();
+                            $naps[$nap->getId()] = $dataNap;
                         }
                     } else {
                         if ($napId == $nap->getId()) {
                             // si el codigo de napId coincide tengo que cargar la nap
-                            $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => $distance, 'freePort' => $nap->getFreePort(), 'address' => $extraData['Address'], 'slot' => $extraData['slot'], 'link' => $extraData['link']];
+                            $dataNap['distance'] = $distance;
+                            $dataNap['address'] = $nap->getAddress();
+                            $naps[$nap->getId()] = $dataNap;
                         }
                     }
-
                 } else {
                     if ($napId == $nap->getId()) {
                         // si el codigo de napId coincide tengo que cargar la nap
-                        $naps[$nap->getId()] = ['id' => $nap->getId(), 'name' => $nap->getName(), 'distance' => -1, 'freePort' => $nap->getFreePort(), 'address' => '', 'slot' => $extraData['slot'], 'link' => $extraData['link']];
+                        $naps[$nap->getId()] = $dataNap;
                     }
                 }
             }

+ 11 - 12
src/FTTHBundle/Entity/NAP.php

@@ -67,27 +67,27 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
 
     /**
      * @ORM\ManyToOne(targetEntity="OLT", inversedBy="onus", fetch="EXTRA_LAZY")
-     * 
+     *
      * @Assert\NotNull
-     * 
+     *
      * @JMS\MaxDepth(1)
      */
     protected $olt;
 
     /**
      * @var int
-     * 
+     *
      * @ORM\Column(type="integer", options={"default": "0"})
-     * 
+     *
      * @Assert\NotNull
      */
     protected $slot = 0;
 
     /**
      * @var int
-     * 
+     *
      * @ORM\Column(type="integer", options={"default": "0"})
-     * 
+     *
      * @Assert\NotNull
      */
     protected $link = 0;
@@ -98,7 +98,7 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
      */
     public function __toString()
     {
-        return (string) $this->name;
+        return (string)$this->name;
     }
 
     /**
@@ -179,10 +179,9 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
             ->where($qb->expr()->eq('o.nap', $this->getId()))
             ->getQuery()
             ->getSingleScalarResult();
-        $extraData = json_decode($this->getExtraData(), true);
-        $freePort = $extraData['capacity'];
+        $freePort = $this->getCapacity();
         if (is_numeric($onus)) {
-            $freePort = $extraData['capacity'] - $onus;
+            $freePort -= $onus;
         }
         return $freePort;
     }
@@ -232,7 +231,7 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
 
     /**
      * @param int $slot
-     * 
+     *
      * @return $this
      */
     public function setSlot($slot)
@@ -244,7 +243,7 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
 
     /**
      * @param int $link
-     * 
+     *
      * @return $this
      */
     public function setLink($link)

+ 5 - 3
src/FTTHBundle/Resources/views/ONU/form.html.twig

@@ -115,6 +115,7 @@
                                 var tmp = obj[i].name + " ({{ 'Free Port'|trans({}, 'FTTHBundle') }}: " + obj[i].freePort + " - " +
                                     "{{ 'Distance'|trans({}, 'FTTHBundle') }}: " + obj[i].distance + " KM. - " +
                                     "{{ 'Address'|trans({}, 'FTTHBundle') }}: " + obj[i].address + " - " +
+                                    "OLT: " + obj[i].olt + " - " +
                                     "Slot: " + obj[i].slot + " - " +
                                     "Link: " + obj[i].link + ")";
                                 select.append(
@@ -132,9 +133,10 @@
                                 if (obj[i].address != null && obj[i].address.length > 0) {
                                     tmp += "{{ 'Address'|trans({}, 'FTTHBundle') }}: " + obj[i].address + " - ";
                                 }
-                                tmp += "Slot: " + obj[i].slot + " - ";
-                                tmp += "Link: " + obj[i].link;
-                                tmp += ")";
+                                tmp += "OLT: " + obj[i].olt + " - " +
+                                    "Slot: " + obj[i].slot + " - " +
+                                    "Link: " + obj[i].link +
+                                    ")";
                                 select.append(
                                     '<option value="' + obj[i].id + '" >' + tmp +
                                     '</option>'