From 61289c5e7806c720c2a2301cb9d9850fd0de94fd Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 24 Apr 2019 15:12:17 +0000 Subject: [PATCH] Bug 22650: Prevent multiple holds on individual items This patch corrects a missing id on the holds_to_place field and adds code to disable the box when an item is checked Additionally script login now places a single hold if an itemnumebr is passed and checks for holdability of the specific item To test: 1 - Allow multiple holds per record in circ rules 2 - In staff client, go to place a hold on a record 3 - Select a patron 4 - Increase the number of holds 5 - Then select a specific item to hold 6 - Patron now has multiple holds on a single item 7 - Apply patch 8 - Repeat, notice that count is disabled when item checked 9 - Confirm count is enabled when 'Hold next available item' is checked 10 - Set number to more than 1 11 - Check an item and submit 12 - Confirm only one item is reserved 13 - Hit the script directly (with valid info): http://localhost:8081/cgi-bin/koha/reserve/placerequest.pl?biblionumber=1&checkitem=1&holds_to_place_count=2&borrowernumber=5 14 - Confirm only one hold is placed 15 - Confirm multiple hits of the url do not generate further holds Signed-off-by: Liz Rea Signed-off-by: Martin Renvoize Signed-off-by: Nick Clemens (cherry picked from commit ef5adaff5ac045000b90c4b2b121d8c2ce2d5c59) Signed-off-by: Martin Renvoize --- .../intranet-tmpl/prog/en/modules/reserve/request.tt | 4 +++- reserve/placerequest.pl | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index ce0f2cd4f1..6244e3b926 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -249,7 +249,7 @@ [% IF remaining_holds_for_record > 1 %]
  • - +
  • [% ELSE %] @@ -805,8 +805,10 @@ }); if(onechecked == 1){ $("#requestany").prop("checked", false); + $("#holds_to_place_count").prop('disabled', true); } else { $("#requestany").prop("checked",true); + $("#holds_to_place_count").prop('disabled', false); } }); var prev_rank_request; diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index 1f061fe81a..31b7e8c571 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -91,9 +91,12 @@ if ( $type eq 'str8' && $borrower ) { if ( $item->{'biblionumber'} ne $biblionumber ) { $biblionumber = $item->{'biblionumber'}; } - } - - if ($multi_hold) { + if ( CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch)->{status} eq 'OK' ) { + AddReserve( $branch, $borrower->{'borrowernumber'}, + $biblionumber, \@realbi, $rank[0], $startdate, $expirationdate, $notes, $title, + $checkitem, $found, $itemtype ); + } + } elsif ($multi_hold) { my $bibinfo = $bibinfos{$biblionumber}; if ( CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,[$biblionumber], -- 2.39.5