]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/circ/offline_renew.js
*** empty log message ***
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / circ / offline_renew.js
1 function my_init() {
2         try {
3                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
4                 if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
5                 JSAN.errorLevel = "die"; // none, warn, or die
6                 JSAN.addRepository('..');
7                 JSAN.use('util.error'); g.error = new util.error();
8                 g.error.sdump('D_TRACE','my_init() for offline_renew.xul');
9
10                 if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
11                         try { window.xulG.set_tab_name('Standalone'); } catch(E) { alert(E); }
12                 }
13
14                 JSAN.use('util.list'); g.list = new util.list('checkout_list');
15                 g.list.init( {
16                         'columns' : [
17                                 { 
18                                         'id' : 'timestamp', 
19                                         'label' : 'Timestamp', 
20                                         'flex' : 1, 'primary' : false, 'hidden' : true, 
21                                         'render' : 'my.timestamp' 
22                                 },
23                                 { 
24                                         'id' : 'checkout_time', 
25                                         'label' : 'Check Out Time', 
26                                         'flex' : 1, 'primary' : false, 'hidden' : true, 
27                                         'render' : 'my.checkout_time' 
28                                 },
29                                 { 
30                                         'id' : 'type', 
31                                         'label' : 'Transaction Type', 
32                                         'flex' : 1, 'primary' : false, 'hidden' : true, 
33                                         'render' : 'my.type' 
34                                 },
35                                 { 
36                                         'id' : 'patron_barcode', 
37                                         'label' : 'Patron Barcode', 
38                                         'flex' : 1, 'primary' : false, 'hidden' : true, 
39                                         'render' : 'my.patron_barcode' 
40                                 },
41                                 { 
42                                         'id' : 'barcode', 
43                                         'label' : 'Item Barcode', 
44                                         'flex' : 2, 'primary' : true, 'hidden' : false, 
45                                         'render' : 'my.barcode' 
46                                 },
47                                 { 
48                                         'id' : 'due_date', 
49                                         'label' : 'Due Date', 
50                                         'flex' : 1, 'primary' : false, 'hidden' : false, 
51                                         'render' : 'my.due_date' 
52                                 },
53                         ],
54                         'map_row_to_column' : function(row,col) {
55                                 // row contains { 'my' : { 'barcode' : xxx, 'duedate' : xxx } }
56                                 // col contains one of the objects listed above in columns
57
58                                 var my = row.my;
59                                 var value;
60                                 try {
61                                         value = eval( col.render );
62                                         if (typeof value == 'undefined') value = '';
63
64                                 } catch(E) {
65                                         JSAN.use('util.error'); var error = new util.error();
66                                         error.sdump('D_WARN','map_row_to_column: ' + E);
67                                         value = '???';
68                                 }
69                                 return value;
70                         }
71                 } );
72
73                 JSAN.use('util.date');
74                 var today = new Date();
75                 var todayPlus = new Date(); todayPlus.setTime( today.getTime() + 24*60*60*1000*14 );
76                 todayPlus = util.date.formatted_date(todayPlus,"%F");
77
78                 $('duedate').setAttribute('value',todayPlus);
79                 $('duedate').addEventListener('change',check_date,false);
80
81                 $('p_barcode').addEventListener('keypress',handle_keypress,false);
82                 $('p_barcode').focus(); 
83
84                 $('i_barcode').addEventListener('keypress',handle_keypress,false);
85                 $('enter').addEventListener('command',handle_enter,false);
86
87                 $('duedate_menu').addEventListener('command',handle_duedate_menu,false);
88
89                 $('submit').addEventListener('command',next_patron,false);
90
91                 JSAN.use('util.file');
92                 var file = new util.file('offline_delta'); 
93                 if (file._file.exists()) { g.delta = file.get_object(); file.close(); } else { g.delta = 0; }
94
95         } catch(E) {
96                 var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
97                         "system administrator or software developer the following:\ncirc/offline_renew.xul\n" + E + '\n';
98                 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
99                 alert(err_msg);
100         }
101 }
102
103 function $(id) { return document.getElementById(id); }
104
105 function handle_keypress(ev) {
106         if ( (! ev.keyCode) || (ev.keyCode != 13) ) return;
107         switch(ev.target) {
108                 case $('p_barcode') : $('i_barcode').focus(); break;
109                 case $('i_barcode') : append_to_list('barcode'); break;
110                 default: break;
111         }
112 }
113
114 function handle_enter(ev) {
115         append_to_list('barcode');
116 }
117
118 function handle_duedate_menu(ev) {
119         if (ev.target.value=='0') return; 
120         JSAN.use('util.date'); 
121         var today = new Date(); 
122         var todayPlus = new Date(); 
123         todayPlus.setTime( today.getTime() + 24*60*60*1000*ev.target.value ); 
124         todayPlus = util.date.formatted_date(todayPlus,'%F'); 
125         $('duedate').setAttribute('value',todayPlus); 
126         $('duedate').value = todayPlus;
127 }
128
129 function check_date(ev) {
130         JSAN.use('util.date');
131         try {
132                 if (! util.date.check('YYYY-MM-DD',ev.target.value) ) { throw('Invalid Date'); }
133                 if (util.date.check_past('YYYY-MM-DD',ev.target.value) ) { throw('Due date needs to be after today.'); }
134                 if ( util.date.formatted_date(new Date(),'%F') == ev.target.value) { throw('Due date needs to be after today.'); }
135         } catch(E) {
136                 alert(E);
137                 var today = new Date();
138                 var todayPlus = new Date(); todayPlus.setTime( today.getTime() + 24*60*60*1000*14 );
139                 todayPlus = util.date.formatted_date(todayPlus,"%F");
140                 ev.target.value = todayPlus;
141         }
142 }
143
144 function append_to_list(checkout_type,count) {
145
146         try {
147
148                 var my = {};
149
150                 my.type = 'renew';
151                 my.timestamp = parseInt( new Date().getTime() / 1000) + g.delta;
152                 my.checkout_time = util.date.formatted_date(new Date(),"%F %H:%M:%s");
153
154                 var p_barcode = $('p_barcode').value;
155                 if (! p_barcode) {
156                         /* Not strictly necessary for a renewal
157                         alert('Please enter a patron barcode first.');
158                         return;
159                         */
160                 } else {
161
162                         // Need to validate patron barcode against bad patron list
163                         my.patron_barcode = p_barcode;
164                 }
165
166                 var due_date = $('duedate').value; // Need to validate this
167                 my.due_date = due_date;
168
169                 var i_barcode = $('i_barcode').value;
170                 switch(checkout_type) {
171                         case 'barcode' : 
172                                 if (! i_barcode) return; 
173                                 
174                                 var rows = g.list.dump_with_keys();
175                                 for (var i = 0; i < rows.length; i++) {
176                                         if (rows[i].barcode == i_barcode) {
177                                                 alert('This barcode has already been scanned.');
178                                                 return;
179                                         }
180                                 }
181
182                                 my.barcode = i_barcode; 
183                         break;
184                         default: alert("Please report that this happened."); break;
185                 }
186         
187                 g.list.append( { 'row' : { 'my' : my } } );
188
189                 var x = $('i_barcode'); x.value = ''; x.focus();
190
191         } catch(E) {
192
193                 dump(E+'\n'); alert(E);
194
195         }
196 }
197
198 function next_patron() {
199         try {
200                 JSAN.use('util.file'); var file = new util.file('pending_xacts');
201                 var rows = g.list.dump_with_keys();
202                 for (var i = 0; i < rows.length; i++) {
203                         var row = rows[i]; row.delta = g.delta;
204                         if (row.patron_barcode == '') {
205                                 delete(row.patron_barcode);
206                         }
207                         file.append_object(row);
208                 }
209                 file.close();
210                 g.list.clear();
211                 
212                 var x;
213                 x = $('i_barcode'); x.value = '';
214                 x = $('p_barcode'); x.value = ''; x.focus();
215
216         } catch(E) {
217                 dump(E+'\n'); alert(E);
218         }
219 }