my %cache_data = (
hold => [],
transit => [],
- shelf => []
+ shelf => [],
+ pl_changed => []
);
+ # if requested, find any holds on our shelf whose pickup lib
+ # has been changed to some other branch and include those in
+ # the clear-shelf cache. But, only add them to the pl_changed
+ # list if they are not otherwise getting canceled by this process.
+ $cache_data{pl_changed} =
+ pickup_lib_changed_on_shelf_holds($e, $org_id, \@hold_ids)
+ if $U->ou_ancestor_setting_value($org_id, 'circ.holds.clear_shelf.include_pl_changed');
+
for my $hold (@holds) {
my $copy = $hold->current_copy;
}
}
+# 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',
'bool'
);
+INSERT into config.org_unit_setting_type
+ (name, grp, label, description, datatype)
+ VALUES (
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'holds',
+ oils_i18n_gettext(
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'Clear shelf process includes Wrong-Shelf holds',
+ 'coust',
+ 'label'
+ ),
+ oils_i18n_gettext(
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'If enabled, we include Wrong-Shelf holds in the results list of the holds clear shelf process. Wrong-Shelf holds are those whose pickup lib was changed while the hold was on the holds shelf',
+ 'coust',
+ 'description'
+ ),
+ 'bool'
+ );
+
--- /dev/null
+BEGIN;
+
+-- SELECT evergreen.upgrade_deps_block_check('0730', :eg_version);
+
+INSERT into config.org_unit_setting_type
+ (name, grp, label, description, datatype)
+ VALUES (
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'holds',
+ oils_i18n_gettext(
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'Clear shelf process includes Wrong-Shelf holds',
+ 'coust',
+ 'label'
+ ),
+ oils_i18n_gettext(
+ 'circ.holds.clear_shelf.include_pl_changed',
+ 'If enabled, we include Wrong-Shelf holds in the results list of the holds clear shelf process. Wrong-Shelf holds are those whose pickup lib was changed while the hold was on the holds shelf',
+ 'coust',
+ 'description'
+ ),
+ 'bool'
+ );
+
+COMMIT;
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