template for report writing.
with 2 nice reports.
pls test.
documentation of the template syntax coming soon
--- /dev/null
+<!-- TMPL_INCLUDE NAME="reports-top.inc" -->
+<div id="mainbloc">
+<!-- TMPL_IF name="do_it" -->
+<!-- TMPL_LOOP name="mainloop" -->
+ <h1>Koha : Issues by borrower category <!--TMPL_IF name="borrower_category" --> for category = <!-- TMPL_VAR name="borrower_category" --><!-- /TMPL_IF --></h1>
+ <table>
+ <tr>
+ <th> </th>
+ <!-- TMPL_LOOP name="categorycodeloop" -->
+ <th><!-- TMPL_VAR name="categorycode" --></th>
+ <!-- /TMPL_LOOP -->
+ <th>TOTAL</th>
+ </tr>
+ <!-- TMPL_LOOP name="loopborrowertype" -->
+ <tr>
+ <!-- TMPL_IF name="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td><!-- /TMPL_IF -->
+ <!-- TMPL_VAR name="itemtype" --></td>
+ <!-- TMPL_LOOP name="loopitemtype" -->
+ <!-- TMPL_IF name="hilighted" --><td class="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF -->
+ <!-- TMPL_VAR name="issues" -->
+ </td>
+ <!-- /TMPL_LOOP -->
+ <!-- TMPL_IF name="hilighted" --><td class="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF -->
+ <!-- TMPL_VAR name="totalitemtype" -->
+ </td>
+ </tr>
+ <!-- /TMPL_LOOP name="loopitemtype" -->
+ <tr>
+ <th>TOTAL</th>
+ <!-- TMPL_LOOP name="loopborrowertotal" -->
+ <th>
+ <!-- TMPL_VAR name="issues" -->
+ </th>
+ <!-- /TMPL_LOOP -->
+ <th> </th>
+ </tr>
+ </table>
+<!-- /TMPL_LOOP -->
+<!-- TMPL_ELSE -->
+ <h1>Issues by borrower category</h1>
+ <form method="post">
+ <p>Select a borrower category (or don't if you want to see global status) <input type="text" name="value"></p>
+ <p>Select a branch : <!-- TMPL_VAR name="CGIbranch" --></p>
+ <input type="submit" value="OK" class="button">
+ <input type="hidden" name="report_name" value="<!--TMPL_VAR name="report_name" -->">
+ <input type="hidden" name="do_it" value="1">
+ </form>
+<!-- /TMPL_IF -->
+</div>
+<!-- TMPL_INCLUDE NAME="reports-bottom.inc" -->
--- /dev/null
+<!-- TMPL_INCLUDE NAME="reports-top.inc" -->
+<div id="mainbloc">
+<!-- TMPL_IF name="do_it" -->
+<!-- TMPL_LOOP name="mainloop" -->
+ <h1>Koha : Reports on itemtypes <!--TMPL_IF name="branch" --> for branch = <!-- TMPL_VAR name="branch" --><!-- /TMPL_IF --></h1>
+ <table>
+ <tr>
+ <th>Item type</th>
+ <th>count</th>
+ </tr>
+ <!-- TMPL_LOOP name="loopitemtype" -->
+ <tr>
+ <td><!-- TMPL_VAR name="itemtype" --></td>
+ <td><!-- TMPL_VAR name="count" --></td>
+ </tr>
+ <!-- /TMPL_LOOP name="loopitemtype" -->
+ <tr>
+ <th>TOTAL</th>
+ <th><!-- TMPL_VAR name="total" --></th>
+ </table>
+<!-- /TMPL_LOOP -->
+<!-- TMPL_ELSE -->
+ <h1>View catalogue group by itemtypes</h1>
+ <form method="post">
+ Select a branch (or don't if you want the report for all branches) <!-- TMPL_VAR name="CGIbranch" -->
+ <input type="submit" value="OK" class="button">
+ <input type="hidden" name="report_name" value="<!--TMPL_VAR name="report_name" -->">
+ <input type="hidden" name="do_it" value="1">
+ </form>
+<!-- /TMPL_IF -->
+</div>
+<!-- TMPL_INCLUDE NAME="reports-bottom.inc" -->
<!-- TMPL_INCLUDE NAME="reports-top.inc" -->
<!--------------------------MAIN BODY OF PAGE-------------------------->
-
-<h1>Reports</h1><br/>
+<div id="mainbloc">
+<h1>Reports</h1>
<ul>
<li><a href="/cgi-bin/koha/stats.pl?time=yesterday">Till Reconciliation:</a> Daily Report (yesterday)</li>
<li><a href="/cgi-bin/koha/stats.pl?time=today">Till Reconciliation:</a> Daily Report (today)</li>
<li><a href="/cgi-bin/koha/overdue.pl">Overdue items</a></li>
<li><a href="/cgi-bin/koha/reports/inventory.pl">Inventory/Stocktaking</a></li>
+ <li><a href="/cgi-bin/koha/reports/manager.pl?report_name=itemtypes">Catalogue by itemtype</a></li>
+ <li><a href="/cgi-bin/koha/reports/manager.pl?report_name=issues_by_borrower_category">Issues by borrower category</a></li>
+
</ul>
+</div>
<!-- TMPL_INCLUDE NAME="reports-bottom.inc" -->
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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;