From cbca29b145ec240e4960916b4bc8373969d2adbb Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 21 Aug 2012 17:19:54 -0400 Subject: [PATCH] Include Wrong-Shelf holds in clear-shelf results Include non-expired, Wrong-Shelf holds in the results list of the "Clear Shelf-Expired Holds" process. ("Wrong-Shelf" holds are those whose pickup lib was changed while the hold was on the holds shelf). The idea behind this option is that branches may use the clear-shelf process as a general shelf management report beyond just holds that have expired. I.e. tell me everything I need to remove from the shelf. This change includes a label change for the clear-shelf menu options: "Clear Shelf-Expired Holds" -> "Clear Holds Shelf" Signed-off-by: Bill Erickson --- .../perlmods/lib/OpenILS/Application/Circ/Holds.pm | 39 +++++++++++++++++++++- Open-ILS/web/opac/locale/en-US/lang.dtd | 4 +-- .../server/locale/en-US/circ.properties | 1 + 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index 820e7c6ccc..b14fed11c7 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -3528,7 +3528,8 @@ sub clear_shelf_process { my %cache_data = ( hold => [], transit => [], - shelf => [] + shelf => [], + pl_changed => pickup_lib_changed_on_shelf_holds($e, $org_id, \@hold_ids) ); for my $hold (@holds) { @@ -3577,6 +3578,42 @@ sub clear_shelf_process { } } +# returns IDs for holds that are on the holds shelf but +# have had their pickup_libs change while on the shelf. +sub pickup_lib_changed_on_shelf_holds { + my $e = shift; + my $org_id = shift; + my $ignore_holds = shift; + $ignore_holds = [$ignore_holds] if !ref($ignore_holds); + + my $query = { + select => { alhr => ['id'] }, + from => { + alhr => { + acp => { + field => 'id', + fkey => 'current_copy' + }, + } + }, + where => { + '+acp' => { status => OILS_COPY_STATUS_ON_HOLDS_SHELF }, + '+alhr' => { + capture_time => { "!=" => undef }, + fulfillment_time => undef, + current_shelf_lib => $org_id, + pickup_lib => {'!=' => {'+alhr' => 'current_shelf_lib'}} + } + } + }; + + $query->{where}->{'+alhr'}->{id} = + {'not in' => $ignore_holds} if @$ignore_holds; + + my $hold_ids = $e->json_query($query); + return [ map { $_->{id} } @$hold_ids ]; +} + __PACKAGE__->register_method( method => 'usr_hold_summary', api_name => 'open-ils.circ.holds.user_summary', diff --git a/Open-ILS/web/opac/locale/en-US/lang.dtd b/Open-ILS/web/opac/locale/en-US/lang.dtd index 41d9bf02a6..45e88908e7 100644 --- a/Open-ILS/web/opac/locale/en-US/lang.dtd +++ b/Open-ILS/web/opac/locale/en-US/lang.dtd @@ -1032,7 +1032,7 @@ - + @@ -2304,7 +2304,7 @@ - + diff --git a/Open-ILS/xul/staff_client/server/locale/en-US/circ.properties b/Open-ILS/xul/staff_client/server/locale/en-US/circ.properties index 2acaf706b2..6b5071b0d6 100644 --- a/Open-ILS/xul/staff_client/server/locale/en-US/circ.properties +++ b/Open-ILS/xul/staff_client/server/locale/en-US/circ.properties @@ -331,6 +331,7 @@ staff.circ.utils.hold_post_clear_shelf_action.label=Post-Clear staff.circ.utils.hold_post_clear_shelf_action.hold=Need for Hold staff.circ.utils.hold_post_clear_shelf_action.transit=Need for Transit staff.circ.utils.hold_post_clear_shelf_action.shelf=Reshelve +staff.circ.utils.hold_post_clear_shelf_action.pl_changed=Wrong Shelf staff.circ.utils.frozen=Frozen? staff.circ.utils.active=Active? staff.circ.utils.thaw_date=Activation Date -- 2.11.0