From 06640a0b650d065e61918ea6fa160402fb68124e Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 9 May 2012 11:40:27 -0400 Subject: [PATCH 1/2] 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. Signed-off-by: Julian Maurice --- C4/Letters.pm | 9 ++-- misc/cronjobs/gather_print_notices.pl | 89 +++++++++++++++++++++++++-------- 2 files changed, 74 insertions(+), 24 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index 89213fe..cfc919d 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..ac1385b 100755 --- a/misc/cronjobs/gather_print_notices.pl +++ b/misc/cronjobs/gather_print_notices.pl @@ -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' } ); } -- 1.7.10