Bug 17600: Standardize our EXPORT_OK
[srvgit] / C4 / Suggestions.pm
index cab3080..ba72a18 100644 (file)
@@ -18,25 +18,20 @@ package C4::Suggestions;
 # 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 Modern::Perl;
 use CGI qw ( -utf8 );
 
 use C4::Context;
 use C4::Output;
-use C4::Debug;
 use C4::Letters;
 use C4::Biblio qw( GetMarcFromKohaField );
-use Koha::DateUtils;
+use Koha::DateUtils qw( dt_from_string );
 use Koha::Suggestions;
 
-use List::MoreUtils qw(any);
 use base qw(Exporter);
 
 our @EXPORT  = qw(
   ConnectSuggestionAndBiblio
-  CountSuggestion
   DelSuggestion
   GetSuggestion
   GetSuggestionByStatus
@@ -113,6 +108,8 @@ sub SearchSuggestion {
             U2.email            AS emailmanagedby,
             U2.branchcode       AS branchcodemanagedby,
             U2.borrowernumber   AS borrnummanagedby,
+            U3.surname          AS surnamelastmodificationby,
+            U3.firstname        AS firstnamelastmodificationby,
             BU.budget_name      AS budget_name
         FROM suggestions
             LEFT JOIN borrowers     AS U1 ON suggestedby=U1.borrowernumber
@@ -121,6 +118,7 @@ sub SearchSuggestion {
             LEFT JOIN borrowers     AS U2 ON managedby=U2.borrowernumber
             LEFT JOIN branches      AS B2 ON B2.branchcode=U2.branchcode
             LEFT JOIN categories    AS C2 ON C2.categorycode=U2.categorycode
+            LEFT JOIN borrowers     AS U3 ON lastmodificationby=U3.borrowernumber
             LEFT JOIN aqbudgets     AS BU ON budgetid=BU.budget_id
         WHERE 1=1
     }
@@ -187,24 +185,29 @@ sub SearchSuggestion {
     }
 
     # filter on date fields
+    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
     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,
-              output_pref({ dt => dt_from_string( $suggestion->{$to} ), dateformat => 'iso', dateonly => 1 }) || output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
+        my $to_dt;
+        $to_dt = eval { dt_from_string( $suggestion->{$to} ) } if ( $suggestion->{$to} );
+        if ( $from_dt ) {
+            push @query, qq{ AND suggestions.$field >= ?};
+            push @sql_params, $dtf->format_date($from_dt);
+        }
+        if ( $to_dt ) {
+            push @query, qq{ AND suggestions.$field <= ?};
+            push @sql_params, $dtf->format_date($to_dt);
         }
     }
 
-    $debug && warn "@query";
+    # By default do not search for archived suggestions
+    unless ( exists $suggestion->{archived} && $suggestion->{archived} ) {
+        push @query, q{ AND suggestions.archived = 0 };
+    }
+
     my $sth = $dbh->prepare("@query");
     $sth->execute(@sql_params);
     my @results;
@@ -355,6 +358,7 @@ sub GetSuggestionByStatus {
             LEFT JOIN categories    AS C1 ON C1.categorycode=U1.categorycode
             LEFT JOIN branches      AS B1 on B1.branchcode=U1.branchcode
         WHERE status = ?
+        ORDER BY suggestionid
     };
 
     # filter on branch
@@ -379,61 +383,6 @@ sub GetSuggestionByStatus {
     return $results;
 }
 
-=head2 CountSuggestion
-
-&CountSuggestion($status)
-
-Count the number of aqorders with the status given on input argument.
-the arg status can be :
-
-=over 2
-
-=item * ASKED : asked by the user, not dealed by the librarian
-
-=item * ACCEPTED : accepted by the librarian, but not yet ordered
-
-=item * REJECTED : rejected by the librarian (definitive status)
-
-=item * ORDERED : ordered by the librarian (acquisition module)
-
-=back
-
-return :
-the number of suggestion with this status.
-
-=cut
-
-sub CountSuggestion {
-    my ($status) = @_;
-    my $dbh = C4::Context->dbh;
-    my $sth;
-    my $userenv = C4::Context->userenv;
-    if ( C4::Context->preference("IndependentBranches")
-        && !C4::Context->IsSuperLibrarian() )
-    {
-        my $query = q{
-            SELECT count(*)
-            FROM suggestions
-                LEFT JOIN borrowers ON borrowers.borrowernumber=suggestions.suggestedby
-            WHERE STATUS=?
-                AND (suggestions.branchcode='' OR suggestions.branchcode=?)
-        };
-        $sth = $dbh->prepare($query);
-        $sth->execute( $status, $userenv->{branch} );
-    }
-    else {
-        my $query = q{
-            SELECT count(*)
-            FROM suggestions
-            WHERE STATUS=?
-        };
-        $sth = $dbh->prepare($query);
-        $sth->execute($status);
-    }
-    my ($result) = $sth->fetchrow;
-    return $result;
-}
-
 =head2 NewSuggestion
 
 
@@ -474,11 +423,7 @@ sub NewSuggestion {
             if ( $emailpurchasesuggestions eq "BranchEmailAddress" ) {
                 my $library =
                   Koha::Libraries->find( $full_suggestion->{branchcode} );
-                $toaddress =
-                     $library->branchreplyto
-                  || $library->branchemail
-                  || C4::Context->preference('ReplytoDefault')
-                  || C4::Context->preference('KohaAdminEmailAddress');
+                $toaddress = $library->inbound_email_address;
             }
             elsif ( $emailpurchasesuggestions eq "KohaAdminEmailAddress" ) {
                 $toaddress = C4::Context->preference('ReplytoDefault')
@@ -529,10 +474,11 @@ sub ModSuggestion {
     };
     return 0 if $@;
 
-    if ( $suggestion->{STATUS} ) {
+    if ( $suggestion->{STATUS} && $suggestion_object->suggestedby ) {
 
         # 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';