From 720cddeca69eb602d8d19a2150ac1d7d32ba3a3f Mon Sep 17 00:00:00 2001 From: Nahuel ANGELINETTI Date: Fri, 30 Jan 2009 17:20:26 +0100 Subject: [PATCH] (bug #2938) add a serials subscriptions report this patch add a report for serials. It's have to limit branch/bookseller, and excluding expired serials. It's possible to export in CSV format. This patch will have another, to add this report in menus. Signed-off-by: Galen Charlton --- .../en/modules/reports/serials_stats.tmpl | 116 ++++++++++++ reports/serials_stats.pl | 173 ++++++++++++++++++ 2 files changed, 289 insertions(+) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/reports/serials_stats.tmpl create mode 100755 reports/serials_stats.pl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/serials_stats.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/serials_stats.tmpl new file mode 100644 index 0000000000..fca21c8e91 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/serials_stats.tmpl @@ -0,0 +1,116 @@ + +Koha › Reports › serials subscriptions stats + + + + + + + + + + + +
+
+
+
+ +

Serials subscriptions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
BooksellerTitleSubscription idBranchCallnumberSubscription BeginSubscription End
+ + +
+ +
+
    +
  1. + + + +
  2. + + + +
  3. +
  4. + + +
  5. +
+
+ + +
+ Output +
  1. +
  2. + +
+
+ +
+ + " /> + +
+
+ +
+
+
+ +
+
+ diff --git a/reports/serials_stats.pl b/reports/serials_stats.pl new file mode 100755 index 0000000000..70d411191e --- /dev/null +++ b/reports/serials_stats.pl @@ -0,0 +1,173 @@ +#!/usr/bin/perl + +# Copyright 2009 SARL Biblibre +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use warnings; +use C4::Auth; +use CGI; +use C4::Context; +use C4::Branch; # GetBranches +use C4::Dates qw/format_date/; +use C4::Output; +use C4::Koha; +use C4::Reports; +use C4::Serials; + +=head1 serials_out + +plugin that shows a stats on serials + +=head1 DESCRIPTION + +=over 2 + +=cut + +my $input = new CGI; +my $templatename = "reports/serials_stats.tmpl"; +my $do_it = $input->param("do_it"); +my $bookseller = $input->param("bookseller"); +my $branchcode = $input->param("branchcode"); +my $expired = $input->param("expired"); +my $order = $input->param("order"); +my $output = $input->param("output"); +my $basename = $input->param("basename"); +my $mime = $input->param("MIME"); +our $sep = $input->param("sep"); +$sep = "\t" if ($sep eq 'tabulation'); + +my ($template, $borrowernumber, $cookie) + = get_template_and_user({template_name => $templatename, + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {reports => 1}, + debug => 1, + }); + + + +my $dbh = C4::Context->dbh; + +if($do_it){ + my $where = "WHERE 1 "; + my @args; + # if a specific branchcode was selected + if( $branchcode ne '' ){ + $where .= "AND branchcode = ? "; + push @args,$branchcode; + } + + # if a specific bookseller was selected + if($bookseller ne ''){ + $where .= "AND aqbooksellerid = ? "; + push @args,$bookseller; + } + + my $sth = $dbh->prepare("SELECT * + FROM subscription + LEFT JOIN aqbooksellers + ON (aqbooksellers.id=subscription.aqbooksellerid) + LEFT JOIN biblio + ON (biblio.biblionumber=subscription.biblionumber) + $where + "); + + $sth->execute(@args); + + ## hash generation of items by branchcode + my @datas; + + 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})) ); + } + + if($output eq 'screen'){ + $template->param(datas => \@datas, + do_it => 1); + }else{ + binmode STDOUT, ':utf8'; + print $input->header(-type => 'application/vnd.sun.xml.calc', + -encoding => 'utf-8', + -name => "$basename.csv", + -attachment => "$basename.csv"); + print "Vendor".$sep; + print "Title".$sep; + print "Subscription id".$sep; + print "Branch".$sep; + print "Callnumber".$sep; + print "Subscription Begin".$sep; + print "Subscription End\n"; + + foreach my $item (@datas){ + print $item->{name}.$sep; + print $item->{title}.$sep; + print $item->{subscriptionid}.$sep; + print $item->{branchcode}.$sep; + print $item->{callnumber}.$sep; + print $item->{startdate}.$sep; + print $item->{enddate}."\n"; + } + exit(1); + } +}else{ + ## We generate booksellers list + my @booksellers; + + my $sth = $dbh->prepare("SELECT aqbooksellerid, aqbooksellers.name + FROM subscription + LEFT JOIN aqbooksellers ON (subscription.aqbooksellerid=aqbooksellers.id ) + GROUP BY aqbooksellerid"); + $sth->execute(); + + while(my $row = $sth->fetchrow_hashref){ + push(@booksellers,$row) + } + + ## We generate branchlist + my $branches=GetBranches(); + my @branchloop; + foreach (keys %$branches) { + my $thisbranch = ''; # FIXME: populate $thisbranch to preselect one + my %row = (branchcode => $_, + selected => ($thisbranch eq $_ ? 1 : 0), + branchname => $branches->{$_}->{'branchname'}, + ); + push @branchloop, \%row; + } + + my @mime = ( C4::Context->preference("MIME") ); + # warn 'MIME(s): ' . join ' ', @mime; + my $CGIextChoice=CGI::scrolling_list( + -name => 'MIME', + -id => 'MIME', + -values => \@mime, + -size => 1, + -multiple => 0 ); + my $CGIsepChoice=GetDelimiterChoices; + $template->param( + CGIextChoice => $CGIextChoice, + CGIsepChoice => $CGIsepChoice, + booksellers => \@booksellers, + branches => \@branchloop); +} + +output_html_with_http_headers $input, $cookie, $template->output; \ No newline at end of file -- 2.39.2