+ foreach my $row ( sort keys %table ) {
+ my @loopcell;
+ #@loopcol ensures the order for columns is common with column titles
+ # and the number matches the number of columns
+ foreach my $col ( @loopcol ) {
+ my $value =$table{$row}->{($col->{coltitle} eq "NULL")?"zzEMPTY":$col->{coltitle}};
+ push @loopcell, {value => $value } ;
+ }
+ push @looprow,{ 'rowtitle' => ($row eq "zzEMPTY")?"NULL":$row,
+ 'loopcell' => \@loopcell,
+ 'hilighted' => ($hilighted >0),
+ 'totalrow' => $table{$row}->{totalrow}
+ };
+ $hilighted = -$hilighted;
+ }
+
+# warn "footer processing";
+ foreach my $col ( @loopcol ) {
+ my $total=0;
+ foreach my $row ( @looprow ) {
+ $total += $table{($row->{rowtitle} eq "NULL")?"zzEMPTY":$row->{rowtitle}}->{($col->{coltitle} eq "NULL")?"zzEMPTY":$col->{coltitle}};
+# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle};
+ }
+# warn "summ for column ".$col->{coltitle}." = ".$total;
+ push @loopfooter, {'totalcol' => $total};
+
+ }else {
+ $strcalc .= "SELECT $linefield, $colfield, ";
+ $strcalc .= "COUNT( * ) " if ($process ==1);
+ if ($process ==3){
+ my $rqbookcount = $dbh->prepare("SELECT count(*) FROM items");
+ $rqbookcount->execute;
+ my ($bookcount) = $rqbookcount->fetchrow;
+ $strcalc .= "100*(COUNT(itemnumber))/ $bookcount " ;
+ }
+ $strcalc .= "FROM statistics,borrowers where (statistics.borrowernumber=borrowers.borrowernumber) ";
+
+ @$filters[0]=~ s/\*/%/g if (@$filters[0]);
+ $strcalc .= " AND statistics.datetime > '" . @$filters[0] ."'" if ( @$filters[0] );
+ @$filters[1]=~ s/\*/%/g if (@$filters[1]);
+ $strcalc .= " AND statistics.datetime < '" . @$filters[1] ."'" if ( @$filters[1] );
+ @$filters[2]=~ s/\*/%/g if (@$filters[2]);
+ $strcalc .= " AND borrowers.categorycode like '" . @$filters[2] ."'" if ( @$filters[2] );
+ @$filters[3]=~ s/\*/%/g if (@$filters[3]);
+ $strcalc .= " AND statistics.itemtype like '" . @$filters[3] ."'" if ( @$filters[3] );
+ @$filters[4]=~ s/\*/%/g if (@$filters[4]);
+ $strcalc .= " AND statistics.branch like '" . @$filters[4] ."'" if ( @$filters[4] );
+ @$filters[5]=~ s/\*/%/g if (@$filters[5]);
+ $strcalc .= " AND borrowers.sort1 like '" . @$filters[5] ."'" if ( @$filters[5] );
+ @$filters[6]=~ s/\*/%/g if (@$filters[6]);
+ $strcalc .= " AND borrowers.sort2 like '" . @$filters[6] ."'" if ( @$filters[6] );
+ $strcalc .= " AND dayname(datetime) like '" . $daysel ."'" if ( $daysel );
+ $strcalc .= " AND monthname(datetime) like '" . $monthsel ."'" if ( $monthsel );
+ $strcalc .= " AND statistics.type like '" . $type ."'" if ( $type );
+
+ $strcalc .= " group by $linefield, $colfield order by $linefield,$colfield";
+ # warn "". $strcalc;
+ my $dbcalc = $dbh->prepare($strcalc);
+ $dbcalc->execute;
+ # warn "filling table";
+ my $emptycol;
+ while (my ($row, $col, $value) = $dbcalc->fetchrow) {
+ # warn "filling table $row / $col / $value ";
+ $emptycol = 1 if ($col eq undef);
+ $col = "zzEMPTY" if ($col eq undef);
+ $row = "zzEMPTY" if ($row eq undef);
+
+ $table{$row}->{$col}+=$value;
+ $table{$row}->{totalrow}+=$value;
+ $grantotal += $value;
+ }