- my ($line, $column, $dsp, $type,$daysel,$monthsel ,$process, $filters) = @_;
- my @mainloop;
- my @loopfooter;
- my @loopcol;
- my @loopline;
- my @looprow;
- my %globalline;
- my $grantotal =0;
-# extract parameters
- my $dbh = C4::Context->dbh;
-
-# Filters
-# Checking filters
-#
- my @loopfilter;
- for (my $i=0;$i<=9;$i++) {
- my %cell;
- if ( @$filters[$i] ) {
- if (($i==1) and (@$filters[$i-1])) {
- $cell{err} = 1 if (@$filters[$i]<@$filters[$i-1]) ;
- }
- $cell{filter} .= @$filters[$i];
- $cell{crit} .="Period From" if ($i==0);
- $cell{crit} .="Period To" if ($i==1);
- $cell{crit} .="Borrower Cat=" if ($i==2);
- $cell{crit} .="Doc Type=" if ($i==3);
- $cell{crit} .="Branch=" if ($i==4);
- $cell{crit} .="Location=" if ($i==5);
- $cell{crit} .="Item callnumber>=" if ($i==6);
- $cell{crit} .="Item callnumber<" if ($i==7);
- $cell{crit} .="sort1=" if ($i==8);
- $cell{crit} .="sort2=" if ($i==9);
-
- push @loopfilter, \%cell;
- }
- }
- push @loopfilter,{crit=>"Issue|Return ",filter=>$type};
- push @loopfilter,{crit=>"Display by ",filter=>$dsp} if ($dsp);
- push @loopfilter,{crit=>"Select Day ",filter=>$daysel} if ($daysel);
- push @loopfilter,{crit=>"Select Month ",filter=>$monthsel} if ($monthsel);
-
-
- my @linefilter;
-# warn "filtres ".@filters[0];
-# warn "filtres ".@filters[1];
-# warn "filtres ".@filters[2];
-# warn "filtres ".@filters[3];
-
- $linefilter[0] = @$filters[0] if ($line =~ /datetime/ ) ;
- $linefilter[1] = @$filters[1] if ($line =~ /datetime/ ) ;
- $linefilter[0] = @$filters[2] if ($line =~ /category/ ) ;
- $linefilter[0] = @$filters[3] if ($line =~ /itemtype/ ) ;
- $linefilter[0] = @$filters[4] if ($line =~ /branch/ ) ;
- $linefilter[0] = @$filters[5] if ($line =~ /location/ ) ;
- $linefilter[0] = @$filters[6] if ($line =~ /sort1/ ) ;
- $linefilter[0] = @$filters[7] if ($line =~ /sort2/ ) ;
-
- my @colfilter ;
- $colfilter[0] = @$filters[0] if ($column =~ /datetime/) ;
- $colfilter[1] = @$filters[1] if ($column =~ /datetime/) ;
- $colfilter[0] = @$filters[2] if ($column =~ /category/) ;
- $colfilter[0] = @$filters[3] if ($column =~ /itemtype/) ;
- $colfilter[0] = @$filters[4] if ($column =~ /branch/ ) ;
- $colfilter[0] = @$filters[5] if ($column =~ /location/ ) ;
- $colfilter[0] = @$filters[6] if ($column =~ /sort1/ ) ;
- $colfilter[0] = @$filters[7] if ($column =~ /sort2/ ) ;
-# 1st, loop rows.
- my $linefield;
- if (($line =~/datetime/) and ($dsp == 1)) {
- #Display by day
- $linefield .="dayname($line)";
- } elsif (($line=~/datetime/) and ($dsp == 2)) {
- #Display by Month
- $linefield .="monthname($line)";
- } elsif (($line=~/datetime/) and ($dsp == 3)) {
- #Display by Year
- $linefield .="Year($line)";
- } elsif ($line=~/datetime/) {
- $linefield .= 'date_format(`datetime`,"%Y-%m-%d")';
- } else {
- $linefield .= $line;
- }
- my $lineorder = $linefield;
- $lineorder = "weekday($line)" if $linefield =~ /dayname/;
- $lineorder = "month($line)" if $linefield =~ "^month";
- $lineorder = $linefield if (not ($linefield =~ "^month") and not($linefield =~ /dayname/));
-
- my $strsth;
- $strsth .= "select distinctrow $linefield from statistics, borrowers where (statistics.borrowernumber=borrowers.borrowernumber) and $line is not null ";
-
- if ($line=~/datetime/) {
- if ($linefilter[1] and ($linefilter[0])){
- $strsth .= " and $line between ? and ? " ;
- } elsif ($linefilter[1]) {
- $strsth .= " and $line < ? " ;
- } elsif ($linefilter[0]) {
- $strsth .= " and $line > ? " ;
- }
- $strsth .= " and type ='".$type."' " if $type;
- $strsth .= " and dayname(datetime) ='". $daysel ."' " if $daysel;
- $strsth .= " and monthname(datetime) ='". $monthsel ."' " if $monthsel;
- } elsif ($linefilter[0]) {
- $linefilter[0] =~ s/\*/%/g;
- $strsth .= " and $line LIKE ? " ;
+ my ( $line, $column, $dsp, $type, $daysel, $monthsel, $process, $filters, $attribute_filters ) = @_;
+ my @loopfooter;
+ my @loopcol;
+ my @loopline;
+ my @looprow;
+ my %globalline;
+ my $grantotal = 0;
+
+ # extract parameters
+ my $dbh = C4::Context->dbh;
+
+ my ($line_attribute_type, $column_attribute_type);
+ if($line =~ /^borrower_attributes\.(.*)/) {
+ $line_attribute_type = $1;
+ $line = "borrower_attributes.attribute";
+ }
+ if($column =~ /^borrower_attributes\.(.*)/) {
+ $column_attribute_type = $1;
+ $column = "borrower_attributes.attribute";
+ }
+
+ # Filters
+ # Checking filters
+ #
+ my @loopfilter;
+ for ( my $i = 0 ; $i <= @$filters ; $i++ ) {
+ my %cell;
+ ( @$filters[$i] ) or next;
+ if ( ( $i == 1 ) and ( @$filters[ $i - 1 ] ) ) {
+ $cell{err} = 1 if ( @$filters[$i] < @$filters[ $i - 1 ] );