2 var local_lock = false;
6 offlineStrings = $('offlineStrings');
8 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
9 if (typeof JSAN == 'undefined') { throw(offlineStrings.getString('common.jsan.missing')); }
10 JSAN.errorLevel = "die"; // none, warn, or die
11 JSAN.addRepository('..');
12 JSAN.use('util.error'); g.error = new util.error();
13 g.error.sdump('D_TRACE','my_init() for offline_register.xul');
15 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
17 if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
18 try { window.xulG.set_tab_name(offlineStrings.getString('circ.standalone')); } catch(E) { alert(E); }
21 $('barcode').addEventListener('change',test_patron,false);
22 $('barcode').addEventListener('keypress',handle_keypress,false);
23 $('submit').addEventListener('command',next_patron,false);
25 function handle_lock(ev) {
26 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
27 if (!(ev.altKey || ev.ctrlKey || ev.metakey)) {
34 $('barcode').addEventListener('keypress',handle_lock,false);
35 $('passwd').addEventListener('keypress',handle_lock,false);
36 $('ident_value').addEventListener('keypress',handle_lock,false);
37 $('first_given_name').addEventListener('keypress',handle_lock,false);
38 $('family_name').addEventListener('keypress',handle_lock,false);
39 $('dob').addEventListener('keypress',handle_lock,false);
40 $('street1').addEventListener('keypress',handle_lock,false);
41 $('street2').addEventListener('keypress',handle_lock,false);
42 $('city').addEventListener('keypress',handle_lock,false);
43 $('state').addEventListener('keypress',handle_lock,false);
44 $('country').addEventListener('keypress',handle_lock,false);
45 $('post_code').addEventListener('keypress',handle_lock,false);
47 $('cancel').addEventListener(
50 $('barcode').value = '';
51 $('passwd').value = '';
52 $('ident_value').value = '';
53 $('first_given_name').value = '';
54 $('family_name').value = '';
56 $('street1').value = '';
57 $('street2').value = '';
59 $('state').value = '';
60 $('country').value = '';
61 $('post_code').value = '';
70 JSAN.use('util.file');
71 JSAN.use('util.widgets');
73 var file; var list_data; var ml; var errors = '';
75 file = new util.file('offline_ou_list');
76 if (file._file.exists()) {
77 list_data = file.get_object(); file.close();
78 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
79 ml.setAttribute('id','home_ou'); $('x_home_ou').appendChild(ml);
81 errors += offlineStrings.getString('circ.offline_register.missing.library.list') + "\n";
84 file = new util.file('offline_pgt_list');
85 if (file._file.exists()) {
86 list_data = file.get_object(); file.close();
87 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
88 ml.setAttribute('id','profile'); $('x_profile').appendChild(ml);
90 errors += offlineStrings.getString('circ.offline_register.missing.profile.list') + "\n";
93 file = new util.file('offline_cit_list');
94 if (file._file.exists()) {
95 list_data = file.get_object(); file.close();
96 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
97 ml.setAttribute('id','ident_type'); $('x_ident_type').appendChild(ml);
99 errors += offlineStrings.getString('circ.offline_register.missing.id.type.list') + "\n";
102 file = new util.file('offline_asv_list');
103 if (file._file.exists()) {
104 list_data = file.get_object(); file.close();
105 render_surveys('x_surveys', list_data);
107 errors += offlineStrings.getString('circ.offline_register.missing.required.surveys');
111 alert(offlineStrings.getString('circ.offline_register.missing.files.error') + errors);
112 location.href = 'about:blank';
115 $('passwd').value = parseInt(Math.random()*8999+1000);
117 $('dob').addEventListener('change',handle_check_date,false);
118 $('barcode').focus();
120 var file = new util.file('offline_delta');
121 if (file._file.exists()) { g.delta = file.get_object()[0]; file.close(); } else { g.delta = 0; }
124 var err_msg = offlineStrings.getFormattedString('common.exception', ["circ/offline_register.xul", E]);
125 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
130 function $(id) { return document.getElementById(id); }
132 function test_patron(ev) {
134 var barcode = ev.target.value;
135 JSAN.use('util.barcode');
136 if ( ! util.barcode.check(ev.target.value) ) {
137 var r = g.error.yns_alert(offlineStrings.getString('circ.bad_checkdigit'),offlineStrings.getString('circ.barcode.warning'),offlineStrings.getString('common.ok'),offlineStrings.getString('common.clear'),null,offlineStrings.getString('common.confirm'));
141 ev.target.value = '';
148 if (g.data.bad_patrons[barcode]) {
150 switch(g.data.bad_patrons[barcode]) {
151 case 'L' : code = offlineStrings.getString('common.barcode.status.warning.lost'); break;
152 case 'E' : code = offlineStrings.getString('common.barcode.status.warning.expired'); break;
153 case 'B' : code = offlineStrings.getString('common.barcode.status.warning.barred'); break;
154 case 'D' : code = offlineStrings.getString('common.barcode.status.warning.blocked'); break;
155 default : code = offlineStrings.getFormattedString('common.barcode.status.warning.blocked', [g.data.bad_patrons[barcode]]); break;
158 var msg = offlineStrings.getFormattedString('common.barcode.status.warning', [g.data.bad_patrons_date.substr(0,15), barcode, code]);
159 var r = g.error.yns_alert(msg,offlineStrings.getString('circ.barcode.warning'),offlineStrings.getString('common.ok'),offlineStrings.getString('common.clear'),null,offlineStrings.getString('common.confirm'));
163 ev.target.value = '';
174 function handle_check_date(ev) {
175 ev.target.value = check_date(ev.target.value);
178 function check_date(value) {
179 JSAN.use('util.date');
181 if (! util.date.check('YYYY-MM-DD',value) ) { throw(offlineStrings.getString('common.date.invalid')); }
182 if (! util.date.check_past('YYYY-MM-DD',value) ) { throw(offlineStrings.getString('circ.offline_register.future.birth.date')); }
183 if ( util.date.formatted_date(new Date(),'%F') == value) { throw(offlineStrings.getString('circ.offline_register.invalid.birth.date')); }
191 function render_surveys(node,obj) {
192 node = util.widgets.get(node);
193 util.widgets.remove_children(node);
197 var x_gb = document.createElement('groupbox'); node.appendChild(x_gb);
198 var x_cp = document.createElement('caption');
199 x_cp.setAttribute('label',i); x_gb.appendChild(x_cp);
200 var x_d = document.createElement('description');
201 x_d.appendChild( document.createTextNode( survey.description ) ); x_gb.appendChild(x_d);
202 for (var j = 0; j < survey.questions.length; j++) {
203 var question = survey.questions[j];
204 var x_d = document.createElement('description');
205 x_d.appendChild( document.createTextNode( (j+1) + ') ' + question.question ) );
206 x_gb.appendChild( x_d );
207 var x_hb = document.createElement('hbox'); x_hb.setAttribute('flex','1');
208 x_gb.appendChild(x_hb);
209 var x_spacer = document.createElement('spacer'); x_spacer.setAttribute('flex','1');
210 x_hb.appendChild(x_spacer);
211 var x_ml = util.widgets.make_menulist( [ [offlineStrings.getString('circ.offline_register.survey.prompt'),''] ].concat(question.answers) );
212 x_ml.setAttribute('name','survey'); x_hb.appendChild(x_ml);
217 function handle_keypress(ev) {
218 if ( (! ev.keyCode) || (ev.keyCode != 13) ) return;
220 case $('barcode') : setTimeout( function() { $('family_name').focus(); },0 ); break;
225 function check_patron(obj) {
227 if (! obj.user.billing_address.post_code ) {
228 errors += offlineStrings.getString('circ.offline_register.missing.post_code') + "\n";
229 $('post_code').focus();
230 $('post_code').parentNode.setAttribute('style','background-color: red');
232 $('post_code').parentNode.setAttribute('style','');
234 if (! obj.user.billing_address.state ) {
235 errors += offlineStrings.getString('circ.offline_register.missing.state') + "\n";
237 $('state').parentNode.setAttribute('style','background-color: red');
239 $('state').parentNode.setAttribute('style','');
241 if (! obj.user.billing_address.city ) {
242 errors += offlineStrings.getString('circ.offline_register.missing.city') + "\n";
244 $('city').parentNode.setAttribute('style','background-color: red');
246 $('city').parentNode.setAttribute('style','');
248 if (! obj.user.billing_address.street1 ) {
249 errors += offlineStrings.getString('circ.offline_register.missing.street1') + "\n";
250 $('street1').focus();
251 $('street1').parentNode.setAttribute('style','background-color: red');
253 $('street1').parentNode.setAttribute('style','');
255 /*if (! obj.user.ident_value ) {
256 errors += offlineStrings.getString('circ.offline_register.missing.ident_value') + "\n";
257 $('ident_value').focus();
258 $('ident_value').parentNode.setAttribute('style','background-color: red');
260 $('ident_value').parentNode.setAttribute('style','');
262 if (! obj.user.ident_type ) {
263 errors += offlineStrings.getString('circ.offline_register.missing.ident_type') + "\n";
264 $('ident_type').focus();
265 $('ident_type').parentNode.setAttribute('style','background-color: red');
267 $('ident_type').parentNode.setAttribute('style','');
269 if (! obj.user.dob ) {
270 errors += offlineStrings.getString('circ.offline_register.missing.dob') + "\n";
272 $('dob').parentNode.parentNode.setAttribute('style','background-color: red');
274 $('dob').parentNode.parentNode.setAttribute('style','');
276 if (! obj.user.first_given_name ) {
277 errors += offlineStrings.getString('circ.offline_register.missing.first_given_name') + "\n";
278 $('first_given_name').focus();
279 $('first_given_name').parentNode.setAttribute('style','background-color: red');
281 $('first_given_name').parentNode.setAttribute('style','');
283 if (! obj.user.family_name ) {
284 errors += offlineStrings.getString('circ.offline_register.missing.family_name') + "\n";
285 $('family_name').focus();
286 $('family_name').parentNode.setAttribute('style','background-color: red');
288 $('family_name').parentNode.setAttribute('style','');
290 if (! obj.user.passwd ) {
291 errors += offlineStrings.getString('circ.offline_register.missing.passwd') + "\n";
293 $('passwd').parentNode.setAttribute('style','background-color: red');
295 $('passwd').parentNode.setAttribute('style','');
297 if (! obj.user.card.barcode ) {
298 errors += offlineStrings.getString('circ.offline_register.missing.barcode') + "\n";
299 $('barcode').focus();
300 $('barcode').parentNode.setAttribute('style','background-color: red');
302 $('barcode').parentNode.setAttribute('style','');
304 if (! obj.user.profile ) {
305 errors += offlineStrings.getString('circ.offline_register.missing.profile') + "\n";
306 $('profile').focus();
307 $('profile').parentNode.setAttribute('style','background-color: red');
309 $('profile').parentNode.setAttribute('style','');
311 if (! obj.user.home_ou ) {
312 errors += offlineStrings.getString('circ.offline_register.missing.home_ou') + "\n";
313 $('home_ou').focus();
314 $('home_ou').parentNode.setAttribute('style','background-color: red');
316 $('home_ou').parentNode.setAttribute('style','');
318 if (errors != '') throw(errors);
321 function next_patron() {
324 obj.timestamp = parseInt( new Date().getTime() / 1000) + g.delta;
325 obj.type = 'register';
327 obj.user.card = { 'barcode' : $('barcode').value };
328 obj.user.profile = $('profile').value;
329 obj.user.passwd = $('passwd').value;
330 obj.user.ident_type = $('ident_type').value;
331 obj.user.ident_value = $('ident_value').value;
332 obj.user.first_given_name = $('first_given_name').value;
333 obj.user.family_name = $('family_name').value;
334 obj.user.home_ou = $('home_ou').value;
335 obj.user.dob = $('dob').value;
336 obj.user.billing_address = {};
337 obj.user.billing_address.street1 = $('street1').value;
338 obj.user.billing_address.street2 = $('street2').value;
339 obj.user.billing_address.city = $('city').value;
340 obj.user.billing_address.state = $('state').value;
341 obj.user.billing_address.country = $('country').value;
342 obj.user.billing_address.post_code = $('post_code').value;
343 obj.user.survey_responses = [];
345 var nl = document.getElementsByAttribute('name','survey');
346 for (var i = 0; i < nl.length; i++) {
347 var value = nl[i].value; if (value == '') continue;
348 var values = JSON2js( value );
349 var response = { 'survey' : values[2], 'question' : values[1], 'answer' : values[0] };
350 obj.user.survey_responses.push( response );
356 alert(offlineStrings.getString('circ.offline_register.missing.alert') + "\n" + E);
360 JSAN.use('util.file'); var file = new util.file('pending_xacts');
362 file.append_object(obj);
370 alert(offlineStrings.getString('circ.offline_register.patron.saved'));
372 $('passwd').value = parseInt(Math.random()*8999+1000);
373 $('barcode').value = ''; $('ident_value').value = ''; $('first_given_name').value = '';
374 $('family_name').value = ''; $('dob').value = ''; $('street1').value = '';
375 $('street2').value = '';
377 file = new util.file('offline_asv_list'); var list_data = file.get_object(); file.close();
378 render_surveys('x_surveys', list_data);
380 $('barcode').focus();
383 dump(E+'\n'); alert(E);