From 3933621c7925a74cb85bc2473dccad6c09cda50d Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Wed, 18 Oct 2017 13:59:56 -0300
Subject: [PATCH] Bug 19487: Do not return an item if not checked out
Content-Type: text/plain; charset=utf-8

To recreate:
1 - Manually add a lost fine to a ptron and include a barcode
2 - Attempt to write off the fine
3 - Internal server error
4 - Checkout an item and mark lost to checkin and fine
5 - Attempt to write off line
6 - Internal server error

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
---
 C4/Circulation.pm | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index b915b34..18d9a44 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -2129,6 +2129,11 @@ routine in C<C4::Accounts>.
 sub MarkIssueReturned {
     my ( $borrowernumber, $itemnumber, $dropbox_branch, $returndate, $privacy ) = @_;
 
+
+    # Retrieve the issue
+    my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return;
+    my $issue_id = $issue->issue_id;
+
     my $anonymouspatron;
     if ( $privacy == 2 ) {
         # The default of 0 will not work due to foreign key constraints
@@ -2143,11 +2148,6 @@ sub MarkIssueReturned {
     my $schema   = $database->schema;
     my $dbh   = C4::Context->dbh;
 
-    my $issue_id = $dbh->selectrow_array(
-        q|SELECT issue_id FROM issues WHERE itemnumber = ?|,
-        undef, $itemnumber
-    );
-
     my $query = 'UPDATE issues SET returndate=';
     my @bind;
     if ($dropbox_branch) {
@@ -2170,9 +2170,6 @@ sub MarkIssueReturned {
         # Update the returndate
         $dbh->do( $query, undef, @bind );
 
-        # Retrieve the issue
-        my $issue = Koha::Checkouts->find( $issue_id ); # FIXME should be fetched earlier
-
         # Create the old_issues entry
         my $old_checkout = Koha::Old::Checkout->new($issue->unblessed)->store;
 
-- 
2.1.4