Bug 32862: Fix cataloguing/value_builder/unimarc_field_135a.pl
[koha-ffzg.git] / reports / cat_issues_top.pl
index e7a315f..d3d1e06 100755 (executable)
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use C4::Auth;
+use C4::Auth qw( get_template_and_user );
 use CGI qw ( -utf8 );
 use C4::Context;
-use C4::Output;
-use C4::Koha;
-use C4::Circulation;
-use C4::Reports;
-use C4::Members;
-use Koha::DateUtils;
+use C4::Output qw( output_html_with_http_headers );
+use C4::Koha qw( GetAuthorisedValues );
+use C4::Reports qw( GetDelimiterChoices );
 use Koha::ItemTypes;
 
 =head1 NAME
@@ -38,15 +35,12 @@ plugin that shows a stats on borrowers
 
 =cut
 
-my $input = new CGI;
+my $input = CGI->new;
 my $do_it=$input->param('do_it');
 my $fullreportname = "reports/cat_issues_top.tt";
 my $limit = $input->param("Limit");
 my $column = $input->param("Criteria");
 my @filters = $input->multi_param("Filter");
-foreach ( @filters[0..3] ) {
-    $_ and $_ = eval { output_pref( { dt => dt_from_string ( $_ ), dateonly => 1, dateformat => 'iso' } ); };
-}
 
 my $output = $input->param("output");
 my $basename = $input->param("basename");
@@ -55,12 +49,9 @@ my ($template, $borrowernumber, $cookie)
     = get_template_and_user({template_name => $fullreportname,
                 query => $input,
                 type => "intranet",
-                authnotrequired => 0,
                 flagsrequired => { reports => '*'},
-                debug => 1,
                 });
-our $sep     = $input->param("sep");
-$sep = "\t" if ($sep eq 'tabulation');
+our $sep     = C4::Context->csv_delimiter(scalar $input->param("sep"));
 $template->param(do_it => $do_it,
         );
 if ($do_it) {
@@ -93,26 +84,15 @@ if ($do_it) {
             print $line->{rowtitle}.$sep;
             foreach my $cell (@$x) {
                 print $cell->{value}.$sep;
+                print $cell->{count} // '';
             }
-            print $line->{totalrow};
             print "\n";
         }
-# footer
-        print "TOTAL";
-        $cols = @$results[0]->{loopfooter};
-        foreach my $col ( @$cols ) {
-            print $sep.$col->{totalcol};
-        }
-        print $sep.@$results[0]->{total};
         exit;
     }
 # Displaying choices
 } else {
     my $dbh = C4::Context->dbh;
-    my @values;
-    my %labels;
-    my %select;
-    my $req;
     
     my $CGIextChoice = ( 'CSV' ); # FIXME translation
     my $CGIsepChoice=GetDelimiterChoices;
@@ -144,7 +124,7 @@ if ($do_it) {
 
     @shelvinglocloop = sort {$a->{value} cmp $b->{value}} @shelvinglocloop;
 
-    my $patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['categorycode']});
+    my $patron_categories = Koha::Patron::Categories->search_with_library_limits({}, {order_by => ['categorycode']});
 
     $template->param(
                     CGIextChoice => $CGIextChoice,
@@ -163,9 +143,7 @@ output_html_with_http_headers $input, $cookie, $template->output;
 sub calculate {
     my ($line, $column, $filters) = @_;
     my @mainloop;
-    my @loopfooter;
     my @loopcol;
-    my @loopline;
     my @looprow;
     my %globalline;
     my $grantotal =0;
@@ -182,13 +160,7 @@ sub calculate {
             if (($i==1) and (@$filters[$i-1])) {
                 $cell{err} = 1 if (@$filters[$i]<@$filters[$i-1]) ;
             }
-            # format the dates filters, otherwise just fill as is
-            if ($i>=2) {
-                $cell{filter} .= @$filters[$i];
-            } else {
-                $cell{filter} .= eval { output_pref( { dt => dt_from_string( @$filters[$i] ), dateonly => 1 }); }
-                   if ( @$filters[$i] );
-            }
+            $cell{filter} .= @$filters[$i];
             $cell{crit} .="Issue From" if ($i==0);
             $cell{crit} .="Issue To" if ($i==1);
             $cell{crit} .="Return From" if ($i==2);
@@ -208,14 +180,14 @@ sub calculate {
     my $colfield;
     my $colorder;
     if ($column){
-        $column = "old_issues.".$column if (($column=~/branchcode/) or ($column=~/timestamp/));
+        $column = "old_issues.".$column if (($column=~/branchcode/) or ($column=~/issuedate/));
         if($column=~/itemtype/){
             $column = C4::Context->preference('item-level_itypes') ? "items.itype": "biblioitems.itemtype";
         }
         $column = "borrowers.".$column if $column=~/categorycode/;
         my @colfilter ;
-        $colfilter[0] = @$filters[0] if ($column =~ /timestamp/ )  ;
-        $colfilter[1] = @$filters[1] if ($column =~ /timestamp/ )  ;
+        $colfilter[0] = @$filters[0] if ($column =~ /issuedate/ )  ;
+        $colfilter[1] = @$filters[1] if ($column =~ /issuedate/ )  ;
         $colfilter[0] = @$filters[2] if ($column =~ /returndate/ )  ;
         $colfilter[1] = @$filters[3] if ($column =~ /returndate/ )  ;
         $colfilter[0] = @$filters[4] if ($column =~ /branch/ )  ;
@@ -226,25 +198,25 @@ sub calculate {
         $colfilter[0] = @$filters[8] if ($column =~ /category/ )  ;
       # This commented out row (sort2) was not removed when adding new filters for ccode, shelving location and call number
       # $colfilter[0] = @$filters[11] if ($column =~ /sort2/ ) ;
-        $colfilter[0] = @$filters[9] if ($column =~ /timestamp/ ) ;
-        $colfilter[0] = @$filters[10] if ($column =~ /timestamp/ ) ;
-        $colfilter[0] = @$filters[11] if ($column =~ /timestamp/ ) ;
+        $colfilter[0] = @$filters[9] if ($column =~ /issuedate/ ) ;
+        $colfilter[0] = @$filters[10] if ($column =~ /issuedate/ ) ;
+        $colfilter[0] = @$filters[11] if ($column =~ /issuedate/ ) ;
     #warn "filtre col ".$colfilter[0]." ".$colfilter[1];
                                                 
     # loop cols.
         if ($column eq "Day") {
             #Display by day
-            $column = "old_issues.timestamp";
+            $column = "old_issues.issuedate";
             $colfield .="dayname($column)";  
             $colorder .="weekday($column)";
         } elsif ($column eq "Month") {
             #Display by Month
-            $column = "old_issues.timestamp";
+            $column = "old_issues.issuedate";
             $colfield .="monthname($column)";  
             $colorder .="month($column)";  
         } elsif ($column eq "Year") {
             #Display by Year
-            $column = "old_issues.timestamp";
+            $column = "old_issues.issuedate";
             $colfield .="Year($column)";
             $colorder .= $column;
         } else {
@@ -259,7 +231,7 @@ sub calculate {
                      LEFT JOIN items ON old_issues.itemnumber=items.itemnumber 
                      LEFT JOIN biblioitems  ON biblioitems.biblioitemnumber=items.biblioitemnumber 
                      WHERE 1";
-        if (($column=~/timestamp/) or ($column=~/returndate/)){
+        if (($column=~/issuedate/) or ($column=~/returndate/)){
             if ($colfilter[1] and ($colfilter[0])){
                 $strsth2 .= " and $column between '$colfilter[0]' and '$colfilter[1]' " ;
             } elsif ($colfilter[1]) {
@@ -312,10 +284,7 @@ sub calculate {
     my $strcalc ;
     
 # Processing average loanperiods
-    $strcalc .= "SELECT DISTINCT biblio.title, COUNT(biblio.biblionumber) AS RANK, biblio.biblionumber AS ID";
-    $strcalc .= ", itemcallnumber as CALLNUM";
-    $strcalc .= ", ccode as CCODE";
-    $strcalc .= ", location as LOC";
+    $strcalc .= "SELECT biblio.title, COUNT(biblio.biblionumber) AS `RANK`, biblio.biblionumber AS ID";
     $strcalc .= " , $colfield " if ($colfield);
     $strcalc .= " FROM `old_issues` 
                   LEFT JOIN items USING(itemnumber) 
@@ -325,9 +294,9 @@ sub calculate {
                   WHERE 1";
 
     @$filters[0]=~ s/\*/%/g if (@$filters[0]);
-    $strcalc .= " AND old_issues.timestamp > '" . @$filters[0] ."'" if ( @$filters[0] );
+    $strcalc .= " AND old_issues.issuedate > '" . @$filters[0] ."'" if ( @$filters[0] );
     @$filters[1]=~ s/\*/%/g if (@$filters[1]);
-    $strcalc .= " AND old_issues.timestamp < '" . @$filters[1] ."'" if ( @$filters[1] );
+    $strcalc .= " AND old_issues.issuedate < '" . @$filters[1] ."'" if ( @$filters[1] );
     @$filters[2]=~ s/\*/%/g if (@$filters[2]);
     $strcalc .= " AND old_issues.returndate > '" . @$filters[2] ."'" if ( @$filters[2] );
     @$filters[3]=~ s/\*/%/g if (@$filters[3]);
@@ -352,20 +321,19 @@ sub calculate {
     @$filters[9]=~ s/\*/%/g if (@$filters[9]);
     $strcalc .= " AND borrowers.categorycode like '" . @$filters[9] ."'" if ( @$filters[9] );
     @$filters[10]=~ s/\*/%/g if (@$filters[10]);
-    $strcalc .= " AND dayname(old_issues.timestamp) like '" . @$filters[10]."'" if (@$filters[10]);
+    $strcalc .= " AND dayname(old_issues.issuedate) like '" . @$filters[10]."'" if (@$filters[10]);
     @$filters[11]=~ s/\*/%/g if (@$filters[11]);
-    $strcalc .= " AND monthname(old_issues.timestamp) like '" . @$filters[11]."'" if (@$filters[11]);
+    $strcalc .= " AND monthname(old_issues.issuedate) like '" . @$filters[11]."'" if (@$filters[11]);
     @$filters[12]=~ s/\*/%/g if (@$filters[12]);
-    $strcalc .= " AND year(old_issues.timestamp) like '" . @$filters[12] ."'" if ( @$filters[12] );
+    $strcalc .= " AND year(old_issues.issuedate) like '" . @$filters[12] ."'" if ( @$filters[12] );
     
-    $strcalc .= " group by biblio.biblionumber";
+    $strcalc .= " group by biblio.biblionumber, biblio.title";
     $strcalc .= ", $colfield" if ($column);
-    $strcalc .= " order by RANK DESC";
+    $strcalc .= " order by `RANK` DESC";
     $strcalc .= ", $colfield " if ($colfield);
     
     my $dbcalc = $dbh->prepare($strcalc);
     $dbcalc->execute;
-    my $previous_col;
     my %indice;
     while (my  @data = $dbcalc->fetchrow) {
         my ($row, $rank, $id, $callnum, $ccode, $loc, $col )=@data;
@@ -415,7 +383,6 @@ sub calculate {
     $globalline{looprow} = \@looprow;
     $globalline{loopcol} = \@loopcol;
 #      # the foot (totals by borrower type)
-    $globalline{loopfooter} = \@loopfooter;
     $globalline{total}= $grantotal;
     $globalline{line} = $line;
     $globalline{column} = $column;