X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=reports%2Fborrowers_stats.pl;h=795ca8ec3c17a466bda4f2383cd65967c015ce0f;hb=7afddcb157a8d8e27cfdee3cdbeb0eae483aa24c;hp=81812854485b81278c88eb020462adfb157f42d7;hpb=651e8a3fad061808b5c16f0197cb2b1c208f085d;p=koha.git diff --git a/reports/borrowers_stats.pl b/reports/borrowers_stats.pl index 8181285448..795ca8ec3c 100755 --- a/reports/borrowers_stats.pl +++ b/reports/borrowers_stats.pl @@ -4,34 +4,37 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use List::MoreUtils qw/uniq/; use C4::Auth; use C4::Context; -use C4::Branch; # GetBranches use C4::Koha; -use C4::Dates; use C4::Acquisition; use C4::Output; use C4::Reports; use C4::Circulation; use C4::Members::AttributeTypes; -use C4::Dates qw/format_date format_date_in_iso/; + +use Koha::AuthorisedValues; +use Koha::DateUtils; +use Koha::Libraries; +use Koha::Patron::Categories; + use Date::Calc qw( Today Add_Delta_YM @@ -43,18 +46,18 @@ plugin that shows a stats on borrowers =head1 DESCRIPTION -=over 2 - =cut my $input = new CGI; my $do_it=$input->param('do_it'); -my $fullreportname = "reports/borrowers_stats.tmpl"; +my $fullreportname = "reports/borrowers_stats.tt"; my $line = $input->param("Line"); my $column = $input->param("Column"); -my @filters = $input->param("Filter"); -$filters[3]=format_date_in_iso($filters[3]); -$filters[4]=format_date_in_iso($filters[4]); +my @filters = $input->multi_param("Filter"); +$filters[3] = eval { output_pref( { dt => dt_from_string( $filters[3]), dateonly => 1, dateformat => 'iso' } ); } + if ( $filters[3] ); +$filters[4] = eval { output_pref ({ dt => dt_from_string( $filters[4]), dateonly => 1, dateformat => 'iso' } ); } + if ( $filters[4] ); my $digits = $input->param("digits"); our $period = $input->param("period"); my $borstat = $input->param("status"); @@ -63,9 +66,6 @@ my $output = $input->param("output"); my $basename = $input->param("basename"); our $sep = $input->param("sep"); $sep = "\t" if ($sep and $sep eq 'tabulation'); -my $selected_branch; # = $input->param("?"); - -our $branches = GetBranches; my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => $fullreportname, @@ -117,14 +117,8 @@ if ($do_it) { } else { my $dbh = C4::Context->dbh; my $req; - $template->param( CAT_LOOP => &catcode_aref); - my @branchloop; - foreach (sort {$branches->{$a}->{branchname} cmp $branches->{$b}->{branchname}} keys %$branches) { - my $line = {branchcode => $_, branchname => $branches->{$_}->{branchname} || 'UNKNOWN'}; - $line->{selected} = 'selected' if ($selected_branch and $selected_branch eq $_); - push @branchloop, $line; - } - $template->param(BRANCH_LOOP => \@branchloop); + my $patron_categories = Koha::Patron::Categories->search({}, {order_by => ['description']}); + $template->param( patron_categories => $patron_categories ); $req = $dbh->prepare("SELECT DISTINCTROW zipcode FROM borrowers WHERE zipcode IS NOT NULL AND zipcode <> '' ORDER BY zipcode"); $req->execute; $template->param( ZIP_LOOP => $req->fetchall_arrayref({})); @@ -136,12 +130,7 @@ if ($do_it) { $req->execute; $template->param( SORT2_LOOP => $req->fetchall_arrayref({})); - my $CGIextChoice=CGI::scrolling_list( - -name => 'MIME', - -id => 'MIME', - -values => ['CSV'], # FIXME translation - -size => 1, - -multiple => 0 ); + my $CGIextChoice = ( 'CSV' ); # FIXME translation my $CGIsepChoice=GetDelimiterChoices; $template->param( CGIextChoice => $CGIextChoice, @@ -154,20 +143,6 @@ if ($do_it) { } output_html_with_http_headers $input, $cookie, $template->output; -sub catcode_aref() { - my $req = C4::Context->dbh->prepare("SELECT categorycode, description FROM categories ORDER BY description"); - $req->execute; - return $req->fetchall_arrayref({}); -} -sub catcodes_hash() { - my %cathash; - my $catcodes = &catcode_aref; - foreach (@$catcodes) { - $cathash{$_->{categorycode}} = ($_->{description} || 'NO_DESCRIPTION') . " ($_->{categorycode})"; - } - return %cathash; -} - sub calculate { my ($line, $column, $digits, $status, $activity, $filters, $attr_filters) = @_; @@ -202,49 +177,46 @@ sub calculate { # Filters my $linefilter; - given ($line) { - when (/categorycode/) { $linefilter = @$filters[0] } - when (/zipcode/) { $linefilter = @$filters[1] } - when (/branchcode/) { $linefilter = @$filters[2] } - when (/sex/) { $linefilter = @$filters[5] } - when (/sort1/) { $linefilter = @$filters[6] } - when (/sort2/) { $linefilter = @$filters[7] } - when (/^patron_attr\.(.*)$/) { $linefilter = $attr_filters->{$1} } - default { $linefilter = '' } - } + if ( $line =~ /categorycode/ ) { $linefilter = @$filters[0]; } + elsif ( $line =~ /zipcode/ ) { $linefilter = @$filters[1]; } + elsif ( $line =~ /branchcode/ ) { $linefilter = @$filters[2]; } + elsif ( $line =~ /sex/ ) { $linefilter = @$filters[5]; } + elsif ( $line =~ /sort1/ ) { $linefilter = @$filters[6]; } + elsif ( $line =~ /sort2/ ) { $linefilter = @$filters[7]; } + elsif ( $line =~ /^patron_attr\.(.*)$/ ) { $linefilter = $attr_filters->{$1}; } + else { $linefilter = ''; } my $colfilter; - given ($column) { - when (/categorycode/) { $colfilter = @$filters[0] } - when (/zipcode/) { $colfilter = @$filters[1] } - when (/branchcode/) { $colfilter = @$filters[2] } - when (/sex/) { $colfilter = @$filters[5] } - when (/sort1/) { $colfilter = @$filters[6] } - when (/sort2/) { $colfilter = @$filters[7] } - when (/^patron_attr\.(.*)$/) { $colfilter = $attr_filters->{$1} } - default { $colfilter = '' } - } + if ( $column =~ /categorycode/ ) { $colfilter = @$filters[0]; } + elsif ( $column =~ /zipcode/ ) { $colfilter = @$filters[1]; } + elsif ( $column =~ /branchcode/) { $colfilter = @$filters[2]; } + elsif ( $column =~ /sex/) { $colfilter = @$filters[5]; } + elsif ( $column =~ /sort1/) { $colfilter = @$filters[6]; } + elsif ( $column =~ /sort2/) { $colfilter = @$filters[7]; } + elsif ( $column =~ /^patron_attr\.(.*)$/) { $colfilter = $attr_filters->{$1}; } + else { $colfilter = ''; } my @loopfilter; foreach my $i (0 .. scalar @$filters) { my %cell; if ( @$filters[$i] ) { if ($i == 3 or $i == 4) { - $cell{filter} = format_date(@$filters[$i]); + $cell{filter} = eval { output_pref( { dt => dt_from_string( @$filters[$i] ), dateonly => 1 }); } + if ( @$filters[$i] ); } else { $cell{filter} = @$filters[$i]; } - given ($i) { - when (0) { $cell{crit} = "Cat code" } - when (1) { $cell{crit} = "Zip code" } - when (2) { $cell{crit} = "Branch code" } - when ([3,4]) { $cell{crit} = "Date of birth" } - when (5) { $cell{crit} = "Sex" } - when (6) { $cell{crit} = "Sort1" } - when (7) { $cell{crit} = "Sort2" } - default { $cell{crit} = "Unknown" } - } + if ( $i == 0) { $cell{crit} = "Cat code"; } + elsif ( $i == 1 ) { $cell{crit} = "ZIP/Postal code"; } + elsif ( $i == 2 ) { $cell{crit} = "Branch code"; } + elsif ( $i == 3 || + $i == 4 ) { $cell{crit} = "Date of birth"; } + elsif ( $i == 5 ) { $cell{crit} = "Sex"; } + elsif ( $i == 6 ) { $cell{crit} = "Sort1"; } + elsif ( $i == 7 ) { $cell{crit} = "Sort2"; } + else { $cell{crit} = "Unknown"; } + push @loopfilter, \%cell; } } @@ -257,9 +229,10 @@ sub calculate { } } + my @branchcodes = map { $_->branchcode } Koha::Libraries->search; ($status ) and push @loopfilter,{crit=>"Status", filter=>$status }; ($activity) and push @loopfilter,{crit=>"Activity",filter=>$activity}; - push @loopfilter,{debug=>1, crit=>"Branches",filter=>join(" ", sort keys %$branches)}; + push @loopfilter,{debug=>1, crit=>"Branches",filter=>join(" ", sort @branchcodes)}; push @loopfilter,{debug=>1, crit=>"(line, column)", filter=>"($line,$column)"}; # year of activity my ( $period_year, $period_month, $period_day )=Add_Delta_YM( Today(),-$period, 0); @@ -278,9 +251,13 @@ sub calculate { } else { $linefield = $line; } - - my %cathash = ($line eq 'categorycode' or $column eq 'categorycode') ? &catcodes_hash : (); - push @loopfilter, {debug=>1, crit=>"\%cathash", filter=>join(", ", map {$cathash{$_}} sort keys %cathash)}; + my $patron_categories = Koha::Patron::Categories->search({}, {order_by => ['categorycode']}); + push @loopfilter, + { + debug => 1, + crit => "Patron category", + filter => join( ", ", map { $_->categorycode . ' (' . ( $_->description || 'NO_DESCRIPTION' ) . ')' } $patron_categories->as_list ), + }; my $strsth; my @strparams; # bind parameters for the query @@ -308,8 +285,7 @@ sub calculate { my %cell; if ($celvalue) { $cell{rowtitle} = $celvalue; - # $cell{rowtitle_display} = ($linefield eq 'branchcode') ? $branches->{$celvalue}->{branchname} : $celvalue; - $cell{rowtitle_display} = ($cathash{$celvalue} || "$celvalue\*") if ($line eq 'categorycode'); + $cell{rowtitle_display} = ($patron_categories->find($celvalue)->description || "$celvalue\*") if ($line eq 'categorycode'); } $cell{totalrow} = 0; push @loopline, \%cell; @@ -357,7 +333,7 @@ sub calculate { if (defined $celvalue) { $cell{coltitle} = $celvalue; # $cell{coltitle_display} = ($colfield eq 'branchcode') ? $branches->{$celvalue}->{branchname} : $celvalue; - $cell{coltitle_display} = $cathash{$celvalue} if ($column eq 'categorycode'); + $cell{coltitle_display} = $patron_categories->find($celvalue)->description if ($column eq 'categorycode'); } push @loopcol, \%cell; } @@ -558,7 +534,8 @@ sub patron_attributes_form { my @attribute_loop; foreach my $class ( sort keys %items_by_class ) { - my $lib = GetAuthorisedValueByCode( 'PA_CLASS', $class ) || $class; + my $av = Koha::AuthorisedValues->search({ category => 'PA_CLASS', authorised_value => $class }); + my $lib = $av->count ? $av->next->lib : $class; push @attribute_loop, { class => $class, items => $items_by_class{$class},