webstaff: correct merge error of idl.Clone (and also simplify it); protect against...
authorMike Rylander <mrylander@gmail.com>
Wed, 31 May 2017 15:51:37 +0000 (11:51 -0400)
committerMike Rylander <mrylander@gmail.com>
Wed, 31 May 2017 15:52:21 +0000 (11:52 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/web/js/ui/default/staff/serials/services/core.js
Open-ILS/web/js/ui/default/staff/services/idl.js

index 47d1bf5..5f057c4 100644 (file)
@@ -185,7 +185,8 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm
     service.fetchLastCallnumber = function(contextOrg) {
         return egCore.pcrud.search('acn', {
                 record : service.bibId,
-                owning_lib : contextOrg
+                owning_lib : contextOrg,
+                deleted : 'f'
             }, { order_by : [{class:'acn',field:'create_date',direction:'desc'}], limit : 1 },
             { atomic : true }
         ).then(function(list) {
@@ -819,7 +820,7 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm
                                 pile_o_promises.push(
                                     service.fetchLastCallnumber(
                                         i.stream().distribution().holding_lib().id()
-                                    ).then(function(cn){ i._call_number = cn.label() })
+                                    ).then(function(cn){ if (cn) i._call_number = cn.label() })
                                 );
                             }
                         }
index af626f2..629e595 100644 (file)
@@ -24,61 +24,28 @@ angular.module('egCoreMod')
     service.Clone = function(old, depth) {
         if (depth === undefined) depth = 100;
         var obj;
-        if (typeof old == 'undefined') {
+        if (typeof old == 'undefined' || old === null) {
             return old;
         } else if (old._isfieldmapper) {
             obj = new service[old.classname]()
-
-            for( var i in old.a ) {
-                var thing = old.a[i];
-                if(thing === null) continue;
-
-                if (typeof thing == 'undefined') {
-                    obj.a[i] = thing;
-                } else if (thing._isfieldmapper) {
-                    if (depth) obj.a[i] = service.Clone(thing, depth - 1);
-                } else {
-                    if(angular.isArray(thing)) {
-                        obj.a[i] = [];
-
-                        for( var j in thing ) {
-
-                            if (typeof thing[j] == 'undefined') {
-                                obj.a[i][j] = thing[j];
-                            } else if( thing[j]._isfieldmapper ) {
-                                if (depth) obj.a[i][j] = service.Clone(thing[j], depth - 1);
-                            } else {
-                                obj.a[i][j] = angular.copy(thing[j]);
-                            }
-                        }
-                    }
-                }
-            }
+            if (old.a) obj.a = service.Clone(old.a, depth); // pass same depth because we're still cloning this same object
         } else {
             if(angular.isArray(old)) {
                 obj = [];
-                for( var j in old ) {
-                    if (typeof old[j] == 'undefined') {
-                        obj[j] = old[j];
-                    } else if( old[j]._isfieldmapper ) {
-                        if (depth) obj[j] = service.Clone(old[j], depth - 1);
-                    } else {
-                        obj[j] = angular.copy(old[j]);
-                    }
-                }
             } else if(angular.isObject(old)) {
                 obj = {};
-                for( var j in old ) {
-                    if (typeof old[j] == 'undefined') {
-                        obj[j] = old[j];
-                    } else if( old[j]._isfieldmapper ) {
-                        if (depth) obj[j] = service.Clone(old[j], depth - 1);
-                    } else {
-                        obj[j] = angular.copy(old[j]);
-                    }
-                }
             } else {
-                obj = angular.copy(old);
+                 return angular.copy(old);
+            }
+
+            for( var j in old ) {
+                if (old[j] === null || typeof old[j] == 'undefined') {
+                    obj[j] = old[j];
+                } else if( old[j]._isfieldmapper ) {
+                    if (depth) obj[j] = service.Clone(old[j], depth - 1);
+                } else {
+                    obj[j] = angular.copy(old[j]);
+                }
             }
         }
         return obj;