roll back batch hold permit/create calls and check hold permissibility for each hold...
authorberick <berick@esilibrary.com>
Mon, 7 Mar 2011 17:00:06 +0000 (12:00 -0500)
committerberick <berick@esilibrary.com>
Mon, 7 Mar 2011 17:00:06 +0000 (12:00 -0500)
Open-ILS/web/opac/skin/kcls/js/misc.js

index 1778779..e06f23b 100644 (file)
@@ -118,13 +118,15 @@ function createBibHoldObject(org) {
        
        var hold = new ahr();
        var interval = fetchOrgSettingDefault(G.user.home_ou(), 'circ.hold_expire_interval');
-       if(!interval) interval = 0;
-       var secs = interval_to_seconds(interval);
-       var expire = new Date();
-       expire.setTime(expire.getTime() + Number(secs + '000'));
-       var expireDate = holdsVerifyThawDate(dojo.date.stamp.toISOString(expire)); 
-       
-       if(expireDate) hold.expire_time(expireDate);
+
+       if(interval) {
+           var secs = interval_to_seconds(interval);
+           var expire = new Date();
+           expire.setTime(expire.getTime() + Number(secs + '000'));
+           var expireDate = holdsVerifyThawDate(dojo.date.stamp.toISOString(expire)); 
+           if(expireDate) hold.expire_time(expireDate);
+    }
+
        hold.phone_notify("");
        hold.email_notify(0);
        hold.pickup_lib(org);
@@ -154,7 +156,58 @@ function batchHoldMyList(org, parent) {
 function placeBatchHold(ids, org, error) { // array of bib IDs, pickup lib (optional), error msgs from holds (optional)
        if(!grabUser() || !ids.length) return -1;
        if(!org) org = G.user.home_ou();
-       
+
+       var str = "";
+       var flag = false;
+    var success = -1;
+    var errCount = 0;
+
+    dojo.forEach(ids,
+        function(target) {
+            // first see if the hold is permitted
+                   var hold = createBibHoldObject(org);
+                   hold.target(target);
+            var test = {titleid: hold.target(), hold_type: "T", patronid: G.user.id(), depth: 0, pickup_lib: org}
+
+               var resp = fieldmapper.standardRequest(
+                ['open-ils.circ','open-ils.circ.title_hold.is_possible'], 
+                {   async:false, 
+                    params:[G.user.session, test]
+                }
+            );
+
+            if(!resp.success) {
+                           flag = true;
+                           str += target + ": " + (resp.last_event.desc == "" ? resp.last_event.textcode:  resp.last_event.desc) + "\n";
+                errCount++;
+                return;
+            }
+
+            var resp2 = fieldmapper.standardRequest(
+                ['open-ils.circ','open-ils.circ.holds.create'], 
+                {   async:false, 
+                    params:[grabUser().session, hold]
+                }
+            );
+
+            if(typeof(resp2 == 'object')) {
+                str += target + ": " + resp2[0].desc+"\n";
+                errCount++;
+            } else {
+                success++;
+            }
+
+            if(str != "") error.err+=errCount+" holds not placed successfully\n"+str;
+        }
+    );
+
+       if(str != "") error.err+=errCount+" hold"+(errCount==1?"":"s")+" not placed successfully\n"+str;
+    return ++success;
+
+    /*
+    // Previous batch implementation, which doesn't work because the patron could exceed 
+    // max holds during batch creation, after the initial permit test...
+
        var holds = [];
        var chkArr = [];
        for(var i=0; i<ids.length; i++) {
@@ -162,9 +215,9 @@ function placeBatchHold(ids, org, error) { // array of bib IDs, pickup lib (opti
                holds[i].target(ids[i]);
                chkArr.push({titleid: ids[i], volume_id: undefined, copy_id: undefined, hold_type: "T", patronid: G.user.id(), depth: 0, pickup_lib: org});
        }
+
        
        var resp = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.title_hold.is_possible.batch.atomic'], {async:false, params:[grabUser().session, chkArr]});
-       //if(resp.last_event) alert(resp.last_event.payload.fail_part); else alert('Mulit-hold successful\n'+resp.local_avail);
        
        var str = "";
        var errCount = 0;
@@ -190,6 +243,7 @@ function placeBatchHold(ids, org, error) { // array of bib IDs, pickup lib (opti
        }
        if(str != "") error.err+=errCount+" holds not placed successfully\n"+str;
        return ++count;
+    */
 }
 
 function placeHoldOnCache() {