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;
}
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) : () )
+ }
}
}
},
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)
),
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';
}
}
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,
if(fstring) {
hold.hold_type('M');
hold.holdable_formats(fstring);
+ if (fstring)
+ holdArgs.holdable_formats = fstring;
hold.target(holdArgs.metarecord);
}
return hold;