From 265fd69556783e9b5e4569337db7beae18732ef7 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Mon, 1 Dec 2025 19:51:52 +0000 Subject: [PATCH] Bug 41343: Don't fetch patron objects per overdue We use SQL here to get all the needed info - the query says it is slow, but isn't so bad. Worse is fetching the patron for each borrower with overdues (and more than once if they have several) It appears we started grabbing the patron so we could use patron title, but we can just pass the info already fetched. I additionally fetch the patron category types and update patron-title to allow for hide_patron_infos_if_needed to work without a patron object - we can just use the branchcode as ultimately that's all we need To test: 1 - Add many items to your catalog (can use my handy repo randitems.pl) https://github.com/kidclamp/handy-koha-script 2 - Add many issues (can use randissues.pl from above) 3 - I tested with about 1000 4 - Browse to Circulation->Overdues 5 - Note load time 6 - Apply patch 7 - Restart all 8 - Note load time is faster Signed-off-by: David Nind --- circ/overdue.pl | 17 ++++++++++++++++- .../prog/en/includes/patron-title.inc | 5 +++-- .../prog/en/modules/circ/overdue.tt | 8 ++++---- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/circ/overdue.pl b/circ/overdue.pl index 2d58dd27ee..0bd118d8a9 100755 --- a/circ/overdue.pl +++ b/circ/overdue.pl @@ -247,6 +247,8 @@ if ($noreport) { borrowers.cardnumber, borrowers.borrowernumber, borrowers.branchcode, + borrowers.categorycode, + categories.category_type, issues.itemnumber, issues.issuedate, items.datelastborrowed, @@ -269,6 +271,7 @@ if ($noreport) { return_claims.id AS return_claim_id FROM issues LEFT JOIN borrowers ON (issues.borrowernumber=borrowers.borrowernumber ) + LEFT JOIN categories ON (categories.categorycode = borrowers.categorycode ) LEFT JOIN items ON (issues.itemnumber=items.itemnumber) LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber) LEFT JOIN biblio ON (biblio.biblionumber=items.biblionumber ) @@ -349,7 +352,19 @@ if ($noreport) { } push @overduedata, { - patron => Koha::Patrons->find( $data->{borrowernumber} ), + borrower => { + branchcode => $data->{branchcode}, + borrowernumber => $data->{borrowernumber}, + categorycode => $data->{categorycode}, + category_type => $data->{category_type}, + surname => $data->{surname}, + othernames => $data->{othernames}, + firstname => $data->{firstname}, + preferred_name => $data->{preferred_name}, + middle_name => $data->{middle_name}, + cardnumber => $data->{cardnumber}, + title => $data->{title} + }, duedate => $data->{date_due}, borrowernumber => $data->{borrowernumber}, cardnumber => $data->{cardnumber}, diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc index eae649b832..074bdcd182 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc @@ -3,6 +3,7 @@ [%- USE Branches -%] [%- SET data = {} -%] [%- IF patron -%] + [%- SET data.branchcode = patron.branchcode -%] [%- SET data.category_type = patron.category.category_type -%] [%- SET data.surname = patron.surname -%] [%- SET data.othernames = patron.othernames -%] @@ -13,6 +14,7 @@ [%- SET data.borrowernumber = patron.borrowernumber -%] [%- SET data.title = patron.title -%] [%- ELSIF ( borrower.borrowernumber ) -%] + [%- SET data.branchcode = borrower.branchcode -%] [%- SET data.category_type = borrower.category_type -%] [%- SET data.surname = borrower.surname -%] [%- SET data.othernames = borrower.othernames -%] @@ -38,8 +40,7 @@ [%- SET display_cardnumber = 1 -%] [%- IF no_cardnumber -%][%- SET display_cardnumber = 0 -%][%- END -%] [%- IF hide_patron_infos_if_needed -%] - [%# Should only be set if patron is set -%] - [%- SET can_see_patron_infos = logged_in_user.can_see_patron_infos( patron ) -%] + [%- SET can_see_patron_infos = logged_in_user.can_see_patrons_from( data.branchcode ) -%] [%- UNLESS can_see_patron_infos -%] [%- SET display_patron_name = 0 -%] [%- SET display_cardnumber = 0 -%] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt index 1bc2b58b50..a273247e60 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt @@ -120,8 +120,8 @@ [% END %] - [% INCLUDE 'patron-title.inc' patron=overdueloo.patron hide_patron_infos_if_needed=1 %] - [% IF logged_in_user.can_see_patron_infos( overdueloo.patron ) %] + [% INCLUDE 'patron-title.inc' borrower=overdueloo.borrower hide_patron_infos_if_needed=1 %] + [% IF logged_in_user.can_see_patrons_from( overdueloo.branchcode ) %] [% IF ( overdueloo.email ) %] [email] [% END %] @@ -136,8 +136,8 @@ [% END %] - [% Categories.GetName( overdueloo.patron.categorycode ) | html %] - [% Branches.GetName( overdueloo.patron.branchcode ) | html %] + [% Categories.GetName( overdueloo.borrower.categorycode ) | html %] + [% Branches.GetName( overdueloo.borrower.branchcode ) | html %] [% INCLUDE 'biblio-title.inc' biblio=overdueloo link = 1 %] [% IF ( overdueloo.author ) %], by [% overdueloo.author | html %][% END %][% IF ( overdueloo.enumchron ) %], [% overdueloo.enumchron | html %][% END %]