$hold->target( $li->eg_bib_id );
}
+ # if behind-the-desk holds are supported at the
+ # pickup library, apply the patron default
+ my $bdous = $U->ou_ancestor_setting_value(
+ $hold->pickup_lib,
+ 'circ.holds.behind_desk_pickup_supported',
+ $mgr->editor
+ );
+
+ if ($bdous) {
+ my $set = $mgr->editor->search_actor_user_setting(
+ {usr => $hold->usr, name => 'circ.holds_behind_desk'})->[0];
+
+ $hold->behind_desk('t') if $set and
+ OpenSRF::Utils::JSON->JSON2perl($set->value);
+ }
+
$mgr->editor->create_action_hold_request( $hold ) or return 0;
}
api_name => "open-ils.actor.user.hold_requests.count",
authoritative => 1,
argc => 1,
- notes => 'Returns hold ready/total counts'
+ notes => q/
+ Returns hold ready vs. total counts.
+ If a context org unit is provided, a third value
+ is returned with key 'behind_desk', which reports
+ how many holds are ready at the pickup library
+ with the behind_desk flag set to true.
+ /
);
sub hold_request_count {
- my( $self, $client, $authtoken, $user_id ) = @_;
+ my( $self, $client, $authtoken, $user_id, $ctx_org ) = @_;
my $e = new_editor(authtoken => $authtoken);
return $e->event unless $e->checkauth;
}
my $holds = $e->json_query({
- select => {ahr => ['pickup_lib', 'current_shelf_lib']},
+ select => {ahr => ['pickup_lib', 'current_shelf_lib', 'behind_desk']},
from => 'ahr',
where => {
usr => $user_id,
}
});
- return {
+ my @ready = grep {
+ $_->{current_shelf_lib} and # avoid undef warnings
+ $_->{pickup_lib} eq $_->{current_shelf_lib}
+ } @$holds;
+
+ my $resp = {
total => scalar(@$holds),
- ready => scalar(
- grep {
- $_->{current_shelf_lib} and # avoid undef warnings
- $_->{pickup_lib} eq $_->{current_shelf_lib}
- } @$holds
- )
+ ready => scalar(@ready)
};
+
+ if ($ctx_org) {
+ # count of holds ready at pickup lib with behind_desk true.
+ $resp->{behind_desk} = scalar(
+ grep {
+ $_->{pickup_lib} == $ctx_org and
+ $U->is_true($_->{behind_desk})
+ } @ready
+ );
+ }
+
+ return $resp;
}
__PACKAGE__->register_method(
use OpenSRF::Utils qw/:datetime/;
use Digest::MD5 qw(md5_hex);
use OpenSRF::Utils::Cache;
+use OpenSRF::Utils::JSON;
my $apputils = "OpenILS::Application::AppUtils";
my $U = $apputils;
$hold->expire_time(calculate_expire_time($recipient->home_ou));
}
+
+ # if behind-the-desk pickup is supported at the hold pickup lib,
+ # set the value to the patron default, unless a value has already
+ # been applied. If it's not supported, force the value to false.
+
+ my $bdous = $U->ou_ancestor_setting_value(
+ $hold->pickup_lib,
+ 'circ.holds.behind_desk_pickup_supported', $e);
+
+ if ($bdous) {
+ if (!defined $hold->behind_desk) {
+
+ my $set = $e->search_actor_user_setting({
+ usr => $hold->usr,
+ name => 'circ.holds_behind_desk'
+ })->[0];
+
+ $hold->behind_desk('t') if $set and
+ OpenSRF::Utils::JSON->JSON2perl($set->value);
+ }
+ } else {
+ # behind the desk not supported, force it to false
+ $hold->behind_desk('f');
+ }
+
$hold->requestor($e->requestor->id);
$hold->request_lib($e->requestor->ws_ou);
$hold->selection_ou($hold->pickup_lib) unless $hold->selection_ou;