Bug 11561: restore previous behavior of generation of hold print notices

This patch prevents duplicate hold available print notices from being
sent and enforces making a print notice if no other transports can be
used.

-------------------------
- REPLICATING THE ISSUE -
-------------------------

1. Set a Patrons "Hold filled"-messaging preference to SMS + Email
2. Remove the SMS number (sms notification number) and all email
   addresses.
3. Make a reservation for this Patron.
4. Check-in the reserved Item.
5. message_queue-table has two generated print notices for the
   Hold_filled event.
   One for both failed message transport types, email and sms.

1. Set a Patrons "Hold filled"-messaging preference to empty, remove all
   checks from boxes.
2. Make a reservation for this Patron
3. Check-in the reserved Item.
4. message_queue-table has no message for the Hold-filled event. This is
   problematic because a Patron should get some kind of a notification
   for a filled Hold.

-----------------------------
- AFTER APPLYING THIS PATCH -
-----------------------------

If all message transport types for "Hold filled" fail, a print notice is
queued in the message_queue table. Only one print message is queued even
if many transports attempts fail.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
Olli-Antti Kivilahti 2014-01-15 16:25:17 +02:00 committed by Galen Charlton
parent 6b1c114cc6
commit 9270f06463

View file

@ -1921,12 +1921,9 @@ sub _koha_notify_reserve {
substitute => { today => C4::Dates->new()->output() },
);
my $print_sent = 0;
while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
if ( ($mtt eq 'email' and not $to_address) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
# email or sms is requested but not exist, do a print.
$mtt = 'print';
}
my $notification_sent = 0; #Keeping track if a Hold_filled message is sent. If no message can be sent, then default to a print message.
my $send_notification = sub {
my ( $mtt, $letter_code ) = (@_);
$letter_params{letter_code} = $letter_code;
$letter_params{message_transport_type} = $mtt;
my $letter = C4::Letters::GetPreparedLetter ( %letter_params )
@ -1938,7 +1935,21 @@ sub _koha_notify_reserve {
from_address => $admin_email_address,
message_transport_type => $mtt,
} );
};
while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
if ( ($mtt eq 'email' and not $to_address) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
# email or sms is requested but not exist
next;
}
&$send_notification($mtt, $letter_code);
$notification_sent++;
}
#Making sure that a print notification is sent if no other transport types can be utilized.
if (! $notification_sent) {
&$send_notification('print', 'HOLD');
}
}
=head2 _ShiftPriorityByDateAndPriority