[% MACRO formfield(cls, field, path, input_type) BLOCK;
- # input field generator for common text/number/checkbox fields
+ # input field generator for common text/number/checkbox fields
- IF NOT input_type; input_type = 'text'; END %]
+ IF NOT input_type; input_type = 'text'; END %]
-<div class="row pad-all-min form-group">
+<div class="row pad-all-min2 form-group">
+
+ <div class="col-md-3 reg-field-label"> <!-- field label -->
+
+ <label>{{idl_fields.[% cls %].[% field %].label}}</label>
- <div class="col-md-3 reg-field-label"> <!-- field label -->
+ <!-- field documentation img/link -->
+ <img ng-show="field_doc.[% cls %].[% field %]"
+ ng-click="selected_field_doc=field_doc.[% cls %].[% field %]"
+ src='[% DOC_IMG %]'></img>
+ </div>
+
+ <div class="col-md-3 reg-field-input"> <!-- field form input -->
- <label>{{idl_fields.[% cls %].[% field %].label}}</label>
+ [%
+ model = path ? 'patron.' _ path _ '.' _ field : 'patron.' _ field;
+ IF input_type == 'checkbox' %]
- <!-- field documentation img/link -->
- <img ng-show="field_doc.[% cls %].[% field %]"
- ng-click="selected_field_doc=field_doc.[% cls %].[% field %]"
- src='[% DOC_IMG %]'></img>
+ <div class='checkbox'>
+ <input type='checkbox' ng-model='[% model %]'/>
</div>
- <div class="col-md-3 reg-field-input"> <!-- field form input -->
+ [% ELSE %]
+ <!-- text / number input -->
- [%
- model = path ? 'patron.' _ path _ '.' _ field : 'patron.' _ field;
- IF input_type == 'checkbox' %]
+ <input type="[% input_type %]"
+ class="form-control" ng-model="[% model %]"/>
+ [% END %]
+ </div>
- <div class='checkbox'>
- <input type='checkbox' ng-model='[% model %]'/>
- </div>
+ <div class="col-md-3 patron-reg-example">
+ [% set_str = "org_settings['ui.patron.edit." _
+ cls _ "." _ field _ ".example']"; %]
- [% ELSE %]
- <!-- text / number input -->
+ <span ng-if="[% set_str %]">
+ [% l('Example: [_1]', "{{" _ set_str _ "}}") %]
+ </span>
- <input type="[% input_type %]"
- class="form-control" ng-model="[% model %]"/>
- [% END %]
- </div>
+ [% IF field.match('phone') %]
+ <!-- phones have a fall-through example option -->
+ <span ng-if="![% set_str %]">
+ [% l('Example: [_1]',
+ "{{org_settings['ui.patron.edit.phone.example']}}") %]
+ </span>
+ [% END %]
+
+ </div>
</div>
[% END %]
[% formfield('au', 'alias') %]
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.dob.label}}</label>
- <img ng-show="field_doc.au.dob"
- ng-click="selected_field_doc=field_doc.au.dob"
- src='[% DOC_IMG %]'></img>
- </div>
- <div class="col-md-3 reg-field-input">
- <input eg-date-input
- class="form-control" ng-model="patron.dob"/>
- </div>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.dob.label}}</label>
+ <img ng-show="field_doc.au.dob"
+ ng-click="selected_field_doc=field_doc.au.dob"
+ src='[% DOC_IMG %]'></img>
+ </div>
+ <div class="col-md-3 reg-field-input">
+ <input eg-date-input
+ class="form-control" ng-model="patron.dob"/>
+ </div>
</div>
[% formfield('au', 'juvenile', '', 'checkbox') %]
<!-- ident_type -->
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.ident_type.label}}</label>
- <img ng-show="field_doc.au.ident_type"
- ng-click="selected_field_doc=field_doc.au.ident_type"
- src='[% DOC_IMG %]'></img>
- </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;">
- {{patron.ident_type.name() || "[% l('Primary Ident Type') %]"}}
- </span>
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li ng-repeat="type in ident_types">
- <a href ng-click="patron.ident_type = type">{{type.name()}}</a>
- </li>
- </ul>
- </div>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.ident_type.label}}</label>
+ <img ng-show="field_doc.au.ident_type"
+ ng-click="selected_field_doc=field_doc.au.ident_type"
+ src='[% DOC_IMG %]'></img>
+ </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;">
+ {{patron.ident_type.name() || "[% l('Primary Ident Type') %]"}}
+ </span>
+ <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ <li ng-repeat="type in ident_types">
+ <a href ng-click="patron.ident_type = type">{{type.name()}}</a>
+ </li>
+ </ul>
</div>
+ </div>
</div>
[% formfield('au', 'ident_value') %]
[% formfield('au', 'ident_value2') %]
-[% formfield('au', 'email') %]
+[% formfield('au', 'email', '', 'email') %]
[% formfield('au', 'day_phone') %]
[% formfield('au', 'evening_phone') %]
[% formfield('au', 'other_phone') %]
<!-- home org unit selector -->
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.home_ou.label}}</label>
- <img ng-show="field_doc.au.home_ou"
- ng-click="selected_field_doc=field_doc.au.home_ou"
- src='[% DOC_IMG %]'></img>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.home_ou.label}}</label>
+ <img ng-show="field_doc.au.home_ou"
+ ng-click="selected_field_doc=field_doc.au.home_ou"
+ src='[% DOC_IMG %]'></img>
</div>
<div class="col-md-3 reg-field-input">
- <eg-org-selector selected="patron.home_ou"
- onchange=""></eg-org-selector>
- </div>
+ <eg-org-selector selected="patron.home_ou" onchange="">
+ </eg-org-selector>
+ </div>
</div>
<!-- profile selector -->
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.profile.label}}</label>
- <img ng-show="field_doc.au.profile"
- ng-click="selected_field_doc=field_doc.au.profile"
- src='[% DOC_IMG %]'></img>
- </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;">
- {{patron.profile.name() || "[% l('Profile Group') %]"}}
- </span>
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li ng-repeat="grp in profiles">
- <a href
- style="padding-left: {{pgt_depth(grp) * 10 + 5}}px"
- ng-click="patron.profile = grp">{{grp.name()}}</a>
- </li>
- </ul>
- </div>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.profile.label}}</label>
+ <img ng-show="field_doc.au.profile"
+ ng-click="selected_field_doc=field_doc.au.profile"
+ src='[% DOC_IMG %]'></img>
+ </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;">
+ {{patron.profile.name() || "[% l('Profile Group') %]"}}
+ </span>
+ <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ <li ng-repeat="grp in profiles">
+ <a href
+ style="padding-left: {{pgt_depth(grp) * 10 + 5}}px"
+ ng-click="patron.profile = grp">{{grp.name()}}</a>
+ </li>
+ </ul>
</div>
+ </div>
</div>
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.expire_date.label}}</label>
- <img ng-show="field_doc.au.expire_date"
- ng-click="selected_field_doc=field_doc.au.expire_date"
- src='[% DOC_IMG %]'></img>
- </div>
- <div class="col-md-3 reg-field-input">
- <input eg-date-input
- class="form-control" ng-model="patron.expire_date"/>
- </div>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.expire_date.label}}</label>
+ <img ng-show="field_doc.au.expire_date"
+ ng-click="selected_field_doc=field_doc.au.expire_date"
+ src='[% DOC_IMG %]'></img>
+ </div>
+ <div class="col-md-3 reg-field-input">
+ <input eg-date-input
+ class="form-control" ng-model="patron.expire_date"/>
+ </div>
</div>
<!-- net_access_level -->
<div class="row pad-all-min form-group">
- <div class="col-md-3 reg-field-label">
- <label>{{idl_fields.au.net_access_level.label}}</label>
- <img ng-show="field_doc.au.net_access_level"
- ng-click="selected_field_doc=field_doc.au.net_access_level"
- src='[% DOC_IMG %]'></img>
- </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;">
- {{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>
+ <div class="col-md-3 reg-field-label">
+ <label>{{idl_fields.au.net_access_level.label}}</label>
+ <img ng-show="field_doc.au.net_access_level"
+ ng-click="selected_field_doc=field_doc.au.net_access_level"
+ src='[% DOC_IMG %]'></img>
+ </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;">
+ {{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>
+ </div>
</div>
[% formfield('au', 'active', '', 'checkbox') %]
[% formfield('au', 'alert_message') %]
<div class="alert alert-success row" role="alert">
- <div class="col-md-6">[% l('User Settings') %]</div>
+ <div class="col-md-6">[% l('User Settings') %]</div>
</div>
<div class="row pad-all-min form-group">
<label>{{survey.name()}}</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="question in survey.questions()">
- <a href ng-click=""> {{question.question()}} </a>
- </li>
- </ul>
- </div>
+ <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="question in survey.questions()">
+ <a href ng-click=""> {{question.question()}} </a>
+ </li>
+ </ul>
+ </div>
</div>
</div>
profiles : [], // permission groups
sms_carriers : [],
user_settings : {}, // applied user settings
- user_setting_types : {},
+ user_setting_types : {}, // config.usr_setting_type
modified_user_settings : {} // settings modifed this session
};
});
};
- // some org settings require the retrieval of additional data...
+ // some org settings require the retrieval of additional data
service.process_org_settings = function(settings) {
if (!settings['sms.enable']) {
return egCore.pcrud.search('cust', {
'-or' : [
- {name : [
+ {name : [ // common user settings
'circ.holds_behind_desk',
'circ.collections.exempt',
'opac.hold_notify',
'opac.default_pickup_location',
'opac.default_sms_carrier',
'opac.default_sms_notify']},
- {name : {
+ {name : { // opt-in notification user settings
'in': {
select : {atevdef : ['opt_in_setting']},
from : 'atevdef',
});
if(service.patron_id) {
+ // retrieve applied values for the current user
+ // for the setting types we care about.
var setting_names =
setting_types.map(function(obj) { return obj.name() });
return service.init_new_patron();
service.patron = current;
- service.patron_id = current.id();
return service.init_existing_patron(current)
}
/*
- * Existing patron objects reqire massaging before insertion
+ * Existing patron objects reqire some data munging before insertion
* into the scope.
*
* 1. Turn everything into a hash
}
service.init_new_patron = function() {
+
+ var addr = {
+ valid : true,
+ within_city_limits : true
+ // default state, etc.
+ };
+
return {
isnew : true,
active : true,
card : {},
home_ou : egCore.org.get(egCore.auth.user().ws_ou()),
// TODO default profile group?
+ mailing_address : addr,
+ addresses : [addr]
};
}
function PatronRegCtrl($scope, $routeParams,
$q, egCore, patronSvc, patronRegSvc) {
+ $scope.clone_id = $routeParams.clone_id;
+ $scope.stage_username = $routeParams.stage_username;
+ $scope.patron_id =
+ patronRegSvc.patron_id = $routeParams.edit_id || $routeParams.id;
+
$q.all([
$scope.initTab ? // initTab comes from patron app
// called after initTab and patronRegSvc.init have completed
var prs = patronRegSvc; // brevity
- $scope.patron = prs.init_patron(patronSvc.current);
+ // in standalone mode, we have no patronSvc
+ $scope.patron = prs.init_patron(patronSvc ? patronSvc.current : null);
$scope.field_doc = prs.field_doc;
$scope.profiles = prs.profiles;
$scope.ident_types = prs.ident_types;
aua : egCore.idl.classes.aua.field_map
};
- $scope.patron_id = $routeParams.edit_id || $routeParams.id;
- $scope.clone_id = $routeParams.clone_id;
- $scope.stage_username = $routeParams.stage_username;
}