[open-ils-commits] r17977 - branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher (gmc)
svn at svn.open-ils.org
svn at svn.open-ils.org
Fri Sep 24 16:55:19 EDT 2010
Author: gmc
Date: 2010-09-24 16:55:14 -0400 (Fri, 24 Sep 2010)
New Revision: 17977
Modified:
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm
Log:
backport 17976 from trunk
Remove confusing older targeter version; move status trimming to earlier in the process --miker
Signed-off-by: Galen Charlton <gmc at esilibrary.com>
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm 2010-09-24 20:29:43 UTC (rev 17976)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm 2010-09-24 20:55:14 UTC (rev 17977)
@@ -1271,11 +1271,12 @@
$$prox_list[0] =
[
grep {
- ''.$_->circ_lib eq $pu_lib
+ ''.$_->circ_lib eq $pu_lib &&
+ ( $_->status == 0 || $_->status == 7 )
} @good_copies
];
- $all_copies = [grep {''.$_->circ_lib ne $pu_lib } @good_copies];
+ $all_copies = [grep { $_->status == 0 || $_->status == 7 } grep {''.$_->circ_lib ne $pu_lib } @good_copies];
# $all_copies is now a list of copies not at the pickup library
my $best = choose_nearest_copy($hold, $prox_list);
@@ -1639,163 +1640,7 @@
my $locations;
my $statuses;
my %cache = (titles => {}, cns => {});
-sub hold_copy_targeter {
- my $self = shift;
- my $client = shift;
- my $check_expire = shift;
- my $one_hold = shift;
- $self->{user_filter} = OpenSRF::AppSession->create('open-ils.circ');
- $self->{user_filter}->connect;
- $self->{client} = $client;
-
- my $time = time;
- $check_expire ||= '12h';
- $check_expire = interval_to_seconds( $check_expire );
-
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time() - $check_expire);
- $year += 1900;
- $mon += 1;
- my $expire_threshold = sprintf(
- '%s-%0.2d-%0.2dT%0.2d:%0.2d:%0.2d-00',
- $year, $mon, $mday, $hour, $min, $sec
- );
-
-
- $statuses ||= [ config::copy_status->search(holdable => 't') ];
-
- $locations ||= [ asset::copy_location->search(holdable => 't') ];
-
- my $holds;
-
- %cache = (titles => {}, cns => {});
-
- try {
- if ($one_hold) {
- $holds = [ action::hold_request->search(id => $one_hold) ];
- } else {
- $holds = [ action::hold_request->search_where(
- { capture_time => undef,
- prev_check_time => { '<=' => $expire_threshold },
- },
- { order_by => 'request_time,prev_check_time' } ) ];
- push @$holds, action::hold_request->search_where(
- { capture_time => undef,
- prev_check_time => undef,
- },
- { order_by => 'request_time' } );
- }
- } catch Error with {
- my $e = shift;
- die "Could not retrieve uncaptured hold requests:\n\n$e\n";
- };
-
- for my $hold (@$holds) {
- try {
- #action::hold_request->db_Main->begin_work;
- if ($self->method_lookup('open-ils.storage.transaction.current')->run) {
- $client->respond("Cleaning up after previous transaction\n");
- $self->method_lookup('open-ils.storage.transaction.rollback')->run;
- }
- $self->method_lookup('open-ils.storage.transaction.begin')->run( $client );
- $client->respond("Processing hold ".$hold->id."...\n");
-
- my $copies;
-
- $copies = $self->metarecord_hold_capture($hold) if ($hold->hold_type eq 'M');
- $self->{client}->status( new OpenSRF::DomainObject::oilsContinueStatus );
-
- $copies = $self->title_hold_capture($hold) if ($hold->hold_type eq 'T');
- $self->{client}->status( new OpenSRF::DomainObject::oilsContinueStatus );
-
- $copies = $self->volume_hold_capture($hold) if ($hold->hold_type eq 'V');
- $self->{client}->status( new OpenSRF::DomainObject::oilsContinueStatus );
-
- $copies = $self->copy_hold_capture($hold) if ($hold->hold_type eq 'C');
-
- unless (ref $copies || !@$copies) {
- $client->respond("\tNo copies available for targeting at all!\n");
- }
-
- my @good_copies;
- for my $c (@$copies) {
- next if ( grep {$c->id == $hold->current_copy} @good_copies);
- push @good_copies, $c if ($c);
- }
-
- $client->respond("\t".scalar(@good_copies)." (non-current) copies available for targeting...\n");
-
- my $old_best = $hold->current_copy;
- $hold->update({ current_copy => undef });
-
- if (!scalar(@good_copies)) {
- $client->respond("\tNo (non-current) copies available to fill the hold.\n");
- if ( $old_best && grep {$_->id == $hold->current_copy} @$copies ) {
- $client->respond("\tPushing current_copy back onto the targeting list\n");
- push @good_copies, asset::copy->retrieve( $old_best );
- } else {
- $client->respond("\tcurrent_copy is no longer available for targeting... NEXT HOLD, PLEASE!\n");
- next;
- }
- }
-
- my $prox_list;
- $$prox_list[0] = [grep {$_->circ_lib == $hold->pickup_lib } @good_copies];
- $copies = [grep {$_->circ_lib != $hold->pickup_lib } @good_copies];
-
- my $best = choose_nearest_copy($hold, $prox_list);
-
- if (!$best) {
- $prox_list = create_prox_list( $self, $hold->pickup_lib, $copies );
- $best = choose_nearest_copy($hold, $prox_list);
- }
-
- if ($old_best) {
- # hold wasn't fulfilled, record the fact
-
- $client->respond("\tHold was not (but should have been) fulfilled by ".$old_best->id.".\n");
- action::unfulfilled_hold_list->create(
- { hold => ''.$hold->id,
- current_copy => ''.$old_best->id,
- circ_lib => ''.$old_best->circ_lib,
- });
- }
-
- if ($best) {
- $hold->update( { current_copy => ''.$best->id } );
- $client->respond("\tTargeting copy ".$best->id." for hold fulfillment.\n");
- }
-
- $hold->update( { prev_check_time => 'now' } );
- $client->respond("\tUpdating hold ".$hold->id." with new 'current_copy' for hold fulfillment.\n");
-
- $client->respond("\tProcessing of hold ".$hold->id." complete.\n");
- $self->method_lookup('open-ils.storage.transaction.commit')->run;
-
- #action::hold_request->dbi_commit;
-
- } otherwise {
- my $e = shift;
- $log->error("Processing of hold failed: $e");
- $client->respond("\tProcessing of hold failed!.\n\t\t$e\n");
- $self->method_lookup('open-ils.storage.transaction.rollback')->run;
- #action::hold_request->dbi_rollback;
- };
- }
-
- $self->{user_filter}->disconnect;
- $self->{user_filter}->finish;
- delete $$self{user_filter};
- return undef;
-}
-#__PACKAGE__->register_method(
-# api_name => 'open-ils.storage.action.hold_request.copy_targeter',
-# api_level => 0,
-# stream => 1,
-# method => 'hold_copy_targeter',
-#);
-
-
sub copy_hold_capture {
my $self = shift;
my $hold = shift;
@@ -1864,7 +1709,8 @@
for my $p ( 0 .. int( scalar(@$prox_list) - 1) ) {
next unless (ref $$prox_list[$p]);
- my @capturable = grep { $_->status == 0 || $_->status == 7 } @{ $$prox_list[$p] };
+ # We do this in the main body now
+ #my @capturable = grep { $_->status == 0 || $_->status == 7 } @{ $$prox_list[$p] };
next unless (@capturable);
my $rand = int(rand(scalar(@capturable)));
More information about the open-ils-commits
mailing list