#
# 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::SQLHelper qw(:all);
use C4::Debug;
use C4::Letters;
+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
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,
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 });
}
}
=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 );
}
sub NewSuggestion {
my ($suggestion) = @_;
+
+ for my $field ( qw(
+ suggestedby
+ managedby
+ manageddate
+ acceptedby
+ accepteddate
+ rejectedby
+ rejecteddate
+ budgetid
+ ) ) {
+ # Set the fields to NULL if not given.
+ $suggestion->{$field} ||= undef;
+ }
+
$suggestion->{STATUS} = "ASKED" unless $suggestion->{STATUS};
- return InsertInTable( "suggestions", $suggestion );
+
+ $suggestion->{suggesteddate} = dt_from_string unless $suggestion->{suggesteddate};
+
+ my $rs = Koha::Database->new->schema->resultset('Suggestion');
+ return $rs->create($suggestion)->id;
}
=head2 ModSuggestion
sub ModSuggestion {
my ($suggestion) = @_;
- my $status_update_table = UpdateInTable( "suggestions", $suggestion );
+ return unless( $suggestion and defined($suggestion->{suggestionid}) );
+
+ for my $field ( qw(
+ suggestedby
+ managedby
+ manageddate
+ acceptedby
+ accepteddate
+ rejectedby
+ rejecteddate
+ budgetid
+ ) ) {
+ # Set the fields to NULL if not given.
+ $suggestion->{$field} = undef
+ if exists $suggestion->{$field}
+ and ($suggestion->{$field} eq '0'
+ or $suggestion->{$field} eq '' );
+ }
+
+ my $rs = Koha::Database->new->schema->resultset('Suggestion')->find($suggestion->{suggestionid});
+ my $status_update_table = 1;
+ eval {
+ $rs->update($suggestion);
+ };
+ $status_update_table = 0 if( $@ );
if ( $suggestion->{STATUS} ) {
$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__