Adding reports
authorhdl <hdl>
Sat, 19 Feb 2005 17:31:42 +0000 (17:31 +0000)
committerhdl <hdl>
Sat, 19 Feb 2005 17:31:42 +0000 (17:31 +0000)
koha-tmpl/intranet-tmpl/default/en/reports/borrowers_stats.tmpl [new file with mode: 0644]
koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl
koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl
reports/borrowers_stats.pl [new file with mode: 0755]
reports/issues_by_borrower_category.plugin

diff --git a/koha-tmpl/intranet-tmpl/default/en/reports/borrowers_stats.tmpl b/koha-tmpl/intranet-tmpl/default/en/reports/borrowers_stats.tmpl
new file mode 100644 (file)
index 0000000..6db0ff6
--- /dev/null
@@ -0,0 +1,118 @@
+<!-- TMPL_INCLUDE NAME="reports-top.inc" -->
+<div id="mainbloc" >
+
+<!-- TMPL_IF NAME="do_it" -->
+       <!-- TMPL_LOOP NAME="mainloop" -->
+               <h1 class="reports">Koha : Borrowers statistics </h1>
+               <!-- TMPL_IF NAME="loopfilter"-->
+                       <p>Filtered on</p>
+                       <!-- TMPL_LOOP NAME="loopfilter" -->
+                                       <p><label> <!-- TMPL_VAR NAME="crit"--> =</label><!-- TMPL_VAR NAME="filter"--></p>
+                       <!-- /TMPL_LOOP -->
+               <!-- /TMPL_IF NAME="loopfilter"-->
+               <table>
+                       <tr >
+                               <th class="reports"><!-- TMPL_VAR name="line" --> / <!-- TMPL_VAR name="column" --></th>
+                               <!-- TMPL_LOOP NAME="loopcol" -->
+                                       <th class="reports"><!-- TMPL_VAR NAME="coltitle" --></th>
+                               <!-- /TMPL_LOOP -->
+                               <th class="reports">TOTAL</th>
+                       </tr>
+                               <!-- TMPL_LOOP NAME="looprow" -->
+                                       <tr>
+                                               <!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td><!-- /TMPL_IF -->
+                                               <!-- TMPL_VAR NAME="rowtitle" --></td>
+                                               <!-- TMPL_LOOP NAME="loopcell" -->
+                                                       <!-- TMPL_IF NAME="hilighted" --><td class="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF -->
+                                                               <!-- TMPL_VAR NAME="value" -->
+                                                       </td>
+                                               <!-- /TMPL_LOOP -->
+                                               <!-- TMPL_IF NAME="hilighted" --><td class="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF -->
+                                                       <!-- TMPL_VAR NAME="totalrow" -->
+                                               </td>
+                                       </tr>
+                               <!-- /TMPL_LOOP NAME="looprow" -->
+                               <tr >
+                                       <th class="reports">TOTAL</th>
+                                       <!-- TMPL_LOOP NAME="loopfooter" -->
+                                               <th class="reports">
+                                                       <!-- TMPL_VAR NAME="totalcol" -->
+                                               </th>
+                                       <!-- /TMPL_LOOP -->
+                                       <th class="reports"><!-- TMPL_VAR NAME="total" --></th>
+                               </tr>
+               </table>
+       <!-- /TMPL_LOOP -->
+<!-- TMPL_ELSE -->
+       <h1 class = "reports">Borrowers statistics</h1>
+       <form method="post">
+       <table>
+               <thead>
+                       <tr>
+                       <th class="reports">Title</th>
+                       <th class="reports">Row</th>
+                       <th class="reports">Column</th>
+                       <th class="reports">Filter</th>
+                       </tr>
+               </thead>
+               <tbody>
+                       <tr class="hilighted">
+                       <td>Borrower category</td>
+                       <td align="center"><input type="radio" name="Line" value="categorycode"></td>
+                       <td align="center"><input type="radio" name="Column" value="categorycode"></td>
+                       <td ><!-- TMPL_VAR NAME="CGICatCode" --></td>
+                       </tr>
+                       <tr>
+                       <td>Borrower status</td>
+                       <td></td>
+                       <td></td>
+                       <td ><select name="status"><option value=""> </option><option value="debarred">debarred</option><option value="gonenoadress">gone no adress</option><option value="lost">lost</option></td>
+                       </tr>
+                       <tr class="hilighted">
+                       <td>
+                       Zip Code
+                       </td>
+                       <td align="center"><input type="radio" name="Line" value="zipcode"></td>
+                       <td align="center"><input type="radio" name="Column" value="zipcode"></td>
+                       <td><input type="text"  name="Filter"></td>
+                       </tr>
+                       <tr class="hilighted">
+                       <td>&nbsp;</td>
+                       <td align="center" colspan="2"><select name="digits">
+                       <option value=""> </option>
+                       <option value ="1">1</option>
+                       <option value ="2">2</option>
+                       <option value ="3">3</option>
+                       <option value ="4">4</option>
+                       <option value ="5">5</option>
+                       <option value ="6">6</option>
+                       <option value ="7">7</option>
+                       <option value ="8">8</option>
+                       <option value ="9">9</option>
+                       <option value ="10">10</option>
+                       </select>
+                       digits 
+                       </td>
+                       <td>&nbsp;</td>
+                       </tr>
+                       <tr>
+                       <td>Sort1</td>
+                       <td align="center"><input type="radio" name="Line" value="sort1"></td>
+                       <td align="center"><input type="radio" name="Column" value="sort1"></td>
+                       <td ><!-- TMPL_VAR NAME="CGISort1" --></td>
+                       </tr>
+                       <tr class="hilighted" >
+                       <td>Sort2</td>
+                       <td align="center"><input type="radio" name="Line" value="sort2"></td>
+                       <td align="center"><input type="radio" name="Column" value="sort2"></td>
+                       <td><!-- TMPL_VAR NAME="CGISort2" --></td>
+                       </tr>
+               </tbody>
+       </table>
+       <input TYPE="submit" value="OK" class="button reports">
+       <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" -->
index 06e7e1e..45f7335 100644 (file)
@@ -1,8 +1,8 @@
 <!-- TMPL_INCLUDE NAME="reports-top.inc" -->
-<div id="mainbloc">
+<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>
+       <h1 class="reports">Koha : Issues by borrower category <!--TMPL_IF NAME="borrower_category" --> for category = <!-- TMPL_VAR NAME="borrower_category" --><!-- /TMPL_IF --></h1>
        <table>
                <tr>
                        <th>&nbsp;</th>
                                                <!-- TMPL_VAR NAME="issues" -->
                                        </th>
                                <!-- /TMPL_LOOP -->
-                               <th>&nbsp;</th>
+                               <th><!-- TMPL_VAR NAME="grantotal" --></th>
                        </tr>
        </table>
 <!-- /TMPL_LOOP -->
 <!-- TMPL_ELSE -->
-       <h1>Issues by borrower category</h1>
+       <h1 class = "reports">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="submit" value="OK" class="button reports">
                <input type="hidden" name="report_name" value="<!--TMPL_VAR NAME="report_name" -->">
                <input type="hidden" name="do_it" value="1">
        </form>
index 68ab66e..492c566 100644 (file)
@@ -5,6 +5,7 @@
 <div id="bloc25">
        <h2 class="reports">Stats borrowers</h2>
        <ul>
+               <li><a href="/cgi-bin/koha/reports/borrowers_stats.pl">borrowers</a></li>
        </ul>
        <h2 class="reports">Stats on catalogue</h2>
        <ul>
diff --git a/reports/borrowers_stats.pl b/reports/borrowers_stats.pl
new file mode 100755 (executable)
index 0000000..355e123
--- /dev/null
@@ -0,0 +1,270 @@
+#!/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;
+use C4::Interface::CGI::Output;
+use C4::Circulation::Circ2;
+
+=head1 NAME
+
+plugin that shows a stats on borrowers
+
+=head1 DESCRIPTION
+
+
+=over2
+
+=cut
+
+my $input = new CGI;
+my $do_it=$input->param('do_it');
+my $fullreportname = "reports/borrowers_stats.tmpl";
+my $line = $input->param("Line");
+my $column = $input->param("Column");
+my @filters = $input->param("Filter");
+my $digits = $input->param("digits");
+my $borstat = $input->param("status");
+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);
+if ($do_it) {
+       my $results = calculate($line, $column, $digits, $borstat, \@filters);
+       $template->param(mainloop => $results);
+#      print $input->header(-type => 'application/vnd.ms-excel', -name=>"export.csv");
+#      my $lines = @$results[0]->{looprow};
+#      foreach my $line (@$lines) {
+#              my $x = $line->{loopcell};
+#              foreach my $cell (@$x) {
+#                      print $cell->{value}.";";
+#              }
+#              print "\n";
+#      }
+} else {
+       my $dbh = C4::Context->dbh;
+       my @values;
+       my %labels;
+       my $req;
+       $req = $dbh->prepare( "select categorycode, description from categories");
+       $req->execute;
+       my %select_catcode;
+       my @select_catcode;
+       push @select_catcode,"";
+       $select_catcode{""} = "";
+       while (my ($catcode, $description) =$req->fetchrow) {
+               push @select_catcode, $catcode;
+               $select_catcode{$catcode} = $description
+       }
+       my $CGICatCode=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_catcode,
+                               -labels   => \%select_catcode,
+                               -size     => 1,
+                               -multiple => 0 );
+       
+       $req = $dbh->prepare( "select distinctrow sort1 from borrowers");
+       $req->execute;
+       my @select_sort1;
+       push @select_sort1,"";
+       while (my ($value) =$req->fetchrow) {
+               push @select_sort1, $value;
+       }
+       my $CGIsort1=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_sort1,
+                               -size     => 1,
+                               -multiple => 0 );
+       
+       $req = $dbh->prepare( "select distinctrow sort2 from borrowers");
+       $req->execute;
+       my @select_sort2;
+       push @select_sort2,"";
+       while (my ($value) =$req->fetchrow) {
+               push @select_sort2, $value;
+       }
+       my $CGIsort2=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_sort2,
+                               -size     => 1,
+                               -multiple => 0 );
+       $template->param(CGICatcode => $CGICatCode,
+                                       CGISort1 => $CGIsort1,
+                                       CGISort2 => $CGIsort2
+                                       );
+
+}
+output_html_with_http_headers $input, $cookie, $template->output;
+
+
+
+sub calculate {
+       my ($line, $column, $digits, $status, $filters) = @_;
+       my @mainloop;
+       my @loopfooter;
+       my @loopcol;
+       my @looprow;
+       my %globalline;
+       my $grantotal =0;
+# extract parameters
+       my $dbh = C4::Context->dbh;
+
+# Filters
+       my $linefilter = "";
+       $linefilter = @$filters[0] if ($line =~ /categorycode/ )  ;
+       $linefilter = @$filters[1] if ($line =~ /zipcode/ )  ;
+       $linefilter = @$filters[2] if ($line =~ /sort1/ ) ;
+       $linefilter = @$filters[3] if ($line =~ /sort2/ ) ;
+
+       my $colfilter = "";
+       $colfilter = @$filters[0] if ($column =~ /categorycode/);
+       $colfilter = @$filters[1] if ($column =~ /zipcode/);
+       $colfilter = @$filters[2] if ($column =~ /sort1/);
+       $colfilter = @$filters[3] if ($column =~ /sort2/);
+
+       my @loopfilter;
+       for (my $i=0;$i<=3;$i++) {
+               my %cell;
+               if ( @$filters[$i] ) {
+                       $cell{filter} .= @$filters[$i];
+                       $cell{crit} .="Category Code " if ($i==0);
+                       $cell{crit} .="Zip Code" if ($i==1);
+                       $cell{crit} .="Sort1" if ($i==2);
+                       $cell{crit} .="Sort2" if ($i==3);
+                       push @loopfilter, \%cell;
+               }
+       }
+       if ($status) {
+               push @loopfilter,{crit=>"Status",filter=>$status}
+       }
+# 1st, loop rows.
+#problem with NULL Values.
+       my $strsth;
+       $strsth .= "select distinctrow $line from borrowers where $line is not null ";
+       $linefilter =~ s/\*/%/g;
+       if ( $linefilter ) {
+               $strsth .= " and $line LIKE ? " ;
+       }
+       $strsth .= " and $status='1' " if ($status);
+       $strsth .=" order by $line";
+       warn "". $strsth;
+       
+       my $sth = $dbh->prepare( $strsth );
+       if ( $linefilter ) {
+               $sth->execute($linefilter);
+       } else {
+               $sth->execute;
+       }
+       while ( my ($celvalue) = $sth->fetchrow) {
+               my %cell;
+               if ($celvalue) {
+                       $cell{rowtitle} = $celvalue;
+               } else {
+                       $cell{rowtitle} = "";
+               }
+               $cell{totalrow} = 0;
+               push @looprow, \%cell;
+       }
+
+# 2nd, loop cols.
+       my $strsth2;
+       $colfilter =~ s/\*/%/g;
+       $strsth2 .= "select distinctrow $column from borrowers where $column is not null";
+       if ( $colfilter ) {
+               $strsth2 .= " and $column LIKE ? ";
+       } 
+       $strsth2 .= " and $status='1' " if ($status);
+       $strsth2 .= " order by $column";
+       warn "". $strsth2;
+       my $sth2 = $dbh->prepare( $strsth2 );
+       if ($colfilter) {
+               $sth2->execute($colfilter);
+       } else {
+               $sth2->execute;
+       }
+       while (my ($celvalue) = $sth2->fetchrow) {
+               my %cell;
+               my %ft;
+               $cell{coltitle} = $celvalue;
+               $ft{totalcol} = 0;
+               push @loopcol, \%cell;
+               push @loopfooter, \%ft;
+       }
+# now, parse each category. Before filling the result array, fill it with 0 to have every itemtype column.
+       my $strcalc .= "SELECT  count( * ) FROM borrowers WHERE $line = ? and $column= ? ";
+       $strcalc .= " AND categorycode like '" . @$filters[1] ."%' " if ( @$filters[1] );
+       $strcalc .= " AND sort1 like ' " . @$filters[2] ."%'" if ( @$filters[2] );
+       $strcalc .= " AND sort2 like ' " . @$filters[3] ."%'" if ( @$filters[3] );
+       $strcalc .= " AND zipcode like ' " . @$filters[4] ."%'" if ( @$filters[4] );
+       $strcalc .= " and $status='1' " if ($status);
+       warn "". $strcalc;
+       my $dbcalc = $dbh->prepare($strcalc);
+       my $i=0;
+       my @totalcol;
+       my $hilighted=-1;
+       # for each line
+       for (my $i=0; $i<=$#looprow; $i++) {
+               my $row = $looprow[$i]->{'rowtitle'};
+               my @loopcell;
+               my $totalrow=0;
+               # for each column
+               for (my $j=0;$j<=$#loopcol;$j++) {
+                       my $col = $loopcol[$j]->{'coltitle'};
+                       $dbcalc->execute($row,$col);
+                       my ($value) = $dbcalc->fetchrow;
+#                      warn "$row / $col / $value";
+                       $totalrow += $value;
+                       $grantotal += $value;
+                       $loopfooter[$j]->{'totalcol'} +=$value;
+                       push @loopcell,{value => $value};
+               }
+               $looprow[$i]->{'totalrow'}=$totalrow;
+               $looprow[$i]->{'loopcell'}=\@loopcell;
+               $looprow[$i]->{'hilighted'} = 1 if $hilighted eq 1;
+               $hilighted = -$hilighted;
+       }
+
+#      # the header of the table
+       $globalline{loopfilter}=\@loopfilter;
+       $globalline{looprow} = \@looprow;
+#      # the core of the table
+       $globalline{loopcol} = \@loopcol;
+#      # the foot (totals by borrower type)
+       $globalline{loopfooter} = \@loopfooter;
+       $globalline{total}= $grantotal;
+       $globalline{line} = $line;
+       $globalline{column} = $column;
+       push @mainloop,\%globalline;
+       return \@mainloop;
+}
+
+1;
\ No newline at end of file
index 868fcbc..c767bb8 100644 (file)
@@ -111,62 +111,117 @@ sub calculate {
        $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 $categorycode;
+       my $description;
+       my $borrower_categorycode =0;
        my @mainloop;
        my @itemtypeloop;
        my @loopborrowertype;
+       my @loopborrowertotal;
        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 $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;
+                               }
+                       }
                }
-               my %line;
-               $line{loopitemtype} = \@loopitemtype;
-               if ($itemtypes{$itemtype}->{description}) {
-                       $line{itemtype} = $itemtypes{$itemtype}->{description};
-               } else {
-                       $line{itemtype} = "$itemtype (no entry in itemtype table)";
+               # 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;
                }
-               $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)
-       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;
+       $globalline{grantotal}= $grantotal;
        push @mainloop,\%globalline;
        return \@mainloop;
 }