Summary: | Filtering by patron attribute with AV does not work in overdues report | ||
---|---|---|---|
Product: | Koha | Reporter: | Fridolin Somers <fridolin.somers> |
Component: | Circulation | Assignee: | Fridolin Somers <fridolin.somers> |
Status: | CLOSED FIXED | QA Contact: | Testopia <testopia> |
Severity: | normal | ||
Priority: | P5 - low | CC: | arthur.suzuki, gmcharlt, kyle.m.hall, martin.renvoize |
Version: | Main | ||
Hardware: | All | ||
OS: | All | ||
Change sponsored?: | --- | Patch complexity: | Trivial patch |
Documentation contact: | Documentation submission: | ||
Text to go in the release notes: | Version(s) released in: |
22.05.00
|
|
Circulation function: | |||
Attachments: |
Bug 30735: Fix filtering by patron attribute with AV in overdues report
Bug 30735: Fix filtering by patron attribute with AV in overdues report Bug 30735: Fix filtering by patron attribute with AV in overdues report |
Description
Fridolin Somers
2022-05-11 20:51:04 UTC
This looks like very-old-buggy-code ^^ Created attachment 134905 [details] [review] Bug 30735: Fix filtering by patron attribute with AV in overdues report In Circulation > Overdues, if there are seachable patron attributes they can be used in left filters. Search does not work if this attribute is linked to an authorized values category. The problem is that AV code is compared to the AV desciption in : if (grep { $attrval eq lc($_->[1]) } @{ $pattrs->{$code} }) { Looking at a Data::Dumper of the var $pattrs you see for example : $VAR1 = { 'ATT1' => [ [ 'afr', 'Afrikaans' ] ] }; First row is attribute code and second row is desciption. It works for an attribute without AV because in this case 'avdescription' is undefined so code is stored as description : push @{ $pattrs->{$row->{attrcode}} }, [ $row->{attrval}, defined $row->{avdescription} ? $row->{avdescription} : $row->{attrval}, ]; This patch fixes the code and removes commented line. Also reviews the SQL query : - avcategory is useless - use alias attrcode for borrower_attributes.code to be more explicit Test plan : 1) Create a patron A with overdues 2) Go to Circulation > Overdues 3) Check you see the patron A 4) Create a patron attribute, searchable, with an authorized value category, ie LANG 5) Edit patron A to set a value in this attribute 6) Go to Circulation > Overdues 7) Select attribute value and apply filter 8) Check you see the patron A 9) Redo test plan with a patron attribute, searchable, without an authorized value category Created attachment 134971 [details] [review] Bug 30735: Fix filtering by patron attribute with AV in overdues report In Circulation > Overdues, if there are seachable patron attributes they can be used in left filters. Search does not work if this attribute is linked to an authorized values category. The problem is that AV code is compared to the AV desciption in : if (grep { $attrval eq lc($_->[1]) } @{ $pattrs->{$code} }) { Looking at a Data::Dumper of the var $pattrs you see for example : $VAR1 = { 'ATT1' => [ [ 'afr', 'Afrikaans' ] ] }; First row is attribute code and second row is desciption. It works for an attribute without AV because in this case 'avdescription' is undefined so code is stored as description : push @{ $pattrs->{$row->{attrcode}} }, [ $row->{attrval}, defined $row->{avdescription} ? $row->{avdescription} : $row->{attrval}, ]; This patch fixes the code and removes commented line. Also reviews the SQL query : - avcategory is useless - use alias attrcode for borrower_attributes.code to be more explicit Test plan : 1) Create a patron A with overdues 2) Go to Circulation > Overdues 3) Check you see the patron A 4) Create a patron attribute, searchable, with an authorized value category, ie LANG 5) Edit patron A to set a value in this attribute 6) Go to Circulation > Overdues 7) Select attribute value and apply filter 8) Check you see the patron A 9) Redo test plan with a patron attribute, searchable, without an authorized value category Signed-off-by: Owen Leonard <oleonard@myacpl.org> Created attachment 134994 [details] [review] Bug 30735: Fix filtering by patron attribute with AV in overdues report In Circulation > Overdues, if there are seachable patron attributes they can be used in left filters. Search does not work if this attribute is linked to an authorized values category. The problem is that AV code is compared to the AV desciption in : if (grep { $attrval eq lc($_->[1]) } @{ $pattrs->{$code} }) { Looking at a Data::Dumper of the var $pattrs you see for example : $VAR1 = { 'ATT1' => [ [ 'afr', 'Afrikaans' ] ] }; First row is attribute code and second row is desciption. It works for an attribute without AV because in this case 'avdescription' is undefined so code is stored as description : push @{ $pattrs->{$row->{attrcode}} }, [ $row->{attrval}, defined $row->{avdescription} ? $row->{avdescription} : $row->{attrval}, ]; This patch fixes the code and removes commented line. Also reviews the SQL query : - avcategory is useless - use alias attrcode for borrower_attributes.code to be more explicit Test plan : 1) Create a patron A with overdues 2) Go to Circulation > Overdues 3) Check you see the patron A 4) Create a patron attribute, searchable, with an authorized value category, ie LANG 5) Edit patron A to set a value in this attribute 6) Go to Circulation > Overdues 7) Select attribute value and apply filter 8) Check you see the patron A 9) Redo test plan with a patron attribute, searchable, without an authorized value category Signed-off-by: Owen Leonard <oleonard@myacpl.org> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> I would have loved to see some of this moved up into module code and unit tested.. but it does resolve the issue here and I feel asking for such a move at this time would be a bit above an beyond. So, working as expected, no regressions found and QA script is happy. Passing QA Indeed, the code is weired. Maybe should be completely revamped with ORM. Pushed to master for 22.05, thanks to everybody involved [U+1F984] Hi Arthur, could you check this one for backporting please? |