*** empty log message ***
[koha.git] / reports / borrowers_stats.pl
index 5d37d55..9b2d878 100755 (executable)
 # Suite 330, Boston, MA  02111-1307 USA
 
 use strict;
-use C4::Auth;
 use CGI;
+use C4::Auth;
 use C4::Context;
-use HTML::Template;
-use C4::Search;
-use C4::Output;
+use C4::Branch; # GetBranches
 use C4::Koha;
 use C4::Acquisition;
-use C4::Interface::CGI::Output;
-use C4::Circulation::Circ2;
+use C4::Output;
+use C4::Circulation;
 
 =head1 NAME
 
@@ -37,8 +35,7 @@ plugin that shows a stats on borrowers
 
 =head1 DESCRIPTION
 
-
-=over2
+=over 2
 
 =cut
 
@@ -50,6 +47,7 @@ my $column = $input->param("Column");
 my @filters = $input->param("Filter");
 my $digits = $input->param("digits");
 my $borstat = $input->param("status");
+my $borstat1 = $input->param("activity");
 my $output = $input->param("output");
 my $basename = $input->param("basename");
 my $mime = $input->param("MIME");
@@ -60,20 +58,21 @@ my ($template, $borrowernumber, $cookie)
                                query => $input,
                                type => "intranet",
                                authnotrequired => 0,
-                               flagsrequired => {editcatalogue => 1},
+                               flagsrequired => {reports=> 1},
                                debug => 1,
                                });
 $template->param(do_it => $do_it);
 if ($do_it) {
-       my $results = calculate($line, $column, $digits, $borstat, \@filters);
+       my $results = calculate($line, $column, $digits, $borstat,$borstat1 ,\@filters);
        if ($output eq "screen"){
                $template->param(mainloop => $results);
                output_html_with_http_headers $input, $cookie, $template->output;
                exit(1);
        } else {
                print $input->header(-type => 'application/vnd.sun.xml.calc',
-                                                        -name=>"$basename.csv",
-                                                        -attachment=>"$basename.csv");
+                                     -encoding    => 'utf-8',
+                                     -name=>"$basename.csv",
+                                     -attachment=>"$basename.csv");
                my $cols = @$results[0]->{loopcol};
                my $lines = @$results[0]->{looprow};
                my $sep;
@@ -110,50 +109,80 @@ if ($do_it) {
        my %select_catcode;
        my @select_catcode;
        push @select_catcode,"";
-       $select_catcode{""} = "";
-       while (my ($catcode, $description) =$req->fetchrow) {
-               push @select_catcode, $catcode;
-               $select_catcode{$catcode} = $description
-       }
-       my $CGICatCode=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
-                               -values   => \@select_catcode,
-                               -labels   => \%select_catcode,
-                               -size     => 1,
-                               -multiple => 0 );
-       
-       my @branches;
-       my @select_branch;
-       my %select_branches;
-       my ($count2,@branches)=branches();
-       push @select_branch,"";
-       $select_branches{''}='';
-       for (my $i=0;$i<$count2;$i++){
-                       push @select_branch, $branches[$i]->{'branchcode'};#
-                       $select_branches{$branches[$i]->{'branchcode'}} = $branches[$i]->{'branchname'};
-       }
-       my $CGIbranch=CGI::scrolling_list( -name     => 'pickup',
-                                                       -values   => \@select_branch,
-                                                       -labels   => \%select_branches,
-                                                       -size     => 1,
-                                                       -multiple => 0 );
+       $select_catcode{""} ="";
+       while (my ($catcode, $description) =$req->fetchrow) {
+               push @select_catcode, $catcode;
+               $select_catcode{$catcode} = $description;
+       }
+       my $CGICatCode=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_catcode,
+                               -labels   => \%select_catcode,
+                               -size     => 1,
+                               -multiple => 0 );
+
        
-       $req = $dbh->prepare( "select distinctrow sort1 from borrowers order by sort1");
-       $req->execute;
-       my @select_sort1;
-       push @select_sort1,"";
-       my $hassort1;
-       while (my ($value) =$req->fetchrow) {
-               if ($value) {
-                       $hassort1=1;
-                       push @select_sort1, $value;
-               }
-       }
-       my $CGIsort1=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
-                               -values   => \@select_sort1,
-                               -size     => 1,
-                               -multiple => 0 );
+my $branches = GetBranches;
+my @branchloop;
+my @select_branch;
+#my %select_branches;
+push @select_branch,"";
+#$select_branches{""}="";
+foreach my $thisbranch (keys %$branches) {
+       push @select_branch,$thisbranch;
+   # my $selected = 1 if $thisbranch eq $branch;
+    my %row =(value => $thisbranch,
+#                selected => $selected,
+                branchname => $branches->{$thisbranch}->{'branchname'},
+            );
+    push @branchloop, \%row;
+}
+    my $CGIBranch=CGI::scrolling_list( -name     => 'Filter',
+                             -id => 'Filter',
+                             -values   => \@select_branch,
+#                             -labels   => \%select_branches,
+                             -size     => 1,
+                             -multiple => 0 );
+
+
+       $req = $dbh->prepare( "select distinctrow zipcode from borrowers order by zipcode");
+       $req->execute;
+       my @select_zipcode;
+       push @select_zipcode,"";
+       while (my ($value) =$req->fetchrow) {
+               if ($value) {
+                       push @select_zipcode, $value;
+               }
+       }
+# 
+       my $CGIZipCode=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_zipcode,
+                               -size     => 1,
+                               -multiple => 0 );
+
+
+       $req = $dbh->prepare( "SELECT authorised_value,lib FROM authorised_values WHERE category='Bsort1' order by lib");
+       $req->execute;
+       my @select_sort1;
+       my %select_sort1;
+       push @select_sort1,"";
+       $select_sort1{""}="";
+       my $hassort1;
+       while (my ($auth_value,$lib) =$req->fetchrow) {
+               if ($auth_value) {
+                       $hassort1=1;
+                       push @select_sort1, $auth_value;
+                       $select_sort1{$auth_value}=$lib
+               }
+       }
+# 
+       my $CGIsort1=CGI::scrolling_list( -name     => 'Filter',
+                               -id => 'Filter',
+                               -values   => \@select_sort1,
+                               -labels =>\%select_sort1,
+                               -size     => 1,
+                               -multiple => 0 );
        
        $req = $dbh->prepare( "select distinctrow sort2 from borrowers order by sort2");
        $req->execute;
@@ -191,14 +220,18 @@ if ($do_it) {
                                -values   => \@dels,
                                -size     => 1,
                                -multiple => 0 );
-       $template->param(CGICatcode => $CGICatCode,
+
+       $template->param(               CGICatCode => $CGICatCode,
+                                       CGIZipCode => $CGIZipCode,
+#                                      CGIBranch => $CGIBranch,
                                        CGISort1 => $CGIsort1,
                                        hassort1 => $hassort1,
                                        CGISort2 => $CGIsort2,
                                        hassort2 => $hassort2,
                                        CGIextChoice => $CGIextChoice,
                                        CGIsepChoice => $CGIsepChoice,
-                                       CGIBranch => $CGIbranch
+                                       CGIBranch => $CGIBranch
+#                                      CGIBranch => \@branchloop
                                        );
 
 }
@@ -207,7 +240,7 @@ output_html_with_http_headers $input, $cookie, $template->output;
 
 
 sub calculate {
-       my ($line, $column, $digits, $status, $filters) = @_;
+       my ($line, $column, $digits, $status, $activity, $filters) = @_;
        my @mainloop;
        my @loopfooter;
        my @loopcol;
@@ -221,39 +254,46 @@ sub calculate {
 # Filters
        my $linefilter = "";
 #      warn "filtres ".@filters[0];
-#      warn "filtres ".@filters[1];
-#      warn "filtres ".@filters[2];
-#      warn "filtres ".@filters[3];
+#      warn "filtres ".@filters[4];
+#      warn "filtres ".@filters[5];
+#      warn "filtres ".@filters[6];
+
        
        $linefilter = @$filters[0] if ($line =~ /categorycode/ )  ;
        $linefilter = @$filters[1] if ($line =~ /zipcode/ )  ;
-       $linefilter = @$filters[2] if ($line =~ /branccode/ ) ;
-       $linefilter = @$filters[3] if ($line =~ /sort1/ ) ;
-       $linefilter = @$filters[4] if ($line =~ /sort2/ ) ;
+       $linefilter = @$filters[2] if ($line =~ /branchcode/ ) ;
+       $linefilter = @$filters[5] if ($line =~ /sort1/ ) ;
+       $linefilter = @$filters[6] 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[3] if ($column =~ /sort1/);
-       $colfilter = @$filters[4] if ($column =~ /sort2/);
+       $colfilter = @$filters[5] if ($column =~ /sort1/);
+       $colfilter = @$filters[6] if ($column =~ /sort2/);
 
        my @loopfilter;
-       for (my $i=0;$i<=3;$i++) {
+       for (my $i=0;$i<=6;$i++) {
                my %cell;
                if ( @$filters[$i] ) {
                        $cell{filter} .= @$filters[$i];
                        $cell{crit} .="Cat Code " if ($i==0);
                        $cell{crit} .="Zip Code" if ($i==1);
                        $cell{crit} .="Branchcode" if ($i==2);
-                       $cell{crit} .="Sort1" if ($i==3);
-                       $cell{crit} .="Sort2" if ($i==4);
+                       $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);
                        push @loopfilter, \%cell;
                }
        }
        if ($status) {
                push @loopfilter,{crit=>"Status",filter=>$status}
        }
+               
+       if ($activity) {
+               push @loopfilter,{crit=>"Activity",filter=>$activity};
+       }
 # 1st, loop rows.
        my $linefield;
        if (($line =~/zipcode/) and ($digits)) {
@@ -343,12 +383,20 @@ sub calculate {
        @$filters[1]=~ s/\*/%/g if (@$filters[1]);
        $strcalc .= " AND zipcode like '" . @$filters[1] ."'" if ( @$filters[1] );
        @$filters[2]=~ s/\*/%/g if (@$filters[2]);
-       $strcalc .= " AND sort1 like '" . @$filters[2] ."'" if ( @$filters[2] );
+       $strcalc .= " AND branchcode like '" . @$filters[2] ."'" if ( @$filters[2] );
        @$filters[3]=~ s/\*/%/g if (@$filters[3]);
-       $strcalc .= " AND sort2 like '" . @$filters[3] ."'" if ( @$filters[3] );
+       $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] );
+       $strcalc .= " AND borrowernumber in (select distinct(borrowernumber) from issues where timestamp > ' 2007-01-01')" if ($activity eq 'active');
+       $strcalc .= " AND borrowernumber not in (select distinct(borrowernumber) from issues where timestamp > ' 2007-01-01')" if ($activity eq 'nonactive');
        $strcalc .= " AND $status='1' " if ($status);
        $strcalc .= " group by $linefield, $colfield";
-#      warn "". $strcalc;
+       warn "". $strcalc;
        my $dbcalc = $dbh->prepare($strcalc);
        $dbcalc->execute;
 #      warn "filling table";