koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Paul POULAIN
Subject: [Koha-cvs] CVS: koha/reports issues_by_borrower_category.plugin,NONE,1.1 itemtypes.plugin,NONE,1.1 manager.pl,NONE,1.1
Date: Tue, 30 Mar 2004 08:09:06 -0800

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   => address@hidden,
                                -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} = address@hidden;
                $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} = address@hidden;
        # the core of the table
        $globalline{categorycodeloop} = address@hidden;
        # 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} = address@hidden;
#       $globalline{total} = $grantotal;
#       $globalline{borrower_category} = $borrower_category;
        push @mainloop,\%globalline;
        return address@hidden;
}

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   => address@hidden,
                                -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} = address@hidden;
        $globalline{total} = $grantotal;
        $globalline{branch} = $branch;
        push @mainloop,\%globalline;
        return address@hidden;
}

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(address@hidden);
        $template->param(mainloop => $results);
} else {
        $template = set_parameters($template);
}
output_html_with_http_headers $input, $cookie, $template->output;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]