ソースを参照

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 年 前
コミット
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;
+    }
 }