@@ -, +, @@ irregular subscriptions --- C4/Serials.pm | 17 ++++++----------- .../prog/en/modules/serials/serials-collection.tt | 16 ++++++++++++++-- .../prog/en/modules/serials/subscription-detail.tt | 12 ++++++++++-- misc/cronjobs/serialsUpdate.pl | 4 +++- serials/showpredictionpattern.pl | 4 ++-- t/db_dependent/Serials/GetNextDate.t | 18 ++++++++++++------ 6 files changed, 47 insertions(+), 24 deletions(-) --- a/C4/Serials.pm +++ a/C4/Serials.pm @@ -419,9 +419,9 @@ sub PrepareSerialsData { foreach my $subs (@{$lines}) { for my $datefield ( qw(publisheddate planneddate) ) { - # handle both undef and undef returned as 0000-00-00 - if (!defined $subs->{$datefield} or $subs->{$datefield}=~m/^00/) { - $subs->{$datefield} = 'XXX'; + # handle 0000-00-00 dates + if (defined $subs->{$datefield} and $subs->{$datefield} =~ m/^00/) { + $subs->{$datefield} = undef; } } $subs->{ "status" . $subs->{'status'} } = 1; @@ -1235,10 +1235,6 @@ sub ModSerialStatus { DelIssue( { 'serialid' => $serialid, 'subscriptionid' => $subscriptionid, 'serialseq' => $serialseq } ); } else { - unless ($frequency->{'unit'}) { - if ( not $planneddate or $planneddate eq '0000-00-00' ) { $planneddate = C4::Dates->new()->output('iso') }; - if ( not $publisheddate or $publisheddate eq '0000-00-00' ) { $publisheddate = C4::Dates->new()->output('iso') }; - } my $query = 'UPDATE serial SET serialseq=?,publisheddate=?,planneddate=?,status=?,notes=? WHERE serialid = ?'; $sth = $dbh->prepare($query); $sth->execute( $serialseq, $publisheddate, $planneddate, $status, $notes, $serialid ); @@ -2532,13 +2528,15 @@ skipped then the returned date will be 2007-05-10 return : $resultdate - then next date in the sequence (ISO date) -Return $publisheddate if subscription is irregular +Return undef if subscription is irregular =cut sub GetNextDate { my ( $subscription, $publisheddate, $updatecount ) = @_; + return unless $subscription and $publisheddate; + my $freqdata = GetSubscriptionFrequency($subscription->{'periodicity'}); if ($freqdata->{'unit'}) { @@ -2676,9 +2674,6 @@ sub GetNextDate { } return sprintf("%04d-%02d-%02d", $year, $month, $day); } - else { - return $publisheddate; - } } =head2 _numeration --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt @@ -244,10 +244,22 @@ $(document).ready(function() { [% serial.subscriptionid %] [% END %] - [% serial.publisheddate | $KohaDates %] + + [% IF serial.publisheddate %] + [% serial.publisheddate | $KohaDates %] + [% ELSE %] + Unknown + [% END %] + - [% serial.planneddate | $KohaDates %] + + [% IF serial.planneddate %] + [% serial.planneddate | $KohaDates %] + [% ELSE %] + Unknown + [% END %] + [% serial.serialseq %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt @@ -259,10 +259,18 @@ $(document).ready(function() { [% serialslis.serialseq %] - [% serialslis.planneddate %] + [% IF serialslis.planneddate %] + [% serialslis.planneddate %] + [% ELSE %] + Unknown + [% END %] - [% serialslis.publisheddate %] + [% IF serialslis.publisheddate %] + [% serialslis.publisheddate %] + [% ELSE %] + Unknown + [% END %] [% IF ( serialslis.status1 ) %]Expected[% END %] --- a/misc/cronjobs/serialsUpdate.pl +++ a/misc/cronjobs/serialsUpdate.pl @@ -99,8 +99,10 @@ my $sth = $dbh->prepare( FROM serial LEFT JOIN subscription ON (subscription.subscriptionid=serial.subscriptionid) + LEFT JOIN subscription_frequencies + ON (subscription.periodicity = subscription_frequencies.id) WHERE serial.status = 1 - AND periodicity <> 32 + AND subscription_frequencies.unit IS NOT NULL AND DATE_ADD(planneddate, INTERVAL CAST(graceperiod AS SIGNED) DAY) < NOW() AND subscription.closed = 0 } --- a/serials/showpredictionpattern.pl +++ a/serials/showpredictionpattern.pl @@ -119,7 +119,7 @@ my @predictions_loop; my ($calculated) = GetSeq(\%subscription, \%pattern); push @predictions_loop, { number => $calculated, - publicationdate => ($frequency->{unit} ? $date : undef), + publicationdate => $date, issuenumber => $issuenumber, dow => Day_of_Week(split /-/, $date), }; @@ -143,7 +143,7 @@ while( $i < 1000 ) { $date = GetNextDate(\%subscription, $date); } if(defined $date){ - $line{'publicationdate'} = $date if $frequency->{unit}; + $line{'publicationdate'} = $date; $line{'dow'} = Day_of_Week(split /-/, $date); } --- a/t/db_dependent/Serials/GetNextDate.t +++ a/t/db_dependent/Serials/GetNextDate.t @@ -1,7 +1,7 @@ #!/usr/bin/perl use C4::Context; -use Test::More tests => 84; +use Test::More tests => 86; use Modern::Perl; my $dbh = C4::Context->dbh; @@ -471,7 +471,7 @@ is($publisheddate, '1974-01-01'); # TEST CASE 25 - Irregular $id = AddSubscriptionFrequency({ description => "Irregular", - unit => '', + unit => undef, issuesperunit => 1, unitsperissue => 1, }); @@ -482,10 +482,16 @@ $subscription = { countissuesperunit => 1, }; $publisheddate = $subscription->{firstacquidate}; -# GetNextDate always return the same date if subscription is irregular +# GetNextDate always return undef if subscription is irregular $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-01'); -$publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-01'); +is($publisheddate, undef); + +# GetNextDate returns undef if one of two first parameters is undef +$publisheddate = GetNextDate($subscription, undef); +is($publisheddate, undef); +$publisheddate = GetNextDate(undef, $subscription->{firstacquidate}); +is($publisheddate, undef); +$publisheddate = GetNextDate(undef, undef); +is($publisheddate, undef); $dbh->rollback; --