Bug 40708: Return the specific error to the checkin page

When implemented, the message here was believed to either be about Duplicate IDs, or guarantor issues.
We are now seeing a wider variety of issues possible from SQL errors, lock timeout or missings rows as examples

This patch adds an 'ErrorMessage' message to the return from AddReturn and displays it to the user.

To test:
1 - Issue an item to a patron, note the itemnumber
2 - On the command line, lock the row:
    sudo koha-mysql kohadev
    START TRANSACTION;
    SELECT * FROM issues WHERE itemnumber=975 FOR UPDATE;
    leave mysql open at this point
3 - On the interface, check in the item, wait a bit
4 - After a bit you get the error to check the config page, but nothing is there
5 - close mysql, apply patch, restart all
6 - Repeat 2
7 - Check in the item, wait a bit
8 - Note you now get the error from the DB:
    Error: (DBIx::Class::Storage::DBI::_dbh_execute(): DBI Exception: DBD::mysql::st execute failed: Lock wait timeout exceeded; try restarting transaction at /kohadevbox/koha/Koha/Object.pm line 174 )
9 - Sign off!

Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 3f61f6088f)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
This commit is contained in:
Nick Clemens 2025-08-29 12:03:13 +00:00 committed by Paul Derscheid
parent 6c8fb24ef1
commit 341ce0efc5
No known key found for this signature in database
GPG Key ID: C25F9FD44CED595B
3 changed files with 13 additions and 8 deletions

View File

@ -2477,14 +2477,18 @@ sub AddReturn {
);
}
} else {
my $error = "$@";
carp
"The checkin for the following issue failed, Please go to the about page and check all messages on the 'System information' to see if there are configuration / data issues ($@)"
"The checkin for the following issue failed, Please go to the about page and check all messages on the 'System information' to see if there are configuration / data issues, or see the specific message in parentheses ($@)"
. Dumper( $issue->unblessed );
my $indexer = Koha::SearchEngine::Indexer->new( { index => $Koha::SearchEngine::BIBLIOS_INDEX } );
$indexer->index_records( $item->biblionumber, "specialUpdate", "biblioserver" );
return ( 0, { WasReturned => 0, DataCorrupted => 1 }, $issue, $patron_unblessed );
return (
0, { WasReturned => 0, DataCorrupted => $error }, $issue,
$patron_unblessed
);
}
# FIXME is the "= 1" right? This could be the borrower hash.

View File

@ -758,7 +758,7 @@ foreach my $code ( keys %$messages ) {
} elsif ( $code eq 'NotForLoanStatusUpdated' ) {
$err{NotForLoanStatusUpdated} = $messages->{NotForLoanStatusUpdated};
} elsif ( $code eq 'DataCorrupted' ) {
$err{data_corrupted} = 1;
$err{data_corrupted} = $messages->{'DataCorrupted'};
} elsif ( $code eq 'ReturnClaims' ) {
$template->param( ReturnClaims => $messages->{ReturnClaims} );
} elsif ( $code eq 'ClaimAutoResolved' ) {

View File

@ -399,11 +399,12 @@
[% IF ( errmsgloo.foreverdebarred ) %]
<p class="problem ret_foreverdebarred"><strong>Reminder: </strong>Patron has an indefinite restriction.</p>
[% END %]
[% IF errmsgloo.data_corrupted %]
<p class="problem ret_datacorrupt"
>The item has not been checked in due to a configuration issue in your system. You must ask an administrator to take a look at the <a href="/cgi-bin/koha/about.pl#sysinfo_panel">about page</a> and correct all
errors shown on the "System information" tab</p
>
[% IF ( errmsgloo.data_corrupted ) %]
<p class="problem ret_datacorrupt">
The item has not been checked in due to an issue in your system. Note the error below. An administrator may find further details by looking at the <a href="/cgi-bin/koha/about.pl#sysinfo_panel">about page</a> and
correcting errors shown on the "System information" tab, or note the error below.
</p>
<p class="problem ret_error_message"> Error: ([% errmsgloo.data_corrupted | html %]) </p>
[% END %]
[% END # /FOREACH errmsgloo %]
</div>