1 mw.sdump('D_LEGACY','Loading patron.js\n');
2 //var newdoctype = document.implementation.createDocumentType("HTML", "-//W3C//DTD HTML 4.01 Transitional//EN","");
3 var HTMLdoc;// = document.implementation.createDocument("", "", newdoctype);
5 if (typeof(PATRON)=='object') {
6 mw.sdump('D_LEGACY','Already loaded\n');
12 PATRON['search'] = {};
13 PATRON['search_results'] = [];
14 PATRON['checkouts'] = [];
20 var response_list = [];
21 var local_stat_cats = [];
22 var local_stat_cat_entries = {};
23 var patron_hits_per_page = 20;
27 var patron_list_columns = [
28 { 'f' : 'prefix', 'v' : 'Prefix', 'hidden' : true },
29 { 'f' : 'family_name', 'v' : 'Family Name', 'primary' : true },
30 { 'f' : 'first_given_name', 'v' : 'First Name' },
31 { 'f' : 'second_given_name', 'v' : 'Middle Name' },
32 { 'f' : 'suffix', 'v' : 'Suffix', 'hidden' : false },
33 { 'f' : 'email', 'v' : 'Email', 'hidden' : true },
34 { 'f' : 'day_phone', 'v' : 'Day Phone', 'hidden' : false },
35 { 'f' : 'evening_phone', 'v' : 'Evening Phone', 'hidden' : true },
36 { 'f' : 'other_phone', 'v' : 'Other Phone', 'hidden' : true },
37 { 'f' : 'ident_value', 'v' : 'Ident Value', 'hidden' : false },
38 { 'f' : 'ident_type', 'v' : 'Ident Type', 'hidden' : true },
39 { 'f' : 'ident_value2', 'v' : 'Ident Value 2', 'hidden' : true },
40 { 'f' : 'ident_type2', 'v' : 'Ident Type 2', 'hidden' : true},
41 { 'f' : 'dob', 'v' : 'Date of Birth', 'hidden' : true},
42 { 'f' : 'active', 'v' : 'Active', 'hidden' : true},
43 { 'f' : 'expire_date', 'v' : 'Expire Date', 'hidden' : true},
44 { 's' : 'home_ou', 'f' : 'shortname', 'v' : 'Home Lib', 'hidden' : true},
45 { 'f' : 'usrname', 'v' : 'Login Name', 'hidden' : true},
46 { 'f' : 'usrgroup', 'v' : 'Group', 'hidden' : true},
47 { 's' : 'mailing_address', 'f' : 'street1', 'v' : 'Mailing Address - Street 1', 'hidden' : true},
48 { 's' : 'mailing_address', 'f' : 'street2', 'v' : 'Mailing Address - Street 2', 'hidden' : true},
49 { 's' : 'mailing_address', 'f' : 'city', 'v' : 'Mailing Address - City', 'hidden' : true},
50 { 's' : 'mailing_address', 'f' : 'state', 'v' : 'Mailing Address - State', 'hidden' : true},
51 { 's' : 'mailing_address', 'f' : 'post_code', 'v' : 'Mailing Address - ZIP', 'hidden' : false},
52 { 's' : 'billing_address', 'f' : 'street1', 'v' : 'Physical Address - Street 1', 'hidden' : true},
53 { 's' : 'billing_address', 'f' : 'street2', 'v' : 'Physical Address - Street 2', 'hidden' : true},
54 { 's' : 'billing_address', 'f' : 'city', 'v' : 'Physical Address - City', 'hidden' : true},
55 { 's' : 'billing_address', 'f' : 'state', 'v' : 'Physical Address - State', 'hidden' : true},
56 { 's' : 'billing_address', 'f' : 'post_code', 'v' : 'Physical Address - ZIP', 'hidden' : false}
60 function patron_init() {
61 mw.sdump('D_LEGACY','**** TESTING: patron.js: patron_init(): ' + mw.G.main_test_variable + '\n');
62 mw.sdump('D_LEGACY','PATRON = ' + js2JSON(PATRON) + '\n');
63 var textbox = document.getElementById('patron_scan_textbox');
64 if (textbox) textbox.addEventListener("keypress",patron_handle_keypress,false);
66 Originally, the idea here was to setup the PATRON object based on barcode if the bundle loader
67 set a params.barcode. This would also switch the barcode scan prompt to the patron summary
70 patron_init_if_barcode();
71 document.getElementById('patron_new_card_button').addEventListener(
74 var a = yns_alert('Activate a new PINES card?','PINES Card','Yes - Previous card lost/stolen','No',null,'Check here to confirm');
76 var card = new ac(); card.id( new_id-- ); card.isnew( '1' );
77 card.barcode( 'REQUIRED' ); //PATRON.barcode = 'REQUIRED';
78 card.usr( PATRON.au.id() );
79 hash_ac[ card.id() ] = card;
80 PATRON.au.card( card );
81 var cards = PATRON.au.cards();
82 for (var i = 0; i < cards.length; i++) { cards[i].active('0'); cards[i].ischanged('1'); }
83 cards.push( card ); PATRON.au.cards( cards );
84 var barcode_e = document.getElementById('patron_edit_system_barcode_textbox');
85 barcode_e.disabled = false; barcode_e.value = 'REQUIRED';
92 function patron_handle_keypress(ev) {
93 mw.sdump('D_LEGACY',arg_dump(arguments));
94 if (ev.keyCode && ev.keyCode == 13) {
96 case document.getElementById('patron_scan_textbox') :
98 PATRON.scan_submit(ev);
106 function patron_new_init() {
107 mw.sdump('D_LEGACY',arg_dump(arguments));
108 mw.sdump('D_LEGACY','**** TESTING: patron.js: patron_new_init(): ' + mw.G.main_test_variable + '\n');
109 mw.sdump('D_LEGACY','PATRON = ' + js2JSON(PATRON) + '\n');
110 PATRON.au = new au();
111 PATRON.au.id( new_id-- );
112 PATRON.au.isnew( '1' );
113 PATRON.au.profile( mw.G.ap_list[0].id() );
114 PATRON.au.ident_type( mw.G.cit_list[0].id() );
115 PATRON.au.home_ou( mw.G.user_ou.id() );
116 PATRON.au.addresses( [] );
117 PATRON.au.stat_cat_entries( [] );
122 card.barcode( 'REQUIRED' );
123 //PATRON.barcode = 'REQUIRED';
124 card.usr( PATRON.au.id() );
125 hash_ac[ card.id() ] = card;
127 PATRON.au.card( card );
128 PATRON.au.cards( [ card ] );
129 PATRON.related_refresh(PATRON.au.id());
131 var passwd = document.getElementById( 'patron_edit_system_new_passwd_textbox' );
132 passwd.value = Math.floor( (Math.random() * 9000) + 1000 );
133 PATRON.au.passwd( passwd.value );
135 var textbox = document.getElementById( 'patron_edit_system_barcode_textbox' );
136 textbox.select(); textbox.focus();
139 function patron_edit_init() {
140 mw.sdump('D_LEGACY','**** TESTING: patron.js: patron_edit_init(): ' + mw.G.main_test_variable + '\n');
141 mw.sdump('D_LEGACY','PATRON = ' + js2JSON(PATRON) + '\n');
142 //mw.sdump('D_LEGACY','PATRON.au.array.length = ' + PATRON.au.array.length + '\n');
143 populate_patron_edit_library_menu();
144 populate_patron_edit_prefix_menu();
145 populate_patron_edit_suffix_menu();
146 populate_patron_edit_profile_menu();
147 populate_patron_edit_ident_type_menu();
148 populate_patron_edit_ident_type_menu2();
149 PATRON.summary_refresh();
150 local_stat_cats = mw.G.actsc_list;
151 populate_rows_with_local_stat_cats(
153 local_stat_cat_entries,
157 PATRON.summary_refresh();
160 function patron_init_if_barcode() {
161 mw.sdump('D_LEGACY',arg_dump(arguments));
163 if ( params.barcode ) {
164 mw.sdump('D_LEGACY','patron_init(): patron.refresh()\n');
165 PATRON.retrieve_patron(params.barcode);
166 var deck = document.getElementById('patron_scan_deck');
167 if (deck) { deck.setAttribute('selectedIndex','1'); }
170 //mw.sdump('D_LEGACY','patron_init_if_barcode ERROR: ' + js2JSON(E) + '\n');
171 mw.sdump('D_LEGACY','patron_init_if_barcode failed\n');
175 function populate_patron_edit_library_menu() {
176 mw.sdump('D_LEGACY',arg_dump(arguments));
179 populate_lib_list_with_branch(
180 'patron_edit_system_library_menulist',
181 'patron_edit_system_library_menupopup',
187 mw.sdump('D_LEGACY','populate_patron_edit_library_menu ERROR: ' + js2JSON(E) + '\n');
188 //mw.sdump('D_LEGACY','populate_patron_edit_library_menu failed\n');
192 function set_patron_edit_library_menu() {
193 mw.sdump('D_LEGACY',arg_dump(arguments));
200 var menuitem = document.getElementById(
203 var homelib_e = document.getElementById('patron_edit_system_library_menulist');
205 homelib_e.selectedItem = menuitem;
206 mw.sdump('D_LEGACY','\tShould be set\n');
210 function populate_patron_edit_prefix_menu() {
211 mw.sdump('D_LEGACY',arg_dump(arguments));
213 populate_name_prefix(
214 'patron_edit_system_prefix_menulist',
215 'patron_edit_system_prefix_menupopup'
218 //mw.sdump('D_LEGACY','populate_patron_edit_prefix_menu ERROR: ' + js2JSON(E) + '\n');
219 mw.sdump('D_LEGACY','populate_patron_edit_prefix_menu failed\n');
223 function populate_patron_edit_suffix_menu() {
224 mw.sdump('D_LEGACY',arg_dump(arguments));
226 populate_name_suffix(
227 'patron_edit_system_suffix_menulist',
228 'patron_edit_system_suffix_menupopup'
231 //mw.sdump('D_LEGACY','populate_patron_edit_suffix_menu ERROR: ' + js2JSON(E) + '\n');
232 mw.sdump('D_LEGACY','populate_patron_edit_suffix_menu failed\n');
236 function populate_patron_edit_profile_menu() {
237 mw.sdump('D_LEGACY',arg_dump(arguments));
239 populate_user_profile(
240 'patron_edit_system_profile_menulist',
241 'patron_edit_system_profile_menupopup'
244 //mw.sdump('D_LEGACY','populate_patron_edit_profile_menu ERROR: ' + js2JSON(E) + '\n');
245 mw.sdump('D_LEGACY','populate_patron_edit_profile_menu failed\n');
249 function set_patron_edit_profile_menu() {
250 mw.sdump('D_LEGACY',arg_dump(arguments));
251 var menuitem_id = 'apitem' + PATRON.au.profile();
252 var menuitem = document.getElementById(
255 var profile_e = document.getElementById('patron_edit_system_profile_menulist');
256 if (profile_e) { profile_e.selectedItem = menuitem; }
259 function populate_patron_edit_ident_type_menu() {
260 mw.sdump('D_LEGACY',arg_dump(arguments));
262 populate_ident_types(
263 'patron_edit_system_id1type_menulist',
264 'patron_edit_system_id1type_menupopup',
268 mw.sdump('D_LEGACY','populate_patron_edit_ident_type_menu ERROR: ' + js2JSON(E) + '\n');
269 //mw.sdump('D_LEGACY','populate_patron_edit_ident_type_menu failed\n');
273 function set_patron_edit_ident_type_menu() {
274 mw.sdump('D_LEGACY',arg_dump(arguments));
275 var menuitem_id = 'cit1item' + PATRON.au.ident_type();
276 var menuitem = document.getElementById(
279 var id1 = document.getElementById('patron_edit_system_id1type_menulist');
280 if (id1) { id1.selectedItem = menuitem; }
283 function populate_patron_edit_ident_type_menu2() {
284 mw.sdump('D_LEGACY',arg_dump(arguments));
286 populate_ident_types(
287 'patron_edit_system_id2type_menulist',
288 'patron_edit_system_id2type_menupopup',
292 //mw.sdump('D_LEGACY','populate_patron_edit_ident_type_menu2 ERROR: ' + js2JSON(E) + '\n');
293 mw.sdump('D_LEGACY','populate_patron_edit_ident_type_menu2 failed\n');
297 function set_patron_edit_ident_type_menu2() {
298 mw.sdump('D_LEGACY',arg_dump(arguments));
299 var menuitem_id = 'cit2item' + PATRON.au.ident_type2();
300 var menuitem = document.getElementById(
303 var id2_e = document.getElementById('patron_edit_system_id2type_menulist');
304 if (id2_e) { id2_e.selectedItem = menuitem; }
307 function populate_patron_survey_grid(grid) {
308 mw.sdump('D_LEGACY',arg_dump(arguments));
309 if (typeof(grid) != 'object') {
310 grid = document.getElementById(grid);
312 if (!grid) { return; }
313 var rows = grid.lastChild; if (!rows) { return; }
315 empty_widget( rows );
316 // 'open-ils.circ.survey.required.retrieve',
317 // 'open-ils.circ.survey.retrieve.all',
318 var result = mw.user_request(
320 'open-ils.circ.survey.retrieve.required',
323 if (typeof(result) != 'object') { throw('survey.retrieve.all did not return an object'); }
324 var desc_1 = new Object();
325 var desc_3 = new Object();
326 var survey_hash = new Object();
327 for (var i in result) {
328 var survey = result[i];
329 survey_hash[ survey.id() ] = survey;
330 if ( (survey.required() == '0') && (survey.usr_summary() == '0') ) { continue; }
331 mw.sdump('D_LEGACY','Survey: ' + survey.id() + ' : ' + survey.name() + '\n');
332 var row = document.createElement('row');
333 rows.appendChild(row);
334 desc_1[ survey.id() ] = document.createElement('description');
335 desc_1[ survey.id() ].setAttribute('value', 'Not Taken');
336 row.appendChild(desc_1[ survey.id() ]);
337 var desc_2 = document.createElement('label');
338 desc_2.setAttribute('class','link');
339 desc_2.setAttribute('onclick','survey_test(event,' + survey.id() + ');');
340 row.appendChild(desc_2);
341 desc_2.setAttribute('value', survey.name() );
342 desc_3[ survey.id() ] = document.createElement('description');
343 row.appendChild(desc_3[ survey.id() ]);
345 if (survey.required() == '1') {
346 row.setAttribute('hidden','false');
348 row.setAttribute('hidden','true');
350 mw.sdump('D_LEGACY','creating desc_1: ' + desc_1 + '\n');
351 var result2 = mw.user_async_request(
353 'open-ils.circ.survey.response.retrieve',
354 [ mw.G.auth_ses[0], survey.id(), PATRON.au.id() ],
356 var result2 = request.getResultObject();
357 mw.sdump('D_LEGACY','result2 = ' + js2JSON(result2) + '\n');
358 if (result2.length > 0) {
359 var last_response = result2.pop();
360 mw.sdump('D_LEGACY','desc_1 = ' + desc_1[ last_response.survey() ] + '\n');
361 mw.sdump('D_LEGACY','effective_date = [' + last_response.effective_date() + '] answer_date = [' + last_response.answer_date() + ']\n');
362 var date = last_response.effective_date().substr(0,10);
363 if (!date) { date = last_response.answer_date().substr(0,10); }
364 var first_answer = '';
366 first_answer = find_id_object_in_list(
367 find_id_object_in_list(
368 survey_hash[ last_response.survey() ].questions(),
369 last_response.question()
371 last_response.answer()
374 mw.sdump('D_LEGACY',js2JSON(E) + '\n');
376 desc_1[ last_response.survey() ].setAttribute('value', date);
377 desc_3[ last_response.survey() ].setAttribute('value', first_answer);
378 mw.sdump('D_LEGACY','desc_1 = ' + date + '\n');
384 mw.sdump('D_LEGACY','populate_patron_edit_survey_grid ERROR: ' + js2JSON(E) + '\n');
389 function toggle_patron_survey_grid_rows(e,grid) {
390 mw.sdump('D_LEGACY',arg_dump(arguments));
391 var label = e.target.getAttribute('label');
392 var alt_label = e.target.getAttribute('alt_label');
393 e.target.setAttribute('label',alt_label);
394 e.target.setAttribute('alt_label',label);
395 toggle_hidden_grid_rows(grid);
398 function retrieve_patron_by_barcode(barcode,method) {
399 mw.sdump('D_LEGACY',arg_dump(arguments));
400 if (!barcode) { barcode = PATRON.barcode(); }
401 mw.sdump('D_LEGACY','Entering PATRON.retrieve_patron() with barcode: ' + barcode + '\n');
402 //unregister_patron_window(this);
404 if (!method) method = 'open-ils.actor.user.fleshed.retrieve_by_barcode';
406 if (params._patron) {
407 result = [ params._patron ];
409 result = mw.user_request(
412 [ mw.G.auth_ses[0], barcode ]
415 if (typeof(result[0]) != 'object') {
416 mw.sdump('D_LEGACY','unexpected result1 : ' + typeof(result[0]) + ' : ' + js2JSON(result) + '\n');
417 throw('unexpected result1 : ' + typeof(result[0]) + ' : ' + js2JSON(result) + '\n');
420 mw.sdump('D_LEGACY','error in search.actor.user.barcode\n' + js2JSON(E) + '\n');
424 /*for (var i in result[0]) {
425 var element = result[0][i];
426 if (typeof(element) != 'function') {
427 mw.sdump('D_LEGACY','Copying ' + i + ' to PATRON\n');
431 PATRON.au = result[0];
432 //register_patron_window(this);
433 //PATRON.barcode = find_id_object_in_list(PATRON.au.cards(),PATRON.au.card()).barcode();
434 patron_callback('retrieve_patron');
435 return PATRON.related_refresh(PATRON.au.id());
437 PATRON.retrieve_patron_by_barcode = retrieve_patron_by_barcode;
438 PATRON.retrieve_patron = retrieve_patron_by_barcode;
439 PATRON.retrieve_via_method = retrieve_patron_by_barcode;
440 PATRON.refresh = retrieve_patron_by_barcode;
442 function get_barcode() {
443 mw.sdump('D_LEGACY',arg_dump(arguments));
445 //mw.sdump('D_LEGACY','PATRON.au.array.length = ' + PATRON.au.array.length + '\n');
446 //mw.sdump('D_LEGACY','get_barcode: PATRON.au = ' + js2JSON(PATRON.au) + '\n.cards() = ' + js2JSON(PATRON.au.cards()) + '\n.card() = ' + js2JSON(PATRON.au.card()) + '\n');
447 //return find_id_object_in_list(PATRON.au.cards(),PATRON.au.card()).barcode();
448 return PATRON.au.card().barcode();
450 mw.sdump('D_LEGACY','get_barcode() error == ' + js2JSON(E) + '\n');
454 PATRON.barcode = get_barcode;
456 function validate_patron() {
457 mw.sdump('D_LEGACY',arg_dump(arguments));
458 //mw.sdump('D_LEGACY','validate_patron: PATRON.au = ' + js2JSON(PATRON.au) + '\nPATRON.au.array.length = ' + PATRON.au.array.length + '\n');
460 if ( PATRON.barcode() == 'REQUIRED') {
462 var textbox = document.getElementById( 'patron_edit_system_barcode_textbox' );
463 textbox.select(); textbox.focus();
465 s += ('Barcode required\n');
467 if ( ! PATRON.au.usrname() ) {
469 var textbox = document.getElementById( 'patron_edit_system_usrname_textbox' );
470 textbox.select(); textbox.focus();
472 s += ('Login Name required\n');
475 if ( ! PATRON.au.family_name() ) {
477 var textbox = document.getElementById( 'patron_edit_system_family_name_textbox' );
478 textbox.select(); textbox.focus();
480 s += ('Family Name required\n');
482 if ( ! PATRON.au.first_given_name() ) {
484 var textbox = document.getElementById( 'patron_edit_system_first_given_name_textbox' );
485 textbox.select(); textbox.focus();
487 s += ('First Given Name required\n');
489 if ( ! PATRON.au.ident_value() ) {
491 var textbox = document.getElementById( 'patron_edit_system_id1value_textbox' );
492 textbox.select(); textbox.focus();
494 s += ('Identification required\n');
496 if ( ! PATRON.au.dob() ) {
498 var textbox = document.getElementById( 'patron_edit_system_dob_textbox' );
499 textbox.select(); textbox.focus();
501 s += ('Date of Birth required\n');
503 var date = PATRON.au.dob();
505 var darray = date.split('-');
506 var year = darray[0]; if ( (!year) || (year.length != 4) || (!parseInt(year)) ) flag = true;
507 var month = darray[1]; if ( (!month) || (month.length !=2) || (!parseInt(month)) ) flag = true;
508 var day = darray[2]; if ( (!day) || (day.length !=2) || (!parseInt(day)) ) flag = true;
510 s += ('Date Format is YYYY-MM-DD\n');
512 if (!valid_year_month_day(year,month,day)) {
513 s += ('Invalid Date\n');
516 if ( ! PATRON.au.mailing_address() ) {
517 s += ('Mailing Address required\n');
519 if ( ! PATRON.au.billing_address() ) {
520 s += ('Billing Address required\n');
523 mw.sdump('D_LEGACY',s); alert(s); return false;
528 function backup_patron(P) {
529 mw.sdump('D_LEGACY',arg_dump(arguments));
530 backup_au = P.au.clone();
533 function restore_patron(P) {
534 mw.sdump('D_LEGACY',arg_dump(arguments));
535 P.au = backup_au.clone();
536 //hash_ac[ P.au.card() ] = find_id_object_in_list( P.au.cards(), P.au.card() );
537 hash_ac[ P.au.card().id() ] = P.au.card();
538 hash_au[ P.au.id() ] = P.au;
541 function save_patron() {
542 mw.sdump('D_LEGACY',arg_dump(arguments));
543 mw.sdump('D_LEGACY','Entering PATRON.save()\n\n=-=-=-=-=-=-=-=\n\n');
544 mw.sdump('D_LEGACY','PATRON.au = ' + js2JSON(PATRON.au) + '\n');
545 mw.sdump('D_LEGACY','PATRON.au.a.length = ' + PATRON.au.a.length + '\n\n');
546 //var backup_json = js2JSON(PATRON.au);
547 //mw.sdump('D_LEGACY','backup_json = ' + backup_json + '\n\n');
548 backup_patron(PATRON);
549 mw.sdump('D_LEGACY','\n\n=-=-=-=-=-=-=-=-=-=-\n\n');
550 check_for_new_addresses();
551 check_for_new_stat_cats();
552 if (! validate_patron() ) {
553 mw.sdump('D_LEGACY','restoring backup\n');
554 restore_patron(PATRON);
557 if (! PATRON.au.usrname() ) {
562 PATRON.au.survey_responses( response_list );
563 mw.sdump('D_LEGACY','before PATRON.au = ' + js2JSON(PATRON.au) + '\n');
566 result = mw.user_request(
568 'open-ils.actor.patron.update',
569 [ mw.G.auth_ses[0], PATRON.au ]
571 if (typeof(result[0]) != 'object') {
572 mw.sdump('D_LEGACY','unexpected result1 : ' + typeof(result[0]) + ' : ' + js2JSON(result) + '\n');
573 throw('unexpected result1 : ' + typeof(result[0]) + ' : ' + js2JSON(result) + '\n');
576 mw.sdump('D_LEGACY','error in \n' + js2JSON(E) + '\n');
577 mw.sdump('D_LEGACY','restoring backup 2\n');
578 restore_patron(PATRON);
580 //mw.sdump('D_LEGACY','PATRON.au = ' + js2JSON(PATRON.au) + '\nPATRON.au.a.length = ' + PATRON.au.a.length + '\n');
581 //PATRON.summary_refresh();
584 PATRON.au = result[0];
586 mw.sdump('D_LEGACY','Restoring backup\n');
587 restore_patron(PATRON);
588 mw.handle_error('Save Failed');
593 mw.sdump('D_LEGACY','after PATRON.au = ' + js2JSON(PATRON.au) + '\n');
594 //PATRON.barcode = find_id_object_in_list(PATRON.au.cards(),PATRON.au.card()).barcode();
595 PATRON.summary_refresh();
596 patron_callback('save', { 'au' : PATRON.au });
597 var refresh_result = PATRON.related_refresh(PATRON.au.id());
598 alert('Patron successfully updated.');
599 return refresh_result;
601 PATRON.save = save_patron;
603 function check_for_new_addresses() {
604 mw.sdump('D_LEGACY',arg_dump(arguments));
605 for (var id in hash_aua) {
606 if ( (id < 0) && ( hash_aua[id].ischanged() ) ) {
607 mw.sdump('D_LEGACY','Pushing new address\n');
608 if (!PATRON.au.addresses()) { PATRON.au.addresses( [] ); }
609 PATRON.au.addresses().push( hash_aua[id] );
614 function check_for_new_stat_cats() {
615 mw.sdump('D_LEGACY',arg_dump(arguments));
616 var entries = new Array();
617 var grid = document.getElementById('patron_edit_stat_cat_grid');
618 var nl = grid.getElementsByTagName('menulist');
619 for (var i = 0; i < nl.length; i++) {
620 var menulist = nl[i];
621 if (menulist.getAttribute('original') != menulist.value) {
622 var n_actscecm = new actscecm();
623 var id = menulist.getAttribute('entry_id')
624 //alert('check_for_new_stat_cats: id = ' + id );
626 n_actscecm.ischanged('1');
629 n_actscecm.isnew('1');
630 n_actscecm.id( new_id-- );
632 n_actscecm.stat_cat( menulist.getAttribute('stat_cat_id') );
633 n_actscecm.stat_cat_entry( menulist.value );
634 n_actscecm.target_usr( PATRON.au.id() );
635 entries.push( n_actscecm );
639 //alert( 'entries = ' + js2JSON( entries ) );
640 PATRON.au.stat_cat_entries( entries );
643 function retrieve_patron_related_info(id) {
644 mw.sdump('D_LEGACY',arg_dump(arguments));
645 if (!id) { id = PATRON.au.id(); }
646 mw.sdump('D_LEGACY','Entering PATRON.related_refresh() with id: ' + id + '\n');
651 checkouts = mw.user_request(
653 'open-ils.circ.actor.user.checked_out',
654 [ mw.G.auth_ses[0], id ]
660 PATRON.checkouts = checkouts;
661 PATRON.nearest_due = '';
662 for (var i in checkouts) {
663 var checkout = checkouts[i];
664 mw.sdump('D_LEGACY','checkout = ' + js2JSON(checkout) + '\n');
668 PATRON.summary_refresh();
672 mw.sdump('D_LEGACY',js2JSON(E) + '\n');
674 patron_callback('related_refresh');
678 PATRON.related_refresh = retrieve_patron_related_info;
680 /* patron_scan_overlay functions */
682 function patron_callback(s,params) {
683 mw.sdump('D_LEGACY',arg_dump(arguments));
686 case 'scan_submit' : return patron_scan_submit_callback(params); break;
687 case 'related_refresh' : return patron_related_refresh_callback(params); break;
688 case 'retrieve_patron' : return patron_retrieve_patron_callback(params); break;
689 case 'save' : return patron_save_callback(params); break;
690 default : return patron_default_callback(s,params); break;
693 /* assume no callback defined */
698 function patron_advanced_button(ev) {
699 mw.sdump('D_LEGACY',arg_dump(arguments));
700 var deck = document.getElementById('patron_scan_deck');
701 if (deck) { deck.setAttribute('selectedIndex','2'); }
702 focus_widget( 'patron_search_family_name_textbox' );
703 deck = document.getElementById('circ_deck_deck');
704 if (deck) { deck.setAttribute('selectedIndex','6'); }
705 //PATRON.search = {};
707 PATRON.advanced_search = patron_advanced_button;
709 function patron_scan_submit(ev) {
710 mw.sdump('D_LEGACY',arg_dump(arguments));
711 mw.sdump('D_LEGACY','Entering PATRON.scan_submit() with target: ' + ev.target + '\n');
713 var rc = PATRON.retrieve_patron( document.getElementById('patron_scan_textbox').value );
715 /* the PATRON object should already be updated. Switch deck if there is one */
716 var deck = document.getElementById('patron_scan_deck');
717 if (deck) { deck.setAttribute('selectedIndex','1'); }
718 patron_callback('scan_submit');
719 /* enable the scan item widgets if there are some */
721 'circ_checkout_scan_search_button',
722 'circ_checkout_scan_textbox',
723 'circ_checkout_scan_submit_button'
725 focus_widget( 'circ_checkout_scan_textbox' );
727 throw('retrieve_patron return code == false');
730 mw.sdump('D_LEGACY','Could not retrieve patron. Invalid barcode?\n' + js2JSON(E) + '\n');
731 alert('Could not retrieve patron. Invalid barcode?\n' + js2JSON(E) + '\n');
734 PATRON.scan_submit = patron_scan_submit;
736 function patron_scan_search(ev) {
737 mw.sdump('D_LEGACY',arg_dump(arguments));
738 mw.sdump('D_LEGACY','Entering PATRON.scan_search() with target: ' + ev.target + '\n');
739 //mw.sdump('D_LEGACY','PATRON.search = ' + pretty_print(js2JSON(PATRON.search)) + '\n');
741 var result = mw.user_request(
743 'open-ils.actor.patron.search.advanced',
744 [ mw.G.auth_ses[0], PATRON.search ]
746 mw.sdump('D_LEGACY','result = ' + js2JSON(result) + '\n');
747 PATRON['search_results'] = result;
748 build_patron_search_result_deck();
753 PATRON.scan_search = patron_scan_search;
755 /* patron_summary_overlay functions */
757 function make_barcode_handler(card_id,user_id) {
758 mw.sdump('D_LEGACY',arg_dump(arguments));
759 return function (ev) {
760 magic_field_edit(ev,'ac',card_id,'barcode');
761 PATRON.au.ischanged('1');
762 magic_field_edit(ev,'au',user_id,'usrname');
763 var usr_e = document.getElementById('patron_edit_system_usrname_textbox');
765 usr_e.value = ev.target.value;
767 /*ev.target.removeEventListener(
775 function patron_summary_refresh(ev) {
776 mw.sdump('D_LEGACY',arg_dump(arguments));
777 //alert( mw.arg_dump(arguments) );
778 // This function needs to be broken up.. it sets the patron edit section as well
779 if (!PATRON.au) { return; }
780 mw.sdump('D_LEGACY','Entering PATRON.summary_refresh()\n');
781 hash_au[PATRON.au.id()] = PATRON.au;
782 //PATRON.barcode = find_id_object_in_list(PATRON.au.cards(),PATRON.au.card()).barcode();
783 /* just redraw the display with the PATRON object as is */
784 var barcode_e = document.getElementById('patron_edit_system_barcode_textbox');
785 var newcard_e = document.getElementById('patron_new_card_button');
787 //var barcode_v = find_id_object_in_list(PATRON.au.cards(),PATRON.au.card());
788 var barcode_v = PATRON.au.card();
790 barcode_e.value = barcode_v.barcode();
791 if (barcode_e.value != 'REQUIRED') {
792 barcode_e.disabled = true;
793 newcard_e.hidden = false;
794 barcode_e.addEventListener(
797 PATRON.au.card().barcode( ev.target.value );
802 barcode_e.addEventListener(
804 make_barcode_handler(barcode_v.id(),PATRON.au.id()),
810 var usrname_e = document.getElementById('patron_edit_system_usrname_textbox');
812 if (PATRON.au.usrname()) usrname_e.value = PATRON.au.usrname();
813 usrname_e.setAttribute("onchange",
814 "magic_field_edit(event,'au'," + PATRON.au.id() + ",'usrname');");
816 var passwd_e = document.getElementById('patron_edit_system_new_passwd_textbox');
818 passwd_e.setAttribute("onchange",
819 "magic_field_edit(event,'au'," + PATRON.au.id() + ",'passwd');");
821 var name_e = document.getElementById('patron_status_caption');
824 if (PATRON.au.prefix()) { name += PATRON.au.prefix() + ' '; }
825 if (PATRON.au.family_name()) { name += PATRON.au.family_name() + ', '; }
826 if (PATRON.au.first_given_name()) { name += PATRON.au.first_given_name() + ' '; }
827 if (PATRON.au.second_given_name()) { name += PATRON.au.second_given_name() + ' '; }
828 if (PATRON.au.suffix()) { name += PATRON.au.suffix(); }
830 name_e.setAttribute('label',name);
832 name_e = document.getElementById('patron_edit_system_family_name_textbox');
834 if (PATRON.au.family_name()) { name_e.value = PATRON.au.family_name(); }
835 name_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'family_name');");
837 name_e = document.getElementById('patron_edit_system_first_given_name_textbox');
839 if (PATRON.au.first_given_name()) { name_e.value = PATRON.au.first_given_name(); }
840 name_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'first_given_name');");
842 name_e = document.getElementById('patron_edit_system_second_given_name_textbox');
844 if (PATRON.au.second_given_name()) { name_e.value = PATRON.au.second_given_name(); }
845 name_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'second_given_name');");
847 name_e = document.getElementById('patron_edit_system_prefix_menulist');
849 if (PATRON.au.prefix()) { name_e.value = PATRON.au.prefix(); }
850 name_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'prefix');");
852 name_e = document.getElementById('patron_edit_system_suffix_menulist');
854 if (PATRON.au.suffix()) { name_e.value = PATRON.au.suffix(); }
855 name_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'suffix');");
857 var disable_e = document.getElementById('patron_edit_system_disable_checkbox');
859 disable_e.checked = (PATRON.au.active() != 1);
860 disable_e.setAttribute("oncommand","try{PATRON.au.ischanged('1'); if (PATRON.au.active() == 1) {PATRON.au.active('0');} else {PATRON.au.active('1');}}catch(E){alert(E);}");
862 var profile_e = document.getElementById('patron_status_data_profile');
864 //profile_e.setAttribute('value',find_id_object_in_list(mw.G.ap_list, PATRON.au.profile() ).name() );
865 profile_e.setAttribute('value',mw.G.ap_hash[ PATRON.au.profile() ].name() );
867 profile_e = document.getElementById('patron_edit_system_profile_menulist');
869 //hash_ap[PATRON.au.profile().id()] = PATRON.au.profile();
870 profile_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'profile');");
871 set_patron_edit_profile_menu();
873 var email_e = document.getElementById('patron_edit_contact_email_textbox');
875 if (PATRON.au.email()) email_e.value = PATRON.au.email();
876 email_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'email');");
878 var dayphone_e = document.getElementById('patron_contact_dayphone_data');
880 if (PATRON.au.day_phone()) dayphone_e.setAttribute('value', PATRON.au.day_phone() );
882 dayphone_e = document.getElementById('patron_edit_contact_dayphone_textbox');
884 if (PATRON.au.day_phone()) dayphone_e.value = PATRON.au.day_phone();
885 dayphone_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'day_phone');");
887 var eveningphone_e = document.getElementById('patron_contact_eveningphone_data');
888 if (eveningphone_e) {
889 if (PATRON.au.evening_phone()) eveningphone_e.setAttribute('value', PATRON.au.evening_phone() );
891 eveningphone_e = document.getElementById('patron_edit_contact_eveningphone_textbox');
892 if (eveningphone_e) {
893 if (PATRON.au.evening_phone()) eveningphone_e.value = PATRON.au.evening_phone();
894 eveningphone_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'evening_phone');");
896 var otherphone_e = document.getElementById('patron_contact_otherphone_data');
898 if (PATRON.au.other_phone()) otherphone_e.setAttribute('value', PATRON.au.other_phone() );
900 otherphone_e = document.getElementById('patron_edit_contact_otherphone_textbox');
902 if (PATRON.au.other_phone()) otherphone_e.value = PATRON.au.other_phone();
903 otherphone_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'other_phone');");
905 var standing_e = document.getElementById('patron_status_data_standing');
907 /*var standing = find_id_object_in_list(
911 var standing = mw.G.cst_hash[ PATRON.au.standing() ];
912 mw.sdump('D_LEGACY','standing = ' + js2JSON(standing) + '\n');
913 standing_e.setAttribute( 'value', standing.value() );
914 if (standing.value() == 'Good') {
915 add_css_class(standing_e,'good');
917 remove_css_class(standing_e,'good');
920 var claims_returned_e = document.getElementById('patron_status_data_claims_returned');
921 if (claims_returned_e) {
922 claims_returned_e.setAttribute('value',PATRON.au.claims_returned_count());
924 var credit_e = document.getElementById('patron_status_data_credit');
926 credit_e.setAttribute('value',PATRON.au.credit_forward_balance());
928 var homelib_e = document.getElementById('patron_status_data_homelib');
930 homelib_e.setAttribute('value',
937 homelib_e = document.getElementById('patron_edit_system_library_menulist');
939 homelib_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'home_ou',false);");
940 set_patron_edit_library_menu();
942 var fees_e = document.getElementById('patron_status_data_fees');
944 fees_e.setAttribute('value',PATRON.bills.length);
946 var checkouts_e = document.getElementById('patron_status_data_checkouts');
948 checkouts_e.setAttribute('value',PATRON.checkouts.length);
950 var holds_e = document.getElementById('patron_status_data_holds');
952 holds_e.setAttribute('value',PATRON.holds.length);
954 var nearest_due_e = document.getElementById('patron_status_data_nearest_due');
956 nearest_due_e.setAttribute('value',PATRON.nearest_due);
958 var id1value_e = document.getElementById('patron_edit_system_id1value_textbox');
960 if (PATRON.au.ident_value()) id1value_e.setAttribute('value',PATRON.au.ident_value());
961 id1value_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'ident_value');");
963 var id2value_e = document.getElementById('patron_edit_system_id2value_textbox');
965 if (PATRON.au.ident_value2()) id2value_e.setAttribute('value',PATRON.au.ident_value2());
966 id2value_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'ident_value2');");
968 var id1type_e = document.getElementById('patron_edit_system_id1type_menulist');
970 id1type_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'ident_type');");
971 set_patron_edit_ident_type_menu();
973 var id2type_e = document.getElementById('patron_edit_system_id2type_menulist');
975 id2type_e.setAttribute("oncommand","magic_field_edit(event,'au'," + PATRON.au.id() + ",'ident_type2');");
976 set_patron_edit_ident_type_menu2();
978 var dob_e = document.getElementById('patron_edit_system_dob_textbox');
980 if (PATRON.au.dob()) dob_e.setAttribute('value',PATRON.au.dob());
981 dob_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'dob',false);");
983 //populate_patron_survey_grid('patron_survey_grid');
984 populate_patron_survey_grid('patron_edit_survey_grid');
985 populate_patron_edit_surveys();
987 var address_rows = document.getElementById('patron_contact_address_rows');
989 empty_widget(address_rows);
990 var addresses = PATRON.au.addresses();
991 for (var i in addresses) {
992 if (typeof(addresses[i])=='object') {
993 var address = addresses[i];
995 (address.id() == PATRON.au.mailing_address()) ||
996 (address.id() == PATRON.au.billing_address())
998 //mw.sdump('D_LEGACY','address dump: ' + i + ' : ' + addresses[i] + '\n');
999 rows_append_address( address_rows, address, false );
1004 address_rows = document.getElementById('patron_edit_address_rows');
1006 empty_widget(address_rows);
1007 var addresses = PATRON.au.addresses();
1008 for (var i in addresses) {
1009 if (typeof(addresses[i])=='object') {
1010 //mw.sdump('D_LEGACY','address dump: ' + i + ' : ' + js2JSON(addresses[i]) + '\n');
1011 rows_append_address( address_rows, addresses[i], true );
1014 var blank = new aua();
1015 blank.id( new_id-- );
1017 blank.usr( PATRON.au.id() );
1018 /*if ( addresses.length == 0 ) {*/
1019 if (hash_aua.length == 0) {
1020 blank.address_type( 'REQUIRED' );
1021 blank.ischanged( "1" );
1022 PATRON.au.mailing_address( blank.id() );
1023 PATRON.au.billing_address( blank.id() );
1025 blank.address_type( 'NEW' );
1027 blank.city( 'CITY' );
1028 blank.country( 'USA' );
1029 blank.county( 'COUNTY' );
1030 blank.post_code( 'ZIP' );
1031 blank.state( 'GA' );
1032 blank.street1( 'STREET1' );
1033 blank.street2( 'STREET2' );
1034 rows_append_address( address_rows, blank , true );
1037 var alert_message_e = document.getElementById('patron_edit_system_alert_message_textbox');
1038 if (alert_message_e) {
1039 if (PATRON.au.alert_message()) alert_message_e.setAttribute('value',PATRON.au.alert_message());
1040 alert_message_e.setAttribute("onchange","magic_field_edit(event,'au'," + PATRON.au.id() + ",'alert_message',false);");
1042 var stat_cats_e = document.getElementById('patron_statcat_rows');
1045 empty_widget( stat_cats_e );
1046 for (var i = 0; i < PATRON.au.stat_cat_entries().length; i++) {
1049 var entry = PATRON.au.stat_cat_entries()[i];
1050 var stat_cat = mw.G.actsc_hash[ entry.stat_cat() ];
1053 var row = document.createElement('row');
1054 stat_cats_e.appendChild(row);
1055 var sc_label = document.createElement('label');
1056 row.appendChild(sc_label);
1057 var sce_label = document.createElement('label');
1058 row.appendChild(sce_label);
1061 sc_label.setAttribute('value', stat_cat.name() );
1062 sce_label.setAttribute('value', entry.stat_cat_entry() );
1068 stat_cats_e = document.getElementById('patron_edit_stat_cat_grid');
1070 //alert('stat_cats_e');
1073 for (var i = 0; i < PATRON.au.stat_cat_entries().length; i++) {
1074 var entry = PATRON.au.stat_cat_entries()[i];
1075 //alert('entry = ' + js2JSON(entry) );
1076 var stat_cat = entry.stat_cat();
1077 if (typeof stat_cat == 'object') stat_cat = stat_cat.id();
1078 var menulist = document.getElementById('menulist_stat_cat_' + stat_cat);
1081 //alert('menulist');
1083 menulist.value = entry.stat_cat_entry();
1084 menulist.setAttribute( 'original', menulist.value );
1085 menulist.setAttribute( 'entry_id', entry.id() );
1086 //alert('summary_refresh: entry.id() = ' + entry.id() );
1095 if (PATRON.au.alert_message()) {
1096 snd_bad(); snd_bad();
1098 'PATRON ALERT MESSAGE\n\n\n\n' +
1099 PATRON.au.alert_message() +
1100 '\n\n\n\nTo remove this alert permanently, Edit the patron and erase the message in "Alert Message".\n\n'
1105 PATRON.summary_refresh = patron_summary_refresh;
1107 function rows_append_address( rows, address, edit ) {
1108 mw.sdump('D_LEGACY',arg_dump(arguments));
1113 //mw.sdump('D_LEGACY','Entering rows_append_address()\n');
1114 if (typeof(rows) != 'object') {
1115 rows = document.getElementById(box);
1117 if (typeof(rows) != 'object') {
1118 mw.sdump('D_LEGACY','rows_append_address: could not find ' + rows + '\n');
1119 alert('rows_append_address: could not find ' + rows + '\n');
1122 var row = document.createElement('row');
1123 //row.setAttribute('id','row_address_'+yesno(edit)+address.id());
1124 hash_aua[ address.id() ] = address;
1125 rows.appendChild(row);
1126 var groupbox = document.createElement('groupbox');
1128 groupbox.setAttribute('id','groupbox_address_'+address.id());
1130 groupbox.setAttribute('id','groupbox_summary_address_'+address.id());
1132 groupbox.setAttribute('flex','1');
1133 row.appendChild(groupbox);
1134 var caption = document.createElement('caption');
1135 var caption_string = address.address_type();
1136 if ( PATRON.au.mailing_address() == address.id() ) {
1137 caption_string = '(MAILING) ' + caption_string;
1139 if ( PATRON.au.billing_address() == address.id() ) {
1140 caption_string = '(PHYSICAL) ' + caption_string;
1142 caption.setAttribute( 'label',caption_string );
1143 groupbox.appendChild(caption);
1148 var hbox = document.createElement('hbox');
1149 groupbox.appendChild(hbox);
1150 var label = document.createElement('label');
1151 label.setAttribute('value','Type:');
1152 hbox.appendChild(label);
1153 var textbox = document.createElement('textbox');
1154 textbox.setAttribute('size','20');
1155 textbox.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'address_type');");
1156 hbox.appendChild(textbox);
1157 textbox.value = address.address_type();
1158 var label2 = document.createElement('label');
1159 label2.setAttribute('value','Physical:');
1160 hbox.appendChild(label2);
1161 var checkbox_billing = document.createElement('checkbox');
1162 checkbox_billing.setAttribute('group','billing');
1163 checkbox_billing.setAttribute('oncommand','radio_checkbox(event); PATRON.au.billing_address(' + address.id() + '); PATRON.au.ischanged("1");');
1164 hbox.appendChild(checkbox_billing);
1165 if ( PATRON.au.billing_address() == address.id() ) {
1166 checkbox_billing.checked = true;
1168 var label3 = document.createElement('label');
1169 label3.setAttribute('value','Mailing:');
1170 hbox.appendChild(label3);
1171 var checkbox_mailing = document.createElement('checkbox');
1172 checkbox_mailing.setAttribute('group','mailing');
1173 checkbox_mailing.setAttribute('oncommand','radio_checkbox(event); PATRON.au.mailing_address(' + address.id() + '); PATRON.au.ischanged("1");');
1174 hbox.appendChild(checkbox_mailing);
1175 if ( PATRON.au.mailing_address() == address.id() ) {
1176 checkbox_mailing.checked = true;
1178 var label4 = document.createElement('label');
1179 label4.setAttribute('value','Invalid:');
1180 hbox.appendChild(label4);
1181 var checkbox_invalid = document.createElement('checkbox');
1182 checkbox_invalid.setAttribute('oncommand','invalid_checkbox(event,' + address.id() + ');');
1183 hbox.appendChild(checkbox_invalid);
1184 mw.sdump('D_LEGACY','address ' + address.id() + ' valid = ' + address.valid() + '\n');
1185 if ( address.valid() == '1' ) {
1186 checkbox_invalid.checked = false;
1188 checkbox_invalid.checked = true;
1190 var label5 = document.createElement('spacer');
1191 label5.setAttribute('flex','1');
1192 hbox.appendChild(label5);
1193 if (address.id()>-1) {
1194 var label6 = document.createElement('button');
1195 label6.setAttribute('label','Delete');
1196 label6.setAttribute('alt_label','Un-Delete');
1197 label6.setAttribute('toggle','0');
1198 label6.setAttribute('oncommand','toggle_address(event,' + address.id() + ');');
1199 hbox.appendChild(label6);
1204 street1 = document.createElement('textbox');
1205 street1.setAttribute('size','40');
1206 street1.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'street1');");
1208 street1 = document.createElement('label');
1210 street1.setAttribute( 'value',address.street1() );
1211 groupbox.appendChild(street1);
1214 street2 = document.createElement('textbox');
1215 street2.setAttribute('size','40');
1216 street2.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'street2');");
1218 street2 = document.createElement('label');
1220 street2.setAttribute( 'value',address.street2() );
1221 groupbox.appendChild(street2);
1222 var hbox = document.createElement('hbox');
1223 groupbox.appendChild(hbox);
1226 city = document.createElement('textbox');
1227 city.setAttribute('size','20');
1228 city.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'city');");
1230 city = document.createElement('label');
1232 city.setAttribute( 'value',address.city() );
1233 hbox.appendChild(city);
1236 county = document.createElement('textbox');
1237 county.setAttribute('size','20');
1238 county.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'county');");
1239 county.setAttribute( 'value',address.county() );
1241 county = document.createElement('label');
1242 county.setAttribute( 'value','(' + address.county() + '),');
1244 hbox.appendChild(county);
1245 if (!address.county()) {
1247 county.setAttribute( 'display', 'none' );
1248 city.setAttribute( 'value',address.city() + ',' );
1253 state = document.createElement('textbox');
1254 state.setAttribute('size','2');
1255 state.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'state');");
1257 state = document.createElement('label');
1259 state.setAttribute( 'value',address.state() );
1260 hbox.appendChild(state);
1263 country = document.createElement('textbox');
1264 country.setAttribute('size','3');
1265 country.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'country');");
1266 country.setAttribute( 'value',address.country() );
1268 country = document.createElement('label');
1269 country.setAttribute( 'value','(' + address.country() + '),');
1271 hbox.appendChild(country);
1274 zip = document.createElement('textbox');
1275 zip.setAttribute('size','10');
1276 zip.setAttribute("onchange","magic_field_edit(event,'aua'," + address.id() + ",'post_code');");
1278 zip = document.createElement('label');
1280 zip.setAttribute( 'value',address.post_code() );
1281 hbox.appendChild(zip);
1284 function invalid_checkbox(e,id) {
1285 mw.sdump('D_LEGACY',arg_dump(arguments));
1286 if (e.target.checked) {
1287 mw.sdump('D_LEGACY','Marking address ' + id + ' invalid\n');
1288 mw.sdump('D_LEGACY','\tbefore address: ' + js2JSON(hash_aua[id]) + '\n');
1289 hash_aua[id].valid( '0' );
1290 hash_aua[id].ischanged( '1' );
1291 mw.sdump('D_LEGACY','\tafter address: ' + js2JSON(hash_aua[id]) + '\n');
1293 mw.sdump('D_LEGACY','Marking address ' + id + ' valid\n');
1294 mw.sdump('D_LEGACY','\tbefore address: ' + js2JSON(hash_aua[id]) + '\n');
1295 hash_aua[id].valid( '1' );
1296 hash_aua[id].ischanged( '1' );
1297 mw.sdump('D_LEGACY','\tafter address: ' + js2JSON(hash_aua[id]) + '\n');
1301 function toggle_address(e,id) {
1302 mw.sdump('D_LEGACY',arg_dump(arguments));
1303 var groupbox = document.getElementById('groupbox_address_' + id);
1304 //var address = find_id_object_in_list( hash_aua, id );
1305 var address = hash_aua[id];
1306 var button = e.target;
1307 var label = button.getAttribute('label');
1308 var alt_label = button.getAttribute('alt_label');
1309 button.setAttribute('label',alt_label);
1310 button.setAttribute('alt_label',label);
1311 var toggle = button.getAttribute('toggle');
1312 if (toggle == '0') {
1313 button.setAttribute('toggle','1');
1314 mw.sdump('D_LEGACY','original node = ' + js2JSON(address) + '\n');
1315 add_css_class(groupbox,'deleted_address');
1316 address.isdeleted('1');
1317 mw.sdump('D_LEGACY','updated node = ' + js2JSON(address) + '\n');
1318 mw.sdump('D_LEGACY','PATRON.au.mailing_address() = ' + PATRON.au.mailing_address() + ' address.id() = ' + address.id() + '\n');
1319 if (PATRON.au.mailing_address() == address.id() ) {
1320 find_available_address_for('mailing_address');
1322 mw.sdump('D_LEGACY','PATRON.au.billing_address() = ' + PATRON.au.billing_address() + ' address.id() = ' + address.id() + '\n');
1323 if (PATRON.au.billing_address() == address.id() ) {
1324 find_available_address_for('billing_address');
1327 button.setAttribute('toggle','0');
1328 mw.sdump('D_LEGACY','original node = ' + js2JSON(address) + '\n');
1329 remove_css_class(groupbox,'deleted_address');
1330 address.isdeleted('0');
1331 mw.sdump('D_LEGACY','updated node = ' + js2JSON(address) + '\n');
1333 var nl = groupbox.getElementsByTagName('textbox');
1335 if (typeof(nl[i])=='object') {
1337 t.disabled = ! t.disabled;
1342 function find_available_address_for(which) {
1343 mw.sdump('D_LEGACY',arg_dump(arguments));
1344 mw.sdump('D_LEGACY','entering find_avialable_address_for(' + which + ')\n');
1345 var addresses = PATRON.au.addresses();
1346 mw.sdump('D_LEGACY','considering existing addresses...\n');
1347 for (var i in addresses) {
1348 var address = addresses[i];
1349 mw.sdump('D_LEGACY','i = ' + i + ' addresses[i] = ' + js2JSON(address) + '\n');
1350 if ( address.isdeleted() == '1') { continue; }
1351 if ( (address.address_type() == 'NEW') && (address.id() < 0) ) {
1352 address.address_type('REQUIRED');
1353 address.ischanged( '1' );
1355 mw.sdump('D_LEGACY','PATRON.au before = ' + js2JSON(PATRON.au) + '\n');
1356 var command = 'PATRON.au.' + which + "( '" + address.id() + "' );";
1357 mw.sdump('D_LEGACY', command + '\n' );
1359 mw.sdump('D_LEGACY','PATRON.au after = ' + js2JSON(PATRON.au) + '\n');
1362 mw.sdump('D_LEGACY','considering old and new addresses...\n');
1363 for (var i in hash_aua) {
1364 var address = hash_aua[i];
1365 mw.sdump('D_LEGACY','i = ' + i + ' addresses[i] = ' + js2JSON(address) + '\n');
1366 if ( address.isdeleted() == '1') { continue; }
1367 if ( (address.address_type() == 'NEW') && (address.id() < 0) ) {
1368 address.address_type('REQUIRED');
1369 address.ischanged( '1' );
1371 mw.sdump('D_LEGACY','PATRON.au before = ' + js2JSON(PATRON.au) + '\n');
1372 var command = 'PATRON.au.' + which + "( '" + address.id() + "' );";
1373 mw.sdump('D_LEGACY', command + '\n' );
1375 mw.sdump('D_LEGACY','PATRON.au after = ' + js2JSON(PATRON.au) + '\n');
1380 function survey_test(ev,survey_id) {
1381 mw.sdump('D_LEGACY',arg_dump(arguments));
1383 document.getElementById('circ_deck_deck').setAttribute('selectedIndex','5');
1384 var vbox = document.getElementById('patron_survey_vbox');
1385 empty_widget( vbox );
1386 survey_render_with_results(
1390 return PATRON.refresh();
1395 function populate_patron_edit_surveys() {
1396 mw.sdump('D_LEGACY',arg_dump(arguments));
1397 var vbox = document.getElementById('patron_edit_survey_vbox');
1400 mw.sdump('D_LEGACY','populate_patron_edit_surveys()\n');
1402 empty_widget( vbox );
1406 surveys = mw.user_request(
1408 'open-ils.circ.survey.retrieve.required',
1409 [ mw.G.auth_ses[0] ]
1415 for (var i = 0; i < surveys.length; i++) {
1416 var survey = surveys[i];
1420 populate_patron_edit_surveys_build_callback( survey ),
1426 function populate_patron_edit_surveys_build_callback( survey ) {
1427 mw.sdump('D_LEGACY',arg_dump(arguments));
1428 return function (responses) {
1429 for (var i in responses) {
1430 response_list.push( responses[i] );
1432 var nframe = document.getElementById('patron_survey_frame_'+survey.id());
1433 nframe.hidden = true;
1434 var complete = document.createElement('description');
1435 complete.setAttribute('value',survey.name() + ' Complete');
1436 nframe.parentNode.insertBefore( complete, nframe );
1437 //nframe.contentWindow.document.body.innerHTML = '<h1>' + survey.name() + ' Complete</h1>';
1443 function survey_render(vbox,survey_id,commit_callback,submit_callback) {
1444 sdump('D_LEGACY',arg_dump(arguments));
1445 if (typeof(vbox) != 'object') { vbox = document.getElementById(vbox); }
1446 var frame = document.createElement('vbox');
1447 vbox.appendChild(frame);
1448 //frame.setAttribute('flex','1'); frame.setAttribute('src','data:text/html,<html><head><LINK href="http://spacely.georgialibraries.org/css/box.css" rel="stylesheet" type="text/css"><LINK href="http://spacely.georgialibraries.org/css/survey.css" rel="stylesheet" type="text/css"></head><body></body></html>');
1450 setTimeout(function(){
1451 /*var doc = frame.contentWindow.document;*/
1453 window.createAppElement = function (name) { return doc.createElementNS('http://www.w3.org/1999/xhtml','html:'+name); }
1454 window.createTextNode = function (value) { return doc.createTextNode(value); }
1455 Survey.retrieveById(
1459 sur.setUser( PATRON.au.id() );
1460 if (submit_callback) sur.setSubmitCallback( submit_callback );
1461 if (commit_callback) sur.commitCallback = commit_callback;
1462 mw.sdump('D_LEGACY','survey id: ' + sur.survey.id() + '\n');
1464 var node = sur.getNode();
1467 dump( super_dump( node ) );
1472 frame.appendChild( node );
1473 /*frame.setAttribute('style','height: ' + (30+doc.height) + 'px;');*/
1474 frame.setAttribute('id','patron_survey_frame_' + sur.survey.id());
1480 function survey_render_with_results(vbox,survey_id,callback) {
1481 sdump('D_LEGACY',arg_dump(arguments));
1482 if (typeof(vbox) != 'object') { vbox = document.getElementById(vbox); }
1483 var frame = document.createElement('vbox');
1484 vbox.appendChild(frame);
1485 //frame.setAttribute('id','patron_survey_frame');
1486 //frame.setAttribute('flex','1'); frame.setAttribute('src','data:text/html,<html><head><LINK href="http://spacely.georgialibraries.org/css/box.css" rel="stylesheet" type="text/css"><LINK href="http://spacely.georgialibraries.org/css/survey.css" rel="stylesheet" type="text/css"></head><body></body></html>');
1487 //var doc = frame.contentWindow.document;
1490 window.createAppElement = function (name) { return doc.createElementNS('http://www.w3.org/1999/xhtml','html:'+name); }
1491 window.createTextNode = function (value) { return doc.createTextNode(value); }
1492 Survey.retrieveById(
1496 sur.setUser( PATRON.au.id() );
1497 sur.setSubmitCallback( callback );
1498 mw.sdump('D_LEGACY','survey id: ' + sur.survey.id() + '\n');
1499 frame.appendChild( sur.getNode() );
1500 var span = doc.createElement('html:blockquote');
1501 span.setAttribute('id','survey_response_' + sur.survey.id());
1502 span.setAttribute('class','survey');
1503 var warning = doc.createTextNode('Retrieving Responses...');
1504 span.appendChild(warning);
1505 frame.appendChild(span);
1506 mw.user_async_request(
1508 'open-ils.circ.survey.response.retrieve',
1509 [ mw.G.auth_ses[0], sur.survey.id(), PATRON.au.id() ],
1510 function (request) {
1511 result = request.getResultObject().reverse();
1512 span.removeChild( warning );
1513 if (result.length == 0) { return; }
1514 //span.appendChild( doc.createTextNode('Previous Responses:') );
1515 //span.appendChild( doc.createElement('html:br') );
1516 //span.setAttribute('style','border: black solid thin;');
1517 var num_of_q = sur.survey.questions().length;
1519 span.appendChild( doc.createTextNode(
1520 'Previous Responses:'
1522 span.appendChild( doc.createElement('html:br') );
1523 span.appendChild( doc.createElement('html:br') );
1525 for (var i = 0; i < result.length; i++) {
1526 if (++current_q > num_of_q) { current_q = 1; }
1527 mw.sdump('D_LEGACY','current_q = ' + current_q + ' num_of_q = ' + num_of_q + '\n');
1528 if (current_q == 1) {
1529 block = doc.createElement('html:blockquote');
1530 span.appendChild( doc.createTextNode(
1532 result[i].answer_date() +
1533 ', Effective Date: ' +
1534 result[i].effective_date()
1536 span.appendChild( doc.createElement('html:br') );
1537 span.appendChild(block);
1542 find_id_object_in_list(
1543 find_id_object_in_list(
1544 sur.survey.questions(),
1545 result[i].question()
1552 span.appendChild( doc.createElement('html:br') );
1553 /*frame.setAttribute('style','height: ' + (30+doc.height) + 'px;');*/
1561 function handle_patron_search_textbox(ev,group) {
1562 mw.sdump('D_LEGACY',arg_dump(arguments));
1563 var id = ev.target.getAttribute('id');
1564 var field = id.split(/_/).slice(2,-1).join('_');
1565 mw.sdump('D_LEGACY','field = ' + field + ' value = ' + ev.target.value + '\n');
1566 PATRON.search[field] = { 'value' : ev.target.value, 'group' : group };
1569 function build_patron_search_result_deck() {
1570 mw.sdump('D_LEGACY',arg_dump(arguments));
1571 var label = document.getElementById('patron_search_results_label');
1573 var s = 'Found ' + PATRON.search_results.length + ' matches. ';
1574 if (PATRON.search_results.length > patron_hits_per_page) {
1575 s += 'Displaying ' + patron_hits_per_page + ' per page:';
1577 label.setAttribute('value',s);
1579 var deck = document.getElementById('patron_search_results_deck');
1584 var patron_ids = PATRON.search_results.slice(0,patron_hits_per_page);
1585 PATRON.search_results = PATRON.search_results.slice(patron_hits_per_page);
1586 build_patron_search_result_page(deck,patron_ids,PATRON.search_results.length);
1589 function build_patron_search_result_page(deck,patron_ids,remaining) {
1590 mw.sdump('D_LEGACY',arg_dump(arguments));
1591 mw.sdump('D_LEGACY','build_patron_search_result_page()\n');
1592 if (typeof(deck)!='object') deck = document.getElementById(deck);
1595 if (patron_ids.length == 0) return;
1597 var vbox = document.createElement('vbox');
1598 deck.appendChild(vbox);
1599 vbox.setAttribute('flex','1');
1601 var idx = deck.childNodes.length - 1;
1602 deck.selectedIndex = idx;
1604 var button_box = document.createElement('hbox');
1605 vbox.appendChild(button_box);
1607 var back_button = document.createElement('button');
1608 button_box.appendChild(back_button);
1609 back_button.setAttribute('label','Previous');
1610 back_button.disabled = true;
1612 back_button.disabled = false;
1613 back_button.setAttribute('oncommand',"var deck = document.getElementById('patron_search_results_deck'); deck.selectedIndex = deck.selectedIndex -1;");
1615 var forward_button = document.createElement('button');
1616 button_box.appendChild(forward_button);
1617 forward_button.setAttribute('label','Next');
1618 forward_button.disabled = true;
1619 if (remaining > 0) {
1620 forward_button.disabled = false;
1621 forward_button.addEventListener(
1624 var fired = ev.target.getAttribute('fired');
1627 deck.selectedIndex = idx + 1;
1629 var next_ids = PATRON.search_results.slice(0,patron_hits_per_page);
1630 PATRON.search_results = PATRON.search_results.slice(patron_hits_per_page);
1631 build_patron_search_result_page(deck,next_ids,PATRON.search_results.length);
1632 ev.target.setAttribute('fired',true);
1638 var tree = document.createElement('tree');
1639 vbox.appendChild(tree);
1640 tree.setAttribute('flex','1');
1641 tree.setAttribute('enableColumnDrag','true');
1642 tree.addEventListener(
1645 var row = get_list_from_tree_selection(ev.target)[0];
1647 var patron_id = row.getAttribute('patron_id');
1649 PATRON.retrieve_via_method( patron_id, 'open-ils.actor.user.fleshed.retrieve' );
1651 set_decks( { 'patron_scan_deck' : '1' } );
1652 focus_widget( row.parentNode );
1659 var t_columns = document.createElement('treecols');
1660 tree.appendChild(t_columns);
1662 for (var i = 0; i < patron_list_columns.length; i++) {
1663 var column = patron_list_columns[i];
1664 var t_column = document.createElement('treecol');
1665 t_columns.appendChild( t_column );
1666 t_column.setAttribute('label', column.v);
1668 t_column.setAttribute('id', 'tc_' + column.s + '_' + column.f);
1670 t_column.setAttribute('id', 'tc_' + column.f);
1672 t_column.setAttribute('flex', '0');
1674 if (column.primary) {
1675 t_column.setAttribute('primary','true');
1676 t_column.setAttribute('flex','1');
1678 if (column.hidden) t_column.setAttribute('hidden','true');
1680 mw.sdump('D_LEGACY',js2JSON(E) + '\n');
1682 t_column.setAttribute('field',column.f);
1683 if (i != (patron_list_columns.length - 1) ) {
1684 var t_splitter = document.createElement('splitter');
1685 t_columns.appendChild( t_splitter );
1686 t_splitter.setAttribute('class','tree-splitter');
1689 var t_children = document.createElement('treechildren');
1690 tree.appendChild(t_children);
1692 for (var i = 0; i < patron_ids.length; i++) {
1693 var t_item = document.createElement('treeitem');
1694 t_children.appendChild( t_item );
1695 t_item.setAttribute('patron_id',patron_ids[i]);
1697 var t_row = document.createElement('treerow');
1698 t_item.appendChild( t_row );
1699 t_row.setAttribute('patron_id',patron_ids[i]);
1701 //var t_cell = document.createElement('treecell');
1702 //t_row.appendChild( t_cell );
1703 //t_cell.setAttribute('label',patron_ids[i]);
1705 mw.user_async_request(
1707 'open-ils.actor.user.fleshed.retrieve',
1708 [ mw.G.auth_ses[0], patron_ids[i] ],
1709 build_patron_retrieve_for_search_callback( t_row )
1711 mw.sdump('D_LEGACY','Making call... count = ' + counter_incr('patron_call') + '\n');
1716 function build_patron_retrieve_for_search_callback(treerow) {
1717 mw.sdump('D_LEGACY',arg_dump(arguments));
1718 return function (request) {
1719 mw.sdump('D_LEGACY','Running callback... count = ' + counter_incr('patron_callback') + '\n');
1720 var result = request.getResultObject();
1721 mw.sdump('D_LEGACY','Result = ' + js2JSON(result) + '\n');
1723 for (var i = 0; i < patron_list_columns.length; i++) {
1724 var column = patron_list_columns[i];
1725 var t_cell = document.createElement('treecell');
1726 treerow.appendChild(t_cell);
1731 expression = 'mw.G.org_tree_hash[ result.home_ou() ].' + column.f + '()';
1733 case 'mailing_address':
1734 expression = 'find_id_object_in_list( result.addresses() , result.mailing_address() ).' + column.f + '()';
1736 case 'billing_address':
1737 expression = 'find_id_object_in_list( result.addresses() , result.billing_address() ).' + column.f + '()';
1741 expression = 'result.' + column.f + '()';
1743 //mw.sdump('D_LEGACY','Trying to eval: ' + expression + '\n');
1744 t_cell.setAttribute(