fix for #2884: Add error management to branches
[koha.git] / reports / borrowers_stats.pl
index b379067..b225fdb 100755 (executable)
@@ -26,6 +26,7 @@ use C4::Koha;
 use C4::Dates;
 use C4::Acquisition;
 use C4::Output;
+use C4::Reports;
 use C4::Circulation;
 use Date::Calc qw(
   Today
@@ -55,7 +56,8 @@ my $borstat1 = $input->param("activity");
 my $output = $input->param("output");
 my $basename = $input->param("basename");
 my $mime = $input->param("MIME");
-my $del = $input->param("sep");
+our $sep     = $input->param("sep");
+$sep = "\t" if ($sep eq 'tabulation');
 my $selected_branch; # = $input->param("?");
 
 our $branches = GetBranches;
@@ -81,8 +83,6 @@ if ($do_it) {
                        -attachment => "$basename.csv");
                my $cols = @$results[0]->{loopcol};
                my $lines = @$results[0]->{looprow};
-               my $sep;
-               $sep =C4::Context->preference("delimiter");
                print @$results[0]->{line} ."/". @$results[0]->{column} .$sep;
                foreach my $col ( @$cols ) {
                        print $col->{coltitle}.$sep;
@@ -122,7 +122,7 @@ if ($do_it) {
        $req = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category='Bsort1' ORDER BY lib");
        $req->execute;
        $template->param( SORT1_LOOP => $req->fetchall_arrayref({}));
-       $req = $dbh->prepare("SELECT DISTINCTROW sort2 AS value FROM borrowers WHERE sort2 IS NOT NULL AND sort <> '' ORDER BY sort2 LIMIT 200");
+       $req = $dbh->prepare("SELECT DISTINCTROW sort2 AS value FROM borrowers WHERE sort2 IS NOT NULL AND sort2 <> '' ORDER BY sort2 LIMIT 200");
                # More than 200 items in a dropdown is not going to be useful anyway, and w/ 50,000 patrons we can destory DB performance.
        $req->execute;
        $template->param( SORT2_LOOP => $req->fetchall_arrayref({}));
@@ -135,13 +135,7 @@ if ($do_it) {
                                -values   => \@mime,
                                -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(
                CGIextChoice => $CGIextChoice,
                CGIsepChoice => $CGIsepChoice,
@@ -187,18 +181,20 @@ sub calculate {
        $linefilter = @$filters[0] if ($line =~ /categorycode/ )  ;
        $linefilter = @$filters[1] if ($line =~ /zipcode/ )  ;
        $linefilter = @$filters[2] if ($line =~ /branchcode/ ) ;
-       $linefilter = @$filters[5] if ($line =~ /sort1/ ) ;
-       $linefilter = @$filters[6] if ($line =~ /sort2/ ) ;
+       $linefilter = @$filters[5] if ($line =~ /sex/);
+       $linefilter = @$filters[6] if ($line =~ /sort1/ ) ;
+    $linefilter = @$filters[7] if ($line =~ /sort2/ ) ;
 # 
        my $colfilter = "";
        $colfilter = @$filters[0] if ($column =~ /categorycode/);
        $colfilter = @$filters[1] if ($column =~ /zipcode/);
        $colfilter = @$filters[2] if ($column =~ /branchcode/);
-       $colfilter = @$filters[5] if ($column =~ /sort1/);
-       $colfilter = @$filters[6] if ($column =~ /sort2/);
+    $colfilter = @$filters[5] if ($column =~ /sex/);
+    $colfilter = @$filters[6] if ($column =~ /sort1/);
+       $colfilter = @$filters[7] if ($column =~ /sort2/);
 
        my @loopfilter;
-       for (my $i=0;$i<=6;$i++) {
+       for (my $i=0;$i<=7;$i++) {
                my %cell;
                if ( @$filters[$i] ) {
                        $cell{filter} .= @$filters[$i];
@@ -207,8 +203,9 @@ sub calculate {
                        $cell{crit} .="Branchcode" if ($i==2);
                        $cell{crit} .="Date of Birth" if ($i==3);
                        $cell{crit} .="Date of Birth" if ($i==4);
-                       $cell{crit} .="Sort1" if ($i==5);
-                       $cell{crit} .="Sort2" if ($i==6);
+            $cell{crit} .="Sex" if ($i==5);
+                       $cell{crit} .="Sort1" if ($i==6);
+                       $cell{crit} .="Sort2" if ($i==7);
                        push @loopfilter, \%cell;
                }
        }
@@ -312,10 +309,12 @@ sub calculate {
        $strcalc .= " AND dateofbirth > '" . @$filters[3] ."'" if ( @$filters[3] );
        @$filters[4]=~ s/\*/%/g if (@$filters[4]);
        $strcalc .= " AND dateofbirth < '" . @$filters[4] ."'" if ( @$filters[4] );
-       @$filters[5]=~ s/\*/%/g if (@$filters[5]);
-       $strcalc .= " AND sort1 like '" . @$filters[5] ."'" if ( @$filters[5] );
-       @$filters[6]=~ s/\*/%/g if (@$filters[6]);
-       $strcalc .= " AND sort2 like '" . @$filters[6] ."'" if ( @$filters[6] );
+    @$filters[5]=~ s/\*/%/g if (@$filters[5]);
+    $strcalc .= " AND sex like '" . @$filters[5] ."'" if ( @$filters[5] );
+    @$filters[6]=~ s/\*/%/g if (@$filters[6]);
+       $strcalc .= " AND sort1 like '" . @$filters[6] ."'" if ( @$filters[6] );
+       @$filters[7]=~ s/\*/%/g if (@$filters[7]);
+       $strcalc .= " AND sort2 like '" . @$filters[7] ."'" if ( @$filters[7] );
        $strcalc .= " AND borrowernumber in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "')" if ($activity eq 'active');
        $strcalc .= " AND borrowernumber not in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "')" if ($activity eq 'nonactive');
        $strcalc .= " AND $status='1' " if ($status);