+++ /dev/null
-var holdsOrgSelectorBuilt = false;\r
-var holdArgs;\r
-\r
-/* \r
-note: metarecord holds have a holdable_formats field that contains\r
-item_type(s)-item_forms(s)-language\r
-item_form and language are optional - if language exist and no \r
-item_form is specified, use item_type(s)--language\r
-*/\r
-\r
-var noEmailMessage;\r
-var noEmailMessageXUL;\r
-\r
-function hideResultsPage(bool) {\r
- if(!bool) {\r
- unHideMe($('result_header'));\r
- unHideMe($('tehSideBar'));\r
- //unHideMe($('facetSidebarContainer'));\r
- unHideMe($('sidebar_div'));\r
- unHideMe($('statusbar'));\r
- unHideMe($('tips'));\r
- unHideMe($('result_table_div'));\r
- if($('rresults_page')) $('rresults_page').style.width="500px";\r
- } else {\r
- hideMe($('result_header'));\r
- hideMe($('tehSideBar'));\r
- hideMe($('facetSidebarContainer'));\r
- hideMe($('sidebar_div'));\r
- hideMe($('statusbar'));\r
- hideMe($('tips'));\r
- hideMe($('result_table_div'));\r
- hideMe($('anonListTable'));\r
- if($('rresults_page')) $('rresults_page').style.width="690px";\r
- }\r
-}\r
-\r
-function holdsHandleStaff() {\r
-\r
- // if we know the recipient's barcode, use it\r
- if(xulG.patron_barcode) return _holdsHandleStaff();\r
-\r
- swapCanvas($('xulholds_box'));\r
- $('xul_recipient_barcode').focus();\r
- $('xul_recipient_barcode').onkeypress = function(evt) \r
- {if(userPressedEnter(evt)) { _holdsHandleStaff(); } };\r
- $('xul_recipient_barcode_submit').onclick = _holdsHandleStaff;\r
- $('xul_recipient_me').onclick = _holdsHandleStaffMe;\r
-\r
- $('xul_recipient_barcode').onkeyup = function(evt) {\r
- if($('xul_recipient_barcode').value == '') \r
- $('xul_recipient_me').disabled = false;\r
- else\r
- $('xul_recipient_me').disabled = true;\r
- };\r
-}\r
-\r
-dojo.addOnLoad(\r
- function() {\r
- $('holds_frozen_thaw_input').onchange = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}\r
- $('holds_frozen_thaw_input').onkeyup = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}\r
- }\r
-);\r
-\r
-function _holdsHandleStaffMe() {\r
- holdArgs.recipient = G.user;\r
- holdsDrawEditor();\r
-}\r
-\r
-function _holdsHandleStaff() {\r
- var barcode = xulG.patron_barcode || $('xul_recipient_barcode').value;\r
- var user = grabUserByBarcode( G.user.session, barcode );\r
-\r
- var evt;\r
- if(evt = checkILSEvent(user)) {\r
- alertILSEvent(user);\r
- return;\r
- }\r
-\r
- if(!barcode || !user) {\r
- alertId('holds_invalid_recipient', barcode);\r
- return\r
- }\r
-\r
- grabUserPrefs(user);\r
-\r
- holdArgs.recipient = user;\r
- holdsDrawEditor();\r
-}\r
-\r
-\r
-\r
-/** args:\r
- * record, volume, copy (ids)\r
- * request, recipient, editHold (objects)\r
- */\r
-\r
-function holdsDrawEditor(args) {\r
- holdArgs = (args) ? args : holdArgs;\r
-\r
- if(!noEmailMessage) noEmailMessage = $('holds_email').removeChild($('holds.no_email'));\r
- if(!noEmailMessageXUL) noEmailMessageXUL = $('holds_email').removeChild($('holds.no_email.xul'));\r
-\r
- if(isXUL() && holdArgs.recipient == null && holdArgs.editHold == null) {\r
- holdsHandleStaff();\r
- return;\r
- }\r
-\r
- if(!holdArgs.recipient) holdArgs.recipient = G.user;\r
- if(!holdArgs.requestor) holdArgs.requestor = G.user;\r
-\r
- if(!(holdArgs.requestor && holdArgs.requestor.session)) {\r
- /*\r
- alert("Please login first before placing a hold");\r
- setCacheValue('returnURL',{href:window.location.href, record:holdArgs.record, type:holdArgs.type});\r
- goTo(buildOPACLink({page:MYOPAC}, false, true));\r
- return;\r
- */\r
- detachAllEvt('common','locationChanged');\r
- attachEvt('common','loggedIn', holdsDrawEditor);\r
- initLogin();\r
- return;\r
- }\r
-// flesh the args with the existing hold \r
- if(holdArgs.editHold) holdArgsFromHold(holdArgs.editHold, holdArgs);\r
-\r
- hideResultsPage(true);\r
- holdsDrawWindow();\r
-}\r
-\r
-\r
-// updates the edit window with the existing hold's data \r
-function _holdsUpdateEditHold() {\r
-\r
- var hold = holdArgs.editHold;\r
- var qstats = holdArgs.status;\r
-\r
- var orgsel = $('holds_org_selector');\r
- var frozenbox = $('holds_frozen_chkbox');\r
-\r
- setSelector(orgsel, hold.pickup_lib());\r
-\r
- if( hold.capture_time() || qstats.status > 2 ) {\r
- frozenbox.disabled = true;\r
- $('holds_frozen_thaw_input').disabled = true;\r
- if(qstats.status == 3) {\r
- // no pickup lib changes while in-transit\r
- orgsel.disabled = true;\r
- } else {\r
- var orgs = fetchPermOrgs('UPDATE_PICKUP_LIB_FROM_HOLDS_SHELF');\r
- if(orgs[0] == -1)\r
- orgsel.disabled = true;\r
- }\r
- } else {\r
- orgsel.disabled = false;\r
- frozenbox.disabled = false;\r
- }\r
-\r
-\r
- $('holds_submit').onclick = holdsEditHold;\r
- $('holds_update').onclick = holdsEditHold;\r
-\r
- if(hold.phone_notify()) {\r
- $('holds_enable_phone').checked = true;\r
- $('holds_phone').value = hold.phone_notify();\r
-\r
- } else {\r
- $('holds_phone').disabled = true;\r
- $('holds_enable_phone').checked = false;\r
- }\r
-\r
- if(isTrue(hold.email_notify())) {\r
- $('holds_enable_email').checked = true;\r
-\r
- } else {\r
- $('holds_enable_email').checked = false;\r
- }\r
-\r
- //$('holds_expire_time').setValue(dojo.date.stamp.fromISOString(hold.expire_time()));\r
-\r
- /* populate the hold freezing info */\r
- if(!frozenbox.disabled && isTrue(hold.frozen())) {\r
- frozenbox.checked = true;\r
- unHideMe($('hold_frozen_thaw_row'));\r
- if(hold.thaw_date()) {\r
- $('holds_frozen_thaw_input').value=dojo.date.stamp.fromISOString(hold.thaw_date());\r
- } else {\r
- $('holds_frozen_thaw_input').value='';\r
- }\r
- } else {\r
- frozenbox.checked = false;\r
- $('holds_frozen_thaw_input').value='';\r
- hideMe($('hold_frozen_thaw_row'));\r
- }\r
-}\r
-\r
-function holdsEditHold() {\r
- var hold = holdsBuildHoldFromWindow();\r
- if(!hold) return;\r
- holdsUpdate(hold);\r
- showCanvas();\r
- if(holdArgs.onComplete)\r
- holdArgs.onComplete(hold);\r
-}\r
-\r
-function holdArgsFromHold(hold, oargs) {\r
- var args = (oargs) ? oargs : {};\r
- args.type = hold.hold_type();\r
- var target = hold.target();\r
-\r
- switch(args.type) {\r
- case 'M':\r
- args.metarecord = target;\r
- break;\r
- case 'T':\r
- args.record = target;\r
- break;\r
- case 'V':\r
- args.volume = target;\r
- break;\r
- case 'C':\r
- args.copy = target;\r
- break;\r
- }\r
- return args;\r
-}\r
-\r
-function holdFetchObjects(hold, doneCallback) {\r
- var args = (hold) ? holdArgsFromHold(hold) : holdArgs;\r
- var type = args.type;\r
-\r
- if( type == 'C' ) {\r
- if( args.copyObject ) {\r
-\r
- args.copy = args.copyObject.id();\r
- args.volume = args.copyObject.call_number();\r
- _h_set_vol(args, doneCallback);\r
-\r
- } else {\r
- var creq = new Request(FETCH_COPY, args.copy);\r
-\r
- creq.callback(\r
- function(r) {\r
- var cp = r.getResultObject();\r
- args.copyObject = cp;\r
- args.volume = args.copyObject.call_number();\r
- _h_set_vol(args, doneCallback);\r
- }\r
- );\r
- creq.send();\r
- }\r
- } else {\r
- if( type == 'V' ) {\r
- _h_set_vol(args, doneCallback);\r
-\r
- } else {\r
- if( type == 'T' ) {\r
- _h_set_rec(args, doneCallback);\r
- } else {\r
- _h_set_rec_descriptors(args, doneCallback);\r
- }\r
- }\r
- }\r
-\r
- return args;\r
-}\r
-\r
-function _h_set_vol(args, doneCallback) {\r
-\r
- if( args.volumeObject ) {\r
- args.volume = args.volumeObject.id();\r
- args.record = args.volumeObject.record();\r
- _h_set_rec(args, doneCallback);\r
-\r
- } else {\r
-\r
- var vreq = new Request(FETCH_VOLUME, args.volume);\r
- vreq.callback(\r
- function(r) {\r
- var vol = r.getResultObject();\r
- args.volumeObject = vol;\r
- args.record = vol.record();\r
- _h_set_rec(args, doneCallback);\r
- }\r
- );\r
- vreq.send();\r
- }\r
-}\r
-\r
-function _h_set_rec(args, doneCallback) {\r
-\r
- if(args.recordObject) \r
- args.record = args.recordObject.doc_id();\r
- else \r
- args.recordObject = findRecord( args.record, 'T' );\r
- \r
- if( args.type == 'T' || args.type == 'M' ) \r
- _h_set_rec_descriptors(args, doneCallback);\r
- else \r
- if(doneCallback) doneCallback(args);\r
-}\r
-\r
-\r
-function _h_set_rec_descriptors(args, doneCallback) {\r
-\r
- // grab the list of record desciptors attached to this records metarecord \r
- if( ! args.recordDescriptors ) {\r
- var params = { record: args.record };\r
-\r
- if( ! args.record ) {\r
- if( args.metarecord )\r
- params = { metarecord : args.metarecord };\r
- else \r
- params = { metarecord : args.metarecordObject.doc_id() };\r
- }\r
-\r
- var req = new Request(FETCH_MR_DESCRIPTORS, params );\r
- req.callback(\r
- function(r) {\r
- var data = r.getResultObject();\r
- args.recordDescriptors = data.descriptors;\r
- args.metarecord = data.metarecord;\r
- if( args.type == 'M' && ! args.metarecordObject) \r
- args.metarecordObject = findRecord(args.metarecord, 'M'); \r
- \r
- if(doneCallback) doneCallback(args);\r
- }\r
- );\r
- req.send();\r
-\r
- } else {\r
- if(doneCallback) doneCallback(args);\r
- }\r
-\r
- return args;\r
-}\r
-\r
-\r
-\r
-function holdsDrawWindow(bool) {\r
- swapCanvas($('holds_box'));\r
- $('holds_cancel').onclick = function(){\r
- hideResultsPage(false);\r
- hideMe($('holds_box'));\r
- unHideMe($('canvas_main'));\r
- //runEvt('common', 'holdUpdateCanceled'), showCanvas() \r
- };\r
- $('holds_submit').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};\r
- $('holds_update').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};\r
- holdFetchObjects(null, \r
- function(){\r
- __holdsDrawWindow();\r
-\r
- if(holdArgs.editHold) {\r
- //hideMe($('holds_submit'));\r
- unHideMe($('holds_update'));\r
- var req = new Request(FETCH_HOLD_STATUS, \r
- G.user.session, holdArgs.editHold.id());\r
- req.send(true);\r
- holdArgs.status = req.result();\r
- _holdsUpdateEditHold();\r
- } \r
- }\r
- );\r
-}\r
-\r
-function selOrgChange(e) {\r
- \r
- $('holds_pickup_lib').innerHTML = this.options[this.selectedIndex].text;\r
-}\r
-\r
-function __holdsDrawWindow() {\r
-\r
- var rec = holdArgs.recordObject;\r
- var vol = holdArgs.volumeObject;\r
- var copy = holdArgs.copyObject;\r
- var mr = holdArgs.metarecordObject;\r
-\r
- rec = (rec) ? rec : mr;\r
-\r
- if(!holdsOrgSelectorBuilt) {\r
- holdsBuildOrgSelector(null,0);\r
- holdsOrgSelectorBuilt = true;\r
- var selector = $('holds_org_selector');\r
-\r
- /*\r
- var o_loc = findOrgUnit(getOrigLocation());\r
- var t = findOrgType(o_loc.ou_type());\r
- if( t.can_have_users() ) \r
- setSelector(selector, o_loc.id());\r
- else \r
- */\r
- selector.onchange = selOrgChange;\r
- setSelector(selector, holdArgs.recipient.home_ou());\r
- }\r
- \r
- var obj = findOrgUnit(holdArgs.recipient.home_ou());\r
- $('holds_pickup_lib').innerHTML = obj.name();\r
-\r
- /*\r
- if(isXUL()) {\r
- var dsel = $('holds_depth_selector');\r
- unHideMe($('holds_depth_selector_row'));\r
- if(dsel.getElementsByTagName('option').length == 0) {\r
- var types = globalOrgTypes;\r
- var depth = findOrgDepth(G.user.ws_ou());\r
- iterate(types, \r
- function(t) {\r
- if(t.depth() > depth) return;\r
- insertSelectorVal(dsel, -1, t.opac_label(), t.depth());\r
- }\r
- );\r
- }\r
- }\r
- */\r
-\r
- appendClear($('holds_recipient'), text(\r
- holdArgs.recipient.family_name() + ', ' + \r
- holdArgs.recipient.first_given_name()));\r
- appendClear($('holds_title'), text(rec.title()));\r
- appendClear($('holds_author'), text(rec.author()));\r
-\r
- if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {\r
-\r
- unHideMe($('holds_type_row'));\r
- unHideMe($('holds_cn_row'));\r
- appendClear($('holds_cn'), text(holdArgs.volumeObject.label()));\r
-\r
- if( holdArgs.type == 'V' ) {\r
- unHideMe($('holds_is_cn'));\r
- hideMe($('holds_is_copy'));\r
-\r
- } else {\r
- hideMe($('holds_is_cn'));\r
- unHideMe($('holds_is_copy'));\r
- unHideMe($('holds_copy_row'));\r
- appendClear($('holds_copy'), text(holdArgs.copyObject.barcode()));\r
- }\r
-\r
- } else {\r
- hideMe($('holds_type_row'));\r
- hideMe($('holds_copy_row'));\r
- hideMe($('holds_cn_row'));\r
- }\r
-\r
- removeChildren($('holds_format'));\r
-\r
- var mods_formats = rec.types_of_resource();\r
- var formats;\r
-\r
- if(holdArgs.recordDescriptors)\r
- formats = holdArgs.recordDescriptors[0].item_type();\r
-\r
- if( holdArgs.type == 'T' ) {\r
- var desc = grep( holdArgs.recordDescriptors,\r
- function(i) {\r
- return (i.record() == holdArgs.record); \r
- }\r
- );\r
- formats = desc[0].item_type();\r
- }\r
-\r
- if( holdArgs.type == 'M' ) {\r
- var data = holdsParseMRFormats(holdArgs.editHold.holdable_formats());\r
- mods_formats = data.mods_formats;\r
- formats = data.formats;\r
- }\r
-\r
-\r
- for( var i in mods_formats ) {\r
- var res = mods_formats[i];\r
- var img = elem("img");\r
- setResourcePic(img, res);\r
- $('holds_format').appendChild(img);\r
- if(formats)\r
- $('holds_format').appendChild(text(' '+ MARCTypeToFriendly(formats[i]) +' '));\r
- else\r
- $('holds_format').appendChild(text(' '+ mods_formats[i] +' '));\r
- $('holds_format').appendChild(elem('br'));\r
- }\r
-\r
-\r
- $('holds_phone').value = (holdArgs.recipient.day_phone())?holdArgs.recipient.day_phone():"";\r
- appendClear( $('holds_email'), text(holdArgs.recipient.email()));\r
-\r
- var pref = holdArgs.recipient.prefs[PREF_HOLD_NOTIFY];\r
-\r
- if(pref) {\r
- if( ! pref.match(/email/i) ) {\r
- $('holds_enable_email').checked = false;\r
- } else {\r
- $('holds_enable_email').checked = true;\r
- }\r
-\r
- if( ! pref.match(/phone/i) ) {\r
- $('holds_phone').disabled = true;\r
- $('holds_enable_phone').checked = false;\r
- } else {\r
- $('holds_phone').disabled = false;\r
- $('holds_enable_phone').checked = true;\r
- }\r
- }\r
-\r
- if(!holdArgs.recipient.email()) {\r
- $('holds_enable_email').checked = false; \r
- $('holds_enable_email').disabled = true;\r
- var message;\r
- if(isXUL()) {\r
- message = noEmailMessageXUL.cloneNode(true);\r
- appendClear($('holds_email'), message);\r
- } else {\r
- message = noEmailMessage.cloneNode(true);\r
- appendClear($('holds_email'), message);\r
- $('holds.no_email.my_account').setAttribute('href', buildOPACLink({page:MYOPAC},null,true));\r
- }\r
- unHideMe(message);\r
- }\r
-\r
- if(!$('holds_phone').value) \r
- $('holds_enable_phone').checked = false; \r
-\r
- appendClear($('holds_physical_desc'), text(rec.physical_description()));\r
-\r
- if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));\r
-\r
- holdsSetFormatSelector();\r
-\r
- $('holds_frozen_chkbox').checked = false;\r
- hideMe($('hold_frozen_thaw_row'));\r
-\r
- var interval = fetchOrgSettingDefault(holdArgs.recipient.home_ou(), 'circ.hold_expire_interval');\r
- var secs = 0;\r
- if(interval) {\r
- secs = interval_to_seconds(interval);\r
- var expire = new Date();\r
- expire.setTime(expire.getTime() + Number(secs + '000'));\r
- if(dijit.byId('holds_expire_time')) dijit.byId('holds_expire_time').setValue(expire);\r
- }\r
-}\r
-\r
-function holdsParseMRFormats(str) {\r
- var data = str.split(/-/); \r
-\r
- var formats = [];\r
- var mods_formats = [];\r
-\r
- for( var i = 0; i < data[0].length; i++ ) {\r
- formats.push( data[0].charAt(i) );\r
- mods_formats.push( MARCFormatToMods( formats[i] ) );\r
- }\r
- \r
- formats = uniquify(formats);\r
- mods_formats = uniquify(mods_formats);\r
-\r
- return {\r
- formats : formats,\r
- mods_formats : mods_formats,\r
- lang : data[2],\r
- largeprint : data[1]\r
- };\r
-}\r
-\r
-\r
-function holdsSetFormatSelector() {\r
- var type = holdArgs.type;\r
- if( type == 'C' || type == 'V' || holdArgs.editHold ) return;\r
-\r
- var data = holdsGetFormats();\r
- var avail_formats = data.avail_formats;\r
- var sel_formats = data.sel_formats;\r
- holdArgs.language = data.lang;\r
-\r
- unHideMe($('holds_alt_formats_row_extras'));\r
- var selector = $('hold_alt_form_selector');\r
-\r
- for( var i = 0; i < avail_formats.length; i++ ) {\r
- var form = avail_formats[i];\r
- unHideMe(findSelectorOptByValue(selector, form));\r
- }\r
-}\r
-\r
-\r
-function holdsGetFormats() {\r
-\r
- var lang;\r
- var formats = [];\r
- var sformats = []; // selected formats \r
-\r
- var type = holdArgs.type;\r
- var desc = holdArgs.recordDescriptors;\r
- var rec = holdArgs.record;\r
- var mrec = holdArgs.metarecord;\r
-\r
- if( type == 'T' ) {\r
-\r
- for( var i = 0; i < desc.length; i++ ) {\r
- var d = desc[i];\r
- if( d.record() == holdArgs.record ) {\r
- lang = d.item_lang();\r
- holdArgs.myFormat = _t_f_2_format(d.item_type(), d.item_form());\r
- sformats.push(holdArgs.myFormat);\r
- break;\r
- }\r
- }\r
- }\r
-\r
- for( var i = 0; i < desc.length; i++ ) {\r
- var d = desc[i];\r
- if( d.item_lang() != lang ) continue;\r
- formats.push( _t_f_2_format(d.item_type(), d.item_form()));\r
- }\r
-\r
- formats = uniquify(formats);\r
-\r
- return {\r
- lang : lang,\r
- avail_formats : formats, \r
- sel_formats : sformats\r
- };\r
-}\r
-\r
-\r
-\r
-function _t_f_2_format(type, form) {\r
- if( form == 'd' ) return 'at-d';\r
- return (type == 'a' || type == 't') ? 'at' : \r
- ( type == 'i' || type == 'g' || type == 'j' ) ? type : null;\r
-}\r
-\r
-function holdsSetSelectedFormats() {\r
-\r
- var cn = $('holds_alt_formats_row').className;\r
- if( cn && cn.match(/hide_me/) ) return;\r
-\r
- var selector = $('hold_alt_form_selector');\r
- var vals = getSelectedList(selector);\r
-\r
- if(vals.length == 0) return;\r
-\r
- var fstring = "";\r
-\r
- if( contains(vals, 'at-d') ) {\r
- if( contains(vals, 'at') )\r
- fstring = 'at';\r
- else \r
- fstring = 'at-d';\r
- } else {\r
- if( contains(vals, 'at') )\r
- fstring = 'at';\r
- }\r
-\r
- for( var i = 0; i < vals.length; i++ ) {\r
- var val = vals[i];\r
- if( !val.match(/at/) ) fstring = val + fstring;\r
- }\r
-\r
- if( holdArgs.language ) {\r
- if( fstring.match(/-/) )\r
- fstring = fstring + '-' + holdArgs.language;\r
- else\r
- fstring = fstring + '--' + holdArgs.language;\r
- }\r
- return fstring;\r
-}\r
-\r
-\r
-function holdsCheckPossibility(pickuplib, hold, recurse) {\r
-\r
- var args = { \r
- titleid : holdArgs.record,\r
- volume_id : holdArgs.volume,\r
- copy_id : holdArgs.copy,\r
- hold_type : holdArgs.type,\r
- patronid : holdArgs.recipient.id(),\r
- depth : 0, \r
- pickup_lib : pickuplib \r
- };\r
-\r
- if(recurse) {\r
- /* if we're calling create again (recursing), \r
- we know that the hold possibility check already succeeded */\r
- holdHandleCreateResponse({_recurse:true, _hold:hold}, true );\r
-\r
- } else {\r
- _debug("hold possible args = "+js2JSON(args));\r
- \r
- var req = new Request(CHECK_HOLD_POSSIBLE, G.user.session, args );\r
- \r
- req.request.alertEvent = false;\r
- req.request._hold = hold;\r
- req.request._recurse = recurse;\r
- req.callback(holdHandleCreateResponse);\r
- req.send();\r
- }\r
-}\r
-\r
-\r
-function holdsBuildOrgSelector(node, sel) {\r
-\r
- if(!node) node = globalOrgTree;\r
- if(!isTrue(node.opac_visible())) return;\r
-\r
- var selector = sel?sel:$('holds_org_selector');\r
- var index = selector.options.length;\r
-\r
- var type = findOrgType(node.ou_type());\r
- var indent = type.depth() - 1;\r
- var opt = setSelectorVal( selector, index, node.name(), node.id(), null, indent );\r
- if(!type.can_have_users()) {\r
- opt.disabled = true;\r
- addCSSClass(opt, 'disabled_option');\r
- }\r
- \r
- for( var i in node.children() ) {\r
- var child = node.children()[i];\r
- if(child) holdsBuildOrgSelector(child);\r
- }\r
-}\r
-\r
-function holdsBuildHoldFromWindow() {\r
-\r
- var org = getSelectorVal($('holds_org_selector'));\r
- var node = findOrgUnit(org);\r
- var ntype = findOrgType(node.ou_type());\r
- if(!ntype.can_have_users()) {\r
- alertId('holds_pick_good_org');\r
- return;\r
- }\r
-\r
- var hold = new ahr();\r
- if(holdArgs.editHold) {\r
- hold = holdArgs.editHold;\r
- holdArgs.editHold = null;\r
- }\r
-\r
- if( $('holds_enable_phone').checked ) {\r
- var phone = $('holds_phone').value;\r
- if( !phone || !phone.match(REGEX_PHONE) ) {\r
- alert($('holds_bad_phone').innerHTML);\r
- return null;\r
- }\r
- hold.phone_notify(phone);\r
-\r
- } else {\r
- hold.phone_notify("");\r
- }\r
-\r
- if( $('holds_enable_email').checked ) \r
- hold.email_notify(1);\r
- else\r
- hold.email_notify(0);\r
-\r
- var target;\r
-\r
- switch(holdArgs.type) {\r
- case 'M':\r
- target = holdArgs.metarecord; break;\r
- case 'T':\r
- target = holdArgs.record; break;\r
- case 'V':\r
- target = holdArgs.volume; break;\r
- case 'C':\r
- target = holdArgs.copy; break;\r
- }\r
-\r
-\r
-\r
- hold.pickup_lib(org); \r
- //hold.request_lib(org); \r
- hold.requestor(holdArgs.requestor.id());\r
- hold.usr(holdArgs.recipient.id());\r
- hold.target(target);\r
- hold.hold_type(holdArgs.type);\r
-\r
- try{var expDate = dijit.byId('holds_expire_time').getValue();} catch(e){}\r
- if(expDate) {\r
- var expireDate = dojo.date.stamp.toISOString(expDate);\r
- expireDate = holdsVerifyThawDate(expireDate); \r
- if(expireDate)\r
- hold.expire_time(expireDate);\r
- else \r
- return;\r
- }\r
-\r
- // see if this hold should be frozen and for how long\r
- if($('holds_frozen_chkbox').checked) {\r
- hold.frozen('t');\r
- unHideMe($('hold_frozen_thaw_row'));\r
- thawDate = dojo.date.stamp.toISOString(dijit.byId('holds_frozen_thaw_input').getValue());\r
- if(thawDate) {\r
- thawDate = holdsVerifyThawDate(thawDate); \r
- if(thawDate) \r
- hold.thaw_date(thawDate);\r
- else\r
- return;\r
- } else {\r
- hold.thaw_date(null);\r
- }\r
- } else {\r
- hold.frozen('f');\r
- hold.thaw_date(null);\r
- }\r
-\r
- //check for alternate hold formats \r
- var fstring = holdsSetSelectedFormats();\r
- if(fstring) { \r
- hold.hold_type('M'); \r
- hold.holdable_formats(fstring);\r
- hold.target(holdArgs.metarecord);\r
- }\r
- return hold;\r
-}\r
- \r
-function holdsPlaceHold(hold, recurse) {\r
- if(!hold) return;\r
- swapCanvas($('check_holds_box'));\r
- holdsCheckPossibility(hold.pickup_lib(), hold, recurse);\r
-}\r
-\r
-\r
-function holdHandleCreateResponse(r, recurse) {\r
-\r
- if(!recurse) {\r
- var res = r.getResultObject();\r
- if(checkILSEvent(res) || res.success != 1) {\r
- if(res.success != 1) {\r
- alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));\r
- } else {\r
- if( res.textcode == 'PATRON_BARRED' ) {\r
- alertId('hold_failed_patron_barred');\r
- } else {\r
- alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));\r
- }\r
- }\r
- swapCanvas($('holds_box'));\r
- return;\r
- }\r
- r._hold.selection_depth(res.depth);\r
- } \r
-\r
- holdCreateHold(r._recurse, r._hold);\r
- hideResultsPage(false);\r
-}\r
-\r
-\r
-function holdCreateHold( recurse, hold ) {\r
- var method = CREATE_HOLD;\r
- if(recurse) method = CREATE_HOLD_OVERRIDE;\r
- var req = new Request( method, holdArgs.requestor.session, hold );\r
- req.request.alertEvent = false;\r
- req.send(true);\r
- var res = req.result();\r
- holdProcessResult(hold, res, recurse);\r
-\r
- showCanvas();\r
-\r
- runEvt('common', 'holdUpdated');\r
-}\r
-\r
-\r
-function holdProcessResult( hold, res, recurse ) {\r
-\r
- if( res && res > -1 ) {\r
- alert($('holds_success').innerHTML);\r
- holdArgs = null;\r
- if(isXUL() && typeof xulG.opac_hold_placed == 'function')\r
- xulG.opac_hold_placed(res);\r
-\r
- } else {\r
-\r
- if( recurse ) {\r
- alert($('holds_failure').innerHTML);\r
- return;\r
- }\r
-\r
- if( grep(res, function(e) { return (e.textcode == 'HOLD_EXISTS'); }) ) {\r
- if( fetchPermOrgs('HOLD_EXISTS.override')[0] != -1 ) {\r
- if( confirm($('hold_dup_exists_override').innerHTML) ) {\r
- return holdsPlaceHold(hold, true);\r
- }\r
- return;\r
-\r
- } else {\r
- return alert($('hold_dup_exists').innerHTML);\r
- }\r
- }\r
-\r
- if( grep(res, function(e) { return (e.textcode == 'HOLD_ITEM_CHECKED_OUT'); }) ) {\r
- if( fetchPermOrgs('HOLD_ITEM_CHECKED_OUT.override')[0] != -1 ) {\r
- if( confirm($('hold_checked_out_override').innerHTML) ) {\r
- return holdsPlaceHold(hold, true);\r
- }\r
- return;\r
-\r
- } else {\r
- return alert($('hold_checked_out').innerHTML);\r
- }\r
- }\r
-\r
-\r
- alert($('holds_failure').innerHTML);\r
- }\r
-}\r
-\r
-\r
-function holdsCancel(holdid, user) {\r
- if(!user) user = G.user;\r
- var req = new Request(CANCEL_HOLD, user.session, holdid, /* Patron via OPAC */ 6);\r
- req.send(true);\r
- return req.result();\r
- runEvt('common', 'holdUpdated');\r
-}\r
-\r
-function holdsUpdate(hold, user) {\r
- if(!user) user = G.user;\r
- var req = new Request(UPDATE_HOLD, user.session, hold);\r
- req.send(true);\r
- var x = req.result(); // cause an exception if there is one \r
- runEvt('common', 'holdUpdated');\r
-}\r
-\r
-/* verify that the thaw date is valid and after today */\r
-function holdsVerifyThawDate(dateString, isGreater) {\r
- thawDate = dojo.date.stamp.fromISOString(dateString);\r
- if(thawDate) {\r
- if(isGreater) {\r
- if(dojo.date.compare(thawDate) > 0) {\r
- return dojo.date.stamp.toISOString(thawDate);\r
- }\r
- } else {\r
- return dojo.date.stamp.toISOString(thawDate);\r
- }\r
- }\r
- return null;\r
-}\r
-\r
-function holdsVerifyThawDateUI(element) {\r
- value = dojo.date.stamp.toISOString(dijit.byId(element).getValue());\r
-\r
- if(!value) {\r
- removeCSSClass($(element), 'invalid_field');\r
- return;\r
- }\r
-\r
- if(!holdsVerifyThawDate(value, true)) {\r
- addCSSClass($(element), 'invalid_field');\r
- } else {\r
- removeCSSClass($(element), 'invalid_field');\r
- }\r
-}\r
-\r
-\r
-function editHold(h) {\r
- var row = $('myopac_holds_row_'+h);\r
- var objs = [];\r
- \r
- objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');\r
- objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');\r
- objs['hold_active'] = $n(row,'hold_active');\r
- objs['activate_label'] = $n(row,'activate_label');\r
- objs['activate_date'] = $n(row,'activate_date');\r
- objs['activate_box'] = $n(row,'activate_box');\r
- objs['hold_expires_label'] = $n(row,'hold_expires_label');\r
- objs['hold_expires'] = $n(row,'hold_expires');\r
- objs['hold_expires_box'] = $n(row,'hold_expires_box');\r
- objs['hold_active_sel'] = $n(row,'hold_active_sel');\r
- objs['hold_edit_link'] = $n(row,'hold_edit_link');\r
- objs['hold_save_link'] = $n(row,'hold_save_link');\r
- objs['hold_cancel_link'] = $n(row,'hold_cancel_link');\r
- \r
- for(var i in objs) unHideMe(objs[i]);\r
- \r
- hideMe(objs['activate_date']);\r
- hideMe(objs['hold_active']);\r
- hideMe(objs['hold_expires']);\r
- hideMe(objs['hold_pickup_lib']);\r
- hideMe(objs['hold_edit_link']);\r
-}\r
-\r
-function cancelHold(h) {\r
- var row = $('myopac_holds_row_'+h);\r
- var objs = [];\r
- \r
- objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');\r
- objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');\r
- objs['hold_active'] = $n(row,'hold_active');\r
- objs['activate_label'] = $n(row,'activate_label');\r
- objs['activate_date'] = $n(row,'activate_date');\r
- objs['activate_box'] = $n(row,'activate_box');\r
- objs['hold_expires_label'] = $n(row,'hold_expires_label');\r
- objs['hold_expires'] = $n(row,'hold_expires');\r
- objs['hold_expires_box'] = $n(row,'hold_expires_box');\r
- objs['hold_active_sel'] = $n(row,'hold_active_sel');\r
- objs['hold_edit_link'] = $n(row,'hold_edit_link');\r
- objs['hold_save_link'] = $n(row,'hold_save_link');\r
- objs['hold_cancel_link'] = $n(row,'hold_cancel_link');\r
- \r
- for(var i in objs) hideMe(objs[i]);\r
- \r
- unHideMe(objs['hold_edit_link']);\r
- unHideMe(objs['hold_pickup_lib']);\r
- unHideMe(objs['holds_active']);\r
- unHideMe(objs['hold_active']);\r
- unHideMe(objs['activate_date']);\r
- unHideMe(objs['hold_expires']);\r
- if(objs['hold_expires'].innerHTML) unHideMe(objs['hold_expires_label']);\r
- if(objs['activate_date'].innerHTML) unHideMe(objs['activate_label']);\r
-}\r
-\r
-function saveHold(h) {\r
- var row = $('myopac_holds_row_'+h);\r
- var hold = holdsCache[holdsCacheMap[h]].hold;\r
- \r
- var activateDataBox = $n(row,'activate_box');\r
- var expireDateBox = $n(row,'hold_expires_box');\r
- var pickupLibSel = $n(row,'hold_pickup_lib_sel');\r
- var activateSel = $n(row,'hold_active_sel');\r
- var expireTime = dojo.date.stamp.toISOString(new Date(Date.parse(expireDateBox.value)),null);\r
- var activateTime = dojo.date.stamp.toISOString(new Date(Date.parse(activateDataBox.value)),null);\r
- if(parseInt(expireTime)) hold.expire_time(expireTime);\r
- if(parseInt(activateTime)) hold.thaw_date(activateTime);\r
- hold.frozen(activateSel.options[activateSel.selectedIndex].value);\r
- hold.pickup_lib(pickupLibSel.options[pickupLibSel.selectedIndex].value);\r
- row.style.background= isTrue(hold.frozen())?"#ebf9ff":"";\r
- \r
- fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.hold.update'],{params:[G.user.session,hold],oncomplete:refreshHold});\r
-}\r
-\r
-function updateHoldInfo(holdid,holdrow) {\r
- var h = holdsCache[holdsCacheMap[holdid]].hold;\r
- if(!h) return;\r
- var row = holdrow?holdrow:$('myopac_holds_row_'+holdid);\r
- if(!row) return;\r
- \r
- $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.pickup_lib()).name();\r
- $n(row,'hold_active').innerHTML = isTrue(h.frozen())?"Suspended":"Active";\r
- \r
- if(h.thaw_date()) {\r
- var d = dojo.date.stamp.fromISOString(h.thaw_date());\r
- $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});\r
- unHideMe($n(row,'activate_label'));\r
- $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});\r
- }\r
- \r
- if(h.expire_time()) {\r
- var exp_date = dojo.date.stamp.fromISOString(h.expire_time());\r
- $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
- unHideMe($n(row,'hold_expires_label'));\r
- $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
- }\r
-}\r
-\r
-function refreshHold(r) {\r
- var hold = r.recv().content();\r
- if(!parseInt(hold)) return;\r
- updateHoldInfo(hold);\r
- cancelHold(hold);\r
-}\r