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