Including null values to statistics reports
[koha.git] / reports / borrowers_stats.pl
index 9fce669..1d05600 100755 (executable)
@@ -261,8 +261,8 @@ sub calculate {
                my %cell;
                if ($celvalue) {
                        $cell{rowtitle} = $celvalue;
-               } else {
-                       $cell{rowtitle} = "";
+#              } else {
+#                      $cell{rowtitle} = "";
                }
                $cell{totalrow} = 0;
                push @loopline, \%cell;
@@ -293,8 +293,9 @@ sub calculate {
        while (my ($celvalue) = $sth2->fetchrow) {
                my %cell;
                my %ft;
-               $cell{coltitle} = $celvalue;
-               $ft{totalcol} = 0;
+               if ($celvalue) {
+                       $cell{coltitle} = $celvalue;
+               }
                push @loopcol, \%cell;
        }
        
@@ -315,7 +316,7 @@ sub calculate {
        }
 
 # preparing calculation
-       my $strcalc .= "SELECT $linefield, $colfield, count( * ) FROM borrowers WHERE $line is not null AND $column is not null";
+       my $strcalc .= "SELECT $linefield, $colfield, count( * ) FROM borrowers WHERE ";
        @$filters[0]=~ s/\*/%/g if (@$filters[0]);
        $strcalc .= " AND categorycode like '" . @$filters[0] ."'" if ( @$filters[0] );
        @$filters[1]=~ s/\*/%/g if (@$filters[1]);
@@ -330,22 +331,32 @@ sub calculate {
        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 ";
-               $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;
        }
        
-       foreach my $row ( keys %table ) {
+       push @loopcol,{coltitle => "NULL"} if ($emptycol);
+       
+       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 ) {
-                       push @loopcell, {value => $table{$row}->{$col->{coltitle}}} ;
+                       my $value =$table{$row}->{($col->{coltitle} eq "NULL")?"zzEMPTY":$col->{coltitle}};
+                       push @loopcell, {value => $value  } ;
                }
-               push @looprow,{ 'rowtitle' => $row,
+               push @looprow,{ 'rowtitle' => ($row eq "zzEMPTY")?"NULL":$row,
                                                'loopcell' => \@loopcell,
-                                               'hilighted' => ,
+                                               'hilighted' => ($hilighted >0),
                                                'totalrow' => $table{$row}->{totalrow}
                                        };
                $hilighted = -$hilighted;
@@ -353,9 +364,11 @@ sub calculate {
        
        foreach my $col ( @loopcol ) {
                my $total=0;
-               foreach my $row ( @loopline ) {
-                       $total += $table{$row->{rowtitle}}->{$col->{coltitle}};
+               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};
        }