@@ -, +, @@
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;
--
|