From cda5836173806405ae364145cc90518e80241341 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 7 Jan 2019 12:46:29 -0500 Subject: [PATCH] Bug 22076: SIP checkin for withdrawn item returns ok in checkin response 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 Rescued-by: Martin Renvoize --- C4/SIP/ILS.pm | 6 +++++- C4/SIP/ILS/Transaction/Checkin.pm | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/C4/SIP/ILS.pm b/C4/SIP/ILS.pm index b115dcd1a1..1c68c4b82d 100644 --- a/C4/SIP/ILS.pm +++ b/C4/SIP/ILS.pm @@ -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 ); diff --git a/C4/SIP/ILS/Transaction/Checkin.pm b/C4/SIP/ILS/Transaction/Checkin.pm index 0303a47e97..99a84d193a 100644 --- a/C4/SIP/ILS/Transaction/Checkin.pm +++ b/C4/SIP/ILS/Transaction/Checkin.pm @@ -129,6 +129,8 @@ sub do_checkin { } $self->ok($return); + + return { messages => $messages }; } sub resensitize { -- 2.20.1