From b19c7e1cae2f008eabb01aa08b37023bbac17ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20=C5=A0iman?= Date: Thu, 3 Nov 2016 04:47:10 +0100 Subject: [PATCH] Bug 17509: notify patrons to return an item whenever a hold is placed on it Test plan: 1) apply patch 2) run database update 3) enable sending an email to the patrons to return an item whenever a hold request is placed on it 4) place a hold 5) patrons having checked-out the item on hold are notified by email (see HOLDPLACED_CONTACT letter) --- C4/Reserves.pm | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index ae1c7b7..91d77b4 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -249,12 +249,49 @@ sub AddReserve { borrowernumber => $borrowernumber, message_transport_type => 'email', from_address => $admin_email_address, - to_address => $admin_email_address, + to_address => $admin_email_address, } ); } } + # Send email to borrowers asking to return item whenever a hold is placed on it + if (C4::Context->preference("NotifyToReturnItemWhenHoldIsPlaced")) { + my @borrowers = GetBorrowersToSatisfyHold($hold); + foreach my $borrower (@borrowers) { + if ( !$borrower->{email} ) { + next; + } + + my $library = Koha::Libraries->find($borrower->{branchcode})->unblessed; + if ( my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLDPLACED_CONTACT', + branchcode => $branch, + tables => { + 'branches' => $library, + 'borrowers' => $borrower, + 'biblio' => $biblionumber, + 'biblioitems' => $biblionumber, + 'items' => $checkitem, + }, + ) ) { + + my $admin_email_address = $library->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress'); + + C4::Letters::EnqueueLetter( + { letter => $letter, + borrowernumber => $borrower->{borrowernumber}, + message_transport_type => 'email', + from_address => $admin_email_address, + to_address => $borrower->{email}, + } + ); + } + + } + } + return $reserve_id; } @@ -2546,6 +2583,69 @@ sub GetHoldRule { return $sth->fetchrow_hashref(); } +=head2 GetBorrowersToSatisfyHold + +my @borrowers = GetBorrowersToSatisfyHold( $hold ); + +Returns borrowers who can return item to satisfy a given hold. + +=cut + +sub GetBorrowersToSatisfyHold { + my ( $hold ) = @_; + + my $query = ""; + + if ($hold->item()) { + $query = q{ + SELECT borrowers.borrowernumber + FROM reserves + JOIN items ON reserves.itemnumber = items.itemnumber + JOIN issues ON issues.itemnumber = items.itemnumber + JOIN borrowers ON issues.borrowernumber = borrowers.borrowernumber + WHERE reserves.reserve_id = ? + }; + } + elsif ($hold->biblio()) { + $query = q{ + SELECT borrowers.borrowernumber + FROM reserves + JOIN biblio ON reserves.biblionumber = biblio.biblionumber + JOIN items ON items.biblionumber = biblio.biblionumber + JOIN issues ON issues.itemnumber = items.itemnumber + JOIN borrowers ON issues.borrowernumber = borrowers.borrowernumber + WHERE reserves.reserve_id = ? + }; + } + + my $library = C4::Context->preference("NotifyToReturnItemFromLibrary"); + my $dbh = C4::Context->dbh; + my $sth; + + if ($library eq 'RequestorLibrary') { + $query .= " AND borrowers.branchcode = ?"; + $sth = $dbh->prepare( $query ); + $sth->execute( $hold->id(), $hold->borrower()->branchcode ); + } + elsif ($library eq 'ItemHomeLibrary') { + $query .= " AND items.homebranch = ?"; + $sth = $dbh->prepare( $query ); + $sth->execute( $hold->id(), $hold->borrower()->branchcode ); + } + else { + $sth = $dbh->prepare( $query ); + $sth->execute( $hold->id() ); + } + + my @results = (); + while ( my $data = $sth->fetchrow_hashref ) { + my $borrower = C4::Members::GetMember(borrowernumber => $data->{borrowernumber}); + push( @results, $borrower ); + } + + return @results; +} + =head1 AUTHOR Koha Development Team -- 2.1.4