From e86c980fe4a18f094b501b97fe41f3193c90647b Mon Sep 17 00:00:00 2001 From: berick Date: Mon, 7 Mar 2011 12:00:06 -0500 Subject: [PATCH] roll back batch hold permit/create calls and check hold permissibility for each hold just before create to prevent exceeding the max-holds limit amount during a batch create; also, if the expire interval setting is null, just don't use --- Open-ILS/web/opac/skin/kcls/js/misc.js | 72 ++++++++++++++++++++++++++++---- 1 files changed, 63 insertions(+), 9 deletions(-) diff --git a/Open-ILS/web/opac/skin/kcls/js/misc.js b/Open-ILS/web/opac/skin/kcls/js/misc.js index 1778779..e06f23b 100644 --- a/Open-ILS/web/opac/skin/kcls/js/misc.js +++ b/Open-ILS/web/opac/skin/kcls/js/misc.js @@ -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