bug 4036: do not count item overdue if it is due today
[koha_fer] / reports / issues_stats.pl
index 949e0b9..d1c0a04 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 Date::Manip;
@@ -30,6 +31,7 @@ use C4::Branch; # GetBranches
 use C4::Koha;
 use C4::Output;
 use C4::Circulation;
+use C4::Reports;
 use C4::Dates qw/format_date format_date_in_iso/;
 use C4::Members;
 
@@ -60,15 +62,16 @@ my $calc     = $input->param("Cellvalue");
 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 => 0,
 });
+our $sep     = $input->param("sep");
+$sep = "\t" if ($sep eq 'tabulation');
 $template->param(do_it => $do_it,
        DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
 );
@@ -101,7 +104,6 @@ if ($do_it) {
                             -filename=>"$basename.csv" );
                my $cols  = @$results[0]->{loopcol};
                my $lines = @$results[0]->{looprow};
-               my $sep = C4::Context->preference("delimiter");
 # header top-right
                print @$results[0]->{line} ."/". @$results[0]->{column} .$sep;
 # Other header
@@ -132,23 +134,10 @@ my %select;
 
 # create itemtype arrayref for <select>.
 my @itemtypeloop;
-for my $itype ( keys(%$itemtypes)) {
+for my $itype ( sort {$itemtypes->{$a}->{description} cmp $itemtypes->{$b}->{description}} keys(%$itemtypes)) {
        push @itemtypeloop, { code => $itype , description => $itemtypes->{$itype}->{description} } ;
 }
 
-my $branches=GetBranches();
-my @branchloop;
-foreach (keys %$branches) {
-       my $thisbranch = ''; # FIXME 
-       my %row = (
-               branchcode => $_,
-               selected => ($thisbranch eq $_ ? 1 : 0),
-               code => $branches->{$_}->{'branchcode'},
-               description => $branches->{$_}->{'branchname'},
-       );
-       push @branchloop, \%row;
-}
-
     # location list
 my @locations;
 foreach (sort keys %$locations) {
@@ -156,7 +145,7 @@ foreach (sort keys %$locations) {
 }
     
 my @ccodes;
-foreach (keys %$ccodes) {
+foreach (sort {$ccodes->{$a} cmp $ccodes->{$b}} keys %$ccodes) {
        push @ccodes, { code => $_, description => $ccodes->{$_} };
 }
 
@@ -170,20 +159,14 @@ my $CGIextChoice=CGI::scrolling_list(
        -size     => 1,
        -multiple => 0 );
     
-my @dels = ( C4::Context->preference("delimiter") );
-my $CGIsepChoice=CGI::scrolling_list(
-       -name     => 'sep',
-       -id       => 'sep',
-       -values   => \@dels,
-       -size     => 1,
-       -multiple => 0 );
+my $CGIsepChoice=GetDelimiterChoices;
  
 $template->param(
        categoryloop => $categoryloop,
        itemtypeloop => \@itemtypeloop,
        locationloop => \@locations,
           ccodeloop => \@ccodes,
-         branchloop => \@branchloop,
+         branchloop => GetBranchesLoop(C4::Context->userenv->{'branch'}),
        hassort1=> $hassort1,
        hassort2=> $hassort2,
        Bsort1 => $Bsort1,
@@ -355,8 +338,8 @@ sub calculate {
        } else {
                $colfield = $column;
        }
-       $colorder = ($colfield =~ /dayname/) ? "weekday($line)" :
-                               ($colfield =~ /^month/ ) ? "  month($line)" : $colfield;
+       $colorder = ($colfield =~ /dayname/) ? "weekday($column)" :
+                               ($colfield =~ /^month/ ) ? "  month($column)" : $colfield;
        my $strsth2 = "SELECT distinctrow $colfield FROM statistics, ";
        # get stats on items if ccode or location, otherwise borrowers.
        $strsth2 .= ($colsource eq 'items' ) ?
@@ -431,18 +414,20 @@ sub calculate {
     my $strcalc = "SELECT $linefield, $colfield, ";
         $strcalc .= ($process == 1) ? " COUNT(*) "                                 :
                                        ($process == 2) ? "(COUNT(DISTINCT borrowers.borrowernumber))" :
-                               ($process == 3) ? "(COUNT(DISTINCT issues.itemnumber))"        : '';
+                               ($process == 3) ? "(COUNT(DISTINCT statistics.itemnumber))"        : '';
        if ($process == 4) {
                my $rqbookcount = $dbh->prepare("SELECT count(*) FROM items");
                $rqbookcount->execute;
                my ($bookcount) = $rqbookcount->fetchrow;
-               $strcalc .= "100*(COUNT(DISTINCT issues.itemnumber))/ $bookcount " ;
+               $strcalc .= "100*(COUNT(DISTINCT statistics.itemnumber))/ $bookcount " ;
        }
        $strcalc .= "
         FROM statistics
         LEFT JOIN borrowers ON statistics.borrowernumber=borrowers.borrowernumber
        ";
-       $strcalc .= "LEFT JOIN items ON statistics.itemnumber=items.itemnumber " if (($colsource eq 'items')||@$filters[5]||@$filters[6]||@$filters[7]||@$filters[8]);
+       $strcalc .= "LEFT JOIN items ON statistics.itemnumber=items.itemnumber "
+        if ($linefield =~ /^items\./ or $colfield =~ /^items\./ or ($colsource eq 'items')
+            ||@$filters[5]||@$filters[6]||@$filters[7]||@$filters[8]);
         
        $strcalc .= "WHERE 1=1 ";
        @$filters = map {defined($_) and s/\*/%/g; $_} @$filters;