#
# 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 <http://www.gnu.org/licenses>.
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
NewSuggestion
SearchSuggestion
DelSuggestionsOlderThan
+ GetUnprocessedSuggestions
);
=head1 NAME
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"
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,
if ( exists $suggestion->{$field}
and defined $suggestion->{$field}
and $suggestion->{$field} ne '__ANY__'
- and $suggestion->{$field} ne q||
+ 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) };
}
# 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 });
}
}
=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.
=cut
sub GetSuggestion {
- my ($ordernumber) = @_;
+ my ($suggestionid) = @_;
my $dbh = C4::Context->dbh;
my $query = q{
SELECT *
WHERE suggestionid=?
};
my $sth = $dbh->prepare($query);
- $sth->execute($ordernumber);
+ $sth->execute($suggestionid);
return ( $sth->fetchrow_hashref );
}
accepteddate
rejectedby
rejecteddate
+ budgetid
) ) {
# Set the fields to NULL if not given.
$suggestion->{$field} ||= undef;
accepteddate
rejectedby
rejecteddate
+ budgetid
) ) {
# Set the fields to NULL if not given.
$suggestion->{$field} = undef
# 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} );
+
+ my $transport = (C4::Context->preference("FallbackToSMSIfNoEmail")) && ($patron->smsalertnumber) && (!$patron->email) ? 'sms' : 'email';
+
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},
borrowernumber => $full_suggestion->{suggestedby},
suggestionid => $full_suggestion->{suggestionid},
LibraryName => C4::Context->preference("LibraryName"),
- message_transport_type => 'email',
+ message_transport_type => $transport,
}
) or warn "can't enqueue letter $letter";
}
&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
&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{
$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__