From f59511a70180371b64ddb8d7eda3f7523f7795c3 Mon Sep 17 00:00:00 2001 From: miker Date: Tue, 18 Nov 2008 15:18:18 +0000 Subject: [PATCH] backporting long-overdue from trunk git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_4@11251 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../Application/Storage/Publisher/action.pm | 41 ++++++++- Open-ILS/src/support-scripts/fine_generator.pl | 5 +- .../support-scripts/long-overdue-status-update.pl | 99 ++++++++-------------- 3 files changed, 77 insertions(+), 68 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm index 09214c4157..721a937949 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm @@ -164,11 +164,50 @@ sub complete_reshelving { __PACKAGE__->register_method( api_name => 'open-ils.storage.action.circulation.reshelving.complete', api_level => 1, - stream => 1, argc => 1, method => 'complete_reshelving', ); +sub mark_longoverdue { + my $self = shift; + my $client = shift; + my $window = shift; + + local $OpenILS::Application::Storage::WRITE = 1; + + throw OpenSRF::EX::InvalidArg ("I need an interval of more than 0 seconds!") + unless (interval_to_seconds( $window )); + + my $setting = actor::org_unit_setting->table; + my $circ = action::circulation->table; + + my $sql = <<" SQL"; + UPDATE $circ + SET stop_fines = 'LONGOVERDUE', + stop_fines_time = now() + WHERE id IN ( + SELECT id + FROM $circ circ + LEFT JOIN $setting setting + ON (circ.circ_lib = setting.org_unit AND setting.name = 'circ.long_overdue.interval') + WHERE circ.checkin_time IS NULL AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','LONGOVERDUE')) + AND AGE(circ.due_date) > CAST( COALESCE( BTRIM( FIRST(setting.value),'"' ), ? ) AS INTERVAL) + ) + SQL + + my $sth = action::circulation->db_Main->prepare_cached($sql); + $sth->execute($window); + + return $sth->rows; + +} +__PACKAGE__->register_method( + api_name => 'open-ils.storage.action.circulation.long_overdue', + api_level => 1, + argc => 1, + method => 'mark_longoverdue', +); + sub auto_thaw_frozen_holds { my $self = shift; my $client = shift; diff --git a/Open-ILS/src/support-scripts/fine_generator.pl b/Open-ILS/src/support-scripts/fine_generator.pl index 84645f914c..eb62dbdea6 100755 --- a/Open-ILS/src/support-scripts/fine_generator.pl +++ b/Open-ILS/src/support-scripts/fine_generator.pl @@ -1,8 +1,7 @@ #!/usr/bin/perl # --------------------------------------------------------------------- -# Generic databse object dumper. -# ./object_dumper.pl , , ... -# ./object_dumper.pl /openils/conf/opensrf_core.xml permission.grp_tree +# Fine generator with default grace period param. +# ./object_dumper.pl # --------------------------------------------------------------------- use strict; diff --git a/Open-ILS/src/support-scripts/long-overdue-status-update.pl b/Open-ILS/src/support-scripts/long-overdue-status-update.pl index 19f86b52bc..b48c1ea953 100755 --- a/Open-ILS/src/support-scripts/long-overdue-status-update.pl +++ b/Open-ILS/src/support-scripts/long-overdue-status-update.pl @@ -1,74 +1,45 @@ #!/usr/bin/perl -use strict; -use warnings; - -use lib 'LIBDIR/perl5/'; +# --------------------------------------------------------------------- +# Long Overdue script with default period param. +# ./long-overdue-status-update.pl +# --------------------------------------------------------------------- +use strict; +use warnings; +use OpenSRF::Utils::JSON; use OpenSRF::System; -use OpenSRF::Application; -use OpenSRF::EX qw/:try/; -use OpenSRF::AppSession; -use OpenSRF::Utils::SettingsClient; -use OpenILS::Application::AppUtils; -use OpenILS::Utils::Fieldmapper; -use Digest::MD5 qw/md5_hex/; - -use Getopt::Long; - -my ($od_length, $user, $password, $config) = - ('180 days', 'admin', 'open-ils', 'SYSCONFDIR/opensrf_core.xml'); - -GetOptions( - 'overdue=s' => \$od_length, - 'user=s' => \$user, - 'password=s' => \$password, - 'config=s' => \$config, -); - -OpenSRF::System->bootstrap_client( config_file => $config ); -Fieldmapper->import(IDL => OpenSRF::Utils::SettingsClient->new->config_value("IDL")); - -my $auth = login($user,$password); -my $ses = OpenSRF::AppSession->create('open-ils.cstore'); -my $req = $ses->request( - 'open-ils.cstore', - 'open-ils.cstore.json_query', - { select => { circ => [ qw/id/ ] }, from => circ => where => { due_date => { ">" => { transform => "age", value => "340 days" } } } } -); - -while ( my $res = $req->recv( timeout => 120 ) ) { - print $res->content->target_copy . "\n"; +my $config = shift || die "bootstrap config required\n"; +my $lockfile = shift || "/tmp/long_overdue-LOCK"; +my $age = shift; + +$age = '180 days' if (!defined($age) or $age == 0); + +if (-e $lockfile) { + open(F,$lockfile); + my $pid = ; + close F; + + open(F,'/bin/ps axo pid|'); + while ( my $p = ) { + chomp($p); + if ($p =~ s/\s*(\d+)$/$1/o && $p == $pid) { + die "I seem to be running already at pid $pid. If not, try again\n"; + } + } + close F; } -sub login { - my( $username, $password, $type ) = @_; - - $type |= "staff"; - - my $seed = OpenILS::Application::AppUtils->simplereq( - 'open-ils.auth', - 'open-ils.auth.authenticate.init', - $username - ); - - die("No auth seed. Couldn't talk to the auth server") unless $seed; +open(F, ">$lockfile"); +print F $$; +close F; - my $response = OpenILS::Application::AppUtils->simplereq( - 'open-ils.auth', - 'open-ils.auth.authenticate.complete', - { username => $username, - password => md5_hex($seed . md5_hex($password)), - type => $type }); - - die("No auth response returned on login.") unless $response; - - my $authtime = $response->{payload}->{authtime}; - my $authtoken = $response->{payload}->{authtoken}; - - die("Login failed for user $username!") unless $authtoken; +OpenSRF::System->bootstrap_client( config_file => $config ); - return $authtoken; -} +my $r = OpenSRF::AppSession + ->create( 'open-ils.storage' ) + ->request( 'open-ils.storage.action.circulation.long_overdue' => $age ); +while (!$r->complete) { $r->recv }; +unlink $lockfile; -- 2.11.0