From f6130a81a355ef4a099390b4c1f56ca3478b0b88 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Tue, 12 May 2020 22:07:56 +0000 Subject: [PATCH] Bug 23781: SMS notices and messaging preferences for recalls This patch adds recalls notices (pick up a waiting recall or return a requested recall) to the messaging preferences. To test: 1) Apply Bug 19532 2) Apply this bug 3) Update database, rebuild dbix files 4) Ensure UseRecalls syspref is enabled and values have been set in the circulation rules for recalls 5) Go to a borrower (Person A) account page in the Intranet or the OPAC 6) Go to messaging preferences 7) Notice there are now preferences for two recalls notices 8) Select email as a preference 9) Find a different borrower (Person B) and set their messaging preferences to SMS 10) Check out any item to Person B 11) Go to the OPAC logged in as Person A and find that item 12) Recall the item 13) In the terminal, look at the message_queue in the database. There should be a 'RETURN_RECALLED_ITEM' recall notice sent to Person B via SMS 14) Go back to the Intranet and check in the item. Confirm the recall when checking in 15) Look at the message_queue in the database again. There should be a 'PICKUP_RECALLED_ITEM' recall notice sent to Person A via email. 16) Confirm tests pass t/db_dependent/Koha/Recall.t t/db_dependent/Koha/Recalls.t Sponsored-by: Toi Ohomai Institute of Technology Signed-off-by: Lucas Gass Signed-off-by: David Nind --- Koha/Recall.pm | 10 +++++- Koha/Recalls.pm | 11 +++++- .../bug_23781-recalls_message_attributes.pl | 12 +++++++ .../bug_23781-recalls_message_transports.pl | 12 +++++++ .../bug_23781-recalls_sms_notices.pl | 24 +++++++++++++ .../mysql/en/mandatory/sample_notices.yml | 35 +++++++++++++++++++ .../sample_notices_message_attributes.sql | 5 +-- .../sample_notices_message_transports.sql | 6 +++- .../en/includes/messaging-preference-form.inc | 2 ++ .../bootstrap/en/modules/opac-messaging.tt | 2 ++ t/db_dependent/Koha/Recall.t | 6 ++++ t/db_dependent/Koha/Recalls.t | 8 ++++- 12 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_23781-recalls_message_attributes.pl create mode 100644 installer/data/mysql/atomicupdate/bug_23781-recalls_message_transports.pl create mode 100644 installer/data/mysql/atomicupdate/bug_23781-recalls_sms_notices.pl diff --git a/Koha/Recall.pm b/Koha/Recall.pm index c70acb89dd1..10ca9901c67 100644 --- a/Koha/Recall.pm +++ b/Koha/Recall.pm @@ -358,7 +358,15 @@ sub set_waiting { }, ); - C4::Message->enqueue($letter, $self->patron, 'email'); + my $messaging_preferences = C4::Members::Messaging::GetMessagingPreferences({ borrowernumber => $self->patron_id, message_name => 'Recall_Waiting' }); + while ( my ( $transport, $letter_code ) = each %{ $messaging_preferences->{transports} } ) { + if ( $transport eq 'email' ){ + C4::Message->enqueue($letter, $self->patron, 'email'); + } + if ( $transport eq 'sms' ){ + C4::Message->enqueue($letter, $self->patron, 'sms'); + } + } return $self; } diff --git a/Koha/Recalls.pm b/Koha/Recalls.pm index 29be68ce05a..02e22867a37 100644 --- a/Koha/Recalls.pm +++ b/Koha/Recalls.pm @@ -167,7 +167,16 @@ sub add_recall { }, ); - C4::Message->enqueue( $letter, $checkout->patron, 'email' ); + my $messaging_preferences = C4::Members::Messaging::GetMessagingPreferences({ borrowernumber => $checkout->borrowernumber, message_name => 'Recall_Requested' }); + + while ( my ( $transport, $letter_code ) = each %{ $messaging_preferences->{transports} } ) { + if ( $transport eq 'email' ){ + C4::Message->enqueue( $letter, $checkout->patron, 'email' ); + } + if ( $transport eq 'sms' ){ + C4::Message->enqueue( $letter, $checkout->patron, 'sms' ); + } + } $item = Koha::Items->find( $itemnumber ); # add to statistics table diff --git a/installer/data/mysql/atomicupdate/bug_23781-recalls_message_attributes.pl b/installer/data/mysql/atomicupdate/bug_23781-recalls_message_attributes.pl new file mode 100644 index 00000000000..598ebebcf4c --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_23781-recalls_message_attributes.pl @@ -0,0 +1,12 @@ +use Modern::Perl; + +return { + bug_number => "23781", + description => "Adding message attributes for recalls: Recall_Waiting, Recall_Requested", + 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 (12, 'Recall_Waiting', 0), (13, 'Recall_Requested', 0) }); + }, +}; diff --git a/installer/data/mysql/atomicupdate/bug_23781-recalls_message_transports.pl b/installer/data/mysql/atomicupdate/bug_23781-recalls_message_transports.pl new file mode 100644 index 00000000000..c9b8226f2ec --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_23781-recalls_message_transports.pl @@ -0,0 +1,12 @@ +use Modern::Perl; + +return { + bug_number => "23781", + description => "Adding message transports for recalls notices", + 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 (12, "email", 0, "circulation", "PICKUP_RECALLED_ITEM", null), (12, "sms", 0, "circulation", "PICKUP_RECALLED_ITEM", null), (13, "email", 0, "circulation", "RETURN_RECALLED_ITEM", null), (13, "sms", 0, "circulation", "RETURN_RECALLED_ITEM", null) }); + }, +}; diff --git a/installer/data/mysql/atomicupdate/bug_23781-recalls_sms_notices.pl b/installer/data/mysql/atomicupdate/bug_23781-recalls_sms_notices.pl new file mode 100644 index 00000000000..61aa730ee9f --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_23781-recalls_sms_notices.pl @@ -0,0 +1,24 @@ +use Modern::Perl; + +return { + bug_number => "23781", + description => "Add recalls SMS notices: RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM", + 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','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <> + +<> <>, + +A recall has been placed on the following item: <> / <> (<>). The due date has been updated, and is now <>. Please return the item before the due date. + +Thank you!','sms'), ('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <> + +<> <>, + +A recall that you requested on the following item: <> / <> (<>) is now ready for you to pick up at <>. Please pick up your item by <>. + +Thank you!','sms') }); + }, +}; diff --git a/installer/data/mysql/en/mandatory/sample_notices.yml b/installer/data/mysql/en/mandatory/sample_notices.yml index 9675b3eb4f1..76c60b54ccb 100644 --- a/installer/data/mysql/en/mandatory/sample_notices.yml +++ b/installer/data/mysql/en/mandatory/sample_notices.yml @@ -2278,6 +2278,41 @@ tables: - "" - "Thank you!" + - module: circulation + code: RETURN_RECALLED_ITEM + branchcode: "" + name: "Notification to return a recalled item" + is_html: 0 + title: "Notification to return a recalled item" + message_transport_type: sms + lang: default + content: + - "Date: <>" + - "" + - "<> <>," + - "" + - "A recall has been placed on the following item: <> / <> (<>). The due date has been updated, and is now <>. Please return the item before the due date." + - "" + - "Thank you!" + + - module: circulation + code: PICKUP_RECALLED_ITEM + branchcode: "" + name: "Recalled item awaiting pickup" + is_html: 0 + title: "Recalled item awaiting pickup" + message_transport_type: sms + lang: default + content: + - "Date: <>" + - "" + - "<> <>," + - "" + - "A recall that you requested on the following item: <> / <> (<>) is now ready for you to pick up at <>. Please pick up your item by <>." + - "" + - "Thank you!" + + - module: circulation code: RECALL_REQUESTER_DET branchcode: "" diff --git a/installer/data/mysql/mandatory/sample_notices_message_attributes.sql b/installer/data/mysql/mandatory/sample_notices_message_attributes.sql index bd0294c960e..31bf6d0b371 100644 --- a/installer/data/mysql/mandatory/sample_notices_message_attributes.sql +++ b/installer/data/mysql/mandatory/sample_notices_message_attributes.sql @@ -10,5 +10,6 @@ values (8, 'Ill_unavailable', 0), (9, 'Auto_Renewals', 0), (10, 'Hold_Reminder', 0), -(11, 'Ill_update', 0); - +(11, 'Ill_update', 0), +(12, 'Recall_Waiting', 0), +(13, 'Recall_Requested', 0); diff --git a/installer/data/mysql/mandatory/sample_notices_message_transports.sql b/installer/data/mysql/mandatory/sample_notices_message_transports.sql index 55ed683d6bc..631e5de2ccc 100644 --- a/installer/data/mysql/mandatory/sample_notices_message_transports.sql +++ b/installer/data/mysql/mandatory/sample_notices_message_transports.sql @@ -44,4 +44,8 @@ values (10, 'itiva', 0, 'circulation', 'HOLD_REMINDER'), (11, 'email', 0, 'ill', 'ILL_REQUEST_UPDATE'), (11, 'sms', 0, 'ill', 'ILL_REQUEST_UPDATE'), -(11, 'phone', 0, 'ill', 'ILL_REQUEST_UPDATE'); +(11, 'phone', 0, 'ill', 'ILL_REQUEST_UPDATE'), +(12, "email", 0, "circulation", "PICKUP_RECALLED_ITEM"), +(12, "sms", 0, "circulation", "PICKUP_RECALLED_ITEM"), +(13, "email", 0, "circulation", "RETURN_RECALLED_ITEM"), +(13, "sms", 0, "circulation", "RETURN_RECALLED_ITEM"); diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc index 6e08c2ee160..b416fcc9a57 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc @@ -34,6 +34,8 @@ [% ELSIF ( messaging_preference.Ill_unavailable ) %]Interlibrary loan unavailable [% ELSIF ( messaging_preference.Ill_update ) %]Interlibrary loan updated [% ELSIF ( messaging_preference.Auto_Renewals ) %]Auto renewal + [% ELSIF ( Koha.Preference('UseRecalls') && messaging_preference.Recall_Waiting ) %]Recall awaiting pickup + [% ELSIF ( Koha.Preference('UseRecalls') && messaging_preference.Recall_Requested ) %]Return recalled item [% ELSE %]Unknown [% END %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt index 32d5d3f2e24..15dd7bc0c26 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt @@ -76,6 +76,8 @@ [% ELSIF ( messaging_preference.Ill_unavailable ) %]Interlibrary loan unavailable [% ELSIF ( messaging_preference.Ill_update ) %]Interlibrary loan updated [% ELSIF ( messaging_preference.Auto_Renewals ) %]Auto renewal + [% ELSIF ( Koha.Preference('UseRecalls') && messaging_preference.Recall_Waiting ) %]Recall awaiting pickup + [% ELSIF ( Koha.Preference('UseRecalls') && messaging_preference.Recall_Requested ) %]Return recalled item [% ELSE %]Unknown [% END %] [% IF ( messaging_preference.takes_days ) %]