Bug 9044: (follow-up) change dropdown list into links list
[koha.git] / reports / bor_issues_top.pl
index 7761366..9618faf 100755 (executable)
 # 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
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
+#use warnings; FIXME - Bug 2505
 use CGI;
 use C4::Auth;
 use C4::Output;
@@ -26,6 +27,7 @@ use C4::Branch; # GetBranches
 use C4::Koha;
 use C4::Circulation;
 use C4::Members;
+use C4::Reports;
 use C4::Debug;
 use C4::Dates qw(format_date format_date_in_iso);
 
@@ -53,18 +55,17 @@ foreach ( @filters[0..3] ) {
 }
 my $output   = $input->param("output");
 my $basename = $input->param("basename");
-# my $mime     = $input->param("MIME");
-my $del      = $input->param("sep");
 my ($template, $borrowernumber, $cookie)
     = get_template_and_user({template_name => $fullreportname,
                 query => $input,
                 type => "intranet",
                 authnotrequired => 0,
-                flagsrequired => {reports => 1},
+                flagsrequired => {reports => '*'},
                 debug => 1,
                 });
+our $sep     = $input->param("sep");
+$sep = "\t" if ($sep eq 'tabulation');
 $template->param(do_it => $do_it,
-        DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
         );
 if ($do_it) {
 # Displaying results
@@ -81,8 +82,6 @@ if ($do_it) {
                             -filename=>"$basename.csv" );
         my $cols  = @$results[0]->{loopcol};
         my $lines = @$results[0]->{looprow};
-        my $sep;
-        $sep =C4::Context->preference("delimiter");
 # header top-right
         print @$results[0]->{line} ."/". @$results[0]->{column} .$sep;
 # Other header
@@ -102,15 +101,15 @@ if ($do_it) {
                print join($sep, map {$_->{totalcol}} @$cols);
         print $sep.@$results[0]->{total};
     }
-    exit(1);
+    exit;
 }
 
 my $dbh = C4::Context->dbh;
 my @values;
 
 # here each element returned by map is a hashref, get it?
-my @mime  = ( map { +{type =>$_} } (split /[;:]/,C4::Context->preference("MIME")) );
-my @delim = ( map { +{delim=>$_} } (split //,C4::Context->preference("delimiter")) );
+my @mime  = ( map { {type =>$_} } (split /[;:]/, 'CSV') ); # FIXME translation
+my $delims = GetDelimiterChoices;
 my $branches = GetBranches;
 my @branchloop;
 foreach (sort keys %$branches) {
@@ -142,7 +141,7 @@ foreach (sort keys %$labels) {
     
 $template->param(
            mimeloop => \@mime,
-            seploop => \@delim,
+         CGIseplist => $delims,
          branchloop => \@branchloop,
        itemtypeloop => \@itemtypeloop,
          borcatloop => \@borcatloop,
@@ -151,7 +150,8 @@ output_html_with_http_headers $input, $cookie, $template->output;
 
 
 sub calculate {
-    my ($line, $column, $filters) = @_;
+    my ($limit, $column, $filters) = @_;
+
     my @loopcol;
     my @loopline;
     my @looprow;
@@ -209,11 +209,6 @@ sub calculate {
                } elsif ($column =~ /sort2/   ) {
                        # $colfilter[0] = @$filters[11];
                }
-        # $colfilter[0] = @$filters[7] if ($column =~ /timestamp/ ) ; FIXME This can't be right.
-        # $colfilter[0] = @$filters[8] if ($column =~ /timestamp/ ) ; FIXME 
-        # $colfilter[0] = @$filters[9] if ($column =~ /timestamp/ ) ; FIXME Only this line would have effect.
-
-    #warn "filtre col ".$colfilter[0]." ".$colfilter[1];
                                                 
     # loop cols.
         if ($column eq "Day") {
@@ -264,7 +259,7 @@ sub calculate {
         print DEBUG "rows: ", $sth2->rows, "\n";
         while (my @row = $sth2->fetchrow) {
                        $columns{($row[0] ||'NULL')}++;
-            push @loopcol, +{ coltitle => $row[0] || 'NULL' };
+            push @loopcol, { coltitle => $row[0] || 'NULL' };
         }
 
                $strsth2 =~ s/old_issues/issues/g;
@@ -274,18 +269,11 @@ sub calculate {
         $debug and print DEBUG "rows: ", $sth2->rows, "\n";
         while (my @row = $sth2->fetchrow) {
                        $columns{($row[0] ||'NULL')}++;
-            push @loopcol, +{ coltitle => $row[0] || 'NULL' };
+            push @loopcol, { coltitle => $row[0] || 'NULL' };
         }
                $debug and print DEBUG "full array: ", Dumper(\%columns), "\n";
-    }
-
-    #Initialization of cell values.....
-    my @table;
-    for (my $i=1;$i<=$line;$i++) {
-        foreach (keys %columns) {
-#                      warn " init table : $row->{rowtitle} / $_ ";
-            $table[$i]->{ $_ || "total" }->{'name'}=0;
-        }
+    }else{
+        $columns{''} = 1;
     }
 
     my $strcalc ;
@@ -294,22 +282,19 @@ sub calculate {
     $strcalc .= "SELECT  CONCAT(borrowers.surname , \",\\t\",borrowers.firstname),  COUNT(*) AS RANK, borrowers.borrowernumber AS ID";
     $strcalc .= " , $colfield " if ($colfield);
     $strcalc .= " FROM `old_issues`
-                  LEFT JOIN  borrowers  ON old_issues.borrowernumber=borrowers.borrowernumber
-                  LEFT JOIN    items    ON items.itemnumber=old_issues.itemnumber
-                  LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber)
-                  WHERE 1";
+                  LEFT JOIN  borrowers  USING(borrowernumber)
+                  LEFT JOIN    items    USING(itemnumber)
+                  LEFT JOIN biblioitems USING(biblioitemnumber)
+                  WHERE old_issues.borrowernumber IS NOT NULL
+                  ";
        my @filterterms = (
-               'old_issues.timestamp  >',
-               'old_issues.timestamp  <',
+               'old_issues.issuedate >',
+               'old_issues.issuedate <',
                'old_issues.returndate >',
                'old_issues.returndate <',
                'old_issues.branchcode  like',
                'biblioitems.itemtype   like',
                'borrowers.categorycode like',
-               'dayname(old_issues.timestamp) like',
-               'monthname(old_issues.timestamp) like',
-               'monthname(old_issues.timestamp) like',
-               'year(old_issues.timestamp) like',
        );
     foreach ((@$filters)[0..9]) {
                my $term = shift @filterterms;  # go through both arrays in step
@@ -317,16 +302,11 @@ sub calculate {
                s/\*/%/g;
                $strcalc .= " AND $term '$_' ";
        }
-    
     $strcalc .= " GROUP BY borrowers.borrowernumber";
     $strcalc .= ", $colfield" if ($column);
     $strcalc .= " ORDER BY RANK DESC";
     $strcalc .= ",$colfield " if ($colfield);
-#      my $max;
-#      if (@loopcol) {
-#              $max = $line*@loopcol;
-#      } else { $max=$line;}
-#      $strcalc .= " LIMIT 0,$max";
+    $strcalc .= " LIMIT $limit" if ($limit);
 
     $debug and print DEBUG "(old_issues) SQL : $strcalc\n";
     my $dbcalc = $dbh->prepare($strcalc);
@@ -340,7 +320,7 @@ sub calculate {
        #       )
     while (my @data = $dbcalc->fetchrow) {
         my ($row, $rank, $id, $col) = @data;
-        $col = "zzEMPTY" if ($col eq undef);
+        $col = "zzEMPTY" if (!defined($col));
                unless ($patrons{$id}) {
                        $patrons{$id} = {name=>$row, allcols=>{}, newcols=>{}, oldcols=>{}};
                }
@@ -356,7 +336,7 @@ sub calculate {
     $debug and print DEBUG "rows: ", $dbcalc->rows, "\n";
     while (my @data = $dbcalc->fetchrow) {
         my ($row, $rank, $id, $col) = @data;
-        $col = "zzEMPTY" if ($col eq undef);
+        $col = "zzEMPTY" if (!defined($col));
                unless ($patrons{$id}) {
                        $patrons{$id} = {name=>$row, allcols=>{}, newcols=>{}, oldcols=>{}};
                }
@@ -383,11 +363,19 @@ sub calculate {
     foreach my $id (@ranked_ids) {
         my @loopcell;
         foreach my $key (@cols_in_order) {
-            push @loopcell, {
+                       if($column){
+                     push @loopcell, {
                                value => $patrons{$id}->{name},
+                               reference => $id,
                                count => $patrons{$id}->{allcols}->{$key},
+                         };
+                       }else{
+                         push @loopcell, {
+                               value => $patrons{$id}->{name},
                                reference => $id,
-                       };
+                               count => $patrons{$id}->{total},
+                         };  
+                       }
         }
         push @looprow,{ 'rowtitle' => $i++ ,
                         'loopcell' => \@loopcell,
@@ -399,11 +387,10 @@ sub calculate {
     $globalline{loopfilter}=\@loopfilter;
     # the core of the table
     $globalline{looprow} = \@looprow;
-    $globalline{loopcol} = [ map {+{coltitle=>$_}} @cols_in_order ];
+    $globalline{loopcol} = [ map {{coltitle=>$_}} @cols_in_order ];
        # the foot (totals by borrower type)
     $globalline{loopfooter} = [];
     $globalline{total}= $grantotal;            # FIXME: useless
-    $globalline{line} = $line;
     $globalline{column} = $column;
     return [\%globalline];     # reference to a 1 element array: that element is a hashref
 }