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 });
}
}
# 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__