From 80fba5d505eb5ed6cf47a92418372718775bffe0 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Tue, 11 Aug 2015 16:51:53 +0100 Subject: [PATCH] Bug 14673 Work around change to AddIssue return Return from AddIssue used to be due date or undef. Now it is less straightforward returning am issue object if an issue row is created or undef. If the issue is a renewal undef is returned. As that case was not handled properly it caused the server site to crash the listener causing a communications error on the client. --- C4/SIP/ILS/Transaction.pm | 20 ++++++++++++++++++++ C4/SIP/ILS/Transaction/Checkout.pm | 8 +------- C4/SIP/ILS/Transaction/Renew.pm | 6 +----- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/C4/SIP/ILS/Transaction.pm b/C4/SIP/ILS/Transaction.pm index 4e74e93..c751125 100644 --- a/C4/SIP/ILS/Transaction.pm +++ b/C4/SIP/ILS/Transaction.pm @@ -8,6 +8,8 @@ use Carp; use strict; use warnings; use C4::Context; +use C4::Circulation qw( GetItemIssue ); +use Koha::DateUtils; my %fields = ( ok => 0, @@ -35,6 +37,24 @@ sub new { return bless $self, $class; } +sub duedatefromissue { + my ($self, $iss, $itemnum) = @_; + my $due_dt; + if (defined $iss ) { + $due_dt = dt_from_string( $iss->date_due() ); + } # renew from AddIssue ?? + else { + # need to reread the issue to get due date + $iss = GetItemIssue($itemnum); + if ($iss && $iss->{date_due} ) { + $due_dt = dt_from_string( $iss->{date_due} ); + } + } + return $due_dt; +} + + + sub DESTROY { # be cool } diff --git a/C4/SIP/ILS/Transaction/Checkout.pm b/C4/SIP/ILS/Transaction/Checkout.pm index 6a77aa3..0ac0bfc 100644 --- a/C4/SIP/ILS/Transaction/Checkout.pm +++ b/C4/SIP/ILS/Transaction/Checkout.pm @@ -140,14 +140,8 @@ sub do_checkout { # . "w/ \$borrower: " . Dumper($borrower) . "w/ C4::Context->userenv: " . Dumper(C4::Context->userenv); my $issue = AddIssue( $borrower, $barcode, $overridden_duedate, 0 ); - my $due_dt = dt_from_string( $issue->date_due() ); - if ($due_dt) { - $self->{due} = $due_dt->clone(); - } else { - $self->{due} = undef; - } + $self->{due} = $self->duedatefromissue($issue, $itemnumber); - #$self->{item}->due_date($due); $self->ok(1); return $self; } diff --git a/C4/SIP/ILS/Transaction/Renew.pm b/C4/SIP/ILS/Transaction/Renew.pm index e0f905b..699f566 100644 --- a/C4/SIP/ILS/Transaction/Renew.pm +++ b/C4/SIP/ILS/Transaction/Renew.pm @@ -45,12 +45,8 @@ sub do_renew_for { } if ($renewokay){ - $self->{due} = undef; my $issue = AddIssue( $borrower, $self->{item}->id, undef, 0 ); - my $due_date = dt_from_string( $issue->date_due() ); - if ($due_date) { - $self->{due} = $due_date; - } + $self->{due} = $self->duedatefromissue($issue, $self->{item}->{itemnumber}); $self->renewal_ok(1); } else { $renewerror=~s/on_reserve/Item unavailable due to outstanding holds/; -- 2.4.3