From 7c2c39dea5e6c5a884016169b1e72ef63c59e2d7 Mon Sep 17 00:00:00 2001 From: tipaul Date: Tue, 30 Mar 2004 16:09:04 +0000 Subject: [PATCH] NEW : template for report writing. with 2 nice reports. pls test. documentation of the template syntax coming soon --- .../reports/issues_by_borrower_category.tmpl | 50 ++++++ .../default/en/reports/itemtypes.tmpl | 32 ++++ .../default/en/reports/reports-home.tmpl | 8 +- reports/issues_by_borrower_category.plugin | 170 ++++++++++++++++++ reports/itemtypes.plugin | 92 ++++++++++ reports/manager.pl | 52 ++++++ 6 files changed, 402 insertions(+), 2 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl create mode 100644 koha-tmpl/intranet-tmpl/default/en/reports/itemtypes.tmpl create mode 100644 reports/issues_by_borrower_category.plugin create mode 100644 reports/itemtypes.plugin create mode 100755 reports/manager.pl diff --git a/koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl b/koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl new file mode 100644 index 0000000000..039b1c6f39 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl @@ -0,0 +1,50 @@ + +
+ + +

Koha : Issues by borrower category for category =

+ + + + + + + + + + + + + + + + + + + + + + + + +
 TOTAL
+ + + + +
TOTAL + +  
+ + +

Issues by borrower category

+
+

Select a borrower category (or don't if you want to see global status)

+

Select a branch :

+ + "> + +
+ +
+ diff --git a/koha-tmpl/intranet-tmpl/default/en/reports/itemtypes.tmpl b/koha-tmpl/intranet-tmpl/default/en/reports/itemtypes.tmpl new file mode 100644 index 0000000000..5e0c468cfa --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/reports/itemtypes.tmpl @@ -0,0 +1,32 @@ + +
+ + +

Koha : Reports on itemtypes for branch =

+ + + + + + + + + + + + + + +
Item typecount
TOTAL
+ + +

View catalogue group by itemtypes

+
+ Select a branch (or don't if you want the report for all branches) + + "> + +
+ +
+ diff --git a/koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl b/koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl index 6a32f10671..776ab3ea08 100644 --- a/koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl +++ b/koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl @@ -1,12 +1,16 @@ - -

Reports


+
+

Reports

+
diff --git a/reports/issues_by_borrower_category.plugin b/reports/issues_by_borrower_category.plugin new file mode 100644 index 0000000000..608ae22317 --- /dev/null +++ b/reports/issues_by_borrower_category.plugin @@ -0,0 +1,170 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; +use C4::Koha; + +=head1 NAME + +plugin that shows a table with issues for categories and borrower + +=head1 DESCRIPTION + +this result is quite complex to build... +the 2D array contains : +* item types on lines +* borrowers types on rows + +If no issues are done, the array must be filled by 0 anyway. +So, the script works as this : +1- parse the itemtype table to get itemtype descriptions and set itemtype total to 0 +2- for each borrower category : +** create an array with total = 0 for each itemtype defined in 1 +** calculate the total for each itemtype (SQL request) +The big hash has the following structure : +$itemtypes{itemtype} + ->{results} + ->{borrowercategorycode} => the total of issues for each cell of the table. + ->{total} => the total for the itemtype + ->{description} => the itemtype description + +the borrowertype hash contains description and total for each borrowercategory. + +the hashes are then translated to hash / arrays to be returned to manager.pl & send to the template + +=over2 + +=cut + +sub set_parameters { + my ($template) = @_; + my $dbh = C4::Context->dbh; + my $branches=getbranches(); + my @branches; + my @select_branch; + my %select_branches; + push @select_branch,""; + $select_branches{""} = ""; + foreach my $branch (keys %$branches) { + push @select_branch, $branch; + $select_branches{$branch} = $branches->{$branch}->{'branchname'}; + } + my $CGIbranch=CGI::scrolling_list( -name => 'value', + -id => 'value', + -values => \@select_branch, + -labels => \%select_branches, + -size => 1, + -multiple => 0 ); + $template->param(CGIbranch => $CGIbranch); + return $template; +} +sub calculate { + my ($parameters) = @_; + my @results =(); +# extract parameters + my $borrower_category = @$parameters[0]; + my $branch = @$parameters[1]; + my $dbh = C4::Context->dbh; +# build the SQL query & execute it + +# 1st, loop every itemtypes. + my $sth = $dbh->prepare("select itemtype,description from itemtypes"); + $sth->execute; + my %itemtypes; + while (my ($itemtype,$description) = $sth->fetchrow) { + $itemtypes{$itemtype}->{description} = $description; + $itemtypes{$itemtype}->{total} = 0; + } +# now, parse each category. Before filling the result array, fill it with 0 to have every itemtype column. + my $sth = $dbh->prepare("SELECT itemtype, count( * ) + FROM issues, borrowers, biblioitems, items + WHERE issues.borrowernumber = borrowers.borrowernumber + AND items.itemnumber = issues.itemnumber + AND biblioitems.biblionumber = items.biblionumber + AND borrowers.categorycode = ? + GROUP BY biblioitems.itemtype"); + my $sthcategories = $dbh->prepare("select categorycode,description from categories"); + $sthcategories->execute; + my %borrowertype; + my @categorycodeloop; + while (my ($categorycode,$description) = $sthcategories->fetchrow) { + $borrowertype{$categorycode}->{description} = $description; + $borrowertype{$categorycode}->{total} = 0; + my %categorycode; + $categorycode{categorycode} = $description; + push @categorycodeloop,\%categorycode; + foreach my $itemtype (keys %itemtypes) { + $itemtypes{$itemtype}->{results}->{$categorycode} = 0; + } + $sth->execute($categorycode); + while (my ($itemtype, $total) = $sth->fetchrow) { + $itemtypes{$itemtype}->{results}->{$categorycode} = $total; + $borrowertype{$categorycode}->{total} += $total; + $itemtypes{$itemtype}->{total} += $total; + } + } + my $grantotal = 0; +# build the result + my @mainloop; + my @itemtypeloop; + my @loopborrowertype; + my %globalline; + my $hilighted=-1; + foreach my $itemtype (keys %itemtypes) { + my @loopitemtype; + foreach my $categorycode (keys %{$itemtypes{$itemtype}->{results}}) { + my %cell; + $cell{issues} = $itemtypes{$itemtype}->{results}->{$categorycode}; + push @loopitemtype,\%cell; + } + my %line; + $line{loopitemtype} = \@loopitemtype; + $line{itemtype} = $itemtypes{$itemtype}->{description}; + $line{hilighted} = 1 if $hilighted eq 1; + $line{totalitemtype} = $itemtypes{$itemtype}->{total}; + $hilighted = -$hilighted; + push @loopborrowertype, \%line; + } + # the header of the table + $globalline{loopborrowertype} = \@loopborrowertype; + # the core of the table + $globalline{categorycodeloop} = \@categorycodeloop; + # the foot (totals by borrower type) + my @loopborrowertotal; + foreach my $categorycode (keys %borrowertype) { + my %line; + $line{issues} = $borrowertype{$categorycode}->{total}; + push @loopborrowertotal, \%line; + } + $globalline{loopborrowertotal} = \@loopborrowertotal; +# $globalline{total} = $grantotal; +# $globalline{borrower_category} = $borrower_category; + push @mainloop,\%globalline; + return \@mainloop; +} + +1; \ No newline at end of file diff --git a/reports/itemtypes.plugin b/reports/itemtypes.plugin new file mode 100644 index 0000000000..edaa6b6593 --- /dev/null +++ b/reports/itemtypes.plugin @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; +use C4::Koha; + +=head1 + +=cut + +sub set_parameters { + my ($template) = @_; + my $dbh = C4::Context->dbh; + my $branches=getbranches(); + my @branches; + my @select_branch; + my %select_branches; + push @select_branch,""; + $select_branches{""} = ""; + foreach my $branch (keys %$branches) { + push @select_branch, $branch; + $select_branches{$branch} = $branches->{$branch}->{'branchname'}; + } + my $CGIbranch=CGI::scrolling_list( -name => 'value', + -id => 'value', + -values => \@select_branch, + -labels => \%select_branches, + -size => 1, + -multiple => 0 ); + $template->param(CGIbranch => $CGIbranch); + return $template; +} +sub calculate { + my ($parameters) = @_; + my @results =(); + my $branch = @$parameters[0]; + my $dbh = C4::Context->dbh; + my $sth; + if ($branch) { + $sth = $dbh->prepare("select description, biblioitems.itemtype, count(*) as total from itemtypes, biblioitems, items + where biblioitems.itemtype=itemtypes.itemtype + and items.biblionumber=biblioitems.biblionumber + and items.holdingbranch=? + group by biblioitems.itemtype"); + $sth->execute($branch); + } else { + $sth = $dbh->prepare("select description, biblioitems.itemtype, count(*) as total from itemtypes, biblioitems where biblioitems.itemtype=itemtypes.itemtype group by biblioitems.itemtype"); + $sth->execute; + } + my ($description,$biblioitems,$total); + my $grantotal = 0; + while (($description,$biblioitems,$total) = $sth->fetchrow) { + my %line; + $line{itemtype} = $description; + $line{count} = $total; + $grantotal += $total; + push @results,\%line; + } + my @mainloop; + my %globalline; + $globalline{loopitemtype} = \@results; + $globalline{total} = $grantotal; + $globalline{branch} = $branch; + push @mainloop,\%globalline; + return \@mainloop; +} + +1; \ No newline at end of file diff --git a/reports/manager.pl b/reports/manager.pl new file mode 100755 index 0000000000..dc8b8b7ea8 --- /dev/null +++ b/reports/manager.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl + +# Copyright 2000-2002 Katipo Communications +# +# 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 CGI; +use C4::Auth; +use C4::Context; +use C4::Output; +use C4::Interface::CGI::Output; +use C4::Circulation::Circ2; +use HTML::Template; + +my $input = new CGI; +my $report_name=$input->param("report_name"); +my $do_it=$input->param('do_it'); +my $fullreportname = "reports/".$report_name.".tmpl"; +my @values = $input->param("value"); +my ($template, $borrowernumber, $cookie) + = get_template_and_user({template_name => $fullreportname, + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); +$template->param(do_it => $do_it, + report_name => $report_name); +my $plugin = "./".$report_name.".plugin"; +require $plugin; +if ($do_it) { + my $results = calculate(\@values); + $template->param(mainloop => $results); +} else { + $template = set_parameters($template); +} +output_html_with_http_headers $input, $cookie, $template->output; -- 2.20.1