Forráskód Böngészése

Merged in FD3-273 (pull request #34)

FD3-273
Gabriel Gosparo 7 éve
szülő
commit
5e14b2283a

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

@@ -18,10 +18,7 @@ class ONUAdmin extends WorkflowBaseAdmin
     protected function configureDatagridFilters(DatagridMapper $datagridMapper)
     {
         $datagridMapper
-            ->add('clientId', CallbackFilter::class,
-                array(
-                    'callback' => array($this, 'getClientFilter'),
-                    'field_type' => 'text'))
+            ->add('clientId')
             ->add('ponSerialNumber')
             ->add('profile')
             ->add('nap')
@@ -123,21 +120,4 @@ class ONUAdmin extends WorkflowBaseAdmin
         $this->setTemplate('create', 'FTTHBundle:ONU:form.html.twig');
         $this->setTemplate('edit', 'FTTHBundle:ONU:form.html.twig');
     }
-
-    /**
-     * Filtra las ONU por el filtro de clientes.
-     * @param $queryBuilder
-     * @param $alias
-     * @param $field
-     * @param $value
-     * @return bool
-     */
-    public function getClientFilter($queryBuilder, $alias, $field, $value)
-    {
-        $resp = false;
-        if ($value['value']) {
-            $resp = $this->get('webservice')->getClientFilter($queryBuilder, $alias, $field, $value);
-        }
-        return $resp;
-    }
 }

+ 75 - 0
src/FTTHBundle/EventListener/ClientFilterListListener.php

@@ -0,0 +1,75 @@
+<?php
+
+namespace FTTHBundle\EventListener;
+
+use Sonata\AdminBundle\Event\ConfigureEvent;
+use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class ClientFilterListListener
+{
+    /**
+     * @var ContainerInterface
+     */
+    protected $container;
+
+    /**
+     * ClientFilterListListener constructor.
+     */
+    public function __construct(ContainerInterface $container)
+    {
+        $this->setContainer($container);
+    }
+
+    /**
+     * @return ContainerInterface
+     */
+    public function getContainer(): ContainerInterface
+    {
+        return $this->container;
+    }
+
+    /**
+     * @param ContainerInterface $container
+     */
+    public function setContainer(ContainerInterface $container)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * Funcion que verifica si existe la propiedad clientId y agrega un callback para poder filtrar las listas.
+     * @param ConfigureEvent $event
+     */
+    public function configureDatagridFilters(ConfigureEvent $event)
+    {
+        if ($event->getMapper()->has('clientId')) {
+            $order = $event->getMapper()->keys();
+            $event->getMapper()->remove('clientId');
+            $event->getMapper()
+                ->add('clientId', CallbackFilter::class,
+                    array(
+                        'callback' => array($this, 'getClientFilter'),
+                        'field_type' => 'text'));
+            $event->getMapper()->reorder($order);
+        }
+    }
+
+    /**
+     * Filtra las ONU por el filtro de clientes.
+     * @param $queryBuilder
+     * @param $alias
+     * @param $field
+     * @param $value
+     * @return bool
+     */
+    public function getClientFilter($queryBuilder, $alias, $field, $value)
+    {
+        $resp = false;
+        if ($value['value']) {
+            $resp = $this->getContainer()->get('webservice')->getClientFilter($queryBuilder, $alias, $field, $value);
+        }
+        return $resp;
+    }
+}

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

@@ -4,7 +4,7 @@ services:
         arguments: [~, FTTHBundle\Entity\ONU, WorkflowBundle:CRUD]
         tags:
             - { name: sonata.admin, manager_type: orm, group: FTTH, label: ONU, label_catalogue: FTTHBundle, label_translator_strategy: sonata.admin.label.strategy.underscore }
-        calls:    
+        calls:
             - [setTranslationDomain, [FTTHBundle]]
 
     ftth.admin.olt:
@@ -60,3 +60,8 @@ services:
         tags:
             - { name: form.type }
 
+    ftth.client.filter.event:
+        class: FTTHBundle\EventListener\ClientFilterListListener
+        tags:
+            - { name: kernel.event_listener, event: sonata.admin.event.configure.datagrid, method: configureDatagridFilters }
+        arguments: ["@service_container"]