From a84efa1dfd5438a097be98e82be4526052bc52df Mon Sep 17 00:00:00 2001 From: Baptiste Wojtkowski Date: Wed, 8 Jan 2025 16:26:37 +0100 Subject: [PATCH] Bug 38847: Fix error when renewing an expired child patron without a guarantor This fixes an internal server error when renewing an expired child patron without a guarantor, when the ChildNeedsGuarantor is set to "must have". Test plan: 1. Create or edit a child patron: - Don't add a guarantor. - Set the "Expiry date" to a date in the past. 2. Set the ChildNeedsGuarantor system preference to "must have". 3. Refresh or view the patron's check out or details page, and select the "Renew" link under the attention heading - this generates an internal server error message. 4. Apply patch. 5. Repeat step 3, you will now get a standard error message "This patron could not be renewed: they need a guarantor." 6. Add a guarantor for the patron. 7. Repeat step 3, and click "Renew" - the patron is now renewed. Signed-off-by: David Nind --- circ/circulation.pl | 1 + .../prog/en/modules/circ/circulation.tt | 4 ++++ .../prog/en/modules/members/moremember.tt | 4 ++++ members/setstatus.pl | 24 ++++++++++++++++--- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/circ/circulation.pl b/circ/circulation.pl index 968470e6f1..75dc267041 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -785,6 +785,7 @@ $template->param( patron_lists_count => $patron_lists_count, override_high_holds => $override_high_holds, nopermission => scalar $query->param('nopermission'), + noguarantor => scalar $query->param('noguarantor'), autoswitched => $autoswitched, logged_in_user => $logged_in_user, ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index a3c9d73f1b..a33c417449 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -105,6 +105,10 @@
Staff members are not allowed to discharge borrowers, nor borrowers to request a discharge.
[% END %] + [% IF ( noguarantor ) %] +
This patron could not be renewed: they need a guarantor.
+ [% END %] + [% IF is_anonymous %]
This is the anonymous patron, so circulation is disabled.
[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt index 5f59267926..71c8f99388 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -81,6 +81,10 @@

Unable to delete patron

Insufficient privileges.

[% END %] + [% IF ( error == 'CANT_RENEW_CHILD_WITHOUT_GUARANTOR' ) %] +

Unable to renew patron

+

They must have a guarantor defined

+ [% END %] [% END %] diff --git a/members/setstatus.pl b/members/setstatus.pl index 83ef1590be..80b9707061 100755 --- a/members/setstatus.pl +++ b/members/setstatus.pl @@ -24,6 +24,7 @@ # along with Koha; if not, see . use Modern::Perl; +use Try::Tiny; use CGI qw ( -utf8 ); use C4::Auth qw( checkauth ); @@ -47,13 +48,24 @@ my $dateexpiry; my $logged_in_user = Koha::Patrons->find( { userid => $loggedinuserid } ); my $patron = Koha::Patrons->find( $borrowernumber ); +my $cannot_renew = '0'; + # Ideally we should display a warning on the interface if the logged in user is # not allowed to modify this patron. # But a librarian is not supposed to hack the system if ( $logged_in_user->can_see_patron_infos($patron) ) { if ( $reregistration eq 'y' ) { + # re-reregistration function to automatic calcul of date expiry - $dateexpiry = $patron->renew_account; + try { + $dateexpiry = $patron->renew_account; + } catch { + if ( ref($_) eq 'Koha::Exceptions::Patron::Relationship::NoGuarantor' ) { + $cannot_renew = '1'; + } else { + $_->rethrow(); + } + } } else { my $sth = $dbh->prepare("UPDATE borrowers SET debarred = ?, debarredcomment = '' WHERE borrowernumber = ?"); $sth->execute( $status, $borrowernumber ); @@ -62,13 +74,19 @@ if ( $logged_in_user->can_see_patron_infos($patron) ) { } if($destination eq "circ"){ - if($dateexpiry){ + if ($cannot_renew) { + print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber&noguarantor=1"); + } elsif ($dateexpiry) { print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber&was_renewed=1"); } else { print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); } } else { - if($dateexpiry){ + if ($cannot_renew) { + print $input->redirect( + "/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber&error=CANT_RENEW_CHILD_WITHOUT_GUARANTOR" + ); + } elsif ($dateexpiry) { print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber&was_renewed=1"); } else { print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber"); -- 2.39.5