Merge branch 'master' of git://git.evergreen-ils.org/Evergreen into template-toolkit...
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 18 Jul 2011 17:56:38 +0000 (13:56 -0400)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 18 Jul 2011 17:56:38 +0000 (13:56 -0400)
1  2 
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm

@@@ -2176,6 -2176,7 +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;
                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 +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);
  
                                  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 +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)
          ),
@@@ -3353,15 -3370,15 +3370,15 @@@ __PACKAGE__->register_method
                  'available at the library where the user is placing the hold (or, alternatively, '.
                  'at the pickup library) to encourage bypassing the hold placement and just '      .
                  'checking out the item.' ,
 -        params => {
 +        params => [
              { desc => 'Authentication Token', type => 'string' },
              { desc => 'Method Arguments.  Options include: hold_type, hold_target, org_unit.  ' 
                      . 'hold_type is the hold type code (T, V, C, M, ...).  '
                      . 'hold_target is the identifier of the hold target object.  ' 
                      . 'org_unit is org unit ID.', 
                type => 'object' 
 -            },
 -        },
 +            }
 +        ],
          return => { 
              desc => q/Result hash like { "copy" : copy_id, "location" : location_name }, empty hash on misses, event on error./,
              type => 'object'