7 var required_user_parts = {
9 first_given_name:'First Name',
10 family_name:'Last Name',
12 ident_type:'Primary Identification Type',
13 ident_value:'Primary Identification',
14 day_phone:'Daytime Phone',
15 home_ou:'Home Library',
16 profile:'Profile Group',
20 var required_addr_parts = {
26 address_type:'Address Label',
29 function reset_crc () {
30 document.forms.editor.elements["user.claims_returned_count"].value = '0';
31 user.claims_returned_count(0);
34 function clear_alert_message () {
35 document.forms.editor.elements["user.alert_message"].value = ' ';
36 user.alert_message('');
39 function save_user () {
42 //alert( js2JSON(user));
47 for (var i in required_user_parts) {
49 throw required_user_parts[i] + " is required.";
53 for (var j in user.addresses()) {
54 if (user.addresses()[j].isdeleted()) continue;
56 for (var i in required_addr_parts) {
57 if (!user.addresses()[j][i]()) {
58 throw required_addr_parts[i] + " is required.";
64 for (var i in responses) {
66 for (var j in responses[i]) {
72 r.answer(responses[i][j]);
73 r.answer_date( document.getElementById('e_date_'+i).value );
78 user.survey_responses( res );
82 if (user.billing_address().isdeleted())
83 throw "Please select a valid Billing Address";
85 if (user.mailing_address().isdeleted())
86 throw "Please select a valid Mailing Address";
88 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.patron.update', ses_id, user );
90 var ok = req.getResultObject();
92 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.set_groups', ses_id, ok.id(), user_groups );
94 req.getResultObject();
97 alert( 'User ' + ok.usrname() +
98 ' [' + ok.card().barcode() + '] ' +
99 ' successfully saved!');
116 function init_editor (u) {
118 var x = document.getElementById('editor').elements;
122 ses_id = cgi.param('ses');
124 var usr_id = cgi.param('usr');
130 user.mailing_address( new aua() );
131 user.mailing_address().isnew(1);
132 user.mailing_address().id(fakeid());
134 user.billing_address( user.mailing_address() );
136 user.card( new ac() );
137 user.card().isnew(1);
138 user.card().id(fakeid());
141 user.addresses().push(user.mailing_address());
144 user.cards().push(user.card());
147 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', ses_id, usr_id );
149 user = req.getResultObject();
156 if (user.id()) x['user.id'].value = user.id();
157 if (cgi.param('adv')) x['user.id'].parentNode.parentNode.setAttribute('adv', 'false');
159 if (user.create_date()) x['user.create_date'].value = user.create_date();
161 if (user.usrname()) x['user.usrname'].value = user.usrname();
162 x['user.usrname'].setAttribute('onchange','user.usrname(this.value)');
164 if (user.card() && user.card().barcode()) x['user.card.barcode'].value = user.card().barcode();
165 x['user.card.barcode'].setAttribute('onchange','user.card().barcode(this.value)');
167 x['user.card.barcode'].disabled = false;
169 x['replace_card'].className = '';
170 x['replace_card'].setAttribute('onclick',
171 'user.card(new ac()); ' +
172 'user.card().isnew(1); ' +
173 'user.card().id(fakeid()); ' +
174 'user.cards().push(user.card()); ' +
175 'this.parentNode.firstChild.disabled = false; ' +
176 'this.parentNode.firstChild.value = ""; ' +
177 'this.parentNode.firstChild.focus(); ' +
182 if (user.passwd()) x['user.passwd'].value = user.passwd();
183 x['user.passwd'].setAttribute('onchange','user.passwd(this.value)');
185 if (user.prefix()) x['user.prefix'].value = user.prefix();
186 x['user.prefix'].setAttribute('onchange','user.prefix(this.value)');
188 if (user.first_given_name()) x['user.first_given_name'].value = user.first_given_name();
189 x['user.first_given_name'].setAttribute('onchange','user.first_given_name(this.value)');
191 if (user.second_given_name()) x['user.second_given_name'].value = user.second_given_name();
192 x['user.second_given_name'].setAttribute('onchange','user.second_given_name(this.value);');
194 if (user.family_name()) x['user.family_name'].value = user.family_name();
195 x['user.family_name'].setAttribute('onchange','user.family_name(this.value)');
197 if (user.suffix()) x['user.suffix'].value = user.suffix();
198 x['user.suffix'].setAttribute('onchange','user.suffix(this.value)');
200 if (user.dob()) x['user.dob'].value = user.dob();
201 x['user.dob'].setAttribute('onchange','user.dob(this.value)');
203 if (user.ident_value()) x['user.ident_value'].value = user.ident_value();
204 x['user.ident_value'].setAttribute('onchange','user.ident_value(this.value)');
206 if (user.ident_value2()) x['user.ident_value2'].value = user.ident_value2();
207 x['user.ident_value2'].setAttribute('onchange','user.ident_value2(this.value)');
209 if (user.email()) x['user.email'].value = user.email();
210 x['user.email'].setAttribute('onchange','user.email(this.value)');
212 if (user.day_phone()) x['user.day_phone'].value = user.day_phone();
213 x['user.day_phone'].setAttribute('onchange','user.day_phone(this.value)');
215 if (user.evening_phone()) x['user.evening_phone'].value = user.evening_phone();
216 x['user.evening_phone'].setAttribute('onchange','user.evening_phone(this.value)');
218 if (user.other_phone()) x['user.other_phone'].value = user.other_phone();
219 x['user.other_phone'].setAttribute('onchange','user.other_phone(this.value)');
221 if (user.expire_date()) x['user.expire_date'].value = user.expire_date();
222 x['user.expire_date'].setAttribute('onchange','user.expire_date(this.value)');
224 if (user.active()) x['user.active'].checked = true;
225 x['user.active'].setAttribute('onchange','user.active(this.checked ? "t" : "f" )');
227 if (user.master_account()) x['user.master_account'].checked = true;
228 x['user.master_account'].setAttribute('onchange','user.master_account(this.checked ? "t" : "f" )');
230 if (user.super_user()) x['user.super_user'].checked = true;
231 x['user.super_user'].setAttribute('onchange','user.super_user(this.checked ? "t" : "f" )');
232 if (cgi.param('adv')) x['user.super_user'].parentNode.parentNode.setAttribute('adv', 'false');
234 if (user.claims_returned_count()) x['user.claims_returned_count'].value = user.claims_returned_count();
235 // onchange handled by func above
237 if (user.alert_message()) x['user.alert_message'].value = user.alert_message();
238 // onchange handled by func above
241 // set up the home_ou selector
242 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.org_tree.retrieve' );
244 orgTree = req.getResultObject();
250 { label_field : 'name',
252 empty_label : '-- Required --',
255 child_field_name : 'children' }
258 x['user.home_ou'].setAttribute('onchange','user.home_ou(this.options[this.selectedIndex].value)');
260 // set up the ident_type selector
261 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.ident_types.retrieve' );
263 ident_type_list = req.getResultObject();
269 { label_field : 'name',
271 empty_label : '-- Required --',
276 x['user.ident_type'].setAttribute('onchange','user.ident_type(this.options[this.selectedIndex].value)');
281 (user.ident_value2 == '' ? user.ident_type2() : ''),
282 { label_field : 'name',
284 empty_label : '-- Optional --',
289 x['user.ident_type2'].setAttribute('onchange','var x = this.options[this.selectedIndex].value; x ? user.ident_type2(x) : user.ident_type2(null);');
292 // set up the standing selector
293 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.standings.retrieve' );
295 standing_list = req.getResultObject();
301 { label_field : 'value',
303 empty_label : '-- Required --',
308 x['user.standing'].setAttribute('onchange','user.standing(this.options[this.selectedIndex].value)');
310 // set up the profile selector
311 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.groups.tree.retrieve' );
313 group_tree = req.getResultObject();
319 { label_field : 'name',
321 empty_label : '-- Required --',
324 child_field_name : 'children' }
327 x['user.profile'].setAttribute('onchange','user.profile(this.options[this.selectedIndex].value)');
329 // set up the profile selector
330 var user_group_objects = [];
332 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.get_groups', ses_id, user.id() );
334 user_group_objects = req.getResultObject();
338 for (var i in user_group_objects) {
339 user_groups.push(user_group_objects[i].grp());
346 { label_field : 'name',
349 child_field_name : 'children' }
352 x['permgroups'].setAttribute( 'onchange',
353 'window.user_groups = [];' +
354 'for (var i = 0; i < this.options.length; i++) {' +
355 ' if (this.options[i].selected)' +
356 ' window.user_groups.push(this.options[i].value);' +
359 display_all_addresses();
361 if (cgi.param('adv')) x['permgroups'].parentNode.parentNode.setAttribute('adv', 'false');
363 req = new RemoteRequest( 'open-ils.circ', 'open-ils.circ.survey.retrieve.required', ses_id );
365 surveys = req.getResultObject();
367 var f = document.getElementById('surveys');
368 for ( var i in surveys )
369 display_survey( f, surveys[i].id(), user.id() );
374 function display_all_addresses () {
375 d = document.getElementById('addresses');
377 d.removeChild(d.lastChild);
379 for (var i in user.addresses())
380 display_address(document.getElementById('addresses'), user.addresses()[i]);
383 function new_addr () {
388 user.addresses().push(x);
389 display_address(document.getElementById('addresses'), x);
392 function display_survey (div, sid, uid) {
394 var t = document.getElementById('survey-tmpl').firstChild.cloneNode(true);
397 init_survey(t,sid,uid);
400 function display_address (div, adr) {
403 if (adr.isdeleted()) dis = true;
405 var t = document.getElementById('addr-tmpl').getElementsByTagName('table')[0].cloneNode(true);
410 x = findNodeByName(t, 'adr.address_type');
412 if (adr.address_type()) x.value = adr.address_type();
413 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').address_type(this.value)');
415 x = findNodeByName(t, 'adr.street1');
417 if (adr.street1()) x.value = adr.street1();
418 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').street1(this.value)');
420 x = findNodeByName(t, 'adr.street2');
422 if (adr.street2()) x.value = adr.street2();
423 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').street2(this.value)');
425 x = findNodeByName(t, 'adr.city');
427 if (adr.city()) x.value = adr.city();
428 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').city(this.value)');
430 x = findNodeByName(t, 'adr.state');
432 if (adr.state()) x.value = adr.state();
433 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').state(this.value)');
435 x = findNodeByName(t, 'adr.post_code');
437 if (adr.post_code()) x.value = adr.post_code();
438 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').post_code(this.value)');
440 x = findNodeByName(t, 'adr.county');
442 if (adr.county()) x.value = adr.county();
443 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').county(this.value)');
445 x = findNodeByName(t, 'adr.country');
447 if (adr.country()) x.value = adr.country();
448 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').country(this.value)');
450 x = findNodeByName(t, 'adr.valid');
452 if (adr.valid()) x.checked = true;
453 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').valid(this.checked ? "t" : "f")');
455 x = findNodeByName(t, 'is_mailing');
458 x.setAttribute( 'onclick', 'user.mailing_address(findAddressById(' + adr.id() + '))');
459 if (adr.id() == user.mailing_address().id()) {
463 x = findNodeByName(t, 'is_billing');
466 x.setAttribute( 'onclick', 'user.billing_address(findAddressById(' + adr.id() + '))');
467 if (adr.id() == user.billing_address().id()) {
471 x = findNodeByName(t, 'remove');
473 x.setAttribute('onclick', 'unremove_adr(' + adr.id() + '); return false;');
474 x.innerHTML = "Undelete this address";
476 x.setAttribute('onclick', 'remove_adr(' + adr.id() + '); return false;');
483 function unremove_adr (id) {
484 findAddressById(id).isdeleted(0);
485 display_all_addresses();
488 function remove_adr (id) {
489 findAddressById(id).isdeleted(1);
490 display_all_addresses();
493 function findAddressById (id) {
494 for (var i in user.addresses())
495 if (user.addresses()[i].id() == id) return user.addresses()[i];
499 function selectBuilder (id, objects, def, args) {
500 var label_field = args['label_field'];
501 var value_field = args['value_field'];
502 var depth = args['depth'];
504 if (!depth) depth = 0;
506 args['depth'] = parseInt(depth) + 1;
508 var child_field_name = args['child_field_name'];
510 var sel = document.getElementById(id);
513 for (var o in sel.options) {
514 sel.options[o] = null;
516 args['clear'] = false;
517 if (args['empty_label']) {
518 sel.options[0] = new Option( args['empty_label'], args['empty_value'] );
519 sel.selectedIndex = 0;
523 for (var i in objects) {
524 var l = objects[i][label_field];
525 var v = objects[i][value_field];
527 if (typeof l == 'function')
528 l = objects[i][label_field]();
530 if (typeof v == 'function')
531 v = objects[i][value_field]();
533 var opt = new Option( l, v );
537 opt.style.paddingLeft = '' + d + 'px';
540 sel.options[sel.options.length] = opt;
543 if (typeof def == 'object') {
545 if (v == def[j]) opt.selected = true;
548 if (v == def) opt.selected = true;
551 if (child_field_name) {
552 var c = objects[i][child_field_name];
553 if (typeof c == 'function')
554 c = objects[i][child_field_name]();
560 { label_field : args['label_field'],
561 value_field : args['value_field'],
562 depth : args['depth'],
563 child_field_name : args['child_field_name'] }