Booking: make the circ module avoid booking code if the booking service isn't up
authorsenator <senator@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Oct 2010 19:06:08 +0000 (19:06 +0000)
committersenator <senator@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Oct 2010 19:06:08 +0000 (19:06 +0000)
Previously, it was not possible to turn the booking service off and have working
circ.  Now you should be able to turn it off if you don't need it.

git-svn-id: svn://svn.open-ils.org/ILS/trunk@18502 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm

index abf234e..e968a86 100644 (file)
@@ -13,6 +13,21 @@ my $U = "OpenILS::Application::AppUtils";
 my %scripts;
 my $script_libs;
 my $legacy_script_support = 0;
+my $booking_status;
+
+sub determine_booking_status {
+    unless (defined $booking_status) {
+        my $ses = create OpenSRF::AppSession("router");
+        $booking_status = grep {$_ eq "open-ils.booking"} @{
+            $ses->request("opensrf.router.info.class.list")->gather(1)
+        };
+        $ses->disconnect;
+        $logger->info("booking status: " . ($booking_status ? "on" : "off"));
+    }
+
+    return $booking_status;
+}
+
 
 my $MK_ENV_FLESH = { 
     flesh => 2, 
@@ -65,7 +80,6 @@ sub initialize {
         );
 }
 
-
 __PACKAGE__->register_method(
     method  => "run_method",
     api_name    => "open-ils.circ.checkout.permit",
@@ -181,12 +195,14 @@ sub run_method {
 
     return circ_events($circulator) if $circulator->bail_out;
 
+    $circulator->use_booking(determine_booking_status());
+
     # --------------------------------------------------------------------------
     # First, check for a booking transit, as the barcode may not be a copy
     # barcode, but a resource barcode, and nothing else in here will work
     # --------------------------------------------------------------------------
 
-    if ((my $bc = $circulator->copy_barcode) && $api !~ /checkout|inspect/) { # do we have a barcode?
+    if ($circulator->use_booking && (my $bc = $circulator->copy_barcode) && $api !~ /checkout|inspect/) { # do we have a barcode?
         my $resources = $circulator->editor->search_booking_resource( { barcode => $bc } ); # any resources by this barcode?
         if (@$resources) { # yes!
 
@@ -239,18 +255,14 @@ sub run_method {
     # of the objects we need
     # --------------------------------------------------------------------------
 
-    # XXX I wanted to make this better so it might support blocking renewals
-    # if a reservation has been placed on an item, but that will need more
-    # design, as institutions will differ in their policy on that.  In the
-    # meantime making sure we're trying some kind of checkin will at least
-    # keep OPAC renewals from breaking since patrons don't have VIEW_USER...
-
-    $circulator->is_res_checkin($circulator->is_checkin(1))
-        if $api =~ /reservation.return/ or (
-            $api =~ /checkin/ and $circulator->seems_like_reservation()
-        );
+    if ($circulator->use_booking) {
+        $circulator->is_res_checkin($circulator->is_checkin(1))
+            if $api =~ /reservation.return/ or (
+                $api =~ /checkin/ and $circulator->seems_like_reservation()
+            );
 
-    $circulator->is_res_checkout(1) if $api =~ /reservation.pickup/;
+        $circulator->is_res_checkout(1) if $api =~ /reservation.pickup/;
+    }
 
     $circulator->is_renewal(1) if $api =~ /renew/;
     $circulator->is_checkin(1) if $api =~ /checkin/;
@@ -504,6 +516,7 @@ my @AUTOLOAD_FIELDS = qw/
     skip_permit_key
     skip_deposit_fee
     skip_rental_fee
+    use_booking
 /;
 
 
@@ -1926,6 +1939,7 @@ sub booking_adjusted_due_date {
     my $circ = $self->circ;
     my $copy = $self->copy;
 
+    return undef unless $self->use_booking;
 
     my $changed;
 
@@ -2302,7 +2316,7 @@ sub do_checkin {
 
         if (!$self->remote_hold) {
             my $potential_hold = $self->hold_capture_is_possible;
-            my $potential_reservation = $self->reservation_capture_is_possible;
+            my $potential_reservation = $self->use_booking && $self->reservation_capture_is_possible;
 
             if ($potential_hold and $potential_reservation) {
                 $logger->info("circulator: item could fulfill either hold or reservation");