Просмотр исходного кода

Se implementa método alternativo para traer los nombres de los clientes, se reduce en 1 contra n consultas al base por cada elemento mostrado en el listado de onu.

Maxi Schvindt 7 лет назад
Родитель
Сommit
0b8e80e069

+ 1 - 1
src/FTTHBundle/Admin/ONUAdmin.php

@@ -38,7 +38,7 @@ class ONUAdmin extends WorkflowBaseAdmin
     protected function configureListFields(ListMapper $listMapper)
     {
         $listMapper
-            ->add('clientId')
+            ->add('client', 'string', array('template' => 'FTTHBundle:ONU:base_list_field_client.html.twig'))
             ->add('ip')
             ->add('mac')
             ->add('serialNumber', 'string', array('template' => 'FTTHBundle:ONU:base_list_field_upper.html.twig'))

+ 77 - 0
src/FTTHBundle/Controller/ONUCRUDController.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace FTTHBundle\Controller;
+
+use WorkflowBundle\Controller\CRUDController;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\Security\Core\Exception\AccessDeniedException;
+
+class ONUCRUDController extends CRUDController
+{
+
+    /**
+     * List action.
+     *
+     * @return Response
+     *
+     * @throws AccessDeniedException If access is not granted
+     */
+    public function listAction()
+    {
+        $request = $this->getRequest();
+
+        $this->admin->checkAccess('list');
+
+        $preResponse = $this->preList($request);
+        if ($preResponse !== null) {
+            return $preResponse;
+        }
+
+        if ($listMode = $request->get('_list_mode')) {
+            $this->admin->setListMode($listMode);
+        }
+
+        $datagrid = $this->admin->getDatagrid();
+        $clientsIds = array();
+        foreach($datagrid->getResults() as $object) {
+            if($object->getClientId())
+                $clientsIds[$object->getClientId()] = $object->getClientId();
+        }
+
+        $_clients = array();
+        if($this->container->hasParameter('client') && $clientsIds) {
+            $clientApi = $this->getParameter('client');
+            $webservice = $this->get("webservice");
+            $filters = array("qb-ids" => implode(",",$clientsIds), 'qb-criteria' => true);
+            $clients = $webservice->getData($clientApi, $filters);
+            if($clients)
+                foreach($clients as $client) {
+                    $_clients[$client['id']] = "{$client['id']} - {$client['name']}";
+                }
+        }
+
+        if($_clients) {
+            foreach($datagrid->getResults() as $object) {
+                if($object->getClientId() && isset($_clients[$object->getClientId()]))
+                    $object->setClientId($_clients[$object->getClientId()]);
+            }
+        }
+        
+        $formView = $datagrid->getForm()->createView();
+
+        // set the theme for the current Admin Form
+        $this->setFormTheme($formView, $this->admin->getFilterTheme());
+
+        return $this->render($this->admin->getTemplate('list'), array(
+            'action' => 'list',
+            'form' => $formView,
+            'datagrid' => $datagrid,
+            'csrf_token' => $this->getCsrfToken('sonata.batch'),
+            'export_formats' => $this->has('sonata.admin.admin_exporter') ?
+                $this->get('sonata.admin.admin_exporter')->getAvailableFormats($this->admin) :
+                $this->admin->getExportFormats(),
+        ), null);
+    }
+
+}

+ 1 - 1
src/FTTHBundle/Resources/config/services.yml

@@ -1,7 +1,7 @@
 services:
     ftth.admin.onu:
         class: FTTHBundle\Admin\ONUAdmin
-        arguments: [~, FTTHBundle\Entity\ONU, WorkflowBundle:CRUD]
+        arguments: [~, FTTHBundle\Entity\ONU, FTTHBundle:ONUCRUD]
         tags:
             - { name: sonata.admin, manager_type: orm, group: FTTH, label: ONU, label_catalogue: FTTHBundle, label_translator_strategy: sonata.admin.label.strategy.underscore }
         calls:

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

@@ -18,6 +18,7 @@ filter:
     label_pon_serial_number: Identificador
     label_pon_serial_number_aux: Número Serie Pon
     label_client_id: Cliente
+    label_client: Cliente
     label_current_state: Estado
     label__action: Acciones
     label_created: Creado
@@ -74,6 +75,7 @@ form:
     label_pon_serial_number: Identificador
     label_pon_serial_number_aux: Número Serie Pon
     label_client_id: Cliente
+    label_client: Cliente
     label_current_state: Estado
     label__action: Acciones
     label_created: Creado
@@ -119,6 +121,7 @@ list:
     label_pon_serial_number: Identificador
     label_pon_serial_number_aux: Número Serie Pon
     label_client_id: Cliente
+    label_client: Cliente
     label_current_state: Estado
     label__action: Acciones
     label_created: Creado
@@ -159,6 +162,7 @@ show:
     label_pon_serial_number: Identificador
     label_pon_serial_number_aux: Número Serie Pon
     label_client_id: Cliente
+    label_client: Cliente
     label_current_state: Estado
     label__action: Acciones
     label_created: Creado

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

@@ -0,0 +1,7 @@
+{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
+
+{% block field %}
+    
+    {{ object.getClientId() }}
+
+{% endblock %}