use OpenSRF::Utils::SettingsClient;
use OpenILS::Utils::ScriptRunner;
use OpenILS::Application::AppUtils;
+use DateTime::Format::ISO8601;
use OpenILS::Application::Circ::ScriptBuilder;
use OpenSRF::Utils::Logger qw(:logger);
+use OpenILS::Event;
my $U = "OpenILS::Application::AppUtils";
my $script; # - the permit script
# requestor, request_lib, title, title_descriptor
sub permit_copy_hold {
my $params = shift;
+ my @allevents;
- my $runner = OpenILS::Application::Circ::ScriptBuilder->build(
- {
- patron_id => $$params{patron_id},
- patron => $$params{patron},
- copy => $$params{copy},
- requestor => $$params{requestor},
- title => $$params{title},
- volume => $$params{volume},
- flesh_age_protect => 1,
- _direct => {
- requestLib => $$params{request_lib},
- pickupLib => $$params{pickup_lib},
- }
+ my $ctx = {
+ patron_id => $$params{patron_id},
+ patron => $$params{patron},
+ copy => $$params{copy},
+ requestor => $$params{requestor},
+ title => $$params{title},
+ volume => $$params{volume},
+ flesh_age_protect => 1,
+ _direct => {
+ requestLib => $$params{request_lib},
+ pickupLib => $$params{pickup_lib},
}
- );
+ };
+
+ my $runner = OpenILS::Application::Circ::ScriptBuilder->build($ctx);
+
+ my $evt = check_age_protect($ctx->{patron}, $ctx->{copy});
+ push( @allevents, $evt ) if $evt;
$logger->debug("Running permit_copy_hold on copy " . $$params{copy}->id);
my $pid = ($params->{patron}) ? $params->{patron}->id : $params->{patron_id};
$logger->debug("circ_permit_hold for user $pid returned events: [@$events]");
- my @allevents;
push( @allevents, OpenILS::Event->new($_)) for @$events;
my %hash = map { ($_->{ilsevent} => $_) } @allevents;
@allevents = values %hash;
}
+sub check_age_protect {
+ my( $patron, $copy ) = @_;
+
+ return undef unless $copy->age_protect;
+
+ my $prox = $U->storagereq(
+ 'open-ils.storage.asset.copy.proximity',
+ $copy->id, $patron->home_ou->id );
+
+ # If this copy is within the appropriate proximity,
+ # age protect does not apply
+ return undef if $prox <= $copy->age_protect->prox;
+
+ # How many seconds old does the copy have to be to escape age protection
+ my $interval = OpenSRF::Utils::interval_to_seconds($copy->age_protect->age);
+ my $start_date = time - $interval;
+
+ # Now, now many seconds old is this copy
+ my $dparser = DateTime::Format::ISO8601->new;
+ my $create_date = $dparser->parse_datetime(
+ OpenSRF::Utils::clense_ISO8601($copy->create_date));
+ my $age = $create_date->epoch;
+
+ $logger->debug("age_protect create_date = $create_date : age=$age, start_date=$start_date");
+
+ unless( $start_date < $age ) {
+ $logger->info("age_protect prevents copy from having a hold placed on it: ".$copy->id);
+ return OpenILS::Event->new('ITEM_AGE_PROTECTED', copy => $copy->id );
+ }
+
+ return undef;
+}
+
+
+
+
+
+
23;
}
if( grep(res, function(e) { return (e.textcode == 'HOLD_EXISTS'); }) ) {
-
- /* see if the requestor has the ability to create duplicate holds */
- var preq = new Request(FETCH_HIGHEST_PERM_ORG,
- G.user.session, G.user.id(), ['CREATE_DUPLICATE_HOLDS']);
- preq.send(true);
- var org = preq.result()[0];
-
- if( org ) {
+ if( fetchPermOrgs('HOLD_EXISTS')[0] ) {
if( confirm($('hold_dup_exists_override').innerHTML) ) {
- holdsPlaceHold(hold, true);
+ return holdsPlaceHold(hold, true);
}
} else {
- alert($('hold_dup_exists').innerHTML);
- return;
+ return alert($('hold_dup_exists').innerHTML);
}
}
+
+ alert($('holds_failure').innerHTML);
}
}