Pārlūkot izejas kodu

vista show se muestra el cliente

Guillermo Espinoza 8 gadi atpakaļ
vecāks
revīzija
d66ef377d9

+ 4 - 0
src/WebserviceBundle/Controller/WebserviceController.php

@@ -9,6 +9,10 @@ use Symfony\Component\HttpFoundation\JsonResponse;
 class WebserviceController extends Controller
 {
 
+    /**
+     * @param Request $request
+     * @return JsonResponse
+     */
     public function getClientListAction(Request $request)
     {
         $query = $request->query->get('q', '');

+ 16 - 7
src/WebserviceBundle/Resources/config/services.yml

@@ -9,12 +9,21 @@ services:
        arguments: ["@webservice"]
        
    webservice.client.admin:
-        class: WebserviceBundle\Services\ClientAdmin
-        tags:
-            - { name: kernel.event_listener, event: sonata.admin.event.configure.form, method: addType }
+       class: WebserviceBundle\Services\ClientAdmin
+       tags:
+           - { name: kernel.event_listener, event: sonata.admin.event.configure.form, method: addType }
+           - { name: kernel.event_listener, event: sonata.admin.event.configure.show, method: addClient }
             
    webservice.form.type.remoteclient:
-        class: WebserviceBundle\Form\Type\RemoteClientType
-        arguments: ["@webservice.client.choiceloader"]
-        tags:
-            - { name: form.type }            
+       class: WebserviceBundle\Form\Type\RemoteClientType
+       arguments: ["@webservice.client.choiceloader"]
+       tags:
+           - { name: form.type }
+            
+   webservice.twig_remote_client_extension:
+       class: WebserviceBundle\Twig\RemoteClientExtension
+       arguments: ["@webservice"]
+       public: true
+#        public: false
+       tags:
+           - { name: twig.extension }         

+ 5 - 0
src/WebserviceBundle/Resources/views/CRUD/remote_client_show_field.html.twig

@@ -0,0 +1,5 @@
+{% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
+
+{% block field %}
+    {{ remote_client(value) }}
+{% endblock %}

+ 3 - 2
src/WebserviceBundle/Resources/views/Type/remote_client_widget.html.twig

@@ -1,6 +1,7 @@
 {% block remote_client_widget %}
     {% spaceless %}
         {% set locale = app.request.locale %}
+        {# SE AGREGA UNA VERSION DE SELECT2 MAS NUEVA QUE LA DE SONATA ADMIN #}
         <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
         <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
         <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
@@ -19,11 +20,11 @@
                     dataType: 'json',
                     delay: 250,
                     data: getAjaxListData,
-                    cache: true,
+                    cache: true
                 },
                 language: "{{ locale }}",
                 minimumInputLength: 3
-        });
+            });
         });
         </script>
         {{ block('choice_widget') }}

+ 10 - 0
src/WebserviceBundle/Services/ClientAdmin.php

@@ -17,5 +17,15 @@ class ClientAdmin
             $event->getMapper()->add('clientId', RemoteClientType::class);
         }
     }
+    
+    /**
+     * @param ConfigureEvent $event
+     */
+    public function addClient(ConfigureEvent $event)
+    {
+        if ($event->getMapper()->has('clientId')) {
+            $event->getMapper()->get('clientId')->setTemplate('WebserviceBundle:CRUD:remote_client_show_field.html.twig');
+        }
+    }
 
 }

+ 18 - 5
src/WebserviceBundle/Services/Webservice.php

@@ -27,6 +27,22 @@ class Webservice
     public function getChoices($webservice, $params = array())
     {
         $choices = array();
+        $objectsJson = $this->getArray($webservice, $params);
+        foreach ($objectsJson as $object) {
+            $choices[$object['name']] = $object['id'];
+        }
+
+        return $choices;
+    }
+    
+    /**
+     * @param string $webservice
+     * @param array $params
+     * @return array
+     */
+    public function getArray($webservice, $params = array())
+    {
+        $objectsJson = array();
         if ($this->serviceContainer->hasParameter($webservice)) {
             $url = $this->serviceContainer->getParameter($webservice);
             $url .= '?filters[qb-criteria]';
@@ -34,12 +50,9 @@ class Webservice
                 $url .= "&filters[{$param}]=$value";
             }
             $objectsJson = json_decode(file_get_contents($url), true);
-            foreach ($objectsJson as $object) {
-                $choices[$object['name']] = $object['id'];
-            }
         }
-
-        return $choices;
+        
+        return $objectsJson;
     }
 
 }

+ 55 - 0
src/WebserviceBundle/Twig/RemoteClientExtension.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace WebserviceBundle\Twig;
+
+use WebserviceBundle\Services\Webservice;
+
+class RemoteClientExtension extends \Twig_Extension
+{
+    
+    /**
+     * @var Webservice
+     */
+    protected $webservice;
+    
+    
+    /**
+     * @param Webservice $webservice
+     */
+    public function __construct(Webservice $webservice)
+    {
+        $this->webservice = $webservice;
+    }
+
+    /**
+     * @return array
+     */
+    public function getFunctions()
+    {
+        return array(
+            new \Twig_SimpleFunction('remote_client', array($this, 'getClient')),
+        );
+    }
+
+    /**
+     * @param int $clientId
+     * @return string
+     */
+    public function getClient($clientId)
+    {
+        $client = $this->webservice->getArray('client', array(
+            'id' => $clientId
+        ));
+        
+        return isset($client[0]) ? "{$client[0]['id']} - {$client[0]['name']}" : $clientId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return 'remote_client_extension';
+    }
+
+}