Bug 22076: SIP checkin for withdrawn item returns ok in checkin response
authorKyle M Hall <kyle@bywatersolutions.com>
Mon, 7 Jan 2019 17:46:29 +0000 (12:46 -0500)
committerNick Clemens <nick@bywatersolutions.com>
Thu, 28 Mar 2019 12:08:18 +0000 (12:08 +0000)
If an item that is withdrawn is checked in via SIP2, Koha does not process the checkin, but still indicates the checkin succeeded via the ok flag in the checkin response message.

To recreate:
 1 - Mark an item withdrawn
 2 - Set up sip server:
     https://wiki.koha-community.org/wiki/Koha_SIP2_server_setup
 3 - Set 'BlockReturnOfWithdrawnItems' to block
 4 - Use the sip_cli_emulator to checkin the withdrawn item
 5 - There is no error in the checkin

Test Plan:
1) Mark an item withdrawn
2) Set BlockReturnOfWithdrawnItems to block
3) Use the sip cli emulator to checkin the withdrawn item
4) Note the response begins with 101
5) Apply this patch
6) Restart all the things ( including SIP server )
7) Repeat checkin with sip cli emulator
8) Note the checkin now beings with 100

Signed-off-by: Geeta Halley <ghalley@roundrocktexas.gov>
Rescued-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

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

C4/SIP/ILS.pm
C4/SIP/ILS/Transaction/Checkin.pm

index b115dcd..1c68c4b 100644 (file)
@@ -205,8 +205,9 @@ sub checkin {
     # BEGIN TRANSACTION
     $circ->item( $item = C4::SIP::ILS::Item->new($item_id) );
 
+    my $data;
     if ($item) {
-        $circ->do_checkin( $current_loc, $return_date, $cv_triggers_alert );
+        $data = $circ->do_checkin( $current_loc, $return_date, $cv_triggers_alert );
     }
     else {
         $circ->alert(1);
@@ -219,6 +220,9 @@ sub checkin {
     if( !$circ->ok && $circ->alert_type && $circ->alert_type == 98 ) { # data corruption
         $circ->screen_msg("Checkin failed: data problem");
         syslog( "LOG_WARNING", "Problem with issue_id in issues and old_issues; check the about page" );
+    } elsif( $data->{messages}->{withdrawn} && !$circ->ok ) {
+            $circ->screen_msg("Item withdrawn, return not allowed");
+            syslog("LOG_DEBUG", "C4::SIP::ILS::Checkin - item withdrawn");
     } elsif( !$item->{patron} ) {
         if( $checked_in_ok ) { # Mark checkin ok although book not checked out
             $circ->ok( 1 );
index 0303a47..99a84d1 100644 (file)
@@ -129,6 +129,8 @@ sub do_checkin {
     }
 
     $self->ok($return);
+
+    return { messages => $messages };
 }
 
 sub resensitize {