Bug 14673: Work around change to AddIssue return
authorColin Campbell <colin.campbell@ptfs-europe.com>
Tue, 11 Aug 2015 15:51:53 +0000 (16:51 +0100)
committerTomas Cohen Arazi <tomascohen@theke.io>
Fri, 6 Nov 2015 15:03:37 +0000 (12:03 -0300)
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.

Signed-off-by: Frederic Demians <f.demians@tamil.fr>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

C4/SIP/ILS/Transaction.pm
C4/SIP/ILS/Transaction/Checkout.pm
C4/SIP/ILS/Transaction/Renew.pm

index 4e74e93..c751125 100644 (file)
@@ -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
 }
index 6a77aa3..0ac0bfc 100644 (file)
@@ -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;
 }
index e0f905b..699f566 100644 (file)
@@ -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/;