Bug 8063 - Hold print notices do not sort by branch
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 9 May 2012 15:40:27 +0000 (11:40 -0400)
committerPaul Poulain <paul.poulain@biblibre.com>
Mon, 16 Jul 2012 12:35:05 +0000 (14:35 +0200)
Adds the option -s/--split to enable notices to be separated
into different files by borrower home library.

Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
C4/Letters.pm
misc/cronjobs/gather_print_notices.pl

index 893419c..95f4831 100644 (file)
@@ -779,7 +779,8 @@ sub GetPrintMessages {
     my $params = shift || {};
     
     return _get_unsent_messages( { message_transport_type => 'print',
-                                   borrowernumber         => $params->{'borrowernumber'}, } );
+                                   borrowernumber         => $params->{'borrowernumber'},
+                                 } );
 }
 
 =head2 GetQueuedMessages ([$hashref])
@@ -874,8 +875,9 @@ sub _get_unsent_messages (;$) {
 
     my $dbh = C4::Context->dbh();
     my $statement = << 'ENDSQL';
-SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued, from_address, to_address, content_type
-  FROM message_queue
+SELECT mq.message_id, mq.borrowernumber, mq.subject, mq.content, mq.message_transport_type, mq.status, mq.time_queued, mq.from_address, mq.to_address, mq.content_type, b.branchcode
+  FROM message_queue mq
+  LEFT JOIN borrowers b ON b.borrowernumber = mq.borrowernumber
  WHERE status = ?
 ENDSQL
 
@@ -894,6 +896,7 @@ ENDSQL
             push @query_params, $params->{'limit'};
         }
     }
+
     $debug and warn "_get_unsent_messages SQL: $statement";
     $debug and warn "_get_unsent_messages params: " . join(',',@query_params);
     my $sth = $dbh->prepare( $statement );
index 165b16e..ba3050e 100755 (executable)
@@ -21,14 +21,14 @@ use strict;
 use warnings;
 
 BEGIN {
-
     # find Koha's Perl modules
     # test carefully before changing this
     use FindBin;
     eval { require "$FindBin::Bin/../kohalib.pl" };
 }
 
-use CGI; # NOT a CGI script, this is just to keep C4::Templates::gettemplate happy
+use
+  CGI; # NOT a CGI script, this is just to keep C4::Templates::gettemplate happy
 use C4::Context;
 use C4::Dates;
 use C4::Debug;
@@ -42,41 +42,88 @@ sub usage {
 Usage: $0 OUTPUT_DIRECTORY
   Will print all waiting print notices to
   OUTPUT_DIRECTORY/notices-CURRENT_DATE.html .
+
+  -s --split  Split messages into separate file by borrower home library to OUTPUT_DIRECTORY/notices-CURRENT_DATE-BRANCHCODE.html
 USAGE
     exit $_[0];
 }
 
-my ( $stylesheet, $help );
+my ( $stylesheet, $help, $split );
 
 GetOptions(
-    'h|help' => \$help,
-) || usage( 1 );
+    'h|help'  => \$help,
+    's|split' => \$split,
+) || usage(1);
 
-usage( 0 ) if ( $help );
+usage(0) if ($help);
 
 my $output_directory = $ARGV[0];
 
 if ( !$output_directory || !-d $output_directory ) {
-    print STDERR "Error: You must specify a valid directory to dump the print notices in.\n";
-    usage( 1 );
+    print STDERR
+"Error: You must specify a valid directory to dump the print notices in.\n";
+    usage(1);
+}
+
+my $today        = C4::Dates->new();
+my @all_messages = @{ GetPrintMessages() };
+exit unless (@all_messages);
+
+if ($split) {
+    my %messages_by_branch;
+    foreach my $message (@all_messages) {
+        push( @{ $messages_by_branch{ $message->{'branchcode'} } }, $message );
+    }
+
+    foreach my $branchcode ( keys %messages_by_branch ) {
+        my @messages = @{ $messages_by_branch{$branchcode} };
+
+        open $OUTPUT, '>',
+          File::Spec->catdir( $output_directory,
+            "holdnotices-" . $today->output('iso') . "-$branchcode.html" );
+
+        my $template =
+          C4::Templates::gettemplate( 'batch/print-notices.tmpl', 'intranet',
+            new CGI );
+
+        $template->param(
+            stylesheet => C4::Context->preference("NoticeCSS"),
+            today      => $today->output(),
+            messages   => \@messages,
+        );
+
+        print $OUTPUT $template->output;
+
+        foreach my $message (@messages) {
+            C4::Letters::_set_message_status(
+                { message_id => $message->{'message_id'}, status => 'sent' } );
+        }
+
+        close $OUTPUT;
+    }
 }
+else {
+    open $OUTPUT, '>',
+      File::Spec->catdir( $output_directory,
+        "holdnotices-" . $today->output('iso') . ".html" );
 
-my $today = C4::Dates->new();
-my @messages = @{ GetPrintMessages() };
-exit unless( @messages );
+    my $template =
+      C4::Templates::gettemplate( 'batch/print-notices.tmpl', 'intranet',
+        new CGI );
 
-open OUTPUT, '>', File::Spec->catdir( $output_directory, "holdnotices-" . $today->output( 'iso' ) . ".html" );
+    $template->param(
+        stylesheet => C4::Context->preference("NoticeCSS"),
+        today      => $today->output(),
+        messages   => \@all_messages,
+    );
 
-my $template = C4::Templates::gettemplate( 'batch/print-notices.tmpl', 'intranet', new CGI );
+    print $OUTPUT $template->output;
 
-$template->param(
-    stylesheet => C4::Context->preference("NoticeCSS"),
-    today => $today->output(),
-    messages => \@messages,
-);
+    foreach my $message (@all_messages) {
+        C4::Letters::_set_message_status(
+            { message_id => $message->{'message_id'}, status => 'sent' } );
+    }
 
-print OUTPUT $template->output;
+    close $OUTPUT;
 
-foreach my $message ( @messages ) {
-    C4::Letters::_set_message_status( { message_id => $message->{'message_id'}, status => 'sent' } );
 }