]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.js
Improve Firefox/XULRunner Support
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / circ / offline_checkin.js
1 var offlineStrings;
2 var local_lock = false;
3
4 function my_init() {
5     try {
6         offlineStrings = $('offlineStrings');
7
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_checkin.xul');
13
14         if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
15             try { window.xulG.set_tab_name(offlineStrings.getString('circ.standalone')); } catch(E) { alert(E); }
16         }
17
18         JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
19
20         JSAN.use('util.list'); g.list = new util.list('checkin_list');
21         JSAN.use('circ.util');
22         g.list.init( {
23             'columns' : circ.util.offline_checkin_columns(),
24             'map_row_to_column' : circ.util.std_map_row_to_column(),
25         } );
26
27         JSAN.use('util.date');
28
29         function handle_lock(ev) {
30             if (!(ev.altKey || ev.ctrlKey || ev.metakey)) {
31                 if (!local_lock) {
32                     local_lock = true;
33                     xulG.lock();
34                 }
35             }
36         }
37         $('i_barcode').addEventListener('keypress',handle_lock,false);
38         $('i_barcode').addEventListener('keypress',handle_keypress,false);
39         $('i_barcode').focus();    
40
41         $('enter').addEventListener('command',handle_enter,false);
42
43         $('submit').addEventListener('command',next_patron,false);
44
45         JSAN.use('util.file');
46         var file = new util.file('offline_delta'); 
47         if (file._file.exists()) { g.delta = file.get_object()[0]; file.close(); } else { g.delta = 0; }
48
49     } catch(E) {
50         var err_msg = offlineStrings.getFormattedString('common.exception', ["circ/offline_checkin.xul", E]);
51         try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
52         alert(err_msg);
53     }
54 }
55
56 function $(id) { return document.getElementById(id); }
57
58 function handle_keypress(ev) {
59     if ( (! ev.keyCode) || (ev.keyCode != 13) ) return;
60     switch(ev.target) {
61         case $('i_barcode') : handle_enter(); break;
62         default: break;
63     }
64 }
65
66 function handle_enter(ev) {
67     JSAN.use('util.barcode');
68     if ( ($('strict_i_barcode').checked) && (! util.barcode.check($('i_barcode').value)) ) {
69         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'));
70         if (r == 1) {
71             setTimeout(
72                 function() {
73                     $('i_barcode').value = '';
74                     $('i_barcode').focus();
75                 },0
76             );
77         } else {
78             append_to_list();
79         }
80     } else {
81         append_to_list();
82     }
83 }
84
85 function append_to_list() {
86
87     try {
88
89         var my = {};
90
91         my.type = 'checkin';
92         my.timestamp = parseInt( new Date().getTime() / 1000) + g.delta;
93         /* I18N to-do: enable localized date formats */
94         my.backdate = util.date.formatted_date(new Date(),"%F %H:%M:%s");
95
96         var i_barcode = $('i_barcode').value;
97         if (! i_barcode) return; 
98         my.barcode = i_barcode; 
99     
100         g.list.append( { 'row' : { 'my' : my }, 'to_top' : true } );
101
102         var x = $('i_barcode'); x.value = ''; x.focus();
103
104         if (!local_lock) {
105             local_lock = true;
106             xulG.lock();
107         }
108
109     } catch(E) {
110
111         dump(E+'\n'); alert(E);
112
113     }
114 }
115
116 function next_patron() {
117     try {
118         JSAN.use('util.file'); var file = new util.file('pending_xacts');
119         var rows = g.list.dump_with_keys();
120         for (var i = 0; i < rows.length; i++) {
121             var row = rows[i]; row.delta = g.delta;
122             file.append_object(row);
123         }
124         file.close();
125
126         if (local_lock) {
127             local_lock = false;
128             xulG.unlock();
129         }
130
131         if ($('print_receipt').checked) {
132             try {
133                 var params = {
134                     'template' : 'offline_checkin',
135                     'printer_context' : 'offline',
136                     'callback' : function() {
137                         g.list.clear();
138                         var x = $('i_barcode'); x.value = ''; x.focus();
139                     }
140                 };
141                 g.list.print( params );
142             } catch(E) {
143                 g.error.sdump('D_ERROR','print: ' + E);
144                 alert('print: ' + E);
145             }
146         } else {
147             g.list.clear();
148             var x = $('i_barcode'); x.value = ''; x.focus();
149         }
150
151     } catch(E) {
152         dump(E+'\n'); alert(E);
153     }
154 }