X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=inline;f=C4%2FSuggestions.pm;h=70b7b0de020f1f6f8dc4b93bfa4c250d149c786f;hb=6db48e9d21be112880c5ae74640800e30ad42947;hp=1d9edbbaf14b41ee8059a010a51087e52c1e47e6;hpb=a71b96295fb07084e4f87ac1a471e89355f3c5a4;p=koha.git diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm index 1d9edbbaf1..70b7b0de02 100644 --- a/C4/Suggestions.pm +++ b/C4/Suggestions.pm @@ -5,36 +5,33 @@ package C4::Suggestions; # # 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 strict; #use warnings; FIXME - Bug 2505 -use CGI; +use CGI qw ( -utf8 ); use C4::Context; use C4::Output; -use C4::Dates qw(format_date format_date_in_iso); use C4::Debug; use C4::Letters; -use Koha::DateUtils qw( dt_from_string ); +use Koha::DateUtils; use List::MoreUtils qw(any); -use C4::Dates qw(format_date_in_iso); use base qw(Exporter); -our $VERSION = 3.07.00.049; our @EXPORT = qw( ConnectSuggestionAndBiblio CountSuggestion @@ -49,6 +46,7 @@ our @EXPORT = qw( NewSuggestion SearchSuggestion DelSuggestionsOlderThan + GetUnprocessedSuggestions ); =head1 NAME @@ -65,7 +63,7 @@ The functions in this module deal with the aqorders in OPAC and in librarian int A suggestion is done in the OPAC. It has the status "ASKED" -When a librarian manages the suggestion, he can set the status to "REJECTED" or "ACCEPTED". +When a librarian manages the suggestion, they can set the status to "REJECTED" or "ACCEPTED". When the book is ordered, the suggestion status becomes "ORDERED" @@ -101,6 +99,7 @@ sub SearchSuggestion { B1.branchname AS branchnamesuggestedby, U1.surname AS surnamesuggestedby, U1.firstname AS firstnamesuggestedby, + U1.cardnumber AS cardnumbersuggestedby, U1.email AS emailsuggestedby, U1.borrowernumber AS borrnumsuggestedby, U1.categorycode AS categorycodesuggestedby, @@ -158,31 +157,39 @@ sub SearchSuggestion { qw( STATUS itemtype suggestedby managedby acceptedby budgetid biblionumber ) ) { - if ( exists $suggestion->{$field} ) { - if ( defined $suggestion->{$field} and $suggestion->{$field} ne '' ) - { - push @sql_params, $suggestion->{$field}; - push @query, qq{ AND suggestions.$field=? }; + if ( exists $suggestion->{$field} + and defined $suggestion->{$field} + and $suggestion->{$field} ne '__ANY__' + and ( + $suggestion->{$field} ne q|| + or $field eq 'STATUS' + ) + ) { + if ( $suggestion->{$field} eq '__NONE__' ) { + push @query, qq{ AND (suggestions.$field = '' OR suggestions.$field IS NULL) }; } else { - push @query, qq{ - AND (suggestions.$field='' OR suggestions.$field IS NULL) - }; + push @sql_params, $suggestion->{$field}; + push @query, qq{ AND suggestions.$field = ? }; } } } # filter on date fields - my $today = C4::Dates->today('iso'); foreach my $field (qw( suggesteddate manageddate accepteddate )) { my $from = $field . "_from"; my $to = $field . "_to"; + my $from_dt; + $from_dt = eval { dt_from_string( $suggestion->{$from} ) } if ( $suggestion->{$from} ); + my $from_sql = '0000-00-00'; + $from_sql = output_pref({ dt => $from_dt, dateformat => 'iso', dateonly => 1 }) + if ($from_dt); + $debug && warn "SQL for start date ($field): $from_sql"; if ( $suggestion->{$from} || $suggestion->{$to} ) { push @query, qq{ AND suggestions.$field BETWEEN ? AND ? }; + push @sql_params, $from_sql; push @sql_params, - format_date_in_iso( $suggestion->{$from} ) || '0000-00-00'; - push @sql_params, - format_date_in_iso( $suggestion->{$to} ) || $today; + output_pref({ dt => dt_from_string( $suggestion->{$to} ), dateformat => 'iso', dateonly => 1 }) || output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }); } } @@ -202,9 +209,9 @@ sub SearchSuggestion { =head2 GetSuggestion -\%sth = &GetSuggestion($ordernumber) +\%sth = &GetSuggestion($suggestionid) -this function get the detail of the suggestion $ordernumber (input arg) +this function get the detail of the suggestion $suggestionid (input arg) return : the result of the SQL query as a hash : $sth->fetchrow_hashref. @@ -212,7 +219,7 @@ return : =cut sub GetSuggestion { - my ($ordernumber) = @_; + my ($suggestionid) = @_; my $dbh = C4::Context->dbh; my $query = q{ SELECT * @@ -220,7 +227,7 @@ sub GetSuggestion { WHERE suggestionid=? }; my $sth = $dbh->prepare($query); - $sth->execute($ordernumber); + $sth->execute($suggestionid); return ( $sth->fetchrow_hashref ); } @@ -436,6 +443,7 @@ sub NewSuggestion { accepteddate rejectedby rejecteddate + budgetid ) ) { # Set the fields to NULL if not given. $suggestion->{$field} ||= undef; @@ -474,6 +482,7 @@ sub ModSuggestion { accepteddate rejectedby rejecteddate + budgetid ) ) { # Set the fields to NULL if not given. $suggestion->{$field} = undef @@ -493,11 +502,13 @@ sub ModSuggestion { # fetch the entire updated suggestion so that we can populate the letter my $full_suggestion = GetSuggestion( $suggestion->{suggestionid} ); + my $patron = Koha::Patrons->find( $full_suggestion->{suggestedby} ); if ( my $letter = C4::Letters::GetPreparedLetter( module => 'suggestions', letter_code => $full_suggestion->{STATUS}, branchcode => $full_suggestion->{branchcode}, + lang => $patron->lang, tables => { 'branches' => $full_suggestion->{branchcode}, 'borrowers' => $full_suggestion->{suggestedby}, @@ -545,7 +556,7 @@ sub ConnectSuggestionAndBiblio { &DelSuggestion($borrowernumber,$ordernumber) -Delete a suggestion. A borrower can delete a suggestion only if he is its owner. +Delete a suggestion. A borrower can delete a suggestion only if they are its owner. =cut @@ -577,12 +588,13 @@ sub DelSuggestion { &DelSuggestionsOlderThan($days) Delete all suggestions older than TODAY-$days , that have be accepted or rejected. + We do now allow a negative number. If you want to delete all suggestions, just use Koha::Suggestions->delete or so. =cut sub DelSuggestionsOlderThan { my ($days) = @_; - return unless $days; + return unless $days && $days > 0; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( q{ @@ -594,6 +606,23 @@ sub DelSuggestionsOlderThan { $sth->execute("-$days"); } +sub GetUnprocessedSuggestions { + my ( $number_of_days_since_the_last_modification ) = @_; + + $number_of_days_since_the_last_modification ||= 0; + + my $dbh = C4::Context->dbh; + + my $s = $dbh->selectall_arrayref(q| + SELECT * + FROM suggestions + WHERE STATUS = 'ASKED' + AND budgetid IS NOT NULL + AND CAST(NOW() AS DATE) - INTERVAL ? DAY = CAST(suggesteddate AS DATE) + |, { Slice => {} }, $number_of_days_since_the_last_modification ); + return $s; +} + 1; __END__