From f3357d1a71e6f5168bf110b7cceb1ba171774c04 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 9 May 2012 11:40:27 -0400 Subject: [PATCH] Bug 8063 - Hold print notices do not sort by branch Adds the option -s/--split to enable notices to be separated into different files by borrower home library. --- C4/Letters.pm | 9 ++- misc/cronjobs/gather_print_notices.pl | 88 +++++++++++++++++++++++++------- 2 files changed, 74 insertions(+), 23 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index 89213fe..10a2103 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -771,7 +771,8 @@ sub GetPrintMessages { my $params = shift || {}; return _get_unsent_messages( { message_transport_type => 'print', - borrowernumber => $params->{'borrowernumber'}, } ); + borrowernumber => $params->{'borrowernumber'}, + } ); } =head2 GetQueuedMessages ([$hashref]) @@ -866,8 +867,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 @@ -886,6 +888,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 ); diff --git a/misc/cronjobs/gather_print_notices.pl b/misc/cronjobs/gather_print_notices.pl index 165b16e..038d9b6 100755 --- a/misc/cronjobs/gather_print_notices.pl +++ b/misc/cronjobs/gather_print_notices.pl @@ -28,7 +28,8 @@ BEGIN { 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 +43,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 @messages = @{ GetPrintMessages() }; -exit unless( @messages ); +my $today = C4::Dates->new(); +my @all_messages = @{ GetPrintMessages() }; +exit unless (@all_messages); -open OUTPUT, '>', File::Spec->catdir( $output_directory, "holdnotices-" . $today->output( 'iso' ) . ".html" ); +if ($split) { + my %messages_by_branch; + foreach my $message (@all_messages) { + push( @{ $messages_by_branch{ $message->{'branchcode'} } }, $message ); + } -my $template = C4::Templates::gettemplate( 'batch/print-notices.tmpl', 'intranet', new CGI ); + foreach my $branchcode ( keys %messages_by_branch ) { + my @messages = @{ $messages_by_branch{$branchcode} }; -$template->param( - stylesheet => C4::Context->preference("NoticeCSS"), - today => $today->output(), - messages => \@messages, -); + open OUTPUT, '>', + File::Spec->catdir( $output_directory, + "holdnotices-" . $today->output('iso') . "-$branchcode.html" ); -print OUTPUT $template->output; + 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 $template = + C4::Templates::gettemplate( 'batch/print-notices.tmpl', 'intranet', + new CGI ); + + $template->param( + stylesheet => C4::Context->preference("NoticeCSS"), + today => $today->output(), + messages => \@all_messages, + ); + + print OUTPUT $template->output; + + foreach my $message (@all_messages) { + C4::Letters::_set_message_status( + { message_id => $message->{'message_id'}, status => 'sent' } ); + } + + close OUTPUT; -foreach my $message ( @messages ) { - C4::Letters::_set_message_status( { message_id => $message->{'message_id'}, status => 'sent' } ); } -- 1.7.2.5