@@ -, +, @@
- close a subscriptionn
- reopen a closed subscription
- a new field subscription.closed in DB
- a new status for serials (8 = stopped)
- search subscriptions
- close a subscription and check that you cannot receive or generate a
new serial
- launch another search and check that the closed serial is into the "closed"
tab.
- You are allowed to reopen a subscription on the subscription detail
page and on the subscription result page. A javascript alert ask you
if are certain to do this operation.
- Check the serial status "stopped" everywhere the status is
displayed (catalogue/detail.pl, serials/claims.pl,
serials/serial-issues-full.pl, serials/serials-collection.pl,
serials/serials-edit.pl, serials/serials-recieve.pl,
serials/subscription-detail.pl and opac-full-serial-issues.pl)
- The report statistics does not include the closed subscriptions if you
don't check the "Include expired subscriptions" checkbox.
---
C4/Serials.pm | 63 +++++-
installer/data/mysql/kohastructure.sql | 1 +
installer/data/mysql/updatedatabase.pl | 11 +
.../prog/en/includes/serials-menu.inc | 2 +
.../prog/en/includes/serials-toolbar.inc | 77 ++++--
.../prog/en/modules/catalogue/detail.tt | 24 +-
.../prog/en/modules/serials/claims.tt | 2 +
.../prog/en/modules/serials/serial-issues-full.tt | 14 +-
.../prog/en/modules/serials/serials-collection.tt | 44 +++-
.../prog/en/modules/serials/serials-edit.tt | 114 +++++----
.../prog/en/modules/serials/serials-recieve.tt | 3 +
.../prog/en/modules/serials/serials-search.tt | 249 +++++++++++++-------
.../prog/en/modules/serials/subscription-detail.tt | 42 ++--
.../prog/en/modules/opac-full-serial-issues.tt | 15 +-
misc/cronjobs/serialsUpdate.pl | 1 +
reports/serials_stats.pl | 13 +-
serials/checkexpiration.pl | 1 +
serials/serials-collection.pl | 3 +
serials/serials-search.pl | 25 ++-
serials/subscription-detail.pl | 7 +
20 files changed, 484 insertions(+), 227 deletions(-)
--- a/C4/Serials.pm
+++ a/C4/Serials.pm
@@ -93,7 +93,13 @@ sub GetSuppliersWithLateIssues {
FROM subscription
LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- WHERE id > 0 AND ((planneddate < now() AND serial.status=1) OR serial.STATUS = 3 OR serial.STATUS = 4) ORDER BY name|;
+ WHERE id > 0
+ AND (
+ (planneddate < now() AND serial.status=1)
+ OR serial.STATUS = 3 OR serial.STATUS = 4
+ )
+ AND subscription.closed = 0
+ ORDER BY name|;
return $dbh->selectall_arrayref($query, { Slice => {} });
}
@@ -122,6 +128,7 @@ sub GetLateIssues {
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3)
AND subscription.aqbooksellerid=?
+ AND subscription.closed = 0
ORDER BY title
|;
$sth = $dbh->prepare($query);
@@ -134,6 +141,7 @@ sub GetLateIssues {
LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3)
+ AND subscription.closed = 0
ORDER BY title
|;
$sth = $dbh->prepare($query);
@@ -685,7 +693,10 @@ sub SearchSubscriptions {
push @where_strs, "subscription.branchcode = ?";
push @where_args, "$args->{branch}";
}
-
+ if( defined $args->{closed} ){
+ push @where_strs, "subscription.closed = ?";
+ push @where_args, "$args->{closed}";
+ }
if(@where_strs){
$query .= " WHERE " . join(" AND ", @where_strs);
}
@@ -2465,6 +2476,54 @@ sub is_barcode_in_use {
return @{$occurences};
}
+=head2 CloseSubscription
+Close a subscription given a subscriptionid
+=cut
+sub CloseSubscription {
+ my ( $subscriptionid ) = @_;
+ return unless $subscriptionid;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( qq{
+ UPDATE subscription
+ SET closed = 1
+ WHERE subscriptionid = ?
+ } );
+ $sth->execute( $subscriptionid );
+
+ # Set status = missing when status = stopped
+ $sth = $dbh->prepare( qq{
+ UPDATE serial
+ SET status = 8
+ WHERE subscriptionid = ?
+ AND status = 1
+ } );
+ $sth->execute( $subscriptionid );
+}
+
+=head2 ReopenSubscription
+Reopen a subscription given a subscriptionid
+=cut
+sub ReopenSubscription {
+ my ( $subscriptionid ) = @_;
+ return unless $subscriptionid;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( qq{
+ UPDATE subscription
+ SET closed = 0
+ WHERE subscriptionid = ?
+ } );
+ $sth->execute( $subscriptionid );
+
+ # Set status = expected when status = stopped
+ $sth = $dbh->prepare( qq{
+ UPDATE serial
+ SET status = 1
+ WHERE subscriptionid = ?
+ AND status = 8
+ } );
+ $sth->execute( $subscriptionid );
+}
+
1;
__END__
--- a/installer/data/mysql/kohastructure.sql
+++ a/installer/data/mysql/kohastructure.sql
@@ -1918,6 +1918,7 @@ CREATE TABLE `subscription` (
`opacdisplaycount` VARCHAR(10) NULL,
`graceperiod` int(11) NOT NULL default '0',
`enddate` date default NULL,
+ `closed ` INT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`subscriptionid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--- a/installer/data/mysql/updatedatabase.pl
+++ a/installer/data/mysql/updatedatabase.pl
@@ -6011,6 +6011,17 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
+$DBversion = "3.09.00.XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+ if ( not column_exists( 'closed', 'subscription' ) ) {
+ $dbh->do(qq{
+ ALTER TABLE subscription ADD COLUMN closed INT(1) NOT NULL DEFAULT 0 AFTER enddate;
+ });
+ }
+ print "Upgrade to $DBversion done (Add field subscription.closed)\n";
+ SetVersion($DBversion);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc
@@ -1,6 +1,7 @@
[% IF ( subscriptionid ) %]
[% IF ( latestserial.status1 ) %]Expected
- [% ELSE %]
- [% IF ( latestserial.status2 ) %]Arrived
- [% ELSE %]
- [% IF ( latestserial.status3 ) %]Late
- [% ELSE %]
- [% IF ( latestserial.status4 ) %]Missing
- [% ELSE %]
- [% IF ( latestserial.status5 ) %]Not issued
- [% END %]
- [% END %]
- [% END %]
- [% END %]
- [% END %]
+
+ [% IF ( latestserial.status1 ) %]Expected[% END %]
+ [% IF ( latestserial.status2 ) %]Arrived[% END %]
+ [% IF ( latestserial.status3 ) %]Late[% END %]
+ [% IF ( latestserial.status4 ) %]Missing[% END %]
+ [% IF ( latestserial.status5 ) %]Not issued[% END %]
+ [% IF ( latestserial.status6 ) %]Delete[% END %]
+ [% IF ( latestserial.status7 ) %]Claimed[% END %]
+ [% IF ( latestserial.status8 ) %]Stopped[% END %]
+
[% latestserial.notes %]
[% END %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt
@@ -208,6 +208,7 @@
+
@@ -284,6 +285,7 @@
[% IF ( missingissue.status3 ) %]Late[% END %]
[% IF ( missingissue.status4 ) %]Missing[% END %]
[% IF ( missingissue.status7 ) %]Claimed[% END %]
+ [% IF ( missingissue.status8 ) %]Stopped[% END %]
- [% IF ( serial.status1 ) %]Arrived[% END %]
- [% IF ( serial.status2 ) %]Expected[% END %]
- [% IF ( serial.status3 ) %]Late[% END %]
- [% IF ( serial.status4 ) %]Missing[% END %]
- [% IF ( serial.status5 ) %]Not available[% END %]
- [% IF ( serial.status7 ) %]Claimed[% END %]
+ [% IF ( serial.status1 ) %]Expected[% END %]
+ [% IF ( serial.status2 ) %]Arrived[% END %]
+ [% IF ( serial.status3 ) %]Late[% END %]
+ [% IF ( serial.status4 ) %]Missing[% END %]
+ [% IF ( serial.status5 ) %]Not issued[% END %]
+ [% IF ( serial.status6 ) %]Delete[% END %]
+ [% IF ( serial.status7 ) %]Claimed[% END %]
+ [% IF ( serial.status8 ) %]Stopped[% END %]
[% END %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt
@@ -151,22 +151,33 @@ $(document).ready(function() {
[% END %]
[% subscription.branchcode %]
[% subscription.callnumber %]
-
[% subscription.notes %] [% IF ( subscription.subscriptionexpired ) %] Subscription expired
- [% END %]
+
- [% IF ( serial.status1 ) %]Expected[% END %][% IF ( serial.status2 ) %]Arrived[% END %][% IF ( serial.status3 ) %]Late[% END %][% IF ( serial.status4 ) %]Missing[% END %][% IF ( serial.status5 ) %]Not Available[% END %][% IF ( serial.status7 ) %]Claimed[% END %]
+ [% IF ( latestserial.status1 ) %]Expected[% END %]
+ [% IF ( latestserial.status2 ) %]Arrived[% END %]
+ [% IF ( latestserial.status3 ) %]Late[% END %]
+ [% IF ( latestserial.status4 ) %]Missing[% END %]
+ [% IF ( latestserial.status5 ) %]Not issued[% END %]
+ [% IF ( latestserial.status6 ) %]Delete[% END %]
+ [% IF ( latestserial.status7 ) %]Claimed[% END %]
+ [% IF ( latestserial.status8 ) %]Stopped[% END %]
- [% IF ( serialslis.status1 ) %]
- Expected
- [% END %]
- [% IF ( serialslis.status2 ) %]
- Arrived
- [% END %]
- [% IF ( serialslis.status3 ) %]
- Late
- [% END %]
- [% IF ( serialslis.status4 ) %]
- Missing
- [% END %]
- [% IF ( serialslis.status5 ) %]
- Not available
- [% END %]
- [% IF ( serialslis.status7 ) %]
- Claimed
- [% IF ( serialslis.claimdate ) %]
- [% serialslis.claimdate %]
- [% END %]
- [% END %]
+ [% IF ( serialslis.status1 ) %]Expected[% END %]
+ [% IF ( serialslis.status2 ) %]Arrived[% END %]
+ [% IF ( serialslis.status3 ) %]Late[% END %]
+ [% IF ( serialslis.status4 ) %]Missing[% END %]
+ [% IF ( serialslis.status5 ) %]Not issued[% END %]
+ [% IF ( serialslis.status6 ) %]Delete[% END %]
+ [% IF ( serialslis.status7 ) %]
+ Claimed
+ [% IF ( serialslis.claimdate ) %]
+ [% serialslis.claimdate %]
+ [% END %]
+ [% END %]
+ [% IF ( serialslis.status8 ) %]Stopped[% END %]
[% END %]
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-full-serial-issues.tt
+++ a/koha-tmpl/opac-tmpl/prog/en/modules/opac-full-serial-issues.tt
@@ -200,12 +200,15 @@ function showlayer(numlayer){
[% serial.serialseq %]
-
[% IF ( serial.status1 ) %]Waiting[% END %]
- [% IF ( serial.status2 ) %]Arrived[% END %]
- [% IF ( serial.status3 ) %]Late[% END %]
- [% IF ( serial.status4 ) %]Missing[% END %]
- [% IF ( serial.status5 ) %]Not available[% END %]
- [% IF ( serial.status7 ) %]Claimed[% END %]
+
+ [% IF ( serial.status1 ) %]Expected[% END %]
+ [% IF ( serial.status2 ) %]Arrived[% END %]
+ [% IF ( serial.status3 ) %]Late[% END %]
+ [% IF ( serial.status4 ) %]Missing[% END %]
+ [% IF ( serial.status5 ) %]Not available[% END %]
+ [% IF ( serial.status6 ) %]Delete[% END %]
+ [% IF ( serial.status7 ) %]Claimed[% END %]
+ [% IF ( serial.status8 ) %]Stopped[% END %]
[% serial.subscriptionid %]
--- a/misc/cronjobs/serialsUpdate.pl
+++ a/misc/cronjobs/serialsUpdate.pl
@@ -60,6 +60,7 @@ my $sth = $dbh->prepare("
WHERE serial.status = 1
AND periodicity <> 32
AND DATE_ADD(planneddate, INTERVAL CAST(graceperiod AS SIGNED) DAY) < NOW()
+ AND subscription.closed = 0
");
$sth->execute();
--- a/reports/serials_stats.pl
+++ a/reports/serials_stats.pl
@@ -96,9 +96,18 @@ if($do_it){
while(my $row = $sth->fetchrow_hashref){
$row->{'enddate'} = format_date(GetExpirationDate($row->{'subscriptionid'}));
$row->{'startdate'} = format_date($row->{'startdate'});
- push @datas, $row if ($expired || (not $expired && not HasSubscriptionExpired($row->{subscriptionid})) );
+ push @datas, $row if (
+ $expired
+ or (
+ not $expired
+ and (
+ not HasSubscriptionExpired($row->{subscriptionid})
+ and not $row->{closed}
+ )
+ )
+ );
}
-
+
if($output eq 'screen'){
$template->param(datas => \@datas,
do_it => 1);
--- a/serials/checkexpiration.pl
+++ a/serials/checkexpiration.pl
@@ -79,6 +79,7 @@ if ($date) {
$subscription->{expirationdate} = $expirationdate;
next if $expirationdate !~ /\d{4}-\d{2}-\d{2}/; # next if not in ISO format.
+ next if $subscription->{closed};
if ( Date_to_Days(split "-",$expirationdate) < Date_to_Days(split "-",$date) &&
Date_to_Days(split "-",$expirationdate) > Date_to_Days(&Today) ) {
$subscription->{expirationdate}=format_date($subscription->{expirationdate});
--- a/serials/serials-collection.pl
+++ a/serials/serials-collection.pl
@@ -101,8 +101,10 @@ my $subscriptioncount;
my ($location, $callnumber);
if (@subscriptionid){
my @subscriptioninformation=();
+ my $closed = 0;
foreach my $subscriptionid (@subscriptionid){
my $subs= GetSubscription($subscriptionid);
+ $closed = 1 if $subs->{closed};
$subs->{opacnote} =~ s/\n/\ /g;
$subs->{missinglist} =~ s/\n/\ /g;
$subs->{recievedlist} =~ s/\n/\ /g;
@@ -127,6 +129,7 @@ if (@subscriptionid){
my $tmpsubscription= GetFullSubscription($subscriptionid);
@subscriptioninformation=(@$tmpsubscription,@subscriptioninformation);
}
+ $template->param(closed => $closed);
$subscriptions=PrepareSerialsData(\@subscriptioninformation);
$subscriptioncount = CountSubscriptionFromBiblionumber($subscriptiondescs->[0]{'biblionumber'});
} else {
--- a/serials/serials-search.pl
+++ a/serials/serials-search.pl
@@ -46,6 +46,8 @@ my $biblionumber = $query->param('biblionumber') || '';
my $branch = $query->param('branch_filter') || '';
my $routing = $query->param('routing') || C4::Context->preference("RoutingSerials");
my $searched = $query->param('searched') || 0;
+my @subscriptionids = $query ->param('subscriptionid');
+my $op = $query->param('op');
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
@@ -58,6 +60,16 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
}
);
+if ( $op and $op eq "close" ) {
+ for my $subscriptionid ( @subscriptionids ) {
+ C4::Serials::CloseSubscription( $subscriptionid );
+ }
+} elsif ( $op and $op eq "reopen" ) {
+ for my $subscriptionid ( @subscriptionids ) {
+ C4::Serials::ReopenSubscription( $subscriptionid );
+ }
+}
+
my @subscriptions;
if ($searched){
@subscriptions = SearchSubscriptions(
@@ -81,6 +93,15 @@ if ($routing) {
}
}
+my (@openedsubscriptions, @closedsubscriptions);
+for my $sub ( @subscriptions ) {
+ unless ( $sub->{closed} ) {
+ push @openedsubscriptions, $sub;
+ } else {
+ push @closedsubscriptions, $sub;
+ }
+}
+
my $branches = GetBranches();
my @branches_loop;
foreach (sort keys %$branches){
@@ -94,7 +115,9 @@ foreach (sort keys %$branches){
}
$template->param(
- subscriptions => \@subscriptions,
+ openedsubscriptions => \@openedsubscriptions,
+ closedsubscriptions => \@closedsubscriptions,
+ total => @openedsubscriptions + @closedsubscriptions,
title_filter => $title,
ISSN_filter => $ISSN,
EAN_filter => $EAN,
--- a/serials/subscription-detail.pl
+++ a/serials/subscription-detail.pl
@@ -34,6 +34,13 @@ my $issueconfirmed = $query->param('issueconfirmed');
my $dbh = C4::Context->dbh;
my ($template, $loggedinuser, $cookie, $hemisphere);
my $subscriptionid = $query->param('subscriptionid');
+
+if ( $op and $op eq "close" ) {
+ C4::Serials::CloseSubscription( $subscriptionid );
+} elsif ( $op and $op eq "reopen" ) {
+ C4::Serials::ReopenSubscription( $subscriptionid );
+}
+
my $subs = GetSubscription($subscriptionid);
$subs->{enddate} = GetExpirationDate($subscriptionid);
--