From: senator Date: Tue, 30 Nov 2010 15:53:18 +0000 (+0000) Subject: Backport some booking related commits from trunk. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=aa6c7fef7f50d7124f60109791d0f37bfa01ecd7;p=working%2FEvergreen.git Backport some booking related commits from trunk. r17563: Booking: stop the "new resource type" dialog from executing a naughty query The dialog will no longer offer a field for selecting a bibliographic record, but then again you wouldn't need it. Bibliographically-based resource types can be set up through a context menu option in the staff OPAC browser, whereas this interface is only suited to non-bib-based resource types, like meeting rooms, laptops, etc. -- r17980: more transaction cleanups -- r18502: Booking: make the circ module avoid booking code if the booking service isn't up 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. -- r18514: If we already know we're not using booking, skip a redundant and expensive test for the possibility of capturing a hold. We're just going to try actually doing it a little farther down. -- r18580: Patch from Steve Callender to address a booking-related collection agency reporting problem git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6_1@18874 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Booking.pm b/Open-ILS/src/perlmods/OpenILS/Application/Booking.pm index ff9572ac79..5e75fa840d 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Booking.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Booking.pm @@ -1291,12 +1291,13 @@ sub get_bresv_by_returnable_resource_barcode { }) or return $e->die_event; if (@$rows < 1) { + $e->rollback; return $rows; } else { # More than one result might be possible, but we don't want to return # more than one at this time. my $id = $rows->[0]->{"id"}; - return $e->retrieve_booking_reservation([ + my $resp =$e->retrieve_booking_reservation([ $id, { "flesh" => 2, "flesh_fields" => { @@ -1305,6 +1306,8 @@ sub get_bresv_by_returnable_resource_barcode { } } ]) or $e->die_event; + $e->rollback; + return $resp; } } diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm index cf0ff9f975..4f4cd571a0 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm @@ -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", @@ -180,12 +194,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! @@ -238,18 +254,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/; @@ -490,6 +502,7 @@ my @AUTOLOAD_FIELDS = qw/ rental_billing capture noop + use_booking /; @@ -1748,6 +1761,7 @@ sub booking_adjusted_due_date { my $circ = $self->circ; my $copy = $self->copy; + return undef unless $self->use_booking; my $changed; @@ -2087,23 +2101,27 @@ sub do_checkin { my $needed_for_something = 0; # formerly "needed_for_hold" if (!$self->remote_hold) { - my $potential_hold = $self->hold_capture_is_possible; - my $potential_reservation = $self->reservation_capture_is_possible; - - if ($potential_hold and $potential_reservation) { - $logger->info("circulator: item could fulfill either hold or reservation"); - $self->push_events(new OpenILS::Event( - "HOLD_RESERVATION_CONFLICT", - "hold" => $potential_hold, - "reservation" => $potential_reservation - )); - return if $self->bail_out; - } elsif ($potential_hold) { - $needed_for_something = - $self->attempt_checkin_hold_capture; - } elsif ($potential_reservation) { - $needed_for_something = - $self->attempt_checkin_reservation_capture; + if ($self->use_booking) { + my $potential_hold = $self->hold_capture_is_possible; + my $potential_reservation = $self->reservation_capture_is_possible; + + if ($potential_hold and $potential_reservation) { + $logger->info("circulator: item could fulfill either hold or reservation"); + $self->push_events(new OpenILS::Event( + "HOLD_RESERVATION_CONFLICT", + "hold" => $potential_hold, + "reservation" => $potential_reservation + )); + return if $self->bail_out; + } elsif ($potential_hold) { + $needed_for_something = + $self->attempt_checkin_hold_capture; + } elsif ($potential_reservation) { + $needed_for_something = + $self->attempt_checkin_reservation_capture; + } + } else { + $needed_for_something = $self->attempt_checkin_hold_capture; } } return if $self->bail_out; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/money.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/money.pm index e1a2f0ae3c..22ab1f308d 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/money.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/money.pm @@ -199,7 +199,7 @@ select (my $real_sql = $SQL) =~ s/XX/$o_txt/gsm; my $sth = money::collections_tracker->db_Main->prepare($real_sql); - $sth->execute( $org->id, $age, $org->id, $age, $amount ); + $sth->execute( $org->id, $age, $org->id, $age, $org->id, $age, $amount ); while (my $row = $sth->fetchrow_hashref) { #$row->{usr} = actor::user->retrieve($row->{usr})->to_fieldmapper; diff --git a/Open-ILS/web/templates/default/conify/global/booking/resource_type.tt2 b/Open-ILS/web/templates/default/conify/global/booking/resource_type.tt2 index 3ae9019a65..bdd108f20a 100644 --- a/Open-ILS/web/templates/default/conify/global/booking/resource_type.tt2 +++ b/Open-ILS/web/templates/default/conify/global/booking/resource_type.tt2 @@ -23,6 +23,7 @@ fieldOrder="['name', 'fine_interval', 'fine_amount', 'owner', 'catalog_item', 'transferable']" suppressFields="['record']" + suppressEditFields="['record']" query="{id: '*'}" fmClass='brt' showPaginator='true'