1 var holdsOrgSelectorBuilt = false;
6 function holdsHandleStaff() {
7 swapCanvas($('xulholds_box'));
8 $('xul_recipient_barcode').focus();
9 $('xul_recipient_barcode').onkeypress = function(evt)
10 {if(userPressedEnter(evt)) { _holdsHandleStaff(); } };
11 $('xul_recipient_barcode_submit').onclick = _holdsHandleStaff;
12 $('xul_recipient_me').onclick = _holdsHandleStaffMe;
15 function _holdsHandleStaffMe() {
16 holdArgs.recipient = G.user;
20 function _holdsHandleStaff() {
21 var barcode = $('xul_recipient_barcode').value;
22 var user = grabUserByBarcode( G.user.session, barcode );
24 holdArgs.recipient = user;
30 * record, volume, copy (ids)
31 * request, recipient, editHold (objects)
33 function holdsDrawEditor(args) {
35 holdArgs = (args) ? args : holdArgs;
37 if(isXUL() && holdArgs.recipient == null
38 && holdArgs.editHold == null) {
43 if(!holdArgs.recipient) holdArgs.recipient = G.user;
44 if(!holdArgs.requestor) holdArgs.requestor = G.user;
46 if(!(holdArgs.requestor && holdArgs.requestor.session)) {
47 detachAllEvt('common','locationChanged');
48 attachEvt('common','loggedIn', holdsDrawEditor)
53 if(holdArgs.editHold) /* flesh the args with the existing hold */
54 holdArgsFromHold(holdArgs.editHold, holdArgs);
58 if(holdArgs.editHold) {
59 hideMe($('holds_submit'));
60 unHideMe($('holds_update'));
61 var req = new Request(FETCH_HOLD_STATUS,
62 G.user.session, holdArgs.editHold.id());
64 holdArgs.status = req.result();
65 _holdsUpdateEditHold();
71 /* updates the edit window with the existing hold's data */
72 function _holdsUpdateEditHold() {
74 var hold = holdArgs.editHold;
75 var status = holdArgs.status;
77 var orgsel = $('holds_org_selector');
78 setSelector(orgsel, hold.pickup_lib());
80 if( hold.capture_time() || status > 2 )
81 orgsel.disabled = true;
83 orgsel.disabled = false;
86 $('holds_submit').onclick = holdsEditHold;
87 $('holds_update').onclick = holdsEditHold;
89 if(hold.phone_notify()) {
90 $('holds_enable_phone').checked = true;
91 $('holds_phone').value = hold.phone_notify();
94 $('holds_phone').disabled = true;
95 $('holds_enable_phone').checked = false;
98 if(hold.email_notify()) {
99 $('holds_enable_email').checked = true;
102 $('holds_enable_email').checked = false;
106 function holdsEditHold() {
107 var hold = holdsBuildHoldFromWindow();
111 if(holdArgs.onComplete)
112 holdArgs.onComplete(hold);
115 function holdArgsFromHold(hold, oargs) {
116 var args = (oargs) ? oargs : {};
117 args.type = hold.hold_type();
118 var target = hold.target();
122 args.metarecord = target;
125 args.record = target;
128 args.volume = target;
137 function holdFetchObjects(hold, doneCallback) {
139 var args = (hold) ? holdArgsFromHold(hold) : holdArgs;
141 var type = args.type;
145 if( args.copyObject ) {
147 args.copy = args.copyObject.id();
148 args.volume = args.copyObject.call_number();
149 _h_set_vol(args, doneCallback);
152 var creq = new Request(FETCH_COPY, args.copy);
156 var cp = r.getResultObject();
157 args.copyObject = cp;
158 args.volume = args.copyObject.call_number();
159 _h_set_vol(args, doneCallback);
166 _h_set_vol(args, doneCallback);
170 _h_set_rec(args, doneCallback);
178 function _h_set_vol(args, doneCallback) {
180 if( args.volumeObject ) {
181 args.volume = args.volumeObject.id();
182 args.record = args.volumeObject.record();
183 _h_set_rec(args, doneCallback);
187 var vreq = new Request(FETCH_VOLUME, args.volume);
190 var vol = r.getResultObject();
191 args.volumeObject = vol;
192 args.record = vol.record();
193 _h_set_rec(args, doneCallback);
200 function _h_set_rec(args, doneCallback) {
201 if(args.recordObject) {
202 args.record = args.recordObject.doc_id();
204 args.recordObject = findRecord( args.record, 'T' );
206 if(doneCallback) doneCallback(args);
211 function holdsDrawWindow() {
212 swapCanvas($('holds_box'));
213 $('holds_cancel').onclick = function(){ runEvt('common', 'holdUpdateCanceled'), showCanvas() };
214 $('holds_submit').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
215 $('holds_update').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
216 holdFetchObjects(null, function(){__holdsDrawWindow();});
219 function __holdsDrawWindow() {
221 var rec = holdArgs.recordObject;
222 var vol = holdArgs.volumeObject;
223 var copy = holdArgs.copyObject;
225 if(!holdsOrgSelectorBuilt) {
226 holdsBuildOrgSelector(null,0);
227 holdsOrgSelectorBuilt = true;
231 var dsel = $('holds_depth_selector');
232 unHideMe($('holds_depth_selector_row'));
233 if(dsel.getElementsByTagName('option').length == 0) {
234 var types = globalOrgTypes;
235 var depth = findOrgDepth(G.user.ws_ou());
238 if(t.depth() > depth) return;
239 insertSelectorVal(dsel, -1, t.opac_label(), t.depth());
245 appendClear($('holds_recipient'), text(
246 holdArgs.recipient.family_name() + ', ' +
247 holdArgs.recipient.first_given_name()));
248 appendClear($('holds_title'), text(rec.title()));
249 appendClear($('holds_author'), text(rec.author()));
251 if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {
253 unHideMe($('holds_type_row'));
254 unHideMe($('holds_cn_row'));
255 appendClear($('holds_cn'), text(holdArgs.volumeObject.label()));
257 if( holdArgs.type == 'V' ) {
258 unHideMe($('holds_is_cn'));
259 hideMe($('holds_is_copy'));
262 hideMe($('holds_is_cn'));
263 unHideMe($('holds_is_copy'));
264 unHideMe($('holds_copy_row'));
265 appendClear($('holds_copy'), text(holdArgs.copyObject.barcode()));
269 hideMe($('holds_type_row'));
270 hideMe($('holds_copy_row'));
271 hideMe($('holds_cn_row'));
274 removeChildren($('holds_format'));
275 for( var i in rec.types_of_resource() ) {
276 var res = rec.types_of_resource()[i];
277 var img = elem("img");
278 setResourcePic(img, res);
279 $('holds_format').appendChild(text(' '+res+' '));
280 $('holds_format').appendChild(img);
281 $('holds_format').appendChild(text(' '));
285 $('holds_phone').value = holdArgs.recipient.day_phone();
286 appendClear( $('holds_email'), text(holdArgs.recipient.email()));
288 var pref = G.user.prefs[PREF_HOLD_NOTIFY];
291 if( ! pref.match(/email/i) )
292 $('holds_enable_email').checked = false;
294 if( ! pref.match(/phone/i) ) {
295 $('holds_phone').disabled = true;
296 $('holds_enable_phone').checked = false;
300 appendClear($('holds_physical_desc'), text(rec.physical_description()));
301 if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));
305 function holdsCheckPossibility(pickuplib) {
306 var rec = holdArgs.record;
307 var type = holdArgs.type;
308 var req = new Request(CHECK_HOLD_POSSIBLE, G.user.session,
309 { titleid : rec, patronid : G.user.id(), depth : 0, pickup_lib : pickuplib } );
315 function holdsBuildOrgSelector(node) {
317 if(!node) node = globalOrgTree;
319 var selector = $('holds_org_selector');
320 var index = selector.options.length;
322 var type = findOrgType(node.ou_type());
323 var indent = type.depth() - 1;
324 var opt = setSelectorVal( selector, index, node.name(), node.id(), null, indent );
325 if(!type.can_have_vols()) opt.disabled = true;
327 if( node.id() == holdArgs.recipient.home_ou() ) {
328 selector.selectedIndex = index;
329 selector.options[index].selected = true;
332 for( var i in node.children() ) {
333 var child = node.children()[i];
334 if(child) holdsBuildOrgSelector(child);
338 function holdsBuildHoldFromWindow() {
340 var org = $('holds_org_selector').options[
341 $('holds_org_selector').selectedIndex].value;
343 var hold = new ahr();
344 if(holdArgs.editHold) {
345 hold = holdArgs.editHold;
346 holdArgs.editHold = null;
349 if( $('holds_enable_phone').checked ) {
350 var phone = $('holds_phone').value;
351 if( !phone || !phone.match(REGEX_PHONE) ) {
352 alert($('holds_bad_phone').innerHTML);
355 hold.phone_notify(phone);
358 hold.phone_notify("");
361 if( $('holds_enable_email').checked )
362 hold.email_notify(1);
364 hold.email_notify(0);
368 switch(holdArgs.type) {
370 target = holdArgs.metarecord;
373 target = holdArgs.record;
376 target = holdArgs.volume;
379 target = holdArgs.copy;
384 hold.pickup_lib(org);
385 hold.request_lib(org);
386 hold.requestor(holdArgs.requestor.id());
387 hold.usr(holdArgs.recipient.id());
388 hold.hold_type(holdArgs.type);
392 hold.selection_depth(getSelectorVal($('holds_depth_selector')));
396 function holdsPlaceHold(hold) {
400 swapCanvas($('check_holds_box'));
402 if( holdArgs.type == 'M' || holdArgs.type == 'T' ) {
403 if( ! holdsCheckPossibility(hold.pickup_lib() ) ) {
404 alert($('hold_not_allowed').innerHTML);
405 swapCanvas($('holds_box'));
410 var req = new Request( CREATE_HOLD, holdArgs.requestor.session, hold );
412 var res = req.result();
414 if( res == '1' ) alert($('holds_success').innerHTML);
415 else alert($('holds_failure').innerHTML);
420 runEvt('common', 'holdUpdated');
423 function holdsCancel(holdid, user) {
424 if(!user) user = G.user;
425 var req = new Request(CANCEL_HOLD, user.session, holdid);
428 runEvt('common', 'holdUpdated');
431 function holdsUpdate(hold, user) {
432 if(!user) user = G.user;
433 var req = new Request(UPDATE_HOLD, user.session, hold);
435 var x = req.result(); /* cause an exception if there is one */
436 runEvt('common', 'holdUpdated');