From 3dbaead6b6e9c1b5cd3c3737b10dcb93293e5254 Mon Sep 17 00:00:00 2001
From: Aleisha Amohia
Date: Tue, 15 Mar 2022 06:57:54 +1300
Subject: [PATCH] Bug 30295: Send a notification when a recall is manually
cancelled
This patch adds a RECALL_MANUAL_CANCEL email and sms notice which will
be sent to the requestor when their recall is cancelled. This notice
can also be configured using the messaging preferences.
To test:
1. Apply the patch, update database, restart services.
2. Ensure UseRecalls system preference is enabled and values have been
set in the circulation rules for recalls
3. Log in as a patron (Patron A) to the staff client and view your account details
4. Notice there is now a 'recall cancelled' notice that can be
configured under messaging preferences
5. Confirm this notice also shows in the messaging preferences page on
the OPAC
6. Select email and sms as a preference for the 'recall cancelled' notice and
save. You may need to enable other settings to see the sms options
(SMSSendDriver for example)
7. Check out an item to another patron (Patron B)
8. Log into the OPAC as Patron A and place a recall on the checked out
item/biblio
9. Go back to the staff client and view the biblio. Go to the recalls
tab and cancel the recall.
10. Go to Patron A's accout and view their notices tab
11. Confirm the 'recall cancelled' notice has been generated for both
email and sms.
Sponsored-by: Toi Ohomai Institute of Technology
Signed-off-by: Andrew Auld
---
Koha/Recall.pm | 27 ++++++++++++++-
...RECALL_MANUAL_CANCEL_message_attributes.pl | 12 +++++++
...RECALL_MANUAL_CANCEL_message_transports.pl | 12 +++++++
...g_30295-add_RECALL_MANUAL_CANCEL_notice.pl | 24 +++++++++++++
.../mysql/en/mandatory/sample_notices.yml | 34 +++++++++++++++++++
.../sample_notices_message_attributes.sql | 3 +-
.../sample_notices_message_transports.sql | 4 ++-
.../en/includes/messaging-preference-form.inc | 1 +
.../bootstrap/en/modules/opac-messaging.tt | 1 +
9 files changed, 115 insertions(+), 3 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_attributes.pl
create mode 100644 installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_transports.pl
create mode 100644 installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_notice.pl
diff --git a/Koha/Recall.pm b/Koha/Recall.pm
index 22f0101835..ee0a48cb17 100644
--- a/Koha/Recall.pm
+++ b/Koha/Recall.pm
@@ -18,7 +18,8 @@ package Koha::Recall;
# along with Koha; if not, see .
use Modern::Perl;
-
+use C4::Letters;
+use C4::Members::Messaging;
use Koha::Database;
use Koha::DateUtils qw( dt_from_string );
use Koha::Biblios;
@@ -451,6 +452,30 @@ sub set_cancelled {
my ( $self ) = @_;
$self->update({ status => 'cancelled', completed => 1, completed_date => dt_from_string });
C4::Log::logaction( 'RECALLS', 'CANCEL', $self->id, "Recall cancelled", 'INTRANET' ) if ( C4::Context->preference('RecallsLog') );
+
+ # send notice to recaller to pick up item
+ my $letter = C4::Letters::GetPreparedLetter(
+ module => 'circulation',
+ letter_code => 'RECALL_MANUAL_CANCEL',
+ branchcode => $self->pickup_library_id,
+ lang => $self->patron->lang,
+ tables => {
+ biblio => $self->biblio_id,
+ borrowers => $self->patron_id,
+ branches => $self->pickup_library_id,
+ },
+ );
+
+ my $messaging_preferences = C4::Members::Messaging::GetMessagingPreferences({ borrowernumber => $self->patron_id, message_name => 'Recall_Cancelled' });
+ while ( my ( $transport, $letter_code ) = each %{ $messaging_preferences->{transports} } ) {
+ if ( $transport eq 'email' ){
+ C4::Message->enqueue($letter, $self->patron->unblessed, 'email');
+ }
+ if ( $transport eq 'sms' ){
+ C4::Message->enqueue($letter, $self->patron->unblessed, 'sms');
+ }
+ }
+
return $self;
}
diff --git a/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_attributes.pl b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_attributes.pl
new file mode 100644
index 0000000000..59fc9175b5
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_attributes.pl
@@ -0,0 +1,12 @@
+use Modern::Perl;
+
+return {
+ bug_number => "30295",
+ description => "Adding message attributes for RECALL_MANUAL_CANCEL",
+ up => sub {
+ my ($args) = @_;
+ my ($dbh, $out) = @$args{qw(dbh out)};
+
+ $dbh->do(q{ INSERT IGNORE INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (14, 'Recall_Cancelled', 0) });
+ },
+};
diff --git a/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_transports.pl b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_transports.pl
new file mode 100644
index 0000000000..e80b199735
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_message_transports.pl
@@ -0,0 +1,12 @@
+use Modern::Perl;
+
+return {
+ bug_number => "30295",
+ description => "Adding message transports for RECALL_MANUAL_CANCEL notice",
+ up => sub {
+ my ($args) = @_;
+ my ($dbh, $out) = @$args{qw(dbh out)};
+
+ $dbh->do(q{ INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code, branchcode) VALUES (14, "email", 0, "circulation", "RECALL_MANUAL_CANCEL", null), (14, "sms", 0, "circulation", "RECALL_MANUAL_CANCEL", null) });
+ },
+};
diff --git a/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_notice.pl b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_notice.pl
new file mode 100644
index 0000000000..46e0882883
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_30295-add_RECALL_MANUAL_CANCEL_notice.pl
@@ -0,0 +1,24 @@
+use Modern::Perl;
+
+return {
+ bug_number => "30295",
+ description => "Add RECALL_MANUAL_CANCEL email and sms notice",
+ up => sub {
+ my ($args) = @_;
+ my ($dbh, $out) = @$args{qw(dbh out)};
+
+ $dbh->do(q{ INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES ('circulation','RECALL_MANUAL_CANCEL','','Recall has been cancelled','0','Recall has been cancelled','Dear [% borrower.firstname %] [% borrower.surname %],
+
+We regret to inform you that the item you have recalled cannot be provided. Your recall was cancelled.
+
+Title: [% biblio.title %]
+Author: [% biblio.author %]
+Location: [% branch.branchname %]','sms'), ('circulation','RECALL_MANUAL_CANCEL','','Recall has been cancelled','0','Recall has been cancelled','Dear [% borrower.firstname %] [% borrower.surname %],
+
+We regret to inform you that the item you have recalled cannot be provided. Your recall was cancelled.
+
+Title: [% biblio.title %]
+Author: [% biblio.author %]
+Location: [% branch.branchname %]','email') });
+ },
+};
diff --git a/installer/data/mysql/en/mandatory/sample_notices.yml b/installer/data/mysql/en/mandatory/sample_notices.yml
index cf8bcaddc2..7205718408 100644
--- a/installer/data/mysql/en/mandatory/sample_notices.yml
+++ b/installer/data/mysql/en/mandatory/sample_notices.yml
@@ -2221,3 +2221,37 @@ tables:
- "[% IF borrower.categorycode %]