From 105a76f9ba346b318b65bae482c7019afa4f6f5a Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Thu, 14 Jul 2011 16:41:42 -0400 Subject: [PATCH] Corrected the logic of format string building for metarecord holds and... made hold possiblity checking for metarecord holds respect the format string (so you can't place holds on formats for which there will never be anything targetable) Made possible by much concerted effort from Mike Rylander Signed-off-by: Lebbeous Fogle-Weekley --- .../perlmods/lib/OpenILS/Application/Circ/Holds.pm | 25 ++++++++++++++++++---- Open-ILS/web/opac/skin/default/js/holds.js | 7 ++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index 48abee9439..b100ca3e99 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -2176,6 +2176,7 @@ sub do_possibility_checks { my $pickup_lib = $params{pickup_lib}; my $hold_type = $params{hold_type} || 'T'; my $selection_ou = $params{selection_ou} || $pickup_lib; + my $holdable_formats = $params{holdable_formats}; my $copy; @@ -2226,9 +2227,9 @@ sub do_possibility_checks { my @status = (); for my $rec (@recs) { @status = _check_title_hold_is_possible( - $rec, $depth, $request_lib, $patron, $e->requestor, $pickup_lib, $selection_ou + $rec, $depth, $request_lib, $patron, $e->requestor, $pickup_lib, $selection_ou, $holdable_formats ); - last if $status[1]; + last if $status[0]; } return @status; } @@ -2261,8 +2262,13 @@ sub create_ranged_org_filter { sub _check_title_hold_is_possible { - my( $titleid, $depth, $request_lib, $patron, $requestor, $pickup_lib, $selection_ou ) = @_; + my( $titleid, $depth, $request_lib, $patron, $requestor, $pickup_lib, $selection_ou, $holdable_formats ) = @_; + my ($types, $formats, $lang); + if (defined($holdable_formats)) { + ($types, $formats, $lang) = split '-', $holdable_formats; + } + my $e = new_editor(); my %org_filter = create_ranged_org_filter($e, $selection_ou, $depth); @@ -2280,6 +2286,16 @@ sub _check_title_hold_is_possible { field => 'id', filter => { id => $titleid }, fkey => 'record' + }, + mrd => { + field => 'record', + fkey => 'record', + filter => { + record => $titleid, + ( $types ? (item_type => [split '', $types]) : () ), + ( $formats ? (item_form => [split '', $formats]) : () ), + ( $lang ? (item_lang => $lang) : () ) + } } } }, @@ -2705,7 +2721,8 @@ sub verify_copy_for_hold { return ( (not scalar @$permitted), # true if permitted is an empty arrayref - ( + ( # XXX This test is of very dubious value; someone should figure + # out what if anything is checking this value ($copy->circ_lib == $pickup_lib) and ($copy->status == OILS_COPY_STATUS_AVAILABLE) ), diff --git a/Open-ILS/web/opac/skin/default/js/holds.js b/Open-ILS/web/opac/skin/default/js/holds.js index 9552da1052..0ec83f7b9d 100644 --- a/Open-ILS/web/opac/skin/default/js/holds.js +++ b/Open-ILS/web/opac/skin/default/js/holds.js @@ -815,14 +815,14 @@ function holdsSetSelectedFormats() { var fstring = ""; - if( contains(vals, 'at-d') || contains(vals, 'at-s')) { + if( contains(vals, 'at-d') || contains(vals, 'at-s') || contains(vals, 'at')) { if( contains(vals, 'at') ) { fstring = 'at'; } else if (contains(vals, 'at-s') && contains(vals, 'at-d')) { fstring = 'at-sd'; } else if (!contains(vals, 'at-s')) { fstring = 'at-d'; - } else { + } else { fstring = 'at-s'; } } @@ -853,6 +853,7 @@ function holdsCheckPossibility(pickuplib, hold, recurse) { issuanceid : holdArgs.issuance, copy_id : holdArgs.copy, hold_type : holdArgs.type, + holdable_formats : holdArgs.holdable_formats, patronid : holdArgs.recipient.id(), depth : 0, pickup_lib : pickuplib, @@ -1000,6 +1001,8 @@ function holdsBuildHoldFromWindow() { if(fstring) { hold.hold_type('M'); hold.holdable_formats(fstring); + if (fstring) + holdArgs.holdable_formats = fstring; hold.target(holdArgs.metarecord); } return hold; -- 2.11.0