e45912470f
Signed-off-by: Chris Cormack <crc@liblime.com> Signed-off-by: Joshua Ferraro <jmf@liblime.com>
242 lines
7.8 KiB
Perl
242 lines
7.8 KiB
Perl
#!/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 C4::Auth;
|
|
use CGI;
|
|
use C4::Context;
|
|
use HTML::Template::Pro;
|
|
use C4::Search;
|
|
use C4::Output;
|
|
use C4::Koha;
|
|
use C4::Members;
|
|
|
|
use C4::Branch; # GetBranches
|
|
|
|
=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 => 'branch',
|
|
-values => \@select_branch,
|
|
-labels => \%select_branches,
|
|
-size => 1,
|
|
-multiple => 0 );
|
|
$template->param(CGIbranch => $CGIbranch);
|
|
|
|
my ($codes,$labels)=GetborCatFromCatType(undef,undef);
|
|
my @borcatloop;
|
|
foreach my $thisborcat (sort keys %$labels) {
|
|
push @borcatloop, {value => $thisborcat,
|
|
description => $labels->{$thisborcat},
|
|
};
|
|
}
|
|
$template->param(loopcategories => \@borcatloop);
|
|
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 $strsth="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 = ?";
|
|
$strsth.= " AND borrowers.branchcode = ".$dbh->quote($branch) if ($branch);
|
|
$strsth .= " GROUP BY biblioitems.itemtype";
|
|
my $sth = $dbh->prepare($strsth);
|
|
my $sthcategories = $dbh->prepare("select categorycode,description from categories");
|
|
$sthcategories->execute;
|
|
my %borrowertype;
|
|
my @categorycodeloop;
|
|
my $categorycode;
|
|
my $description;
|
|
my $borrower_categorycode =0;
|
|
my @mainloop;
|
|
my @itemtypeloop;
|
|
my @loopborrowertype;
|
|
my @loopborrowertotal;
|
|
my %globalline;
|
|
my $hilighted=-1;
|
|
my $grantotal =0;
|
|
#If no Borrower-category selected....
|
|
# Print all
|
|
if (!$borrower_category) {
|
|
while ( ($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;
|
|
$grantotal += $total;
|
|
}
|
|
}
|
|
# build the result
|
|
foreach my $itemtype (keys %itemtypes) {
|
|
my @loopitemtype;
|
|
$sthcategories->execute;
|
|
while (($categorycode,$description) = $sthcategories->fetchrow ) {
|
|
my %cell;
|
|
$cell{issues} = $itemtypes{$itemtype}->{results}->{$categorycode};
|
|
#printf stderr "%s ",$categorycode;
|
|
push @loopitemtype,\%cell;
|
|
}
|
|
#printf stderr "\n";
|
|
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;
|
|
}
|
|
$sthcategories->execute;
|
|
while (($categorycode,$description) = $sthcategories->fetchrow ) {
|
|
my %line;
|
|
$line{issues} = $borrowertype{$categorycode}->{total};
|
|
push @loopborrowertotal, \%line;
|
|
}
|
|
} else {
|
|
# A Borrower_category has been selected
|
|
# extracting corresponding data
|
|
$borrowertype{$categorycode}->{description} = $borrower_category;
|
|
$borrowertype{$categorycode}->{total} = 0;
|
|
while (($categorycode,$description) = $sthcategories->fetchrow) {
|
|
if ($description =~ /$borrower_category/ ) {
|
|
$borrower_categorycode = $categorycode;
|
|
my %cc;
|
|
$cc{categorycode} = $description;
|
|
push @categorycodeloop,\%cc;
|
|
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;
|
|
$grantotal +=$total;
|
|
}
|
|
}
|
|
}
|
|
# build the result
|
|
foreach my $itemtype (keys %itemtypes) {
|
|
my @loopitemtype;
|
|
my %cell;
|
|
$cell{issues}=$itemtypes{$itemtype}->{results}->{$borrower_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;
|
|
}
|
|
my %cell;
|
|
$cell{issues} = $borrowertype{$borrower_categorycode}->{total};
|
|
push @loopborrowertotal, \%cell;
|
|
}
|
|
# the header of the table
|
|
$globalline{loopborrowertype} = \@loopborrowertype;
|
|
# the core of the table
|
|
$globalline{categorycodeloop} = \@categorycodeloop;
|
|
# the foot (totals by borrower type)
|
|
$globalline{loopborrowertotal} = \@loopborrowertotal;
|
|
$globalline{grantotal}= $grantotal;
|
|
push @mainloop,\%globalline;
|
|
return \@mainloop;
|
|
}
|
|
|
|
1;
|