]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/circ/backdate_post_checkin.js
46d306b7890dba82b99f2ca6a2717fc14dae92fd
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / circ / backdate_post_checkin.js
1 var data; var error; var network; var sound;
2
3 function $(id) { return document.getElementById(id); }
4
5 function default_focus() { $('cancel_btn').focus(); } // parent interfaces often call this
6
7 function backdate_post_checkin_init() {
8     try {
9
10         commonStrings = $('commonStrings');
11         circStrings = $('circStrings');
12
13         if (typeof JSAN == 'undefined') {
14             throw(
15                 commonStrings.getString('common.jsan.missing')
16             );
17         }
18
19         JSAN.errorLevel = "die"; // none, warn, or die
20         JSAN.addRepository('..');
21
22         JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
23
24         JSAN.use('util.error'); error = new util.error();
25
26         JSAN.use('util.network'); network = new util.network();
27
28         JSAN.use('util.sound'); sound = new util.sound();
29
30         JSAN.use('util.date'); 
31
32         dojo.require('openils.Util');
33
34         $('checkin_effective_datepicker').value = util.date.formatted_date(new Date(),'%F');
35
36         var x = $('circ_brief_area');
37         var circ_ids = xul_param('circ_ids',{'modal_xulG':true});
38         if (x) {
39             var d = document.createElement('description');
40             var t = document.createTextNode( $('circStrings').getFormattedString('staff.circ.backdate.circ_ids.prompt',[circ_ids.length,circ_ids.join(',')]) ); 
41             x.appendChild( d );
42             d.appendChild( t );
43         }
44
45         /* set widget behavior */
46         $('cancel_btn').addEventListener(
47             'command', function() { window.close(); }, false
48         );
49         $('apply_btn').addEventListener(
50             'command', 
51             gen_handle_apply(circ_ids),
52             false
53         );
54
55         $('checkin_effective_datepicker').addEventListener(
56             'change',
57             function(ev) {
58                 try {
59                     if ( ev.target.dateValue > new Date() ) throw($('circStrings').getString('staff.circ.future_date'));
60                     if ( ev.target.value == util.date.formatted_date(new Date(),'%F') ) {
61                         $('apply_btn').disabled = true;
62                     } else {
63                         $('apply_btn').disabled = false;
64                     }
65                 } catch(E) {
66                     dump('checkin:effective_date: ' + E + '\n');
67                     ev.target.disabled = true;
68                     ev.target.value = util.date.formatted_date(new Date(),'%F');
69                     ev.target.disabled = false;
70                     JSAN.use('util.sound'); var sound = new util.sound(); sound.bad();
71                     $('apply_btn').disabled = true;
72                 }
73             },
74             false
75         );
76
77         default_focus();
78
79     } catch(E) {
80         var err_prefix = 'backdate_post_checkin.js -> backdate_post_checkin_init() : ';
81         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
82     }
83
84 }
85
86 function gen_handle_apply(circ_ids) {
87     return function handle_apply(ev) {
88         try {
89             var backdate = $('checkin_effective_datepicker').value;
90             var progressmeter = $('progress');
91
92             var idx = -1;
93             var bad_circs = [];
94
95             fieldmapper.standardRequest(
96                 [ api.FM_CIRC_BACKDATE_BATCH.app, api.FM_CIRC_BACKDATE_BATCH.method ],
97                 {   async: true,
98                     params: [ses(), circ_ids, backdate],
99                     onresponse: function(r) {
100                         idx++; progressmeter.value = Number( progressmeter.value ) + 100/circ_ids.length;
101                         var result = r.recv().content();
102                         if (result != 1) {
103                             bad_circs.push( { 'circ_id' : circ_ids[ idx ], 'result' : result } );
104                         }
105                     },
106                     oncomplete: function() {
107                         if (bad_circs.length > 0) {
108                             sound.circ_bad(); 
109                             alert( $('circStrings').getFormattedString('staff.circ.backdate.circ_ids.failed',[ bad_circs.length, bad_circs.join(',') ]) );
110                         } else {
111                             sound.circ_good();
112                         }
113
114                         update_modal_xulG(
115                             {
116                                 'backdate' : backdate,
117                                 'bad_circs' : bad_circs,
118                                 'complete' : 1
119                             }
120                         )
121                         window.close();
122                     }
123                 }
124             );
125
126         } catch(E) {
127             alert('Error in backdate.js, handle_apply(): ' + E);
128         }
129     };
130 }