2 var local_lock = false;
6 offlineStrings = $('offlineStrings');
8 if (typeof JSAN == 'undefined') { throw(offlineStrings.getString('common.jsan.missing')); }
9 JSAN.errorLevel = "die"; // none, warn, or die
10 JSAN.addRepository('..');
11 JSAN.use('util.error'); g.error = new util.error();
12 g.error.sdump('D_TRACE','my_init() for offline_register.xul');
14 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
16 if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
17 try { window.xulG.set_tab_name(offlineStrings.getString('circ.standalone')); } catch(E) { alert(E); }
20 $('barcode').addEventListener('change',test_patron,false);
21 $('barcode').addEventListener('keypress',handle_keypress,false);
22 $('submit').addEventListener('command',next_patron,false);
24 function handle_lock(ev) {
25 if (!(ev.altKey || ev.ctrlKey || ev.metakey)) {
32 $('barcode').addEventListener('keypress',handle_lock,false);
33 $('passwd').addEventListener('keypress',handle_lock,false);
34 $('ident_value').addEventListener('keypress',handle_lock,false);
35 $('first_given_name').addEventListener('keypress',handle_lock,false);
36 $('family_name').addEventListener('keypress',handle_lock,false);
37 $('dob').addEventListener('keypress',handle_lock,false);
38 $('street1').addEventListener('keypress',handle_lock,false);
39 $('street2').addEventListener('keypress',handle_lock,false);
40 $('city').addEventListener('keypress',handle_lock,false);
41 $('state').addEventListener('keypress',handle_lock,false);
42 $('country').addEventListener('keypress',handle_lock,false);
43 $('post_code').addEventListener('keypress',handle_lock,false);
45 $('cancel').addEventListener(
48 $('barcode').value = '';
49 $('passwd').value = '';
50 $('ident_value').value = '';
51 $('first_given_name').value = '';
52 $('family_name').value = '';
54 $('street1').value = '';
55 $('street2').value = '';
57 $('state').value = '';
58 $('country').value = '';
59 $('post_code').value = '';
68 JSAN.use('util.file');
69 JSAN.use('util.widgets');
71 var file; var list_data; var ml; var errors = '';
73 file = new util.file('offline_ou_list');
74 if (file._file.exists()) {
75 list_data = file.get_object(); file.close();
76 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
77 ml.setAttribute('id','home_ou'); $('x_home_ou').appendChild(ml);
79 errors += offlineStrings.getString('circ.offline_register.missing.library.list') + "\n";
82 file = new util.file('offline_pgt_list');
83 if (file._file.exists()) {
84 list_data = file.get_object(); file.close();
85 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
86 ml.setAttribute('id','profile'); $('x_profile').appendChild(ml);
88 errors += offlineStrings.getString('circ.offline_register.missing.profile.list') + "\n";
91 file = new util.file('offline_cit_list');
92 if (file._file.exists()) {
93 list_data = file.get_object(); file.close();
94 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
95 ml.setAttribute('id','ident_type'); $('x_ident_type').appendChild(ml);
97 errors += offlineStrings.getString('circ.offline_register.missing.id.type.list') + "\n";
100 file = new util.file('offline_asv_list');
101 if (file._file.exists()) {
102 list_data = file.get_object(); file.close();
103 render_surveys('x_surveys', list_data);
105 errors += offlineStrings.getString('circ.offline_register.missing.required.surveys');
109 alert(offlineStrings.getString('circ.offline_register.missing.files.error') + errors);
110 location.href = 'about:blank';
113 $('passwd').value = parseInt(Math.random()*8999+1000);
115 $('dob').addEventListener('change',handle_check_date,false);
116 $('barcode').focus();
118 var file = new util.file('offline_delta');
119 if (file._file.exists()) { g.delta = file.get_object()[0]; file.close(); } else { g.delta = 0; }
122 var err_msg = offlineStrings.getFormattedString('common.exception', ["circ/offline_register.xul", E]);
123 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
128 function $(id) { return document.getElementById(id); }
130 function test_patron(ev) {
132 var barcode = ev.target.value;
133 JSAN.use('util.barcode');
134 if ( ! util.barcode.check(ev.target.value) ) {
135 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'));
139 ev.target.value = '';
146 if (g.data.bad_patrons[barcode]) {
148 switch(g.data.bad_patrons[barcode]) {
149 case 'L' : code = offlineStrings.getString('common.barcode.status.warning.lost'); break;
150 case 'E' : code = offlineStrings.getString('common.barcode.status.warning.expired'); break;
151 case 'B' : code = offlineStrings.getString('common.barcode.status.warning.barred'); break;
152 case 'D' : code = offlineStrings.getString('common.barcode.status.warning.blocked'); break;
153 default : code = offlineStrings.getFormattedString('common.barcode.status.warning.blocked', [g.data.bad_patrons[barcode]]); break;
156 var msg = offlineStrings.getFormattedString('common.barcode.status.warning', [g.data.bad_patrons_date.substr(0,15), barcode, code]);
157 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'));
161 ev.target.value = '';
172 function handle_check_date(ev) {
173 ev.target.value = check_date(ev.target.value);
176 function check_date(value) {
177 JSAN.use('util.date');
179 if (! util.date.check('YYYY-MM-DD',value) ) { throw(offlineStrings.getString('common.date.invalid')); }
180 if (! util.date.check_past('YYYY-MM-DD',value) ) { throw(offlineStrings.getString('circ.offline_register.future.birth.date')); }
181 if ( util.date.formatted_date(new Date(),'%F') == value) { throw(offlineStrings.getString('circ.offline_register.invalid.birth.date')); }
189 function render_surveys(node,obj) {
190 node = util.widgets.get(node);
191 util.widgets.remove_children(node);
195 var x_gb = document.createElement('groupbox'); node.appendChild(x_gb);
196 var x_cp = document.createElement('caption');
197 x_cp.setAttribute('label',i); x_gb.appendChild(x_cp);
198 var x_d = document.createElement('description');
199 x_d.appendChild( document.createTextNode( survey.description ) ); x_gb.appendChild(x_d);
200 for (var j = 0; j < survey.questions.length; j++) {
201 var question = survey.questions[j];
202 var x_d = document.createElement('description');
203 x_d.appendChild( document.createTextNode( (j+1) + ') ' + question.question ) );
204 x_gb.appendChild( x_d );
205 var x_hb = document.createElement('hbox'); x_hb.setAttribute('flex','1');
206 x_gb.appendChild(x_hb);
207 var x_spacer = document.createElement('spacer'); x_spacer.setAttribute('flex','1');
208 x_hb.appendChild(x_spacer);
209 var x_ml = util.widgets.make_menulist( [ [offlineStrings.getString('circ.offline_register.survey.prompt'),''] ].concat(question.answers) );
210 x_ml.setAttribute('name','survey'); x_hb.appendChild(x_ml);
215 function handle_keypress(ev) {
216 if ( (! ev.keyCode) || (ev.keyCode != 13) ) return;
218 case $('barcode') : setTimeout( function() { $('family_name').focus(); },0 ); break;
223 function check_patron(obj) {
225 if (! obj.user.billing_address.post_code ) {
226 errors += offlineStrings.getString('circ.offline_register.missing.post_code') + "\n";
227 $('post_code').focus();
228 $('post_code').parentNode.setAttribute('style','background-color: red');
230 $('post_code').parentNode.setAttribute('style','');
232 if (! obj.user.billing_address.state ) {
233 errors += offlineStrings.getString('circ.offline_register.missing.state') + "\n";
235 $('state').parentNode.setAttribute('style','background-color: red');
237 $('state').parentNode.setAttribute('style','');
239 if (! obj.user.billing_address.city ) {
240 errors += offlineStrings.getString('circ.offline_register.missing.city') + "\n";
242 $('city').parentNode.setAttribute('style','background-color: red');
244 $('city').parentNode.setAttribute('style','');
246 if (! obj.user.billing_address.street1 ) {
247 errors += offlineStrings.getString('circ.offline_register.missing.street1') + "\n";
248 $('street1').focus();
249 $('street1').parentNode.setAttribute('style','background-color: red');
251 $('street1').parentNode.setAttribute('style','');
253 /*if (! obj.user.ident_value ) {
254 errors += offlineStrings.getString('circ.offline_register.missing.ident_value') + "\n";
255 $('ident_value').focus();
256 $('ident_value').parentNode.setAttribute('style','background-color: red');
258 $('ident_value').parentNode.setAttribute('style','');
260 if (! obj.user.ident_type ) {
261 errors += offlineStrings.getString('circ.offline_register.missing.ident_type') + "\n";
262 $('ident_type').focus();
263 $('ident_type').parentNode.setAttribute('style','background-color: red');
265 $('ident_type').parentNode.setAttribute('style','');
267 if (! obj.user.dob ) {
268 errors += offlineStrings.getString('circ.offline_register.missing.dob') + "\n";
270 $('dob').parentNode.parentNode.setAttribute('style','background-color: red');
272 $('dob').parentNode.parentNode.setAttribute('style','');
274 if (! obj.user.first_given_name ) {
275 errors += offlineStrings.getString('circ.offline_register.missing.first_given_name') + "\n";
276 $('first_given_name').focus();
277 $('first_given_name').parentNode.setAttribute('style','background-color: red');
279 $('first_given_name').parentNode.setAttribute('style','');
281 if (! obj.user.family_name ) {
282 errors += offlineStrings.getString('circ.offline_register.missing.family_name') + "\n";
283 $('family_name').focus();
284 $('family_name').parentNode.setAttribute('style','background-color: red');
286 $('family_name').parentNode.setAttribute('style','');
288 if (! obj.user.passwd ) {
289 errors += offlineStrings.getString('circ.offline_register.missing.passwd') + "\n";
291 $('passwd').parentNode.setAttribute('style','background-color: red');
293 $('passwd').parentNode.setAttribute('style','');
295 if (! obj.user.card.barcode ) {
296 errors += offlineStrings.getString('circ.offline_register.missing.barcode') + "\n";
297 $('barcode').focus();
298 $('barcode').parentNode.setAttribute('style','background-color: red');
300 $('barcode').parentNode.setAttribute('style','');
302 if (! obj.user.profile ) {
303 errors += offlineStrings.getString('circ.offline_register.missing.profile') + "\n";
304 $('profile').focus();
305 $('profile').parentNode.setAttribute('style','background-color: red');
307 $('profile').parentNode.setAttribute('style','');
309 if (! obj.user.home_ou ) {
310 errors += offlineStrings.getString('circ.offline_register.missing.home_ou') + "\n";
311 $('home_ou').focus();
312 $('home_ou').parentNode.setAttribute('style','background-color: red');
314 $('home_ou').parentNode.setAttribute('style','');
316 if (errors != '') throw(errors);
319 function next_patron() {
322 obj.timestamp = parseInt( new Date().getTime() / 1000) + g.delta;
323 obj.type = 'register';
325 obj.user.card = { 'barcode' : $('barcode').value };
326 obj.user.profile = $('profile').value;
327 obj.user.passwd = $('passwd').value;
328 obj.user.ident_type = $('ident_type').value;
329 obj.user.ident_value = $('ident_value').value;
330 obj.user.first_given_name = $('first_given_name').value;
331 obj.user.family_name = $('family_name').value;
332 obj.user.home_ou = $('home_ou').value;
333 obj.user.dob = $('dob').value;
334 obj.user.billing_address = {};
335 obj.user.billing_address.street1 = $('street1').value;
336 obj.user.billing_address.street2 = $('street2').value;
337 obj.user.billing_address.city = $('city').value;
338 obj.user.billing_address.state = $('state').value;
339 obj.user.billing_address.country = $('country').value;
340 obj.user.billing_address.post_code = $('post_code').value;
341 obj.user.survey_responses = [];
343 var nl = document.getElementsByAttribute('name','survey');
344 for (var i = 0; i < nl.length; i++) {
345 var value = nl[i].value; if (value == '') continue;
346 var values = JSON2js( value );
347 var response = { 'survey' : values[2], 'question' : values[1], 'answer' : values[0] };
348 obj.user.survey_responses.push( response );
354 alert(offlineStrings.getString('circ.offline_register.missing.alert') + "\n" + E);
358 JSAN.use('util.file'); var file = new util.file('pending_xacts');
360 file.append_object(obj);
368 alert(offlineStrings.getString('circ.offline_register.patron.saved'));
370 $('passwd').value = parseInt(Math.random()*8999+1000);
371 $('barcode').value = ''; $('ident_value').value = ''; $('first_given_name').value = '';
372 $('family_name').value = ''; $('dob').value = ''; $('street1').value = '';
373 $('street2').value = '';
375 file = new util.file('offline_asv_list'); var list_data = file.get_object(); file.close();
376 render_surveys('x_surveys', list_data);
378 $('barcode').focus();
381 dump(E+'\n'); alert(E);