patron reg
authorBill Erickson <berickxx@gmail.com>
Wed, 13 May 2015 14:45:13 +0000 (10:45 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 13 May 2015 14:45:13 +0000 (10:45 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js

index 0de1c8e..5262fc3 100644 (file)
     <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 -->
index 9f7a37e..0816062 100644 (file)
@@ -5,21 +5,138 @@ angular.module('egCoreMod')
 .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 });
@@ -60,8 +177,6 @@ angular.module('egCoreMod')
 
     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' : [
@@ -72,8 +187,7 @@ angular.module('egCoreMod')
                     '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']}, 
@@ -107,7 +221,6 @@ angular.module('egCoreMod')
             }
 
             // 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()] = 
@@ -172,21 +285,27 @@ function PatronRegCtrl($scope, $routeParams,
     $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.