From 980cdd1fa7d2aae5c4a90d5afd25920e145cfd38 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 6 Nov 2013 14:56:35 +0100 Subject: [PATCH] Bug 11209: Don't sent the same message for the same user the same day For PREDUE messages, one message is sent to the message_queue table for each items in advanced. So the patron will receive the same message. The sms part for DUE and PREDUE should not contain dynamic parts, only a standard message. Signed-off-by: Chris Cormack --- C4/Letters.pm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index 5025c10..a6c6640 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -893,7 +893,7 @@ sub _get_unsent_messages { my $dbh = C4::Context->dbh(); my $statement = << 'ENDSQL'; -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 +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, mq.letter_code FROM message_queue mq LEFT JOIN borrowers b ON b.borrowernumber = mq.borrowernumber WHERE status = ? @@ -1001,6 +1001,21 @@ $content EOS } +sub _is_duplicate { + my ( $message ) = @_; + my $dbh = C4::Context->dbh; + my $count = $dbh->selectrow_array(q| + SELECT COUNT(*) + FROM message_queue + WHERE message_transport_type = ? + AND borrowernumber = ? + AND letter_code = ? + AND CAST(time_queued AS date) = CAST(? AS date) + AND status="sent" + |, {}, $message->{message_transport_type}, $message->{borrowernumber}, $message->{letter_code}, $message->{time_queued} ); + return $count; +} + sub _send_message_by_sms { my $message = shift or return; my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); @@ -1011,6 +1026,12 @@ sub _send_message_by_sms { return; } + if ( _is_duplicate( $message ) ) { + _set_message_status( { message_id => $message->{'message_id'}, + status => 'failed' } ); + return; + } + my $success = C4::SMS->send_sms( { destination => $member->{'smsalertnumber'}, message => $message->{'content'}, } ); -- 1.8.3.2