1 package OpenILS::Utils::PermitHold;
2 use strict; use warnings;
4 use OpenSRF::Utils::Logger qw(:logger);
5 use OpenILS::Application::AppUtils;
7 use OpenILS::Utils::CStoreEditor qw/:funcs/;
8 my $U = "OpenILS::Application::AppUtils";
11 # params within a hash are: copy, patron,
12 # requestor, request_lib, title, title_descriptor
13 sub permit_copy_hold {
15 return indb_hold_permit($params);
18 my $LEGACY_HOLD_EVENT_MAP = {
19 'config.hold_matrix_test.holdable' => 'ITEM_NOT_HOLDABLE',
20 'item.holdable' => 'ITEM_NOT_HOLDABLE',
21 'location.holdable' => 'ITEM_NOT_HOLDABLE',
22 'status.holdable' => 'ITEM_NOT_HOLDABLE',
23 'transit_range' => 'ITEM_NOT_HOLDABLE',
24 'no_matchpoint' => 'NO_POLICY_MATCHPOINT',
25 'config.hold_matrix_test.max_holds' => 'MAX_HOLDS',
26 'config.rule_age_hold_protect.prox' => 'ITEM_AGE_PROTECTED'
29 sub indb_hold_permit {
32 my $function = $$params{retarget} ? 'action.hold_retarget_permit_test' : 'action.hold_request_permit_test';
34 ref($$params{patron}) ? $$params{patron}->id : $$params{patron_id};
36 ref($$params{request_lib}) ? $$params{request_lib}->id : $$params{request_lib};
45 $$params{requestor}->id
49 my $e = new_editor(xact=>1);
50 my $results = $e->json_query($HOLD_TEST);
53 unless($$params{show_event_list}) {
54 return 1 if $U->is_true($results->[0]->{success});
60 "NO_POLICY_MATCHPOINT",
61 "payload" => {"fail_part" => "no_matchpoint"}
65 return [] if $U->is_true($results->[0]->{success});
69 my $event = new OpenILS::Event(
70 $LEGACY_HOLD_EVENT_MAP->{$_->{"fail_part"}} || $_->{"fail_part"}
72 $event->{"payload"} = {"fail_part" => $_->{"fail_part"}};