From f1a4c66e6f1d535bf5a03be2453a1843b1a719ec Mon Sep 17 00:00:00 2001 From: Mason James Date: Mon, 30 Mar 2015 19:33:45 +1300 Subject: [PATCH] Bug 13109 - Serial failure for received and general viewing. Content-Type: text/plain; charset="utf-8" to test... 1/ attempt to view a subscription-detail that has a NULL value for either it's 'startdate' or 'enddate' an example url would be... http://koha-admin.foo.org/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=1 observe error... 'Date::Calc::PP::Delta_Days(): Usage: Date::Calc::Delta_Days($year1,$month1,$day1,$year2,$month2,$day2) at /your/koha/C4/Serials.pm line 2325' 2/ apply patch 3/ repeat step 1/ observe that detail page displays OK --- C4/Serials.pm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index 538d4bd..4c2376e 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -1023,7 +1023,9 @@ sub GetExpirationDate { # we don't do the same test if the subscription is based on X numbers or on X weeks/months $enddate = $startdate || $subscription->{startdate}; my @date = split( /-/, $enddate ); + return if ( scalar(@date) != 3 || not check_date(@date) ); + my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity}); if ( $frequency and $frequency->{unit} ) { @@ -2319,18 +2321,26 @@ sub abouttoexpire { my $per = $subscription->{'periodicity'}; my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($per); if ($frequency and $frequency->{unit}){ + my $expirationdate = GetExpirationDate($subscriptionid); + my ($res) = $dbh->selectrow_array('select max(planneddate) from serial where subscriptionid = ?', undef, $subscriptionid); my $nextdate = GetNextDate($subscription, $res); - if(Date::Calc::Delta_Days( - split( /-/, $nextdate ), - split( /-/, $expirationdate ) - ) <= 0) { - return 1; + + # BZ 13109, only compare dates if both dates exist. + if ($nextdate and $expirationdate) { + if(Date::Calc::Delta_Days( + split( /-/, $nextdate ), + split( /-/, $expirationdate ) + ) <= 0) { + return 1; + } } + } elsif ($subscription->{numberlength}>0) { return (countissuesfrom($subscriptionid,$subscription->{'startdate'}) >=$subscription->{numberlength}-1); } + return 0; } -- 1.7.10.4