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 if (user.billing_address().isdeleted())
65 throw "Please select a valid Billing Address";
67 if (user.mailing_address().isdeleted())
68 throw "Please select a valid Mailing Address";
70 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.patron.update', ses_id, user );
72 var ok = req.getResultObject();
74 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.set_groups', ses_id, ok.id(), user_groups );
76 req.getResultObject();
79 alert( 'User ' + ok.usrname() +
80 ' [' + ok.card().barcode() + '] ' +
81 ' successfully saved!');
98 function init_editor (u) {
100 var x = document.getElementById('editor').elements;
104 ses_id = cgi.param('ses');
106 var usr_id = cgi.param('usr');
112 user.mailing_address( new aua() );
113 user.mailing_address().isnew(1);
114 user.mailing_address().id(fakeid());
116 user.billing_address( user.mailing_address() );
118 user.card( new ac() );
119 user.card().isnew(1);
120 user.card().id(fakeid());
123 user.addresses().push(user.mailing_address());
126 user.cards().push(user.card());
129 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', ses_id, usr_id );
131 user = req.getResultObject();
138 if (user.id()) x['user.id'].value = user.id();
139 if (cgi.param('adv')) x['user.id'].parentNode.parentNode.setAttribute('adv', 'false');
141 if (user.create_date()) x['user.create_date'].value = user.create_date();
143 if (user.usrname()) x['user.usrname'].value = user.usrname();
144 x['user.usrname'].setAttribute('onchange','user.usrname(this.value)');
146 if (user.card() && user.card().barcode()) x['user.card.barcode'].value = user.card().barcode();
147 x['user.card.barcode'].setAttribute('onchange','user.card().barcode(this.value)');
149 x['user.card.barcode'].disabled = false;
151 x['replace_card'].className = '';
152 x['replace_card'].setAttribute('onclick',
153 'user.card(new ac()); ' +
154 'user.card().isnew(1); ' +
155 'user.card().id(fakeid()); ' +
156 'user.cards().push(user.card()); ' +
157 'this.parentNode.firstChild.disabled = false; ' +
158 'this.parentNode.firstChild.value = ""; ' +
159 'this.parentNode.firstChild.focus(); ' +
164 if (user.passwd()) x['user.passwd'].value = user.passwd();
165 x['user.passwd'].setAttribute('onchange','user.passwd(this.value)');
167 if (user.prefix()) x['user.prefix'].value = user.prefix();
168 x['user.prefix'].setAttribute('onchange','user.prefix(this.value)');
170 if (user.first_given_name()) x['user.first_given_name'].value = user.first_given_name();
171 x['user.first_given_name'].setAttribute('onchange','user.first_given_name(this.value)');
173 if (user.second_given_name()) x['user.second_given_name'].value = user.second_given_name();
174 x['user.second_given_name'].setAttribute('onchange','user.second_given_name(this.value);');
176 if (user.family_name()) x['user.family_name'].value = user.family_name();
177 x['user.family_name'].setAttribute('onchange','user.family_name(this.value)');
179 if (user.suffix()) x['user.suffix'].value = user.suffix();
180 x['user.suffix'].setAttribute('onchange','user.suffix(this.value)');
182 if (user.dob()) x['user.dob'].value = user.dob();
183 x['user.dob'].setAttribute('onchange','user.dob(this.value)');
185 if (user.ident_value()) x['user.ident_value'].value = user.ident_value();
186 x['user.ident_value'].setAttribute('onchange','user.ident_value(this.value)');
188 if (user.ident_value2()) x['user.ident_value2'].value = user.ident_value2();
189 x['user.ident_value2'].setAttribute('onchange','user.ident_value2(this.value)');
191 if (user.email()) x['user.email'].value = user.email();
192 x['user.email'].setAttribute('onchange','user.email(this.value)');
194 if (user.day_phone()) x['user.day_phone'].value = user.day_phone();
195 x['user.day_phone'].setAttribute('onchange','user.day_phone(this.value)');
197 if (user.evening_phone()) x['user.evening_phone'].value = user.evening_phone();
198 x['user.evening_phone'].setAttribute('onchange','user.evening_phone(this.value)');
200 if (user.other_phone()) x['user.other_phone'].value = user.other_phone();
201 x['user.other_phone'].setAttribute('onchange','user.other_phone(this.value)');
203 if (user.expire_date()) x['user.expire_date'].value = user.expire_date();
204 x['user.expire_date'].setAttribute('onchange','user.expire_date(this.value)');
206 if (user.active()) x['user.active'].checked = true;
207 x['user.active'].setAttribute('onchange','user.active(this.checked ? "t" : "f" )');
209 if (user.master_account()) x['user.master_account'].checked = true;
210 x['user.master_account'].setAttribute('onchange','user.master_account(this.checked ? "t" : "f" )');
212 if (user.super_user()) x['user.super_user'].checked = true;
213 x['user.super_user'].setAttribute('onchange','user.super_user(this.checked ? "t" : "f" )');
214 if (cgi.param('adv')) x['user.super_user'].parentNode.parentNode.setAttribute('adv', 'false');
216 if (user.claims_returned_count()) x['user.claims_returned_count'].value = user.claims_returned_count();
217 // onchange handled by func above
219 if (user.alert_message()) x['user.alert_message'].value = user.alert_message();
220 // onchange handled by func above
223 // set up the home_ou selector
224 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.org_tree.retrieve' );
226 orgTree = req.getResultObject();
232 { label_field : 'name',
234 empty_label : '-- Required --',
237 child_field_name : 'children' }
240 x['user.home_ou'].setAttribute('onchange','user.home_ou(this.options[this.selectedIndex].value)');
242 // set up the ident_type selector
243 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.ident_types.retrieve' );
245 ident_type_list = req.getResultObject();
251 { label_field : 'name',
253 empty_label : '-- Required --',
258 x['user.ident_type'].setAttribute('onchange','user.ident_type(this.options[this.selectedIndex].value)');
263 (user.ident_value2 == '' ? user.ident_type2() : ''),
264 { label_field : 'name',
266 empty_label : '-- Optional --',
271 x['user.ident_type2'].setAttribute('onchange','var x = this.options[this.selectedIndex].value; x ? user.ident_type2(x) : user.ident_type2(null);');
274 // set up the standing selector
275 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.standings.retrieve' );
277 standing_list = req.getResultObject();
283 { label_field : 'value',
285 empty_label : '-- Required --',
290 x['user.standing'].setAttribute('onchange','user.standing(this.options[this.selectedIndex].value)');
292 // set up the profile selector
293 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.groups.tree.retrieve' );
295 group_tree = req.getResultObject();
301 { label_field : 'name',
303 empty_label : '-- Required --',
306 child_field_name : 'children' }
309 x['user.profile'].setAttribute('onchange','user.profile(this.options[this.selectedIndex].value)');
311 // set up the profile selector
312 var user_group_objects = [];
314 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.get_groups', ses_id, user.id() );
316 user_group_objects = req.getResultObject();
320 for (var i in user_group_objects) {
321 in_groups.push(user_group_objects[i].grp());
322 user_groups.push(user_group_objects[i].grp());
329 { label_field : 'name',
332 child_field_name : 'children' }
335 x['permgroups'].setAttribute( 'onchange',
336 'window.user_groups = [];' +
337 'for (var i = 0; i < this.options.length; i++) {' +
338 ' if (this.options[i].selected)' +
339 ' window.user_groups.push(this.options[i].value);' +
342 display_all_addresses();
344 if (cgi.param('adv')) x['permgroups'].parentNode.parentNode.setAttribute('adv', 'false');
349 function display_all_addresses () {
350 d = document.getElementById('addresses');
352 d.removeChild(d.lastChild);
354 for (var i in user.addresses())
355 display_address(document.getElementById('addresses'), user.addresses()[i]);
358 function new_addr () {
363 user.addresses().push(x);
364 display_address(document.getElementById('addresses'), x);
367 function display_address (div, adr) {
370 if (adr.isdeleted()) dis = true;
372 var t = document.getElementById('addr-tmpl').getElementsByTagName('table')[0].cloneNode(true);
377 x = findNodeByName(t, 'adr.address_type');
379 if (adr.address_type()) x.value = adr.address_type();
380 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').address_type(this.value)');
382 x = findNodeByName(t, 'adr.street1');
384 if (adr.street1()) x.value = adr.street1();
385 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').street1(this.value)');
387 x = findNodeByName(t, 'adr.street2');
389 if (adr.street2()) x.value = adr.street2();
390 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').street2(this.value)');
392 x = findNodeByName(t, 'adr.city');
394 if (adr.city()) x.value = adr.city();
395 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').city(this.value)');
397 x = findNodeByName(t, 'adr.state');
399 if (adr.state()) x.value = adr.state();
400 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').state(this.value)');
402 x = findNodeByName(t, 'adr.post_code');
404 if (adr.post_code()) x.value = adr.post_code();
405 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').post_code(this.value)');
407 x = findNodeByName(t, 'adr.county');
409 if (adr.county()) x.value = adr.county();
410 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').county(this.value)');
412 x = findNodeByName(t, 'adr.country');
414 if (adr.country()) x.value = adr.country();
415 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').country(this.value)');
417 x = findNodeByName(t, 'adr.valid');
419 if (adr.valid()) x.checked = true;
420 x.setAttribute( 'onchange', 'findAddressById(' + adr.id() + ').valid(this.checked ? "t" : "f")');
422 x = findNodeByName(t, 'is_mailing');
425 x.setAttribute( 'onclick', 'user.mailing_address(findAddressById(' + adr.id() + '))');
426 if (adr.id() == user.mailing_address().id()) {
430 x = findNodeByName(t, 'is_billing');
433 x.setAttribute( 'onclick', 'user.billing_address(findAddressById(' + adr.id() + '))');
434 if (adr.id() == user.billing_address().id()) {
438 x = findNodeByName(t, 'remove');
440 x.setAttribute('onclick', 'unremove_adr(' + adr.id() + '); return false;');
441 x.innerHTML = "Undelete this address";
443 x.setAttribute('onclick', 'remove_adr(' + adr.id() + '); return false;');
450 function unremove_adr (id) {
451 findAddressById(id).isdeleted(0);
452 display_all_addresses();
455 function remove_adr (id) {
456 findAddressById(id).isdeleted(1);
457 display_all_addresses();
460 function findAddressById (id) {
461 for (var i in user.addresses())
462 if (user.addresses()[i].id() == id) return user.addresses()[i];
466 function selectBuilder (id, objects, def, args) {
467 var label_field = args['label_field'];
468 var value_field = args['value_field'];
469 var depth = args['depth'];
471 if (!depth) depth = 0;
473 args['depth'] = parseInt(depth) + 1;
475 var child_field_name = args['child_field_name'];
477 var sel = document.getElementById(id);
480 for (var o in sel.options) {
481 sel.options[o] = null;
483 args['clear'] = false;
484 if (args['empty_label']) {
485 sel.options[0] = new Option( args['empty_label'], args['empty_value'] );
486 sel.selectedIndex = 0;
490 for (var i in objects) {
491 var l = objects[i][label_field];
492 var v = objects[i][value_field];
494 if (typeof l == 'function')
495 l = objects[i][label_field]();
497 if (typeof v == 'function')
498 v = objects[i][value_field]();
500 var opt = new Option( l, v );
504 opt.style.paddingLeft = '' + d + 'px';
507 sel.options[sel.options.length] = opt;
510 if (typeof def == 'object') {
512 if (v == def[j]) opt.selected = true;
515 if (v == def) opt.selected = true;
518 if (child_field_name) {
519 var c = objects[i][child_field_name];
520 if (typeof c == 'function')
521 c = objects[i][child_field_name]();
527 { label_field : args['label_field'],
528 value_field : args['value_field'],
529 depth : args['depth'],
530 child_field_name : args['child_field_name'] }