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

Se agrego al webservice un filtro de clientes para los admin

Se agrego en RESTController al metodo cgetAction el filtro 'orWhere' donde utiliza or en lugar de and
gabriel 7 лет назад
Родитель
Сommit
7328d285e1
2 измененных файлов с 64 добавлено и 7 удалено
  1. 12 2
      Controller/RESTController.php
  2. 52 5
      Services/Webservice.php

+ 12 - 2
Controller/RESTController.php

@@ -63,6 +63,12 @@ abstract class RESTController extends VoryxController
             $tenancyService->disableFilter();
             unset($filters['disableTenancy']);
         }
+        $orWhere = false;
+        if (isset($filters['orWhere'])) {
+            // cambia el and por or en la cosulta
+            $orWhere = true;
+            unset($filters['orWhere']);
+        }
         if (isset($filters['qb-criteria'])) {
             try {
 
@@ -70,7 +76,11 @@ abstract class RESTController extends VoryxController
                 $criteria = new \Doctrine\Common\Collections\Criteria();
 
                 foreach ($filters as $field => $value) {
-                    $criteria->andWhere($criteria->expr()->contains("$field", "$value"));
+                    if ($orWhere) {
+                        $criteria->orWhere($criteria->expr()->contains("$field", "$value"));
+                    } else {
+                        $criteria->andWhere($criteria->expr()->contains("$field", "$value"));
+                    }
                 }
 
                 if (!is_null($paramFetcher->get('offset'))) {
@@ -271,7 +281,7 @@ abstract class RESTController extends VoryxController
             // agrego el handler
             $form->handleRequest($request);
             // valido el formulario
-            if($form->isValid()) {
+            if ($form->isValid()) {
                 // actualizo los datos.
                 $em->flush();
                 return $entity;

+ 52 - 5
Services/Webservice.php

@@ -42,7 +42,7 @@ class Webservice
 
     /**
      * Retorna el resultado para utilizar en un choice form field
-     * 
+     *
      * @param string $webservice
      * @param array $params
      *
@@ -63,7 +63,7 @@ class Webservice
 
     /**
      * Retorna el resultado como un array
-     * 
+     *
      * @param string $webservice
      * @param array $params
      *
@@ -142,7 +142,7 @@ class Webservice
 
     /**
      * Similar a getArray pero con mas parametros
-     * 
+     *
      * @param string $url
      * @param array $filters
      * @param array $order_by
@@ -166,7 +166,7 @@ class Webservice
 
     /**
      *  Similar a getData pero la request no hace authentication
-     * 
+     *
      * @param string $url
      * @param array $filters
      * @param array $order_by
@@ -219,7 +219,7 @@ class Webservice
         if ($offset) {
             $url .= "&offset={$offset}";
         }
-        
+
         if ($qbCriteria) {
             $url .= '&filters[qb-criteria]';
         }
@@ -328,4 +328,51 @@ class Webservice
         return isset($result[0]) ? $result[0] : $id;
     }
 
+    /**
+     * Filtra las clientes de los admin.
+     * @param $queryBuilder
+     * @param $alias
+     * @param $field
+     * @param $value
+     * @return  bool
+     */
+    public function getClientFilter($queryBuilder, $alias, $field, $value)
+    {
+        $resp = false;
+        if ($value['value']) {
+            if ($field == 'clientId') {
+                // es el filtro de clientes
+                // debo llamar al webservice para obtener los datos
+                // actualmente filtra por id, name, address
+                if (is_numeric($value['value'])) {
+                    $clients = $this->getData('client',
+                        array(
+                            'externalId' => $value['value']
+                        )
+                    );
+                } else {
+                    $clients = $this->getData('client',
+                        array(
+                            'qb-criteria' => '',
+                            'orWhere' => '',
+                            'externalId' => $value['value'],
+                            'name' => $value['value'],
+                            'address' => $value['value']
+                        )
+                    );
+                }
+                if (count($clients) == 0) {
+                    // no se encontraron clientes con el filtro que se paso
+                    $queryBuilder->andWhere($queryBuilder->expr()->eq(1, 2));
+                } else {
+                    $queryBuilder->andWhere(
+                        $queryBuilder->expr()->in(
+                            $alias . '.clientId', array_column($clients, 'id'))
+                    );
+                    $resp = true;
+                }
+            }
+        }
+        return $resp;
+    }
 }