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;
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 );
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'}) {
}
return sprintf("%04d-%02d-%02d", $year, $month, $day);
}
- else {
- return $publisheddate;
- }
}
=head2 _numeration
<td><a href="serials-collection.pl?subscriptionid=[% serial.subscriptionid %]">[% serial.subscriptionid %]</a></td>
[% END %]
<td>
- <span title="[% serial.publisheddate %]">[% serial.publisheddate | $KohaDates %]</span>
+ <span title="[% serial.publisheddate %]">
+ [% IF serial.publisheddate %]
+ [% serial.publisheddate | $KohaDates %]
+ [% ELSE %]
+ Unknown
+ [% END %]
+ </span>
</td>
<td>
- <span title="[% serial.planneddate %]">[% serial.planneddate | $KohaDates %]</span>
+ <span title="[% serial.planneddate %]">
+ [% IF serial.planneddate %]
+ [% serial.planneddate | $KohaDates %]
+ [% ELSE %]
+ Unknown
+ [% END %]
+ </span>
</td>
<td>
[% serial.serialseq %]
[% serialslis.serialseq %]
</td>
<td>
- [% serialslis.planneddate %]
+ [% IF serialslis.planneddate %]
+ [% serialslis.planneddate %]
+ [% ELSE %]
+ Unknown
+ [% END %]
</td>
<td>
- [% serialslis.publisheddate %]
+ [% IF serialslis.publisheddate %]
+ [% serialslis.publisheddate %]
+ [% ELSE %]
+ Unknown
+ [% END %]
</td>
<td>
[% IF ( serialslis.status1 ) %]Expected[% END %]
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
}
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),
};
$date = GetNextDate(\%subscription, $date);
}
if(defined $date){
- $line{'publicationdate'} = $date if $frequency->{unit};
+ $line{'publicationdate'} = $date;
$line{'dow'} = Day_of_Week(split /-/, $date);
}
#!/usr/bin/perl
use C4::Context;
-use Test::More tests => 84;
+use Test::More tests => 86;
use Modern::Perl;
my $dbh = C4::Context->dbh;
# TEST CASE 25 - Irregular
$id = AddSubscriptionFrequency({
description => "Irregular",
- unit => '',
+ unit => undef,
issuesperunit => 1,
unitsperissue => 1,
});
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;