little fixes for update_child feature.
[koha_fer] / reports / borrowers_stats.pl
index a759805..2f2cff1 100755 (executable)
@@ -1,7 +1,5 @@
 #!/usr/bin/perl
 
-# $Id$
-
 # Copyright 2000-2002 Katipo Communications
 #
 # This file is part of Koha.
@@ -25,10 +23,14 @@ use C4::Auth;
 use C4::Context;
 use C4::Branch; # GetBranches
 use C4::Koha;
+use C4::Dates;
 use C4::Acquisition;
 use C4::Output;
 use C4::Circulation;
-use C4::Input;
+use Date::Calc qw(
+  Today
+  Add_Delta_YM
+  );
 
 =head1 NAME
 
@@ -36,8 +38,7 @@ plugin that shows a stats on borrowers
 
 =head1 DESCRIPTION
 
-
-=over2
+=over 2
 
 =cut
 
@@ -48,7 +49,9 @@ my $line = $input->param("Line");
 my $column = $input->param("Column");
 my @filters = $input->param("Filter");
 my $digits = $input->param("digits");
+my $period = $input->param("period");
 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");
@@ -64,7 +67,7 @@ my ($template, $borrowernumber, $cookie)
                                });
 $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;
@@ -116,7 +119,7 @@ if ($do_it) {
                $select_catcode{$catcode} = $description;
        }
        my $CGICatCode=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
+                               -id => 'catcode',
                                -values   => \@select_catcode,
                                -labels   => \%select_catcode,
                                -size     => 1,
@@ -125,7 +128,12 @@ if ($do_it) {
        
 my $branches = GetBranches;
 my @branchloop;
-foreach my $thisbranch (keys %$branches) {
+my @select_branch;
+#my %select_branches;
+push @select_branch,"";
+#$select_branches{""}="";
+foreach my $thisbranch (sort keys %$branches) {
+       push @select_branch,$thisbranch;
    # my $selected = 1 if $thisbranch eq $branch;
     my %row =(value => $thisbranch,
 #                selected => $selected,
@@ -133,6 +141,14 @@ foreach my $thisbranch (keys %$branches) {
             );
     push @branchloop, \%row;
 }
+    my $CGIBranch=CGI::scrolling_list( -name     => 'Filter',
+                             -id => 'branch',
+                             -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;
@@ -144,11 +160,12 @@ foreach my $thisbranch (keys %$branches) {
        }
 # 
        my $CGIZipCode=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
+                               -id => 'zipcode',
                                -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;
@@ -165,7 +182,7 @@ foreach my $thisbranch (keys %$branches) {
        }
 # 
        my $CGIsort1=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
+                               -id => 'sort1',
                                -values   => \@select_sort1,
                                -labels =>\%select_sort1,
                                -size     => 1,
@@ -183,7 +200,7 @@ foreach my $thisbranch (keys %$branches) {
                }
        }
        my $CGIsort2=CGI::scrolling_list( -name     => 'Filter',
-                               -id => 'Filter',
+                               -id => 'sort2',
                                -values   => \@select_sort2,
                                -size     => 1,
                                -multiple => 0 );
@@ -216,8 +233,9 @@ foreach my $thisbranch (keys %$branches) {
                                        hassort2 => $hassort2,
                                        CGIextChoice => $CGIextChoice,
                                        CGIsepChoice => $CGIsepChoice,
-                                       CGIBranch => @branchloop
-                                       );
+                                       CGIBranch => $CGIBranch,
+                                       DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+                    );
 
 }
 output_html_with_http_headers $input, $cookie, $template->output;
@@ -225,7 +243,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;
@@ -239,39 +257,50 @@ 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};
+       }
+# year of activity
+       my ( $period_year, $period_month, $period_day )=Add_Delta_YM( Today(),-$period, 0);
+       my $newperioddate=$period_year."-".$period_month."-".$period_day;
+#      warn "PERIOD".$period;
 # 1st, loop rows.
        my $linefield;
        if (($line =~/zipcode/) and ($digits)) {
@@ -361,9 +390,17 @@ 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 issuedate > '" . $newperioddate . "')" if ($activity eq 'active');
+       $strcalc .= " AND borrowernumber not in (select distinct(borrowernumber) from issues where issuedate > '" . $newperioddate . "')" if ($activity eq 'nonactive');
        $strcalc .= " AND $status='1' " if ($status);
        $strcalc .= " group by $linefield, $colfield";
 #      warn "". $strcalc;