LP#1759382 Setting: staff placed holds default to workstation user/dbriem/lp1759382_staff_placed_holds_default_to_ws_ou
authorDan Briem <dbriem@wlsmail.org>
Fri, 13 Aug 2021 15:18:11 +0000 (11:18 -0400)
committerDan Briem <dbriem@wlsmail.org>
Fri, 13 Aug 2021 15:18:11 +0000 (11:18 -0400)
New org unit setting for always using the staff's workstation as
the default pickup location for staff placed holds, even if the
user has a preferred pickup location set in their account.

The setting applies on staff placed holds in the Angular and
Traditional/Bootstrap catalog. This includes hold group holds.

If this helps when testing, this is the priority order for
determining the default pickup location:

1. workstation if circ.staff_placed_holds_default_to_ws_ou
2. user preferred location if opac.default_pickup_location
3. workstation if circ.staff_placed_holds_fallback_to_ws_ou
4. user home org unit

Signed-off-by: Dan Briem <dbriem@wlsmail.org>
Open-ILS/src/eg2/src/app/staff/catalog/resolver.service.ts
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/xxxx.data.staff_placed_holds_default_to_ws_ou.sql [new file with mode: 0644]
Open-ILS/web/js/ui/default/opac/staff.js
Open-ILS/web/js/ui/default/staff/services/eframe.js

index f7e9562..95b496a 100644 (file)
@@ -58,7 +58,8 @@ export class CatalogResolver implements Resolve<Promise<any[]>> {
             'eg.staffcat.exclude_electronic',
             'eg.catalog.search.form.open',
             'eg.staff.catalog.results.show_more',
-            'circ.staff_placed_holds_fallback_to_ws_ou'
+            'circ.staff_placed_holds_fallback_to_ws_ou',
+            'circ.staff_placed_holds_default_to_ws_ou'
         ]).then(settings => {
             this.staffCat.defaultSearchOrg =
                 this.org.get(settings['eg.search.search_lib']);
index d0b5136..8b44345 100644 (file)
@@ -223,6 +223,13 @@ sub test_and_create_batch_hold_event {
     my $rand_setting = $U->ou_ancestor_setting_value($org, 'holds.subscription.randomize');
     $randomize = $rand_setting if (defined $rand_setting);
 
+    my $default_to_workstation = $U->is_true(
+        $U->ou_ancestor_setting_value($org, 'circ.staff_placed_holds_default_to_ws_ou')
+    );
+    my $fallback_to_workstation = $U->is_true(
+        $U->ou_ancestor_setting_value($org, 'circ.staff_placed_holds_fallback_to_ws_ou')
+    );
+
     my $target_field;
     if ($$params{'hold_type'} eq 'T') { $target_field = 'titleid'; }
     elsif ($$params{'hold_type'} eq 'C') { $target_field = 'copy_id'; }
@@ -283,7 +290,15 @@ sub test_and_create_batch_hold_event {
                 @{ $usr->settings }
         };
 
-        $$params{pickup_lib} = $$user_setting_map{'opac.default_pickup_location'} || $usr->home_ou;
+        if ($default_to_workstation) {
+            $params->{pickup_lib} = $org;
+        } elsif ($user_setting_map->{'opac.default_pickup_location'}) {
+            $params->{pickup_lib} = $user_setting_map->{'opac.default_pickup_location'};
+        } elsif ($fallback_to_workstation) {
+            $params->{pickup_lib} = $org;
+        } else {
+            $params->{pickup_lib} = $usr->home_ou;
+        }
 
         if ($user_setting_map->{'opac.hold_notify'} =~ /email/) {
             $$params{email_notify} = 1;
index 528ed56..cfb1fc5 100644 (file)
@@ -21673,3 +21673,22 @@ VALUES (
     )
 );
 
+INSERT INTO config.org_unit_setting_type (
+    name, grp, label, description, datatype
+) VALUES (
+    'circ.staff_placed_holds_default_to_ws_ou',
+    'circ',
+    oils_i18n_gettext(
+        'circ.staff_placed_holds_default_to_ws_ou',
+        'Workstation OU is the default for staff-placed holds',
+        'coust',
+        'label'
+    ),
+    oils_i18n_gettext(
+        'circ.staff_placed_holds_default_to_ws_ou',
+        'For staff-placed holds, regardless of the patron preferred pickup location, the staff workstation OU is the default pickup location',
+        'coust',
+        'description'
+    ),
+    'bool'
+);
diff --git a/Open-ILS/src/sql/Pg/upgrade/xxxx.data.staff_placed_holds_default_to_ws_ou.sql b/Open-ILS/src/sql/Pg/upgrade/xxxx.data.staff_placed_holds_default_to_ws_ou.sql
new file mode 100644 (file)
index 0000000..86196f8
--- /dev/null
@@ -0,0 +1,25 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('xxxx', :eg_version);
+
+INSERT INTO config.org_unit_setting_type (
+    name, grp, label, description, datatype
+) VALUES (
+    'circ.staff_placed_holds_default_to_ws_ou',
+    'circ',
+    oils_i18n_gettext(
+        'circ.staff_placed_holds_default_to_ws_ou',
+        'Workstation OU is the default for staff-placed holds',
+        'coust',
+        'label'
+    ),
+    oils_i18n_gettext(
+        'circ.staff_placed_holds_default_to_ws_ou',
+        'For staff-placed holds, regardless of the patron preferred pickup location, the staff workstation OU is the default pickup location',
+        'coust',
+        'description'
+    ),
+    'bool'
+);
+
+COMMIT;
index 525b8d5..9b4d170 100644 (file)
@@ -179,6 +179,7 @@ function staff_hold_usr_barcode_changed2(
 
         // Patron preferred pickup loc always overrides the default pickup lib
         document.getElementById('pickup_lib').value = 
+            !load_info.settings['circ.staff_placed_holds_default_to_ws_ou'] &&
             load_info.settings['opac.default_pickup_location'] ?
             load_info.settings['opac.default_pickup_location'] : load_info.pickup_lib;
     }
index bf27b88..b05c8e0 100644 (file)
@@ -259,8 +259,10 @@ angular.module('egCoreMod')
                                 return null;
                             }
 
-                            egCore.org.settings(['circ.staff_placed_holds_fallback_to_ws_ou'])
-                                .then(function(auth_usr_aous){
+                            egCore.org.settings([
+                                'circ.staff_placed_holds_fallback_to_ws_ou',
+                                'circ.staff_placed_holds_default_to_ws_ou'
+                            ]).then(function(auth_usr_aous) {
 
                                     // copied more or less directly from XUL menu.js
                                     var settings = {};
@@ -268,13 +270,16 @@ angular.module('egCoreMod')
                                         settings[user.settings()[i].name()] = 
                                             JSON2js(user.settings()[i].value());
                                     }
+                                    settings['circ.staff_placed_holds_default_to_ws_ou'] =
+                                        auth_usr_aous['circ.staff_placed_holds_default_to_ws_ou'];
 
                                     // find applicable YAOUSes for staff-placed holds
                                     var requestor = egCore.auth.user();
                                     var pickup_lib = user.home_ou(); // default to home ou
                                     if (requestor.id() !== user.id()){
                                         // this is a staff-placed hold, optionally default to ws ou
-                                        if (auth_usr_aous['circ.staff_placed_holds_fallback_to_ws_ou']){
+                                        if (auth_usr_aous['circ.staff_placed_holds_fallback_to_ws_ou']
+                                            || auth_usr_aous['circ.staff_placed_holds_default_to_ws_ou']) {
                                             pickup_lib = requestor.ws_ou();
                                         }
                                     }