LP#1750894 Hatch server settings continued
authorBill Erickson <berickxx@gmail.com>
Wed, 4 Apr 2018 14:55:25 +0000 (10:55 -0400)
committerBill Erickson <berickxx@gmail.com>
Tue, 29 May 2018 14:13:36 +0000 (10:13 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/web/js/ui/default/staff/services/hatch.js

index 216b462..cdadae9 100644 (file)
@@ -70,7 +70,9 @@ angular.module('egCoreMod')
 
     // For testing (and possibly migration) purposes, hard-code the
     // list of settings that are available to be applied on the server,
-    // either via workstation or user settings.
+    // either via workstation or user settings.  Ultimately, the 
+    // assumption will be that all settings live on the server except
+    // those specified by service.browserOnlyPrefixes.
     service.serverSettings = [
         'eg.circ.checkin.no_precat_alert',
         'eg.circ.checkin.noop',
@@ -247,6 +249,9 @@ angular.module('egCoreMod')
     // get the value for a stored item
     service.getItem = function(key) {
 
+        if (service.keyStoredOnServer(key))
+            return service.getServerItem(key);
+
         if (!service.useSettings())
             return $q.when(service.getLocalItem(key));
 
@@ -331,15 +336,66 @@ angular.module('egCoreMod')
 
     service.setServerItem = function(key, value) {
         if (!service.auth) service.auth = $injector.get('egAuth');
+        if (!service.auth.token()) return $q.when();
         var settings = {};
         settings[key] = value;
         return egNet.request(
             'open-ils.actor',
             'open-ils.actor.settings.apply.user_or_ws',
             service.auth.token(), settings
+        ).then(function(settings) {
+            return service.keyCache[key] = value;
+        });
+    }
+
+    service.getServerItem = function(key) {
+        if (service.keyCache[key] != undefined)
+            return $q.when(service.keyCache[key])
+
+        if (!service.auth) service.auth = $injector.get('egAuth');
+        if (!service.auth.token()) return $q.when(null);
+
+        return egNet.request(
+            'open-ils.actor',
+            'open-ils.actor.settings.retrieve.atomic',
+            [key], service.auth.token()
+        ).then(function(settings) {
+            service.keyCache[key] = settings[0] ? settings[0][key] : null;
+            return service.keyCache[key];
+        });
+    }
+
+    service.getServerItemBatch = function(keys) {
+        // no cache checking for now.  assumes batch mode is only
+        // called once on page load.  maybe add cache checking later.
+        if (!service.auth) service.auth = $injector.get('egAuth');
+        if (!service.auth.token()) return $q.when({});
+
+        var foundValues = {};
+        return egNet.request(
+            'open-ils.actor',
+            'open-ils.actor.settings.retrieve',
+            keys, service.auth.token()
+        ).then(
+            function() {
+                // cache a value of null for any settings that have
+                // no server values applied
+                angular.forEach(keys, function(key) {
+                    if (Object.keys(foundValues).indexOf(key) == -1) 
+                        service.keyCache[key] = foundValues[key] = null;
+                });
+                return foundValues;
+            }, 
+            null,
+            function(setting) {
+                // when streaming we receive one setting per response
+                var key = Object.keys(setting)[0];
+                service.keyCache[key] = foundValues[key] = setting[key];
+            }
         );
     }
 
+
     // set the value for a stored or new item
     service.setRemoteItem = function(key, value) {
         service.keyCache[key] = value;
@@ -421,6 +477,9 @@ angular.module('egCoreMod')
 
     // remove a stored item
     service.removeItem = function(key) {
+        if (service.keyStoredOnServer(key))
+            return service.setServerItem(key, null);
+
         if (!service.useSettings())
             return $q.when(service.removeLocalItem(key));