Browse Source

Merged in FD3-708 (pull request #106)

FD3-708
Guillermo Espinoza 6 năm trước cách đây
mục cha
commit
efe5455c12

+ 54 - 38
src/FTTHBundle/Admin/ONUAdmin.php

@@ -17,6 +17,7 @@ use Symfony\Component\Form\Extension\Core\Type\CollectionType;
 use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
 use Symfony\Component\Form\Extension\Core\Type\HiddenType;
+use FTTHBundle\Entity\ONUTemplate;
 use FTTHBundle\Form\ServicePortType;
 use FTTHBundle\Utils\OLTModelMark;
 use WorkflowBundle\Admin\WorkflowBaseAdmin;
@@ -105,11 +106,19 @@ class ONUAdmin extends WorkflowBaseAdmin
      */
     protected function configureFormFields(FormMapper $formMapper)
     {
-        $marks = OLTModelMark::getChoices();
-        $em = $this->get("doctrine.orm.entity_manager");
-        $template = $em->getRepository('FTTHBundle:ONUTemplate')->findOneBy(array('base'=>true));
         $subject = $this->getSubject();
+        $em = $this->get("doctrine.orm.entity_manager");
+        
+        // busco el ONU template si se pasa como parámetro
+        $template = null;
+        $onuTemplateId = $this->getRequest()->query->get('onu_template');
+        if ($onuTemplateId) {
+            $this->getRequest()->query->remove('onu_template');
+            $template = $em->getRepository(ONUTemplate::class)
+                        ->find($onuTemplateId);
+        }
 
+        $marks = OLTModelMark::getChoices();
         foreach ($marks as $m) {
             $hidden[$m] = 'hidden';
         }
@@ -124,15 +133,16 @@ class ONUAdmin extends WorkflowBaseAdmin
             ],
         ];
 
+        // Editando la ONU o hay template base o pasado como parámetro
         if ($subject->getId() || $template) {
-            if($subject->getOlt()) {
+            $olt = null;
+            if ($subject->getOlt()) {
                 $olt = $subject->getOlt();
-            } elseif($template) {
+            } elseif ($template) {
                 $olt = $template->getOlt();
-            } else {
-                $olt = null;
             }
-
+            
+            // Según el modelo de OLT se muestran algunos campos específicos
             if ($olt && $olt->getModel()) {
                 $oltModel = $olt->getModel();
                 $mark = $oltModel->getMark();
@@ -147,15 +157,27 @@ class ONUAdmin extends WorkflowBaseAdmin
             }
         }
 
-        if($template && $this->isCurrentRoute('create')) {
-            $translator = $this->get('translator');
+        if ($template && $this->isCurrentRoute('create')) {
             $flashbag = $this->get('session')->getFlashBag();
-            $flashbag->add("warning", $translator->trans("msg_use_template_onu_in_create_onu_ftth",array(),"FTTHBundle"));
+            $flashbag->add("warning", $this->trans("msg_use_template_onu_in_create_onu_ftth"));
         }
 
         $formMapper
             ->tab('default')
-                ->with('')
+                ->with('');
+        
+        // Se agrega ONUTemplate solo en el create
+        if ($this->isCurrentRoute('create')) {
+            $formMapper->add('onuTemplate', 'entity', [
+                'class' => ONUTemplate::class,
+                'required' => false,
+                'mapped' => false,
+                'help' => $this->trans('helps.onuTemplate'),
+                'data' => $template,
+            ]);
+        }
+        
+        $formMapper
                     ->add('clientId')
                     ->add('ponSerialNumber', null, array(
                         'attr' => array(
@@ -224,38 +246,33 @@ class ONUAdmin extends WorkflowBaseAdmin
 
 
         $tr069Data = 0;
-
-        if($this->isCurrentRoute('edit')) {
-
-            if($this->getParameter('tr069_service')) {
-                $object = $this->getSubject();
+        if ($this->isCurrentRoute('edit')) {
+            if ($this->getParameter('tr069_service')) {
                 $serviceName = $this->getParameter('tr069_api');
-                if($model = $object->getModel()) {
+                if ($model = $subject->getModel()) {
                     if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api');
                 }
                 $tr069 = $this->get($serviceName);
 
                 $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 ($subject->getSerialNumber()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($subject->getSerialNumber()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($subject->getSerialNumber()));
                 }
 
-                if($object->getPonSerialNumber()) {
-                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
-                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
+                if ($subject->getPonSerialNumber()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($subject->getPonSerialNumber()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($subject->getPonSerialNumber()));
                 }
 
-                if($object->getPonSerialNumberAux()) {
-                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
-                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
+                if ($subject->getPonSerialNumberAux()) {
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($subject->getPonSerialNumberAux()));
+                    $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($subject->getPonSerialNumberAux()));
                 }
 
-
                 $devices = $tr069->getDevices($query);
 
-                if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
-
+                if (is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
                     $tr069Data = $tr069->getTR069Data($devices[0]);
 
                     $id = $tr069Data['_id'] ?? null;
@@ -318,7 +335,7 @@ class ONUAdmin extends WorkflowBaseAdmin
          *  Si vienen parámetros por GET de olt=id o psn=string seteamos los campos
          */
         $formMapper->getFormBuilder()->addEventListener(FormEvents::PRE_SET_DATA,
-            function (FormEvent $event) use ($formMapper, $template, $subject) {
+            function (FormEvent $event) use ($em, $template) {
                 $form = $event->getForm();
 
                 if ($template && $this->isCurrentRoute('create')) {
@@ -326,16 +343,17 @@ class ONUAdmin extends WorkflowBaseAdmin
                 }
 
                 $olt = $this->getRequest()->query->get('olt');
-                if(!is_null($olt)) {
-                    $em = $this->get("doctrine.orm.entity_manager");
-
+                if (!is_null($olt)) {
                     $query_olt = $em->createQueryBuilder('o')
                             ->select('o')
                             ->from('FTTHBundle:OLT', 'o')
                             ->where('o.id = :id')
                             ->setParameter('id', $olt);
 
-                    $form->add('olt', 'entity', array('class' => 'FTTHBundle:OLT', 'query_builder' => $query_olt));
+                    $form->add('olt', 'entity', array(
+                        'class' => 'FTTHBundle:OLT', 
+                        'query_builder' => $query_olt
+                    ));
                 }
 
                 $ponSerialNumber = $this->getRequest()->query->get('psn');
@@ -654,6 +672,7 @@ class ONUAdmin extends WorkflowBaseAdmin
         }
         return parent::update($object);
     }
+
     /**
      * @param Form $form
      * @param Template $template
@@ -703,9 +722,6 @@ class ONUAdmin extends WorkflowBaseAdmin
         if($vlans = $template->getVlans()) {
             $form->add('vlans', null, array('data' => $vlans));
         }
-        if($position = $template->getPosition()) { 
-            $form->add('position', null, array('data' => $position));
-        }
 
         if($extraData = $template->getExtraData()) {
             $form->add('extraData', null, array('data' => $extraData));

+ 1 - 1
src/FTTHBundle/Entity/ONUTemplate.php

@@ -148,7 +148,7 @@ class ONUTemplate implements TenancyIdTraitInterface
      */
     public function __toString()
     {
-        return (string)$this->id;
+        return sprintf("ID: %s MODELO: %s PERFIL: %s OLT: %s ", $this->id, $this->model, $this->profile, $this->olt);
     }
 
     /**

+ 3 - 2
src/FTTHBundle/Resources/translations/FTTHBundle.es.yml

@@ -164,6 +164,7 @@ form:
     label_template: Template
     label_vlan_profile: VLAN Profile
     label_onu_profile: ONU Profile
+    label_onu_template: Plantilla ONU
     label_enable_pass: Enable Password
     label_ssh_port: SSH Port
     label_ssh_connect: Conexión por SSH
@@ -314,8 +315,8 @@ helps:
     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.
+    onuTemplate: Al seleccionar una Plantilla de ONU se recargará la página y el formulario seteará sus valores 
     ip_static: Ip estática
-
 error:
     address_not_found: La dirección "%client_address%" no fue encontrada en los servicios de google.
 Distance: Distancia
@@ -358,4 +359,4 @@ client_filter_help: Ingresar nombre de cliente, ID o externalID
 error_onu_position: La posición dentro del puerto seleccionada ya se encuentra asignada a otra ONU
 
 Stats: Estadísticas
-Show stats: Mostrar detalle
+Show stats: Mostrar detalle

+ 26 - 0
src/FTTHBundle/Resources/views/ONU/form.html.twig

@@ -241,6 +241,32 @@
                 });
             }
         }
+        
+        
+        // Al cambiar un valor de ONU Template se envía como parámetro el id
+        // y se recarga la página
+        function onuTemplateReloadPage()
+        {
+            if ($('#{{ admin.uniqid  ~ "_onuTemplate" }}')) {
+                var onuTemplateId = $('#{{ admin.uniqid  ~ "_onuTemplate" }}').val();
+                var url = '{{ path('admin_ftth_onu_create') }}';
+                if (onuTemplateId) {
+                    var parameters = ['onu_template=' + onuTemplateId];
+                    if (window.location.href.includes('?')) {
+                        var pieces = window.location.href.split('?');
+                        var parametersSplit = pieces[1].split('&');
+                        for (var i = 0; i < parametersSplit.length; i++) {
+                            var parameter = parametersSplit[i].split('=');
+                            if (parameter[0] != 'onu_template') {
+                                parameters.push(parametersSplit[i]);
+                            }
+                        }
+                    }
+                    window.location = url + '?' + parameters.join('&');
+                }
+            }
+        }
+        $('#{{ admin.uniqid  ~ "_onuTemplate" }}').on('change', onuTemplateReloadPage);
     </script>
 
 {% endblock %}