Main Koha release repository https://koha-community.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

174 lines
5.5 KiB

#!/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;
if ($itemtypes{$itemtype}->{description}) {
$line{itemtype} = $itemtypes{$itemtype}->{description};
} else {
$line{itemtype} = "$itemtype (no entry in itemtype table)";
}
$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;