<label>{{user_setting_types['opac.default_pickup_location'].label()}}</label>
</div>
<div class="col-md-3 reg-field-input">
- <eg-org-selector selected="" onchange=""></eg-org-selector>
+ <eg-org-selector selected="patron.home_ou" onchange=""></eg-org-selector>
</div>
</div>
</div>
</div>
+<div class="row pad-all-min form-group" ng-if="org_settings['sms.enable']">
+ <div class="col-md-3 reg-field-label">
+ <label>[% l('Receive Holds Notices by SMS') %]</label>
+ </div>
+ <div class="col-md-3 reg-field-input">
+ <div class='checkbox'>
+ <input type='checkbox' ng-model="hold_notify_sms"/>
+ </div>
+ </div>
+</div>
- <!--
- <div class="btn-group" dropdown>
- <button type="button" class="btn btn-default dropdown-toggle">
- <span style="padding-right: 5px;">
- {{patron.net_access_level.name() || "[% l('Net Access Level') %]"}}
- </span>
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li ng-repeat="level in net_access_levels">
- <a href
- ng-click="patron.net_access_level = level">{{level.name()}}</a>
- </li>
- </ul>
+<div class="row pad-all-min form-group" ng-if="org_settings['sms.enable']">
+ <div class="col-md-3 reg-field-label">
+ <label>[% l('Default SMS/Text Number') %]</label>
</div>
- -->
+ <div class="col-md-3 reg-field-input">
+ <input type='text'/>
+ </div>
+</div>
+
+<div class="row pad-all-min form-group" ng-if="org_settings['sms.enable']">
+ <div class="col-md-3 reg-field-label">
+ <label>[% l('Default SMS Carrier') %]</label>
+ </div>
+ <div class="col-md-3 reg-field-input">
+ <div class="btn-group" dropdown>
+ <button type="button" class="btn btn-default dropdown-toggle">
+ <span style="padding-right: 5px;"></span>
+ <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ <li ng-repeat="carrier in sms_carriers">
+ <a href
+ ng-click="user_settings['opac.default_sms_carrier'] = carrier">
+ {{carrier.name()}}
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+</div>
<!-- addresses -->
<!-- pending address -->
<!-- stat cats -->
-<!-- surveys -->
+<div class="row pad-all-min form-group" ng-repeat="stat_cat in stat_cats">
+ <div class="col-md-3 reg-field-label">
+ <label>{{stat_cat.name()}}</label>
+ </div>
+ <div class="col-md-3 reg-field-input">
+
+ <div ng-if="!stat_cat.entries().length">
+ <input type='text'/>
+ </div>
+ <div class="btn-group" dropdown ng-if="stat_cat.entries().length">
+ <button type="button" class="btn btn-default dropdown-toggle">
+ <span style="padding-right: 5px;"></span>
+ <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ <li ng-repeat="entry in stat_cat.entries()">
+ <a href ng-click="">{{entry.value()}}</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+</div>
+
+<!-- surveys -->
.factory('patronRegSvc', ['$q', 'egCore', function($q, egCore) {
var service = {
- field_doc : {},
- profiles : []
+ field_doc : {}, // config.idl_field_doc
+ profiles : [], // permission groups
+ sms_carriers : [],
+ user_settings : {}, // applied user settings
+ user_setting_types : {},
+ modified_user_settings : {} // settings modifed this session
};
+ // launch a series of parallel data retrieval calls
service.init = function(scope) {
- // launches a series of parallel data retrieval calls
return $q.all([
service.get_field_doc(),
service.get_perm_groups(),
service.get_ident_types(),
service.get_user_settings(),
+ service.get_org_settings(),
+ service.get_stat_cats(),
service.get_net_access_levels()
]);
};
+ service.get_stat_cats = function() {
+ return egCore.net.request(
+ 'open-ils.circ',
+ 'open-ils.circ.stat_cat.actor.retrieve.all',
+ egCore.auth.token(), egCore.auth.user().ws_ou()
+ ).then(function(cats) {
+ service.stat_cats = cats;
+ });
+ };
+
+ service.get_org_settings = function() {
+ return egCore.org.settings([
+ 'global.password_regex',
+ 'global.juvenile_age_threshold',
+ 'patron.password.use_phone',
+ 'ui.patron.default_inet_access_level',
+ 'ui.patron.default_ident_type',
+ 'ui.patron.default_country',
+ 'ui.patron.registration.require_address',
+ 'circ.holds.behind_desk_pickup_supported',
+ 'circ.patron_edit.clone.copy_address',
+ 'ui.patron.edit.au.prefix.require',
+ 'ui.patron.edit.au.prefix.show',
+ 'ui.patron.edit.au.prefix.suggest',
+ 'ui.patron.edit.ac.barcode.regex',
+ 'ui.patron.edit.au.second_given_name.show',
+ 'ui.patron.edit.au.second_given_name.suggest',
+ 'ui.patron.edit.au.suffix.show',
+ 'ui.patron.edit.au.suffix.suggest',
+ 'ui.patron.edit.au.alias.show',
+ 'ui.patron.edit.au.alias.suggest',
+ 'ui.patron.edit.au.dob.require',
+ 'ui.patron.edit.au.dob.show',
+ 'ui.patron.edit.au.dob.suggest',
+ 'ui.patron.edit.au.dob.calendar',
+ 'ui.patron.edit.au.juvenile.show',
+ 'ui.patron.edit.au.juvenile.suggest',
+ 'ui.patron.edit.au.ident_value.show',
+ 'ui.patron.edit.au.ident_value.suggest',
+ 'ui.patron.edit.au.ident_value2.show',
+ 'ui.patron.edit.au.ident_value2.suggest',
+ 'ui.patron.edit.au.email.require',
+ 'ui.patron.edit.au.email.show',
+ 'ui.patron.edit.au.email.suggest',
+ 'ui.patron.edit.au.email.regex',
+ 'ui.patron.edit.au.email.example',
+ 'ui.patron.edit.au.day_phone.require',
+ 'ui.patron.edit.au.day_phone.show',
+ 'ui.patron.edit.au.day_phone.suggest',
+ 'ui.patron.edit.au.day_phone.regex',
+ 'ui.patron.edit.au.day_phone.example',
+ 'ui.patron.edit.au.evening_phone.require',
+ 'ui.patron.edit.au.evening_phone.show',
+ 'ui.patron.edit.au.evening_phone.suggest',
+ 'ui.patron.edit.au.evening_phone.regex',
+ 'ui.patron.edit.au.evening_phone.example',
+ 'ui.patron.edit.au.other_phone.require',
+ 'ui.patron.edit.au.other_phone.show',
+ 'ui.patron.edit.au.other_phone.suggest',
+ 'ui.patron.edit.au.other_phone.regex',
+ 'ui.patron.edit.au.other_phone.example',
+ 'ui.patron.edit.phone.regex',
+ 'ui.patron.edit.phone.example',
+ 'ui.patron.edit.au.active.show',
+ 'ui.patron.edit.au.active.suggest',
+ 'ui.patron.edit.au.barred.show',
+ 'ui.patron.edit.au.barred.suggest',
+ 'ui.patron.edit.au.master_account.show',
+ 'ui.patron.edit.au.master_account.suggest',
+ 'ui.patron.edit.au.claims_returned_count.show',
+ 'ui.patron.edit.au.claims_returned_count.suggest',
+ 'ui.patron.edit.au.claims_never_checked_out_count.show',
+ 'ui.patron.edit.au.claims_never_checked_out_count.suggest',
+ 'ui.patron.edit.au.alert_message.show',
+ 'ui.patron.edit.au.alert_message.suggest',
+ 'ui.patron.edit.aua.post_code.regex',
+ 'ui.patron.edit.aua.post_code.example',
+ 'ui.patron.edit.aua.county.require',
+ 'format.date',
+ 'ui.patron.edit.default_suggested',
+ 'opac.barcode_regex',
+ 'opac.username_regex',
+ 'sms.enable',
+ 'ui.patron.edit.aua.state.require',
+ 'ui.patron.edit.aua.state.suggest',
+ 'ui.patron.edit.aua.state.show'
+ ]).then(function(settings) {
+ service.org_settings = settings;
+ return service.process_org_settings(settings);
+ });
+ };
+
+ // some data retrieval depe
+ service.process_org_settings = function(settings) {
+
+ if (!settings['sms.enable']) {
+ return $q.when();
+ }
+
+ return egCore.pcrud.search('csc',
+ {active: 'true'},
+ {'order_by':[
+ {'class':'csc', 'field':'name'},
+ {'class':'csc', 'field':'region'}
+ ]},
+ {atomic : true}
+ ).then(function(carriers) {
+ service.sms_carriers = carriers;
+ });
+ };
+
service.get_ident_types = function() {
return egCore.pcrud.retrieveAll('cit', {}, {atomic : true})
.then(function(types) { service.ident_types = types });
service.get_user_settings = function() {
var org_ids = egCore.org.ancestors(egCore.auth.user().ws_ou(), true);
- service.modified_user_settings = {};
- service.user_setting_types = {};
return egCore.pcrud.search('cust', {
'-or' : [
'opac.default_phone',
'opac.default_pickup_location',
'opac.default_sms_carrier',
- 'opac.default_sms_notify'
- ]},
+ 'opac.default_sms_notify']},
{name : {
'in': {
select : {atevdef : ['opt_in_setting']},
}
// apply default user setting values
- service.user_settings = {};
angular.forEach(setting_types, function(stype, index) {
if (stype.reg_default() != undefined) {
service.modified_user_settings[setting.name()] =
$q, egCore, patronSvc, patronRegSvc) {
$q.all([
+
$scope.initTab ? // initTab comes from patron app
$scope.initTab('edit', $routeParams.id) : $q.when(),
+
patronRegSvc.init()
]).then(function() {
// called after initTab and patronRegSvc.init have completed
- $scope.patron = patronRegSvc.init_patron(patronSvc.current);
- $scope.field_doc = patronRegSvc.field_doc;
- $scope.profiles = patronRegSvc.profiles;
- $scope.ident_types = patronRegSvc.ident_types;
- $scope.net_access_levels = patronRegSvc.net_access_levels;
- $scope.user_settings = patronRegSvc.user_settings;
- $scope.user_setting_types = patronRegSvc.user_setting_types;
- $scope.modified_user_settings = patronRegSvc.modified_user_settings;
+ var prs = patronRegSvc; // brevity
+ $scope.patron = prs.init_patron(patronSvc.current);
+ $scope.field_doc = prs.field_doc;
+ $scope.profiles = prs.profiles;
+ $scope.ident_types = prs.ident_types;
+ $scope.net_access_levels = prs.net_access_levels;
+ $scope.user_settings = prs.user_settings;
+ $scope.user_setting_types = prs.user_setting_types;
+ $scope.modified_user_settings = prs.modified_user_settings;
+ $scope.org_settings = prs.org_settings;
+ $scope.sms_carriers = prs.sms_carriers;
+ $scope.stat_cats = prs.stat_cats;
});
// returns the tree depth of the selected profile group tree node.