From 8124aa8f2366f3c1e89ab00717233db778eb879d 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 Signed-off-by: Nick Clemens --- 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 968470e6f17..75dc2670418 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 a67677b4eb6..e4a2b2cb09a 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 5e62f63a8b6..c465e857be4 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 83ef1590be5..80b9707061b 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