فهرست منبع

Merged in tr069 (pull request #69)

Tr069

Approved-by: Guillermo Espinoza <guillermo@interlink.com.ar>
Maximiliano Schvindt 7 سال پیش
والد
کامیت
f7c3493778

+ 1 - 0
app/AppKernel.php

@@ -46,6 +46,7 @@ class AppKernel extends Kernel
             new SimpleThings\EntityAudit\SimpleThingsEntityAuditBundle(),
             new AuditBundle\AuditBundle(),
             new RadiusBundle\RadiusBundle(),
+            new TR069Bundle\TR069Bundle()
         ];
 
         if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {

+ 1 - 0
app/config/config.yml

@@ -25,6 +25,7 @@ imports:
     - { resource: "@AuthBundle/Resources/config/services.yml" }
     - { resource: "@AuditBundle/Resources/config/services.yml" }
     - { resource: '@BaseAdminBundle/Resources/config/sonata-config.yml' }
+    - { resource: '@TR069Bundle/Resources/config/services.yml' }
 
 
 parameters:

+ 6 - 0
app/config/parameters.yml.dist

@@ -49,3 +49,9 @@ parameters:
     
     # App Dummy URL
     env(HOST_DUMMY): http://www.flowdat.com/
+
+    tr069_service: false
+    tr069_user: admin
+    tr069_pass: admin
+    tr069_host: genieacs-nbi
+    tr069_port: 7557

+ 6 - 0
app/config/parameters.yml.docker

@@ -44,3 +44,9 @@ parameters:
     # nombre del servicio del nginx
     nginx_name: nginx-proxy
     onu.distance.nap: 0.2
+
+    tr069_service: false
+    tr069_user: admin
+    tr069_pass: admin
+    tr069_host: genieacs-nbi
+    tr069_port: 7557

+ 9 - 1
composer.json

@@ -114,6 +114,13 @@
         {
             "type": "vcs",
             "url": "https://github.com/dwoo-project/dwoo.git"
+        },
+        {
+            "type": "vcs",
+            "url": "ssh://git@gogs.infra.flowdat.com:222/VendorSoftwareFlowdat3/TR069Bundle.git",
+            "options": {
+                "local_pk": "./keys/bitbucket.id_rsa"
+            }
         }
     ],
     "config": {
@@ -164,7 +171,8 @@
         "symfony/web-server-bundle": "^3.3",
         "twig/extensions": "^1.5",
         "twig/twig": "^2.0",
-        "voryx/restgeneratorbundle": "dev-master"
+        "voryx/restgeneratorbundle": "dev-master",
+        "ik/tr069-bundle": "dev-master"
     },
     "require-dev": {
         "phpunit/phpunit": "^6.4",

+ 55 - 34
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "c8d38cd8c81e574b390aafff8b8b8e19",
+    "content-hash": "9aa8ae397622c10bf0824ec85649141c",
     "packages": [
         {
             "name": "behat/transliterator",
@@ -755,9 +755,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://satis.infra.flowdat.com/dist/doctrine/instantiator/doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d-zip-681b88.zip",
                 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
+                "shasum": "62a7b8d59ce1dc5627bd2aed2882f18ff1138219"
             },
             "require": {
                 "php": ">=5.3,<8.0-DEV"
@@ -1318,9 +1318,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hwi/HWIOAuthBundle/zipball/50f4bcbe5c217cfdf0f7f40a174b87199b76d1e1",
+                "url": "https://satis.infra.flowdat.com/dist/hwi/oauth-bundle/hwi-oauth-bundle-50f4bcbe5c217cfdf0f7f40a174b87199b76d1e1-zip-0aca95.zip",
                 "reference": "50f4bcbe5c217cfdf0f7f40a174b87199b76d1e1",
-                "shasum": ""
+                "shasum": "b6918d1815cc36aff59cf0d12764bb0324ff1549"
             },
             "require": {
                 "kriswallsmith/buzz": "~0.13",
@@ -1580,7 +1580,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@gogs.infra.flowdat.com:222/VendorSoftwareFlowdat3/LeafletBundle.git",
-                "reference": "1df2731f7548a7c3645a5295fbe5a1c6e48122b5"
+                "reference": "db4aba82a00ac8af06d5445c4473648959798127"
             },
             "require": {
                 "ext-curl": "*",
@@ -1593,7 +1593,7 @@
                 }
             },
             "description": "The Flowdat3 Leaflet Resource",
-            "time": "2018-02-19T12:54:08+00:00"
+            "time": "2018-03-06T18:03:24+00:00"
         },
         {
             "name": "ik/map-bundle",
@@ -1717,6 +1717,26 @@
             ],
             "time": "2018-02-27T13:13:07+00:00"
         },
+        {
+            "name": "ik/tr069-bundle",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "ssh://git@gogs.infra.flowdat.com:222/VendorSoftwareFlowdat3/TR069Bundle.git",
+                "reference": "cb5505180344edcb62aa011ca816e29f5152efac"
+            },
+            "require": {
+                "ext-curl": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "TR069Bundle\\": ""
+                }
+            },
+            "description": "The Flowdat3 TR069",
+            "time": "2018-03-06T17:22:50+00:00"
+        },
         {
             "name": "ik/webservice-bundle",
             "version": "dev-master",
@@ -1786,9 +1806,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc",
+                "url": "https://satis.infra.flowdat.com/dist/incenteev/composer-parameter-handler/incenteev-composer-parameter-handler-d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc-zip-06d0a7.zip",
                 "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc",
-                "shasum": ""
+                "shasum": "78accafc69077c94e2b5c40dcac6a23149e62a2d"
             },
             "require": {
                 "php": ">=5.3.3",
@@ -1931,9 +1951,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d",
+                "url": "https://satis.infra.flowdat.com/dist/jms/parser-lib/jms-parser-lib-c509473bc1b4866415627af0e1c6cc8ac97fa51d-zip-d6e55f.zip",
                 "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d",
-                "shasum": ""
+                "shasum": "2ea232ddbcd3fb65004c7454244af057fb422817"
             },
             "require": {
                 "phpoption/phpoption": ">=0.9,<2.0-dev"
@@ -2050,9 +2070,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/85ee039a2b7f89d77c403e33cee7b43a875c31e5",
+                "url": "https://satis.infra.flowdat.com/dist/jms/serializer-bundle/jms-serializer-bundle-85ee039a2b7f89d77c403e33cee7b43a875c31e5-zip-e99b92.zip",
                 "reference": "85ee039a2b7f89d77c403e33cee7b43a875c31e5",
-                "shasum": ""
+                "shasum": "8ceb3e6f31ad9b250fe9070661ee2d4b4d52c0f2"
             },
             "require": {
                 "jms/serializer": "^1.7",
@@ -2966,9 +2986,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a",
+                "url": "https://satis.infra.flowdat.com/dist/sensio/distribution-bundle/sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a-zip-b89371.zip",
                 "reference": "eb6266b3b472e4002538610b28a0a04bcf94891a",
-                "shasum": ""
+                "shasum": "c880207d73e5af5719bf65852f2890e55cb488d6"
             },
             "require": {
                 "php": ">=5.3.9",
@@ -3733,9 +3753,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/4e7499d25dc5d0862da09fa8e336164948a29a25",
+                "url": "https://satis.infra.flowdat.com/dist/stof/doctrine-extensions-bundle/stof-doctrine-extensions-bundle-4e7499d25dc5d0862da09fa8e336164948a29a25-zip-803a48.zip",
                 "reference": "4e7499d25dc5d0862da09fa8e336164948a29a25",
-                "shasum": ""
+                "shasum": "5f6b05de8625fea312c1ae92066580864eea07d5"
             },
             "require": {
                 "gedmo/doctrine-extensions": "^2.3.1",
@@ -4239,9 +4259,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-acl/zipball/053b49bf4aa333a392c83296855989bcf88ddad1",
+                "url": "https://satis.infra.flowdat.com/dist/symfony/security-acl/symfony-security-acl-053b49bf4aa333a392c83296855989bcf88ddad1-zip-4a92bd.zip",
                 "reference": "053b49bf4aa333a392c83296855989bcf88ddad1",
-                "shasum": ""
+                "shasum": "9562593da89cd1ab1a2d69962cc0d933cea99714"
             },
             "require": {
                 "php": ">=5.5.9",
@@ -4629,9 +4649,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/voryx/restgeneratorbundle/zipball/72b61d2188662da453d2e2a9cd625a60b6f3233b",
+                "url": "https://satis.infra.flowdat.com/dist/voryx/restgeneratorbundle/voryx-restgeneratorbundle-72b61d2188662da453d2e2a9cd625a60b6f3233b-zip-888957.zip",
                 "reference": "72b61d2188662da453d2e2a9cd625a60b6f3233b",
-                "shasum": ""
+                "shasum": "5ca3bc614a05b341c7857876407dc54e73dcde0c"
             },
             "require": {
                 "friendsofsymfony/rest-bundle": "~1.7",
@@ -5185,9 +5205,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+                "url": "https://satis.infra.flowdat.com/dist/phpunit/php-file-iterator/phpunit-php-file-iterator-3cc8f69b3028d0f96a9078e6295d86e9bf019be5-zip-184bc9.zip",
                 "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
-                "shasum": ""
+                "shasum": "d3ce5a919fe743126f331988b9a0f7b8302b999a"
             },
             "require": {
                 "php": ">=5.3.3"
@@ -5232,9 +5252,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "url": "https://satis.infra.flowdat.com/dist/phpunit/php-text-template/phpunit-php-text-template-31f8b717e51d9a2afca6c9f046f5d69fc27c8686-zip-c6bcbd.zip",
                 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "shasum": ""
+                "shasum": "4122b00281fc98e1733bd9ca446002393c452f84"
             },
             "require": {
                 "php": ">=5.3.3"
@@ -5273,9 +5293,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "url": "https://satis.infra.flowdat.com/dist/phpunit/php-timer/phpunit-php-timer-3dcf38ca72b158baf0bc245e9184d3fdffa9c46f-zip-c27592.zip",
                 "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "shasum": ""
+                "shasum": "f67f992aca05457e1e21f619250770b09092ff7b"
             },
             "require": {
                 "php": "^5.3.3 || ^7.0"
@@ -5514,9 +5534,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "url": "https://satis.infra.flowdat.com/dist/sebastian/code-unit-reverse-lookup/sebastian-code-unit-reverse-lookup-4419fcdb5eabb9caa61a27c7a1db532a6b55dd18-zip-2b8d33.zip",
                 "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
-                "shasum": ""
+                "shasum": "8470a6b3ca913a110aa2580255552a06e995710c"
             },
             "require": {
                 "php": "^5.6 || ^7.0"
@@ -5988,9 +6008,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "url": "https://satis.infra.flowdat.com/dist/sebastian/resource-operations/sebastian-resource-operations-ce990bb21759f94aeafd30209e8cfcdfa8bc3f52-zip-4a3a08.zip",
                 "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
-                "shasum": ""
+                "shasum": "248cd12206b575057bf0b19f306d92a2f818dfb1"
             },
             "require": {
                 "php": ">=5.6.0"
@@ -6030,9 +6050,9 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "url": "https://satis.infra.flowdat.com/dist/sebastian/version/sebastian-version-99732be0ddb3361e16ad77b68ba41efc8e979019-zip-0eee83.zip",
                 "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
-                "shasum": ""
+                "shasum": "dff8de471afebba9fc6837bb8c886ddc7ebe41bb"
             },
             "require": {
                 "php": ">=5.6"
@@ -6230,7 +6250,8 @@
         "ik/webservice-bundle": 20,
         "ik/workflow-bundle": 20,
         "sonata-project/admin-bundle": 20,
-        "voryx/restgeneratorbundle": 20
+        "voryx/restgeneratorbundle": 20,
+        "ik/tr069-bundle": 20
     },
     "prefer-stable": false,
     "prefer-lowest": true,

+ 269 - 57
src/FTTHBundle/Admin/ONUAdmin.php

@@ -15,6 +15,8 @@ use Sonata\CoreBundle\Validator\ErrorElement;
 
 use Symfony\Component\Form\Extension\Core\Type\CollectionType;
 use FTTHBundle\Form\ServicePortType;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+use Symfony\Component\Form\Extension\Core\Type\HiddenType;
 
 
 class ONUAdmin extends WorkflowBaseAdmin
@@ -69,30 +71,31 @@ class ONUAdmin extends WorkflowBaseAdmin
      */
     protected function configureFormFields(FormMapper $formMapper)
     {
+
         $formMapper
             ->tab('default')
-            ->with('')
-            ->add('clientId')
-            ->add('ponSerialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('profile')
-            ->add('nap')
-            ->add('model')
-            ->end()
+                ->with('')
+                    ->add('clientId')
+                    ->add('ponSerialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('profile')
+                    ->add('nap')
+                    ->add('model')
+                ->end()
             ->end()
             ->tab('Avanzado')
-            ->with('ONU')
-            ->add('serialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('ponSerialNumberAux', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('mac')
-            ->add('olt')
-            ->add('position')
-	    ->add('service_port',CollectionType::class, array(
-			'entry_type' => "FTTHBundle\\Form\\ServicePortType",
-			'allow_add' => true,
-			'allow_delete' => true,
-			'required' => false,
-		 ))
-            ->end()
+                ->with('ONU')
+                    ->add('serialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('ponSerialNumberAux', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('mac')
+                    ->add('olt')
+                    ->add('position')
+	                ->add('service_port',CollectionType::class, array(
+		            	'entry_type' => "FTTHBundle\\Form\\ServicePortType",
+		            	'allow_add' => true,
+		            	'allow_delete' => true,
+		            	'required' => false,
+		            ))
+                ->end()
             ->end()
             ->setHelps(array(
                 'nap' => $this->trans("helps.check_address"),
@@ -103,6 +106,94 @@ class ONUAdmin extends WorkflowBaseAdmin
 		));
 
 
+
+        $tr069Data = 0;
+        
+        if($this->isCurrentRoute('edit')) {
+
+            if($this->getParameter('tr069_service')) {
+                $object = $this->getSubject();
+                
+                $query = array('$or' => array());
+                if($object->getSerialNumber()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getSerialNumber()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getSerialNumber()));
+                }
+
+                if($object->getPonSerialNumber()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
+                }
+
+                if($object->getPonSerialNumberAux()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
+                }
+
+
+                $devices = $this->get('tr069.api')->getDevices($query);
+
+                if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
+
+                    $tr069Data = $this->getTR069Data($devices[0]);
+
+                    $id = $tr069Data['_id'] ?? null;
+                    $manufacturer = $tr069Data['_deviceId']['_Manufacturer'] ?? null;
+                    $oui = $tr069Data['_deviceId']['_OUI'] ?? null;
+                    $productClass = $tr069Data['_deviceId']['_ProductClass'] ?? null;
+                    $serialNumber = $tr069Data['_deviceId']['_SerialNumber'] ?? null;
+                    $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+
+                    $ssid = $tr069Data['SSID']['_value'] ?? null;
+                    $pass = $tr069Data['preSharedKey']['_value'] ?? null;
+                    $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null;
+                    $status = $tr069Data['Status']['_value'] ?? null;
+
+                    $catv = $tr069Data['CatvPower']['_value'] ?? null;
+
+                    $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+
+                    $formMapper
+                        ->tab('TR069')
+                            ->with('General')
+                                ->add('tr069_id', 'text', array('mapped' => false, 'data' => $id, 'required' => false, 'disabled' => true))
+                                ->add('tr069_manufacturer', 'text', array('mapped' => false, 'data' => $manufacturer, 'required' => false, 'disabled' => true))
+                                ->add('tr069_oui', 'text', array('mapped' => false, 'data' => $oui, 'required' => false, 'disabled' => true))
+                                ->add('tr069_product_class', 'text', array('mapped' => false, 'data' => $productClass, 'required' => false, 'disabled' => true))
+                                ->add('tr069_serial_number', 'text', array('mapped' => false, 'data' => $serialNumber, 'required' => false, 'disabled' => true))
+                                ->add('tr069_ip', 'text', array('mapped' => false, 'data' => $ip, 'required' => false, 'disabled' => true))
+                            ->end()
+                            ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')])
+                                ->add('tr069_ssid', 'text', array('mapped' => false, 'data' => $ssid, 'required' => false))
+                                ->add('tr069_pass', 'text', array('mapped' => false, 'data' => $pass, 'required' => false))
+                                ->add('tr069_broadcast', CheckboxType::class, array('mapped' => false, 'data' => $broadcast, 'required' => false))
+                                ->add('tr069_status', CheckboxType::class, array('mapped' => false, 'data' => $status, 'required' => false))
+                            ->end()
+                            ->with('CATV',['description' => $this->trans('helps.tr069_catv')])
+                                ->add('tr069_catv', CheckboxType::class, array('mapped' => false, 'data' => $catv, 'required' => false))
+                            ->end()
+                        ->end();
+
+                    $tr069Data = 1;
+                } else {
+                    $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_onu_no_detected')])->end()->end();
+                }
+            } else {
+                $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_disabled')])->end()->end();
+            }
+        } else {
+            $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_no_edit')])->end()->end();
+        }
+
+        // If use tr069 > send data in preUpdate()
+        $formMapper
+        ->tab('default')
+            ->with('')
+                ->add('tr069_exist', HiddenType::class, array('mapped' => false, 'data' => $tr069Data))
+            ->end()
+        ->end();
+
+
         /*
          *  Si vienen parámetros por GET de olt=id o psn=string seteamos los campos
          */
@@ -139,32 +230,110 @@ class ONUAdmin extends WorkflowBaseAdmin
     {
         $showMapper
             ->tab('default')
-            ->with('')
-            ->add('clientId')
-            ->add('ponSerialNumber')
-            ->add('profile')
-            ->add('nap')
-            ->add('model')
-            ->end()
+                ->with('')
+                    ->add('clientId')
+                    ->add('ponSerialNumber')
+                    ->add('profile')
+                    ->add('nap')
+                    ->add('model')
+                ->end()
             ->end()
             ->tab('Avanzado')
-            ->with('ONU')
-            ->add('serialNumber')
-            ->add('ponSerialNumberAux')
-            ->add('mac')
-            ->add('olt')
-            ->add('currentState')
-            ->end()
+                ->with('ONU')
+                    ->add('serialNumber')
+                    ->add('ponSerialNumberAux')
+                    ->add('mac')
+                    ->add('olt')
+                    ->add('currentState')
+                ->end()
             ->end()
             ->tab('Log')
-            ->with('Log')
-            ->add('log', 'string', array('template' => 'FTTHBundle:ONU:show_log.html.twig'))
-            ->add('deviceLog', 'string', array(
-                'template' => 'DeviceBundle::show_device_log.html.twig',
-                'translation_domain' => 'DeviceBundle',
-            ))
-            ->end()
+                ->with('Log')
+                    ->add('log', 'string', array('template' => 'FTTHBundle:ONU:show_log.html.twig'))
+                    ->add('deviceLog', 'string', array(
+                        'template' => 'DeviceBundle::show_device_log.html.twig',
+                        'translation_domain' => 'DeviceBundle',
+                    ))
+                ->end()
             ->end();
+
+        if($this->getParameter('tr069_service')) {
+            $object = $this->getSubject();
+                
+            $query = array('$or' => array());
+            if($object->getSerialNumber()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getSerialNumber()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getSerialNumber()));
+            }
+            
+            if($object->getPonSerialNumber()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
+            }
+            
+            if($object->getPonSerialNumberAux()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
+            }
+            
+            $devices = $this->get('tr069.api')->getDevices($query);
+
+            if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
+
+                $tr069Data = $this->getTR069Data($devices[0]);
+
+                $id = $tr069Data['_id'] ?? null;
+                $manufacturer = $tr069Data['_deviceId']['_Manufacturer'] ?? null;
+                $oui = $tr069Data['_deviceId']['_OUI'] ?? null;
+                $productClass = $tr069Data['_deviceId']['_ProductClass'] ?? null;
+                $serialNumber = $tr069Data['_deviceId']['_SerialNumber'] ?? null;
+                $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+
+                $ssid = $tr069Data['SSID']['_value'] ?? null;
+                $pass = $tr069Data['preSharedKey']['_value'] ?? null;
+                $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null;
+                $status = $tr069Data['Status']['_value'] ?? null;
+
+                $catv = $tr069Data['CatvPower']['_value'] ?? null;
+
+                $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+
+                $showMapper
+                    ->tab('TR069')
+                        ->with('General')
+                            ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $id))
+                            ->add('tr069_manufacturer', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $manufacturer))
+                            ->add('tr069_oui', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $oui))
+                            ->add('tr069_product_class', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $productClass))
+                            ->add('tr069_serial_number', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $serialNumber))
+                            ->add('tr069_ip', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ip))
+                        ->end()
+                        ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')])
+                            ->add('tr069_ssid', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ssid))
+                            ->add('tr069_pass', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $pass))
+                            ->add('tr069_broadcast', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $broadcast))
+                            ->add('tr069_status', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $status))
+                        ->end()
+                        ->with('CATV',['description' => $this->trans('helps.tr069_catv')])
+                            ->add('tr069_catv', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $catv))
+                        ->end()
+                    ->end();
+            } else {
+                $showMapper
+                    ->tab('TR069')
+                        ->with('General')
+                            ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_onu_no_detected')))
+                        ->end()
+                    ->end();
+            }
+        } else {
+            $showMapper
+                ->tab('TR069')
+                    ->with('General')
+                        ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_disabled')))
+                    ->end()
+                ->end();
+        }
     }
 
     /**
@@ -193,6 +362,24 @@ class ONUAdmin extends WorkflowBaseAdmin
     public function preUpdate($onu)
     {
         $this->correctSerialNumber($onu);
+        
+        if((boolean) $this->getForm()->get('tr069_exist')->getData()) {
+            $ssid = ($this->getForm()->get('tr069_ssid')->getData()) ?? null;
+            $pass = ($this->getForm()->get('tr069_pass')->getData()) ?? null;
+            $id = ($this->getForm()->get('tr069_id')->getData()) ?? null;;
+            $catv = ($this->getForm()->get('tr069_catv')->getData()) ?? null;
+            $broadcast = ($this->getForm()->get('tr069_broadcast')->getData()) ?? null;
+            $status = ($this->getForm()->get('tr069_status')->getData()) ?? null;
+
+            if($ssid) $aux = $this->get('tr069.api')->setWlan($id, $ssid, $pass);
+            
+            if(!is_null($catv)) $aux = $this->get('tr069.api')->setCATV($id, $catv);
+            
+            if(!is_null($broadcast)) $aux = $this->get('tr069.api')->setWbroadcast($id, $broadcast);
+            
+            if(!is_null($status)) $aux = $this->get('tr069.api')->setWstatus($id, $status);
+        }
+        
     }
 
     public function prePersist($onu)
@@ -276,22 +463,47 @@ class ONUAdmin extends WorkflowBaseAdmin
     }
 
     public function update($object){
-	$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
-	$all = $em->getRepository(\FTTHBundle\Entity\ServicePort::class)->findBy(array("onu" => $object));
-	foreach($all as $sp){
-		if(!$object->getServicePort()->contains($sp)){
-			$em->remove($sp);
-		}
-	}
-
-	foreach($object->getServicePort() as $sp){
-		$sp->setOnu($object);
-		$em->persist($sp);
-		if(!$sp->getOlt()){
-			$sp->setOlt($object->getOlt());
-		}
-	}
-	return parent::update($object);
+	    $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
+	    $all = $em->getRepository(\FTTHBundle\Entity\ServicePort::class)->findBy(array("onu" => $object));
+	    foreach($all as $sp){
+	    	if(!$object->getServicePort()->contains($sp)){
+	    		$em->remove($sp);
+	    	}
+	    }
+
+	    foreach($object->getServicePort() as $sp){
+	    	$sp->setOnu($object);
+	    	$em->persist($sp);
+	    	if(!$sp->getOlt()){
+	    		$sp->setOlt($object->getOlt());
+	    	}
+	    }
+	    return parent::update($object);
+    }
+
+    private function getTR069Data($data) {
+        $result = array();
+
+        $result['_id'] = $data['_id'] ?? null;
+        $result['_deviceId'] = $data['_deviceId'] ?? null;
+
+        $result['SSID'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['SSID'] ?? null;
+        $result['keyPassphrase'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['KeyPassphrase'] ?? null;
+        $result['SSIDAdvertisementEnabled'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['SSIDAdvertisementEnabled'] ?? null;
+        $result['Status'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['Enable'] ?? null;
+        
+        //InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.PreSharedKey.1.PreSharedKey
+        $result['preSharedKey'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['PreSharedKey']['1']['PreSharedKey'] ?? null;
+        
+        $result['CatvPower'] = $data['InternetGatewayDevice']['VS_AppCfg']['VsCatvCfg']['CatvPower'] ?? null;
+        $result['ExternalIPAddress'] = $data['InternetGatewayDevice']['WANDevice']['1']['WANConnectionDevice']['1']['WANPPPConnection']['1']['ExternalIPAddress'] ?? null;
+
+        return $result;
+            
+
+        
+
+
     }
     
 }

+ 2 - 1
src/FTTHBundle/Controller/ONUCRUDController.php

@@ -47,7 +47,8 @@ class ONUCRUDController extends CRUDController
             $clients = $webservice->getData($clientApi, $filters);
             if(is_array($clients) && !empty($clients))
                 foreach($clients as $client) {
-                    $_clients[$client['id']] = "{$client['id']} - {$client['name']}";
+                    if(isset($client['id']) && isset($client['name']))
+                        $_clients[$client['id']] = "{$client['id']} - {$client['name']}";
                 }
         }
 

+ 27 - 0
src/FTTHBundle/Resources/translations/FTTHBundle.es.yml

@@ -114,6 +114,17 @@ form:
     label_address: Dirección
     label_service_port: Service Port
     label_position: Posición dentro del puerto
+    label_tr069_ssid: SSID
+    label_tr069_pass: Password
+    label_tr069_catv: CATV
+    label_tr069_id: TR069 ID
+    label_tr069_manufacturer: Manufacturer
+    label_tr069_oui: OUI
+    label_tr069_product_class: Product Class
+    label_tr069_serial_number: Serial Number
+    label_tr069_ip: IP
+    label_tr069_broadcast: Broadcast SSID
+    label_tr069_status: Enable SSID
 
 list:
     label_id: Id
@@ -198,6 +209,17 @@ show:
     label_link: Link
     label_enable: Enable
     label_address: Dirección
+    label_tr069_ssid: SSID
+    label_tr069_pass: Password
+    label_tr069_catv: CATV
+    label_tr069_id: TR069 ID
+    label_tr069_manufacturer: Manufacturer
+    label_tr069_oui: OUI
+    label_tr069_product_class: Product Class
+    label_tr069_serial_number: Serial Number
+    label_tr069_ip: IP
+    label_tr069_broadcast: Broadcast SSID
+    label_tr069_status: Enable SSID
     
 helps:
     check_address: Verifique la dirección para el cálculo de distancias.
@@ -205,6 +227,11 @@ helps:
     onu_pon_serial_number: Identificador de la ONU, puede ser un Serial Number o Pon Serial Number.
     onu_pon_serial_number_aux: Pon Serial Number de la ONU conformado por 12 caracteres, si es vacío lo calculamos desde el Identificador.
     service_port: Los services ports son creados automaticamente, si el modelo de OLT tiene seteado 'auto-create-service-ports' == true, en caso de modificarlos <b>no</b> se actualizaran en la OLT, sino que seran utilizados en el siguiente comando.
+    tr069_wifi: La configuración de estos campos puede depender/variar según el modelo de la ONU/ONT. Los campos tardan en actualizarse.
+    tr069_catv: La configuración de este campo puede depender/variar según el modelo de la ONU/ONT. El campo puede tardar en actualizarse.
+    tr069_no_edit: El servicio TR069 se encuentra solamente disponible para la edición de la ONU/ONT.
+    tr069_disabled: El servicio TR069 se encuentra deshabilitado.
+    tr069_onu_no_detected: No se encontró la ONU/ONT en el servicio TR069.
 
 error:
     address_not_found: La dirección "%client_address%" no fue encontrada en los servicios de google.

+ 10 - 0
src/FTTHBundle/Resources/views/ONU/base_show_boolean.html.twig

@@ -0,0 +1,10 @@
+{% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
+
+{% block field %}
+    {% set value = field_description.options.boolean %}
+    {% if value %}
+        <span class="label label-success">yes</span>
+    {% else %}
+        <span class="label label-danger">no</span>
+    {% endif %}
+{% endblock %}

+ 7 - 0
src/FTTHBundle/Resources/views/ONU/base_show_field.html.twig

@@ -0,0 +1,7 @@
+<div class="box-body">
+    <div class="sonata-ba-collapsed-fields">
+        <p>{{ field_description.options.text }}</p>
+        <em>{{ 'message_form_group_empty'|trans({}, 'SonataAdminBundle') }}</em>
+    </div>                                       
+</div>                                       
+

+ 5 - 0
src/FTTHBundle/Resources/views/ONU/base_show_text.html.twig

@@ -0,0 +1,5 @@
+{% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
+
+{% block field %}
+    {{ field_description.options.text }}
+{% endblock %}