Subconjuntos en subpáneles
noviembre 3, 2016 Publicado en Software y HardwareEtiquetas: SuiteCRM
Supongamos múltiples tipos de cuentas, todas con información que no difiere estructuralmente entre cada tipo y almacenadas todas en un mismo módulo. Para el ejemplo, y aunque lógicamente parezca una locura, podríamos suponer que instituciones, programas y departamentos se almacenarán todos como cuentas, bajo el supuesto de que la información requerida para cada uno de los tipos será siempre la misma.
Ahora bien, supongamos distintos tipos de relaciones entre contactos y cuentas, como por ejemplo estudiantes registrados, profesores, administrativos, docentes, además de otras tantas relaciones posibles.
Ahora supongamos la vista de una cuenta tipo Institución y a continuación imaginemos el subpanel con todos los contactos con los que tendrá relación. Ahora visualice la mezcla indistinta de estudiantes, docentes y administrativos que tendrá ese subpanel y comprenderá el problema en el que nos metimos por querer tener en un mismo módulo diferentes tipos de cuentas.
¿No sería genial poder separar el subpanel en conjuntos por cada tipo de relación y así evitar esa orgía de información?
Para el ejemplo supondremos los siguientes datos:
- módulo_a: es el módulo que consultaremos
- módulo_b: es el módulo que dividiremos en subpáneles
- relación: es el nombre con el cuál declaró la relación entre Módulos A y B.
- filtro: es el dato a filtrar. Debe corresponder a una variable que haya creado o que ya exista en el módulo. Dependiendo de eso deberá cambiar la forma como se hace la consulta SQL.
- filtro_n: el dato n corresponde al elemento con el cuál se hará el filtro
El primer paso es la declaración de los distintos subpáneles. Es posible que ya exista el archivo así que deberá cambiar el contenido.
/<directorio_crm>/custom/Extension/modules/<Módulo_A>/Ext/Layoutdefs/<relación>_<Módulo_B>.php
<?php
$layout_defs["<Módulo_A>"]["subpanel_setup"]['<relación>_<filtro_1>'] = array (
'order' => 101,
'module' => '<Módulo_B>',
'subpanel_name' => 'default',
'sort_order' => 'asc',
'sort_by' => 'id',
'title_key' => 'LBL_<FILTRO_1>',
'get_subpanel_data' => 'function:get_<módulo_b><Filtro>',
'generate_select' => true,
'top_buttons' => array(),
'function_parameters' => array(
'import_function_file' => 'custom/Extension/application/Ext/Utils/<módulo_b>_utils.php',
'<filtro>' => '<filtro_1>',
),
'generate_select' => true,
);
$layout_defs["<Módulo_A>"]["subpanel_setup"]['<relación>_<filtro_2>'] = array (
'order' => 101,
'module' => '<Módulo_B>',
'subpanel_name' => 'default',
'sort_order' => 'asc',
'sort_by' => 'id',
'title_key' => 'LBL_<FILTRO_2>',
'get_subpanel_data' => 'function:get_<módulo_b><Filtro>',
'generate_select' => true,
'top_buttons' => array(),
'function_parameters' => array(
'import_function_file' => 'custom/Extension/application/Ext/Utils/<módulo_b>_utils.php',
'<filtro>' => '<filtro_2>',
),
'generate_select' => true,
);
El siguiente paso es la declaración de la función que atenderá este sistema de filtro. Es posible que el archivo ya exista.
/<directorio_crm>/custom/Extension/application/Ext/Utils/<módulo_b>_utils.php
function get_<módulo_b><Filtro>($params) {
$args = func_get_args();
lt;filtro> = $args[0]['<filtro>'];
$return_array['select'] = " SELECT <módulo_b>.*";
$return_array['from'] = " FROM <módulo_b> ";
$return_array['where'] = " WHERE <módulo_b>.deleted = '0' AND cstm.<filtro>_c = " . lt;filtro> . "";
$return_array['join'] = " INNER JOIN <módulo_b>_cstm cstm ON cstm.id_c = <módulo_b>.id";
$return_array['join_tables'][0] = "";
return $return_array;
}
También se deberá agregar las modificaciones a la traducción para incluir los nuevos campos
/<directorio_crm>/custom/Extension/modules/<Módulo_B>/Ext/Language/en_us.<relación>.php
$mod_strings['LBL_<FILTRO_1>'] = '<Filtro_1>';
$mod_strings['LBL_<FILTRO_2>'] = '<Filtro_2>';
Paso final, ejecutamos la acción de “Reparar y Reconstruir“, y ya tendremos los subpáneles.