From 1114b1d7b28563cfbc75d0f15f5cc7f8cb85ca4b Mon Sep 17 00:00:00 2001 From: Cesar Velez Date: Wed, 28 Feb 2018 14:08:08 -0500 Subject: [PATCH] LP1699838 - add YOUSes for defaulting hold pickup locs Add a YAOUS... err make that two, to control how staff-placed holds default the pickup library. Signed-off by: Cesar Velez Signed-off-by: Kathy Lussier --- ...ata.yaos-circ-holds-default-pickup-lib.sql | 14 ++++ Open-ILS/web/js/ui/default/opac/staff.js | 49 +++++++++--- .../js/ui/default/staff/services/eframe.js | 78 ++++++++++++------- 3 files changed, 104 insertions(+), 37 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaos-circ-holds-default-pickup-lib.sql diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaos-circ-holds-default-pickup-lib.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaos-circ-holds-default-pickup-lib.sql new file mode 100644 index 0000000000..236dc1bfb0 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaos-circ-holds-default-pickup-lib.sql @@ -0,0 +1,14 @@ +BEGIN; + +-- SELECT evergreen.upgrade_deps_block_check('xxxx', :eg_version); + +INSERT into config.org_unit_setting_type (name, label, grp, description, datatype) +values ('circ.staff_placed_holds_honor_patron_prefs_first','Honor the patron-preferred Pickup Library as default for staff-placed holds.', + 'circ', 'Honor the patron-preferred Pickup Library as the default for staff-placed holds.', 'bool'); + +INSERT into config.org_unit_setting_type (name, label, grp, description, datatype) +values ('circ.staff_placed_holds_staff_ws_ou_override','During Staff-placed holds, use the patron-preferred location or their home OU instead of the Staff User Workstation Org. unit as default pickup location.', + 'circ', 'During staff-placed holds, use the patron-preferred location or their home OU instead of the Staff User Workstation Org. unit as default pickup location.', 'bool'); + +COMMIT; + diff --git a/Open-ILS/web/js/ui/default/opac/staff.js b/Open-ILS/web/js/ui/default/opac/staff.js index 37d9a3c8c6..711c995686 100644 --- a/Open-ILS/web/js/ui/default/opac/staff.js +++ b/Open-ILS/web/js/ui/default/opac/staff.js @@ -109,14 +109,43 @@ function staff_hold_usr_barcode_changed2( return; } cur_hold_barcode = load_info.barcode; - if(!only_settings || (isload && isload !== true)) document.getElementById('hold_usr_input').value = load_info.barcode; // Safe at this point as we already set cur_hold_barcode - if(!only_settings || (isload && isload !== true) && load_info.pickup_lib) document.getElementById('pickup_lib').value = load_info.pickup_lib; // Safe at this point as we already set cur_hold_barcode - if(load_info.settings['opac.default_pickup_location']) - document.getElementById('pickup_lib').value = load_info.settings['opac.default_pickup_location']; - if(!load_info.settings['opac.default_phone']) load_info.settings['opac.default_phone'] = ''; - if(!load_info.settings['opac.default_sms_notify']) load_info.settings['opac.default_sms_notify'] = ''; - if(!load_info.settings['opac.default_sms_carrier']) load_info.settings['opac.default_sms_carrier'] = ''; - if(load_info.settings['opac.hold_notify'] || load_info.settings['opac.hold_notify'] === '') { + if (!only_settings || (isload && isload !== true)) { + document.getElementById('hold_usr_input').value = load_info.barcode; + // Safe at this point as we already set cur_hold_barcode + } + + var patronDefaultPickupOU; + if (!only_settings || (isload && isload !== true) && load_info.pickup_lib) { + + // Patron default is either their preferred pickup loc or their home OU + patronDefaultPickupOU = load_info.settings['opac.default_pickup_location'] + ? load_info.settings['opac.default_pickup_location'] : load_info.pickup_lib; + + document.getElementById('pickup_lib').value = patronDefaultPickupOU; + // Safe at this point as we already set cur_hold_barcode + } + + if (load_info.settings['staff_WS_OU']){ // this is staff-placed hold! + + // check wether we want to default to staff's WS OU or just the patron's Home OU + document.getElementById('pickup_lib').value = load_info.settings['overrideStaff_WS_OU'] + ? patronDefaultPickupOU : load_info.settings['staff_WS_OU']; + + // use staff WS OU as default pickup_lib unless YAOUS says otherwise + document.getElementById('pickup_lib').value = load_info.settings['honorPatronPrefPickupOU'] + ? patronDefaultPickupOU : load_info.settings['staff_WS_OU']; + + } + + if (!load_info.settings['opac.default_sms_notify']){ + load_info.settings['opac.default_sms_notify'] = ''; + } + + if (!load_info.settings['opac.default_sms_carrier']){ + load_info.settings['opac.default_sms_carrier'] = ''; + } + + if (load_info.settings['opac.hold_notify'] || load_info.settings['opac.hold_notify'] === '') { var email = load_info.settings['opac.hold_notify'].indexOf('email') > -1; var phone = load_info.settings['opac.hold_notify'].indexOf('phone') > -1; var sms = load_info.settings['opac.hold_notify'].indexOf('sms') > -1; @@ -127,8 +156,10 @@ function staff_hold_usr_barcode_changed2( update_elements = document.getElementsByName('sms_notify_checkbox'); for(var i in update_elements) update_elements[i].checked = (sms ? 'checked' : ''); } + update_elements = document.getElementsByName('phone_notify'); - for(var i in update_elements) update_elements[i].value = load_info.settings['opac.default_phone']; + for(var i in update_elements) update_elements[i].value = load_info.settings['opac.default_phone'] + ? load_info.settings['opac.default_phone'] : ''; update_elements = document.getElementsByName('sms_notify'); for(var i in update_elements) update_elements[i].value = load_info.settings['opac.default_sms_notify']; update_elements = document.getElementsByName('sms_carrier'); diff --git a/Open-ILS/web/js/ui/default/staff/services/eframe.js b/Open-ILS/web/js/ui/default/staff/services/eframe.js index ae26e7f74a..1b423b2faf 100644 --- a/Open-ILS/web/js/ui/default/staff/services/eframe.js +++ b/Open-ILS/web/js/ui/default/staff/services/eframe.js @@ -239,34 +239,56 @@ angular.module('egCoreMod') return null; } - // copied more or less directly from XUL menu.js - var settings = {}; - for(var i = 0; i < user.settings().length; i++) { - settings[user.settings()[i].name()] = - JSON2js(user.settings()[i].value()); - } - - if(!settings['opac.default_phone'] && user.day_phone()) - settings['opac.default_phone'] = user.day_phone(); - if(!settings['opac.hold_notify'] && settings['opac.hold_notify'] !== '') - settings['opac.hold_notify'] = 'email:phone'; - - // Taken from patron/util.js format_name - // FIXME: I18n - var patron_name = - ( user.prefix() ? user.prefix() + ' ' : '') + - user.family_name() + ', ' + - user.first_given_name() + ' ' + - ( user.second_given_name() ? user.second_given_name() + ' ' : '' ) + - ( user.suffix() ? user.suffix() : ''); - - deferred.resolve({ - "barcode": barcode, - "pickup_lib": user.home_ou(), - "settings" : settings, - "user_email" : user.email(), - "patron_name" : patron_name - }); + egCore.org.settings(['circ.staff_placed_holds_honor_patron_prefs_first', + 'circ.staff_placed_holds_staff_ws_ou_override']) + .then(function(auth_usr_aous){ + + // copied more or less directly from XUL menu.js + var settings = {}; + for(var i = 0; i < user.settings().length; i++) { + settings[user.settings()[i].name()] = + JSON2js(user.settings()[i].value()); + } + + // find applicable YAOUSes for staff-placed holds + var honorPatronPrefPickupOU; + var overrideStaff_WS_OU; + var requestor = egCore.auth.user(); + if (requestor.id() !== user.id()){ + // this is a staff-placed hold + + settings["staff_WS_OU"] = requestor.ws_ou(); + if (auth_usr_aous['circ.staff_placed_holds_honor_patron_prefs_first']){ + settings['honorPatronPrefPickupOU'] = true; + } + + if (auth_usr_aous['circ.staff_placed_holds_staff_ws_ou_override']){ + settings['overrideStaff_WS_OU'] = true; + } + } + + if(!settings['opac.default_phone'] && user.day_phone()) + settings['opac.default_phone'] = user.day_phone(); + if(!settings['opac.hold_notify'] && settings['opac.hold_notify'] !== '') + settings['opac.hold_notify'] = 'email:phone'; + + // Taken from patron/util.js format_name + // FIXME: I18n + var patron_name = + ( user.prefix() ? user.prefix() + ' ' : '') + + user.family_name() + ', ' + + user.first_given_name() + ' ' + + ( user.second_given_name() ? user.second_given_name() + ' ' : '' ) + + ( user.suffix() ? user.suffix() : ''); + + deferred.resolve({ + "barcode": barcode, + "pickup_lib": user.home_ou(), + "settings" : settings, + "user_email" : user.email(), + "patron_name" : patron_name + }); + }); }); return deferred.promise; -- 2.43.2