did more testing of the renewal hold checks
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 27 Jul 2006 19:47:29 +0000 (19:47 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 27 Jul 2006 19:47:29 +0000 (19:47 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@5136 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/javascript/backend/circ/circ_lib.js
Open-ILS/src/javascript/backend/circ/circ_permit_renew.js
Open-ILS/src/perlmods/OpenILS/Application/Circ/ScriptBuilder.pm

index 327b3a4..29bb910 100644 (file)
@@ -4,9 +4,9 @@ load_lib('circ/circ_groups.js');
 
 try {
        if( environment.copy ) {
-               environment.copy.fetchHolds = function() {
+               environment.copy.fetchBestHold = function() {
                        var key = scratchKey();
-                       environment.copy.__OILS_FUNC_fetch_hold(scratchPad(key));
+                       environment.copy.__OILS_FUNC_fetch_best_hold(scratchPad(key));
                        var val = getScratch(key);
                        return (val) ? val : null;
                }
index 4fe9af5..7f61d92 100644 (file)
@@ -4,10 +4,10 @@ function go() {
 load_lib('circ/circ_lib.js');
 log_vars('circ_permit_renew');
 
-var holds = copy.fetchHolds();
-for( var i in holds ) {
+log_info("permit_renew searching for potential holds for copy " + copy.barcode)
+var hold = copy.fetchBestHold();
+if( hold ) {
        log_info("hold found for renewal item, checking hold->usr..");
-       var hold = holds[i];
        if( hold && hold.usr != patron.id )
                return result.events.push('COPY_NEEDED_FOR_HOLD');
 }
index 135f943..76f836c 100644 (file)
@@ -5,10 +5,13 @@ use OpenILS::Utils::CStoreEditor qw/:funcs/;
 use OpenILS::Application::AppUtils;
 use OpenILS::Application::Actor;
 use OpenSRF::Utils::Logger qw/$logger/;
+use OpenILS::Application::Circ::Holds;
 use Scalar::Util qw/weaken/;
 my $U = "OpenILS::Application::AppUtils";
 use Data::Dumper;
 
+my $holdcode = "OpenILS::Application::Circ::Holds";
+
 my $evt = "environment";
 my @COPY_STATUSES;
 my @COPY_LOCATIONS;
@@ -76,7 +79,7 @@ sub build_runner {
        $runner->insert( "$evt.volume",         $ctx->{volume}, 1);
        $runner->insert( "$evt.title",          $ctx->{title}, 1);
        $runner->insert( "$evt.requestor",      $ctx->{requestor}, 1);
-       $runner->insert( "$evt.titleDescriptor", $ctx->{titleDescriptor}, 1);
+       #$runner->insert( "$evt.titleDescriptor", $ctx->{titleDescriptor}, 1);
 
        $runner->insert( "$evt.patronItemsOut", $ctx->{patronItemsOut}, 1 );
        $runner->insert( "$evt.patronOverdueCount", $ctx->{patronOverdue}, 1 );
@@ -85,6 +88,7 @@ sub build_runner {
        $runner->insert("$evt.$_", $ctx->{_direct}->{$_}, 1) for keys %{$ctx->{_direct}};
 
        insert_org_methods( $editor, $runner );
+       insert_copy_methods( $editor, $ctx, $runner );
 
        return $runner;
 }
@@ -138,12 +142,13 @@ sub fetch_bib_data {
        $ctx->{title} = $e->retrieve_biblio_record_entry(
                $ctx->{volume}->record) or return $e->event;
 
-       if(!$ctx->{titleDescriptor}) {
-               $ctx->{titleDescriptor} = $e->search_metabib_record_descriptor( 
-                       { record => $ctx->{title}->id }) or return $e->event;
 
-               $ctx->{titleDescriptor} = $ctx->{titleDescriptor}->[0];
-       }
+#      if(!$ctx->{titleDescriptor}) {
+#              $ctx->{titleDescriptor} = $e->search_metabib_record_descriptor( 
+#                      { record => $ctx->{title}->id }) or return $e->event;
+#
+#              $ctx->{titleDescriptor} = $ctx->{titleDescriptor}->[0];
+#      }
 
        #insert_copy_method();  
 
@@ -168,6 +173,18 @@ sub fetch_user_data {
                        $ctx->{patron} = $e->search_actor_user( 
                                { card => $card->[0]->id }) or return $e->event;
                        $ctx->{patron} = $ctx->{patron}->[0];
+
+               } elsif( $ctx->{fetch_patron_by_circ_copy} ) {
+
+                       if( my $copy = $ctx->{copy} ) {
+                               my $circs = $e->search_action_circulation(
+                                       { target_copy => $copy->id, stop_fines_time => undef });
+
+                               if( my $circ = $circs->[0] ) {
+                                       $ctx->{patron} = $e->retrieve_actor_user($circ->usr)
+                                               or return $e->event;
+                               }
+                       }
                }
        }
 
@@ -295,20 +312,21 @@ sub is_org_descendent {
        return 0;
 }
 
+sub insert_copy_methods {
+       my( $e, $ctx,  $runner ) = @_;
+       if( my $copy = $ctx->{copy} ) {
+               $runner->insert_method( 'environment.copy', '__OILS_FUNC_fetch_best_hold', sub {
+                               my $key = shift;
+                               $logger->debug("script_builder: searching for permitted hold for copy ".$copy->barcode);
+                               my ($hold) = $holdcode->find_nearest_permitted_hold(
+                                       OpenSRF::AppSession->create('open-ils.storage'), $copy, $e->requestor );
+                               $runner->insert( $key, $hold, 1 );
+                       }
+               );
+       }
+}
 
 
-#      if( $ctx->{copy} ) {
-#              
-#              # allows a script to fetch a hold that is currently targeting the
-#              # copy in question
-#              $runner->insert_method( 'environment.copy', '__OILS_FUNC_fetch_hold', sub {
-#                              my $key = shift;
-#                              my $hold = $holdcode->fetch_related_holds($ctx->{copy}->id);
-#                              $hold = undef unless $hold;
-#                              $runner->insert( $key, $hold, 1 );
-#                      }
-#              );
-#      }