1 package OpenILS::Application::Trigger::Reactor::Circ::AutoRenew;
2 use strict; use warnings;
5 use OpenSRF::Utils::SettingsClient;
6 use OpenILS::Application::Trigger::Reactor;
7 use OpenSRF::Utils::Logger qw/:logger/;
8 use OpenILS::Utils::CStoreEditor qw/:funcs/;
9 use OpenILS::Application::AppUtils;
10 my $AppUtils = 'OpenILS::Application::AppUtils';
13 $Data::Dumper::Indent = 0;
15 use base 'OpenILS::Application::Trigger::Reactor';
17 my $log = 'OpenSRF::Utils::Logger';
21 This Autorenew reactor will auto renew a circulation on the day it is due.
29 # 1. get a session token for circ user
31 my $circs = $env->{target};
32 my $svc = "open-ils.auth_internal";
33 my $api = $svc . '.session.create';
35 my $auth_internal_svc = OpenSRF::AppSession->create($svc);
37 my $userid = $circs->[0]->usr();
39 my $userObj = new_editor()->retrieve_actor_user($userid);
43 org_unit => $userObj->home_ou(), # all autorenewals occur from patron's Home OU.
47 my $token = $auth_internal_svc->request($api, \%args)->gather(1)->{payload}->{authtoken};
49 # 2. carry out renewal:
50 my $ses = OpenSRF::AppSession->connect('open-ils.trigger');
53 $logger->info( "AUTORENEW: circ.target_copy: " . Dumper($_->target_copy()) );
54 my $evt = $AppUtils->simplereq(
56 'open-ils.circ.renew',
59 patron_id => $_->usr(),
60 copy_id => $_->target_copy(),
65 $evt = $evt->[0] if ref($evt) eq "ARRAY"; # we got two resp events, likely renewal errors, grab the first.
66 my $is_renewed = $evt->{textcode} eq 'SUCCESS' ? 1 : 0;
68 my $new_circ_due = $is_renewed ? $evt->{payload}->{circ}->due_date : '';
71 copy => $_->target_copy(),
72 is_renewed => $is_renewed,
73 reason => !$is_renewed ? sprintf("%s : %s", $evt->{textcode}, substr($evt->{desc}, 0, 140)) : '',
74 new_due_date => $is_renewed ? $evt->{payload}->{circ}->due_date : '',
75 old_due_date => !$is_renewed ? $_->due_date() : '',
78 # Create the event from the source circ instead of the
79 # new circ, since the renewal may have failed.
80 $ses->request('open-ils.trigger.event.autocreate',
81 'autorenewal', $_, $_->circ_lib(), undef, \%user_data);