[Koha-cvs] CVS: koha/reports issues_by_borrower_category.plugin,NONE,1.1 itemtypes.plugin,NONE,1.1 manager.pl,NONE,1.1

Paul POULAIN tipaul at users.sourceforge.net
Tue Mar 30 18:09:06 CEST 2004


Update of /cvsroot/koha/koha/reports
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26999/reports

Added Files:
	issues_by_borrower_category.plugin itemtypes.plugin manager.pl 
Log Message:
NEW :
template for report writing.
with 2 nice reports.
pls test.
documentation of the template syntax coming soon

--- NEW FILE ---
#!/usr/bin/perl

# $Id: issues_by_borrower_category.plugin,v 1.1 2004/03/30 16:09:04 tipaul Exp $

# 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;
--- NEW FILE ---
#!/usr/bin/perl

# $Id: itemtypes.plugin,v 1.1 2004/03/30 16:09:04 tipaul Exp $

# 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;
--- NEW FILE ---
#!/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;





More information about the Koha-cvs mailing list