Commit 05ea6ba1 authored by Lari Taskula's avatar Lari Taskula Committed by Brendan A Gallagher

Bug 12426: Allow resending of messages from the notices tab in the patron account

This patch adds a link 'Resend' under a notice in 'failed' status
in the Patron's Notices tab.

By clicking the link, we will request notices.pl with parameter
"resendnotice=XXXXX" where XXXXX is message_id. In notices.pl,
we then check whether the given message is actually in 'failed'
status. If so, we use the C4::Letters::ResendMessage(123) to
change the status of the message into 'pending'. This way it
will be processed again by the cronjob process_message_queue.pl.

To test, find/create a Patron that has failed notices in message_queue:
1. Enable EnchancedMessagingPreferences system preference
2. Go to Patrons -> Notices
3. In the Notice column, click the title of the failed message
4. Observe that there is nothing for resending the failed message
5. Apply patch.
6. Reload Notices page and repeat step 3
7. Observe that there is now a link "Resend" in the Status-column
8. Click Resend
9. Observe that the message gets into 'pending' status

Works as expected.
Signed-off-by: default avatarMarc Véron <veron@veron.ch>
Signed-off-by: default avatarBrendan A Gallagher <brendan@bywatersolutions.com>
parent 256785f5
......@@ -1094,6 +1094,28 @@ sub GetMessageTransportTypes {
return $mtts;
}
=head2 ResendMessage
Attempt to resend a message.
my $message_id = C4::Letters::ResendMessage(123);
Updates the message to 'pending' status so that
it will be resent later on.
returns 1 on success, 0 on failure
=cut
sub ResendMessage {
my $message_id = shift;
return ((C4::Letters::_set_message_status( {
message_id => $message_id,
status => 'pending',
} ) > 0) ? 1:0);
}
=head2 _add_attachements
named parameters:
......
......@@ -17,7 +17,7 @@
$(".notice").hide();
$(".notice-title").click(function(e){
$(this).next(".notice").toggle();
$(this).closest("tr").children().children(".notice").toggle();
e.preventDefault();
});
......@@ -71,7 +71,7 @@
<td>
[% IF ( QUEUED_MESSAGE.status == 'sent' ) %]sent
[% ELSIF ( QUEUED_MESSAGE.status == 'pending' ) %]pending
[% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed
[% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed <div class="notice"><a href="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]&resendnotice=[% QUEUED_MESSAGE.message_id %]" title="Attempt to resend the notice">Resend</a></div>
[% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted
[% ELSE %][% QUEUED_MESSAGE.status %][% END %]
</td>
......
......@@ -52,6 +52,22 @@ $template->param( picture => 1 ) if $picture;
# Getting the messages
my $queued_messages = C4::Letters::GetQueuedMessages({borrowernumber => $borrowernumber});
# Bug 12426 - Allow resending of messages in Notices tab
if ($input->param('resendnotice')) {
foreach my $message (@$queued_messages){
# resendnotice must be in this borrower's queue - we don't want to make it
# possible to change any message just by changing resendnotice id.
if ($message->{message_id} == $input->param('resendnotice')) {
# We also only want to resend messages in failed status
last unless $message->{status} eq "failed";
# Modify the message in $queued_message to have its new pending status
$message->{status} = 'pending' if (C4::Letters::ResendMessage($message->{message_id}));
last;
}
}
}
if (C4::Context->preference('ExtendedPatronAttributes')) {
my $attributes = GetBorrowerAttributes($borrowernumber);
$template->param(
......
......@@ -18,7 +18,7 @@
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 68;
use Test::More tests => 69;
use Test::MockModule;
use Test::Warn;
......@@ -137,6 +137,11 @@ is(
'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
);
# ResendMessage
C4::Letters::ResendMessage($messages->[0]->{message_id});
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
is($messages->[0]->{status},'pending', 'ResendMessage sets status to pending correctly (bug 12426)');
# GetLetters
my $letters = C4::Letters::GetLetters();
is( @$letters, 0, 'GetLetters returns the correct number of letters' );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment