vtigerCRM-Spain

vtigerCRM-Spain::Búsqueda avanzada en popups Version < 5.3.0

Me gustaría poder abrir una captura (popup) y que me filtre por varios campos al mismo tiempo (los cuales puedo rellenar en la solicitud). Esto para un campo lo veo fácil, ya que es añadiendo parámetros al popup, pero …. ¿para varios campos? Recuerdo que un día me comentaste lo de la búsqueda avanzada, pero lo estuve mirando y no vi en ningún sitio del crm donde se hiciera esto mediante el popup. ¿Podrías guiarme un poquito?

Todo transcurre en la función getWhereCondition() del script include/utils/SearchUtils.php (linea 810)

$_REQUEST Parámetros:

query=true
searchtype=advance
search_cnt=número total de variables a condicionar
matchtype=all|any  si las condiciones se juntan con AND o OR
FieldsX=nombre_campo::::tipo_campo

ConditionX=  (para versiones anteriores a v5.3.0)
      cts: contiene | like
      dcts: no contiene | not like
      is: igual | equal
      isn: distinto | not equal
      bwt: empieza con | begins with
      ewt: termina con | ends with
      grt: mayor que | greater than
      lst: menor que | less than
      grteq: mayor o igual | greater or equal
      lsteq: menor o igual | less or equal

ConditionX=   (para versiones posteriores o iguales a v5.3.0, la sintaxis ha cambiado debido al uso de Zend_Json)
      e: igual | equal | "="
      n: distinto | not equal | "<>"
      s: empieza con | begins with | "LIKE" ("$value%")
      ew: termina con | ends with | "LIKE" ("%$value")
      c: contiene | like | "LIKE" ("%$value%")
      k: no contiene | not like | "NOT LIKE" ("%$value")
      l: menor que | less than | "<"
      b: menor que | less than | "<"
      g: mayor que | greater than | ">"
      a: mayor que | greater than | ">"
      m: menor o igual | less or equal | "<="
      h: mayor o igual | greater or equal | ">="
      
Srch_valueX=valor a buscar
...

Por ejemplo, esto busca cuentas con acc en su nombre o esp en su pais:

Para ello debemos modificar el fichero Smarty/templates/EditViewUI.tpl dentro de la condición {if $uitype eq '10'} que es donde pintará nuestro icono que llama al Popup.

(v<5.3.0)

index.php?module=Accounts&action=Popup&popuptype=specific_account_address&form=TasksEditView&form_submit=false&fromlink=&Fields0=vtiger_account.accountname::::V&Condition0=cts&Srch_value0=acc&Fields1=vtiger_accountbillads.bill_country::::V&Condition1=cts&Srch_value1=ESP&matchtype=any&search_cnt=2&searchtype=advance&query=true

(v>=5.3.0)

Ahora deberíamos crear una variable javascript donde ponemos nuestras variables del request advft_criterial y advft_criteria_groups con los nuevos arrays JSON para luego concatenar la variable a la url de abajo.

<script language="javascript">var filtro ='{literal}[{\"groupid\":\"1\",\"columnname\":\"vtiger_account:accountname:accountname:Accounts_Account_Name:V\",\"comparator\":\"c\",\"value\":\"acc\",\"columncondition\":\"or\"},{\"groupid\":\"1\",\"columnname\":\"vtiger_accountbillads:bill_country:bill_pais_declarante:Accounts_Billing_Country:V\",\"comparator\":\"c\",\"value\":\"esp\",\"columncondition\":\"\"}]{/literal}&advft_criteria_groups={literal}[null,{\"groupcondition\":\"\"}]{/literal}';</script>

index.php?....&forrecord={$ID}&query=true&searchtype=advance&advft_criteria="+filtro,"test",...

Como vemos, hay importantes diferencias a la hora de montar la URL para la búsqueda avanzada a partir de la versión 5.3.0

  Los parametros del REQUEST relativos a la busqueda avanzada **desaparecen**: //Fields, Condition, Srch_value, matchtype, search_cnt// 

siendo sustituidos por un único parametro, pero con una sintaxis muy particular

  //advft_criteria//: ''$[[{
 "groupid":"1 (nº al grupo que pertenece de condiciones)",
 "columnname":"vtiger_account:accountname:accountname:Accounts_Account_Name:V (vt_tabla:fieldname:columnname:lbl:tipo_dato)
 "comparator":"c" (comparador: ver arriba ConditionX)
 "value":"acc"
 "columncondition":"or" (and/or siguiente condicion) 

* Si al filtrar nos saca más de una página al pasar a la siguiente este popup pierde el filtro. Para que no pase esto hay que editar el fichero include/utils/ListViewUtils.php en la función getTableHeaderSimpleNavigation ,que es llamada desde Popup.php y hacer esto:

Index: ListViewUtils.php
===================================================================
--- ListViewUtils.php   (revisión: 2919)
+++ ListViewUtils.php   (revisión: 2920)
@@ -4595,7 +4595,7 @@
        }
        $tabname = getParentTab();
 
-       $url_string = '';
+       $url_string = htmlspecialchars($url_qry);
 
        // vtlib Customization : For uitype 10 popup during paging
        if($_REQUEST['form'] == 'vtlibPopupView') {