Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incidencia - KReports - Filtro por "esunode" con multienum arroja resultados incorrectos #528

Open
enricsinergia opened this issue Dec 24, 2024 · 0 comments · May be fixed by #523
Open
Assignees
Labels
bug Something isn't working KReporter not urgent

Comments

@enricsinergia
Copy link
Collaborator

enricsinergia commented Dec 24, 2024

Descripción del problema
El filtro esunode no funciona correctamente con algunos valores de campos multienum.
Si nos fijamos en el código

               foreach ($valueArray as $thisMultiEnumValue) {
                  if ($multienumWhereString != '')
                     $multienumWhereString .= ' OR ' . $this->get_field_name($path, $fieldname, $fieldid);

                  $multienumWhereString .= ' LIKE \'%' . $thisMultiEnumValue . '%\'';
               }
               $thisWhereString .= $multienumWhereString;

vemos que se aplica un LIKE al valor interno sin protegerlo con '^'. Eso provoca que si tenemos 2 valores internos tales como "papa" y "papanatas", al seleccionar el primero, aparezcan también los registros que tienen el segundo.

Otro error que se ve es que el operador "distinto de" no trata correctamente los campos multinemun.

Cómo reproducir el problema
Caso del operador "esunode"
1.- En un campo multi-selección añadir 2 valores, tales que sus claves sean una sufijo de la otra (ejemplo "papa" y "papanatas")
2.- Asignar los valores correspondientes a "papa" y "papanatas" a distintos registros.
3.- Crear un informe de KReports, y filtrar con la condición "es uno de" con el valor correspondiente a "papa".
4.- Comprobar que los registros correspondientes a "papanatas" también aparecen en el resultado

Caso del operador "distinto de"
1.- Aprovechar el campo y los valores del caso anterior
2.-

Comportamiento esperado
En el primer caso, sólo los registros correspondientes al valor seleccionado deberían aparecer.
En el segundo caso, para mantener la coherencia del operador con el resto de tipos de campo, se entiende que "distinto de" será todo registro que tenga algún valor distinto, es decir que no tenga exactamente las mismas opciones seleccionadas.

Solución propuesta
Añadir los "^" a la sentencia LIKE. Revisar cómo está haciendo el equals para tratar también casos en que los ^ no estén bien colocados.
Para el segundo caso, aplicar un código parecido al existente para el operador "equals".

Información adicional
Para el segundo caso debe tenerse presente el comportamiento de los campos que pueden estar a NULO, en cuyo caso no aparecen como distintos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working KReporter not urgent
Projects
None yet
1 participant