$evt = _update_checkout_copy($ctx);
return $evt if $evt;
- $evt = _handle_related_holds($ctx);
+ my $holds;
+ ($holds, $evt) = _handle_related_holds($ctx);
return $evt if $evt;
my $record = $U->record_to_mvr($ctx->{title}) unless $ctx->{precat};
return OpenILS::Event->new('SUCCESS',
- payload => {
- copy => $U->unflesh_copy($ctx->{copy}),
- circ => $ctx->{circ},
- record => $record,
+ payload => {
+ copy => $U->unflesh_copy($ctx->{copy}),
+ circ => $ctx->{circ},
+ record => $record,
+ holds_fulfilled => $holds,
} );
}
my $patron = $ctx->{patron};
my $holds = $holdcode->fetch_related_holds($copy->id);
$U->logmark;
+ my @fulfilled;
+ # XXX should we fulfill all the holds or just the first
if(ref($holds) && @$holds) {
# for now, just sort by id to get what should be the oldest hold
$hold->fulfillment_time('now');
my $r = $ctx->{session}->request(
"open-ils.storage.direct.action.hold_request.update", $hold )->gather(1);
- return $U->DB_UPDATE_FAILED( $hold ) unless $r;
+ return (undef,$U->DB_UPDATE_FAILED( $hold )) unless $r;
+ push( @fulfilled, $hold->id );
}
}
- return undef;
+ return (\@fulfilled, undef);
}
NOTE
sub capture_copy {
- my( $self, $client, $login_session, $barcode, $flesh ) = @_;
+ my( $self, $client, $login_session, $params ) = @_;
+ my %params = %$params;
+ my $barcode = $params{barcode};
+
my( $user, $target, $copy, $hold, $evt );
$evt = $apputils->check_perms($user->id, $user->home_ou, "COPY_CHECKIN");
return $evt if $evt;
- $logger->info("Capturing copy with barcode $barcode, flesh=$flesh");
+ $logger->info("Capturing copy with barcode $barcode");
my $session = $apputils->start_db_session();
"open-ils.storage.direct.asset.copy.update", $copy )->gather(1);
if(!$stat) { throw OpenSRF::EX ("Error updating copy " . $copy->id); }
-
- my $title = undef;
- if($flesh) {
- ($title, $evt) = $apputils->fetch_record_by_copy( $copy->id );
+ my $payload = { hold => $hold };
+ $payload->{copy} = $copy if $params{flesh_copy};
+
+ if($params{flesh_record}) {
+ my $record;
+ ($record, $evt) = $apputils->fetch_record_by_copy( $copy->id );
return $evt if $evt;
- $title = $apputils->record_to_mvr($title);
- }
+ $record = $apputils->record_to_mvr($record);
+ $payload->{record} = $record;
+ }
$apputils->commit_db_session($session);
- my $payload = { copy => $copy, record => $title, hold => $hold, };
-
- return OpenILS::Event->new('ROUTE_ITEM', route_to => $hold->pickup_lib, payload => $payload );
+ return OpenILS::Event->new('ROUTE_ITEM',
+ route_to => $hold->pickup_lib, payload => $payload );
}
sub _build_hold_transit {