Bug 11445: avoid sending duplicate hold waiting notifications
authorGalen Charlton <gmc@esilibrary.com>
Wed, 25 Dec 2013 17:44:19 +0000 (17:44 +0000)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 30 Dec 2013 15:10:28 +0000 (15:10 +0000)
This patch fixes a problem where a patron could receive duplicate
hold waiting notifications.  For example, this could happen if a
circ operator checked in an item more than once and confirmed the
same hold each time.

To test:

[1] Set up a test patron that received hold waiting notifications.
[2] Put an item on hold for the patron, then check the item in
    and confirm the hold.  Verify that a hold notification is
    sent (or inspect the message_queue table).
[3] Check the item in again and confirm the hold again.  A duplicate
    hold notification will be generated.
[4] Apply the patch.
[5] Repeat steps 2 and 3.  This time, only one notification should be
    generated.
[6] Verify that prove -v t/db_dependent/Reserves.t passes.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes all tests and QA script.
Works as described.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/Reserves.pm

index d1bca25..8d83e87 100644 (file)
@@ -1257,7 +1257,12 @@ sub ModReserveAffect {
 
     # get request - need to find out if item is already
     # waiting in order to not send duplicate hold filled notifications
-    my $request = GetReserveInfo($borrowernumber, $biblionumber);
+    my $reserve_id = GetReserveId({
+        borrowernumber => $borrowernumber,
+        biblionumber   => $biblionumber,
+    });
+    return unless defined $reserve_id;
+    my $request = GetReserveInfo($reserve_id);
     my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0;
 
     # If we affect a reserve that has to be transfered, don't set to Waiting