X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FReports%2FGuided.pm;h=ffc8afd3f2847fdc868fcab4382480ac3e1b5bf7;hb=0fdc1021d4477d838c6b38a1172137a5eec08978;hp=916d373d6cc922e1042f84756202b559ef72565f;hpb=856887abcf0468191ecd35b6d9b4e6a36e7a4407;p=koha.git diff --git a/C4/Reports/Guided.pm b/C4/Reports/Guided.pm index 916d373d6c..ffc8afd3f2 100644 --- a/C4/Reports/Guided.pm +++ b/C4/Reports/Guided.pm @@ -17,22 +17,24 @@ package C4::Reports::Guided; # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -#use warnings; FIXME - Bug 2505 this module needs a lot of repair to run clean under warnings +use Modern::Perl; use CGI qw ( -utf8 ); use Carp; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); use C4::Context; -use C4::Dates qw/format_date format_date_in_iso/; use C4::Templates qw/themelanguage/; use C4::Koha; +use Koha::DateUtils; use C4::Output; use XML::Simple; use XML::Dumper; use C4::Debug; # use Smart::Comments; # use Data::Dumper; +use C4::Log; + +use Koha::AuthorisedValues; BEGIN { # set the version for version checking @@ -44,11 +46,12 @@ BEGIN { save_report get_saved_reports execute_query get_saved_report create_compound run_compound get_column_type get_distinct_values save_dictionary get_from_dictionary delete_definition delete_report format_results get_sql - nb_rows update_sql build_authorised_value_list + nb_rows update_sql GetReservedAuthorisedValues GetParametersFromSQL IsAuthorisedValueValid ValidateSQLParameters + nb_rows update_sql ); } @@ -79,6 +82,7 @@ sub get_area_name_sql_snippet { [PAT => "Patrons"], [ACQ => "Acquisition"], [ACC => "Accounts"], + [SER => "Serials"], ); return "CASE report_area " . @@ -88,7 +92,7 @@ sub get_area_name_sql_snippet { sub get_report_areas { - my $report_areas = [ 'CIRC', 'CAT', 'PAT', 'ACQ', 'ACC' ]; + my $report_areas = [ 'CIRC', 'CAT', 'PAT', 'ACQ', 'ACC', 'SER' ]; return $report_areas; } @@ -100,6 +104,7 @@ sub get_table_areas { PAT => ['borrowers'], ACQ => [ 'aqorders', 'biblio', 'items' ], ACC => [ 'borrowers', 'accountlines' ], + SER => [ 'serial', 'serialitems', 'subscription', 'subscriptionhistory', 'subscriptionroutinglist', 'biblioitems', 'biblio', 'aqbooksellers' ], ); } @@ -182,7 +187,7 @@ This will return a list of all columns for a report area sub get_columns { - # this calls the internal fucntion _get_columns + # this calls the internal function _get_columns my ( $area, $cgi ) = @_; my %table_areas = get_table_areas; my $tables = $table_areas{$area} @@ -240,6 +245,7 @@ sub build_query { ACQ => [ 'aqorders.biblionumber=biblio.biblionumber', 'biblio.biblionumber=items.biblionumber' ], ACC => ['borrowers.borrowernumber=accountlines.borrowernumber'], + SER => [ 'serial.serialid=serialitems.serialid', 'serial.subscriptionid=subscription.subscriptionid', 'serial.subscriptionid=subscriptionhistory.subscriptionid', 'serial.subscriptionid=subscriptionroutinglist.subscriptionid', 'biblioitems.biblionumber=serial.biblionumber', 'biblio.biblionumber=biblioitems.biblionumber', 'subscription.aqbooksellerid=aqbooksellers.id'], ); @@ -330,6 +336,7 @@ sub get_criteria { PAT => [ 'borrowers.branchcode', 'borrowers.categorycode' ], ACQ => ['aqorders.datereceived|date'], ACC => [ 'borrowers.branchcode', 'borrowers.categorycode' ], + SER => ['subscription.startdate|date', 'subscription.enddate|date', 'subscription.periodicity', 'subscription.callnumber', 'subscription.location', 'subscription.branchcode'], ); # Adds itemtypes to criteria, according to the syspref @@ -386,10 +393,14 @@ sub get_criteria { $list='itemtypes' if $column eq 'itype'; $list='ccode' if $column eq 'ccode'; # TODO : improve to let the librarian choose the description at runtime - push @values, { availablevalues => "<<$column".($list?"|$list":'').">>" }; + push @values, { + availablevalues => "<<$column" . ( $list ? "|$list" : '' ) . ">>", + display_value => "<<$column" . ( $list ? "|$list" : '' ) . ">>", + }; while ( my $row = $sth->fetchrow_hashref() ) { + if ($row->{'availablevalues'} eq '') { $row->{'default'} = 1 } + else { $row->{display_value} = _get_display_value( $row->{'availablevalues'}, $column ); } push @values, $row; - if ($row->{'availablevalues'} eq '') { $row->{'default'} = 1 }; } $sth->finish(); @@ -400,7 +411,6 @@ sub get_criteria { push @criteria_array, \%temp; } - } return ( \@criteria_array ); } @@ -432,7 +442,7 @@ for the query. C<$offset>, and C<$limit> are required parameters. C<\@sql_params> is an optional list of parameter values to paste in. -The caller is reponsible for making sure that C<$sql> has placeholders +The caller is responsible for making sure that C<$sql> has placeholders and that the number placeholders matches the number of parameters. =cut @@ -632,6 +642,10 @@ sub format_results { sub delete_report { my (@ids) = @_; return unless @ids; + foreach my $id (@ids) { + my $data = get_saved_report($id); + logaction( "REPORTS", "DELETE", $id, "$data->{'report_name'} | $data->{'savedsql'} " ) if C4::Context->preference("ReportsLog"); + } my $dbh = C4::Context->dbh; my $query = 'DELETE FROM saved_sql WHERE id IN (' . join( ',', ('?') x @ids ) . ')'; my $sth = $dbh->prepare($query); @@ -639,7 +653,6 @@ sub delete_report { } sub get_saved_reports_base_query { - my $area_name_sql_snippet = get_area_name_sql_snippet; return <{date}) { - $date = format_date_in_iso($date); + $date = eval { output_pref( { dt => dt_from_string( $date ), dateonly => 1, dateformat => 'iso' }); }; push @cond, "DATE(date_run) = ? OR DATE(date_created) = ? OR DATE(last_modified) = ? OR @@ -772,7 +785,7 @@ sub get_column_type { my $catalog; my $schema; - # mysql doesnt support a column selection, set column to % + # mysql doesn't support a column selection, set column to % my $tempcolumn='%'; my $sth = $dbh->column_info( $catalog, $schema, $table, $tempcolumn ) || die $dbh->errstr; while (my $info = $sth->fetchrow_hashref()){ @@ -873,7 +886,7 @@ sub _get_column_defs { my ($theme, $lang, $availablethemes) = C4::Templates::themelanguage($htdocs, 'about.tt', $section, $cgi); my $full_path_to_columns_def_file="$htdocs/$theme/$lang/$columns_def_file"; - open (my $fh, $full_path_to_columns_def_file); + open (my $fh, '<:encoding(utf-8)', $full_path_to_columns_def_file); while ( my $input = <$fh> ){ chomp $input; if ( $input =~ m|(.*)| ) { @@ -885,71 +898,6 @@ sub _get_column_defs { return \%columns; } -=head2 build_authorised_value_list($authorised_value) - -Returns an arrayref - hashref pair. The hashref consists of -various code => name lists depending on the $authorised_value. -The arrayref is the hashref keys, in appropriate order - -=cut - -sub build_authorised_value_list { - my ( $authorised_value ) = @_; - - my $dbh = C4::Context->dbh; - my @authorised_values; - my %authorised_lib; - - # builds list, depending on authorised value... - if ( $authorised_value eq "branches" ) { - my $branches = GetBranchesLoop(); - foreach my $thisbranch (@$branches) { - push @authorised_values, $thisbranch->{value}; - $authorised_lib{ $thisbranch->{value} } = $thisbranch->{branchname}; - } - } elsif ( $authorised_value eq "itemtypes" ) { - my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description"); - $sth->execute; - while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { - push @authorised_values, $itemtype; - $authorised_lib{$itemtype} = $description; - } - } elsif ( $authorised_value eq "cn_source" ) { - my $class_sources = GetClassSources(); - my $default_source = C4::Context->preference("DefaultClassificationSource"); - foreach my $class_source ( sort keys %$class_sources ) { - next - unless $class_sources->{$class_source}->{'used'} - or ( $class_source eq $default_source ); - push @authorised_values, $class_source; - $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; - } - } elsif ( $authorised_value eq "categorycode" ) { - my $sth = $dbh->prepare("SELECT categorycode, description FROM categories ORDER BY description"); - $sth->execute; - while ( my ( $categorycode, $description ) = $sth->fetchrow_array ) { - push @authorised_values, $categorycode; - $authorised_lib{$categorycode} = $description; - } - - #---- "true" authorised value - } else { - my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib"); - - $authorised_values_sth->execute($authorised_value); - - while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { - push @authorised_values, $value; - $authorised_lib{$value} = $lib; - - # For item location, we show the code and the libelle - $authorised_lib{$value} = $lib; - } - } - - return (\@authorised_values, \%authorised_lib); -} - =head2 GetReservedAuthorisedValues my %reserved_authorised_values = GetReservedAuthorisedValues(); @@ -986,7 +934,7 @@ sub IsAuthorisedValueValid { my $reserved_authorised_values = GetReservedAuthorisedValues(); if ( exists $reserved_authorised_values->{$authorised_value} || - C4::Koha::IsAuthorisedValueCategory($authorised_value) ) { + Koha::AuthorisedValues->search({ category => $authorised_value })->count ) { return 1; } @@ -1040,6 +988,18 @@ sub ValidateSQLParameters { return \@problematic_parameters; } +sub _get_display_value { + my ( $original_value, $column ) = @_; + if ( $column eq 'periodicity' ) { + my $dbh = C4::Context->dbh(); + my $query = "SELECT description FROM subscription_frequencies WHERE id = ?"; + my $sth = $dbh->prepare($query); + $sth->execute($original_value); + return $sth->fetchrow; + } + return $original_value; +} + 1; __END__