From 7ca1831e8cdffe866837a85ea7b86981e5afd3b3 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Thu, 26 Mar 2020 17:13:15 +0000 Subject: [PATCH] Bug 20844: (follow-up) SendLostHoldNotices This patch adds a new syspref SendLostHoldNotices Test: 1) Update database and restart memcached 2) Enable the SendLostHoldNotices system preference 3) Place a hold on an item 4) Check in the item and set the hold to waiting 5) Go to edit the item and set an item lost status 6) Check the borrower's notices and confirm the notice has been enqueued 7) Confirm the notice is not sent twice when reverting or cancelling the hold 8) Confirm notice enqueues as expected for a bib-level hold Sponsored-by: Catalyst IT --- C4/Circulation.pm | 15 +++++++++++++ catalogue/updateitem.pl | 2 ++ ...ug_20844-add_LOST_WAITING_HOLD_notice.perl | 6 +++++ ...20844-add_SendLostHoldNotices_syspref.perl | 6 +++++ .../mysql/en/mandatory/sample_notices.yml | 19 ++++++++++++++++ .../admin/preferences/circulation.pref | 6 +++++ t/db_dependent/Reserves.t | 22 +++++++++++++++++-- 7 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_20844-add_LOST_WAITING_HOLD_notice.perl create mode 100644 installer/data/mysql/atomicupdate/bug_20844-add_SendLostHoldNotices_syspref.perl diff --git a/C4/Circulation.pm b/C4/Circulation.pm index ecb6176f6d9..90a5430a9d1 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -4024,6 +4024,21 @@ sub LostItem{ $hold = C4::Reserves::RevertWaitingStatus({ itemnumber => $itemnumber }); } } + + # SendLostHoldNotices + my $item = Koha::Items->find( $itemnumber ); + if ( C4::Context->preference('SendLostHoldNotices') && defined $hold && $item->itemlost ){ + my $letter = C4::Letters::GetPreparedLetter( + module => 'reserves', + letter_code => 'LOST_WAITING_HOLD', + branchcode => $hold->branchcode, + tables => { + borrowers => $hold->borrowernumber, + branches => $hold->branchcode, + }, + ); + C4::Message->enqueue($letter, $hold->borrower->unblessed, 'email'); + } } sub GetOfflineOperations { diff --git a/catalogue/updateitem.pl b/catalogue/updateitem.pl index 265653915e1..0d1b3f0eec4 100755 --- a/catalogue/updateitem.pl +++ b/catalogue/updateitem.pl @@ -47,6 +47,8 @@ if ( defined $cancelhold ){ } elsif ( defined $reverthold ){ $cancelhold = 0; LostItem($itemnumber, 'moredetail', 0, { cancel_reserve => $cancelhold }); +} else { + $cancelhold = undef; } if ( defined $redirecturl ){ print $cgi->redirect( $redirecturl . $biblionumber ); diff --git a/installer/data/mysql/atomicupdate/bug_20844-add_LOST_WAITING_HOLD_notice.perl b/installer/data/mysql/atomicupdate/bug_20844-add_LOST_WAITING_HOLD_notice.perl new file mode 100644 index 00000000000..4dc14f9606f --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_20844-add_LOST_WAITING_HOLD_notice.perl @@ -0,0 +1,6 @@ +$DBversion = 'XXX'; +if( CheckVersion( $DBversion ) ) { + $dbh->do(q{INSERT IGNORE INTO letter (module, code, branchcode, name, is_html, title, message_transport_type, content) VALUES ('reserves','LOST_WAITING_HOLD','','Waiting hold marked lost','0','Your waiting hold has been marked lost','email',"Dear [% borrower.firstname %] [% borrowers.surname %],

Your hold awaiting pickup is no longer available. The item is lost.

Please contact the library for more information.

Thank you,

[% branch.branchname %]") }); + + NewVersion( $DBversion, 20844, "Add LOST_WAITING_HOLD notice"); +} diff --git a/installer/data/mysql/atomicupdate/bug_20844-add_SendLostHoldNotices_syspref.perl b/installer/data/mysql/atomicupdate/bug_20844-add_SendLostHoldNotices_syspref.perl new file mode 100644 index 00000000000..46b5f69da47 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_20844-add_SendLostHoldNotices_syspref.perl @@ -0,0 +1,6 @@ +$DBversion = 'XXX'; +if( CheckVersion( $DBversion ) ) { + $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('SendLostHoldNotices', '0', NULL, 'Send a notice to a borrower if their reserved and waiting item is marked as lost', 'YesNo') }); + + NewVersion( $DBversion, 20844, "Add SendLostHoldNotices system preference"); +} diff --git a/installer/data/mysql/en/mandatory/sample_notices.yml b/installer/data/mysql/en/mandatory/sample_notices.yml index e73f6b81676..3e3a0ff2b67 100644 --- a/installer/data/mysql/en/mandatory/sample_notices.yml +++ b/installer/data/mysql/en/mandatory/sample_notices.yml @@ -2361,3 +2361,22 @@ tables: - "[% IF ( biblio.items.count > 0 ) %]
Items: [% END %]" - "
[% END %]" + + - module: reserves + code: LOST_WAITING_HOLD + branchcode: "" + name: "Waiting hold marked lost" + is_html: 0 + title: "Your waiting hold has been marked lost" + message_transport_type: email + lang: default + content: + - "Dear [% borrower.firstname %] [% borrowers.surname %]," + - "" + - "Your hold awaiting pickup is no longer available. The item is lost." + - "" + - "Please contact the library for more information." + - "" + - "Thank you," + - "" + - "[% branch.branchname %]" diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref index accaf177da4..5dd1c496340 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -690,6 +690,12 @@ Circulation: yes: Revert no: "Don't revert" - waiting status of a hold if the allocated item is marked as Lost. + - + - pref: SendLostHoldNotices + choices: + yes: Send + no: "Don't send" + - a notice to a borrower if their reserved and waiting item is marked as Lost. - - In the staff interface, split the holds queue into separate tables by - pref: HoldsSplitQueue diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t index 1bc2b67e253..1b4da29acd3 100755 --- a/t/db_dependent/Reserves.t +++ b/t/db_dependent/Reserves.t @@ -1424,13 +1424,14 @@ subtest 'ModReserveAffect logging' => sub { subtest 'Waiting item is marked as lost' => sub { - plan tests => 15; + plan tests => 17; # Set up data my $biblio = $builder->build_sample_biblio(); my $item = $builder->build_sample_item({ biblionumber => $biblio->biblionumber }); my $patron = $builder->build_object({ class => 'Koha::Patrons' }); - + t::lib::Mocks::mock_preference( 'SendLostHoldNotices', 0 ); + $dbh->do(q|DELETE FROM message_queue|); ## TEST 1: BIBLIO-LEVEL HOLD # place biblio-level hold @@ -1441,6 +1442,8 @@ subtest 'Waiting item is marked as lost' => sub { }); my $hold = Koha::Holds->find( $reserve_id ); + $dbh->do(q{INSERT IGNORE INTO letter (module, code, branchcode, name, is_html, title, message_transport_type, content) VALUES ('reserves','LOST_WAITING_HOLD','','Waiting hold marked lost','0','Your waiting hold has been marked lost','email',"Dear [% borrower.firstname %] [% borrowers.surname %],

Your hold awaiting pickup is no longer available. The item is lost.

Please contact the library for more information.

Thank you,

[% branch.branchname %]") }); + is( $hold->item_level_hold, 0, 'Biblio-level hold placed' ); # set hold as waiting and assign item @@ -1508,7 +1511,15 @@ subtest 'Waiting item is marked as lost' => sub { $hold->cancel; $item->itemlost( 0 ); + my $message_count = $dbh->selectall_arrayref(q{ + SELECT COUNT(*) + FROM message_queue + WHERE letter_code = 'LOST_WAITING_HOLD' + }); + is( $message_count->[0]->[0], 0, 'No notices enqueued because SendLostHoldNotices disabled' ); + # TEST 3: ITEM-LEVEL HOLD, CANCEL + t::lib::Mocks::mock_preference( 'SendLostHoldNotices', 1 ); # place item-level hold $reserve_id = AddReserve({ @@ -1542,6 +1553,13 @@ subtest 'Waiting item is marked as lost' => sub { C4::Circulation::LostItem( $item->itemnumber, 'test', 0, { cancel_reserve => 1 }); $hold = Koha::Holds->find( $reserve_id ); is( Koha::Holds->find( $reserve_id ), undef, 'Hold has been cancelled with RevertLostBibLevelHolds enabled' ); + + $message_count = $dbh->selectall_arrayref(q{ + SELECT COUNT(*) + FROM message_queue + WHERE letter_code = 'LOST_WAITING_HOLD' + }); + is( $message_count->[0]->[0], 2, 'LOST_WAITING_HOLD notice enqueued with each call to LostItem' ); }; sub count_hold_print_messages { -- 2.30.2