Browse Source

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: Marc Véron <veron@veron.ch>

Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>
new_12478_elasticsearch
Lari Taskula 9 years ago
committed by Brendan A Gallagher
parent
commit
05ea6ba1a8
  1. 22
      C4/Letters.pm
  2. 4
      koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt
  3. 16
      members/notices.pl
  4. 7
      t/db_dependent/Letters.t

22
C4/Letters.pm

@ -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:

4
koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt

@ -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>

16
members/notices.pl

@ -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(

7
t/db_dependent/Letters.t

@ -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' );

Loading…
Cancel
Save