]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/patrons_due_refunds.js
Improve Firefox/XULRunner Support
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / patrons_due_refunds.js
1 var list; var error; var net; var rows; var menu_lib;
2
3 function $(id) { return document.getElementById(id); }
4
5 //// parent interfaces often call these
6 function default_focus() { $('au_list').focus(); }
7 function refresh() { populate_list(); }
8 ////
9
10 function patrons_due_refunds_init() {
11     try {
12         if (typeof JSAN == 'undefined') {
13             throw(
14                 $('commonStrings').getString('common.jsan.missing')
15             );
16         }
17
18         JSAN.errorLevel = "die"; // none, warn, or die
19         JSAN.addRepository('..');
20
21         JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
22
23         JSAN.use('util.error'); error = new util.error();
24         JSAN.use('util.network'); net = new util.network();
25         JSAN.use('patron.util'); 
26         JSAN.use('util.list'); 
27         JSAN.use('util.money'); 
28         JSAN.use('util.functional'); 
29         JSAN.use('util.widgets');
30
31         dojo.require('openils.Util');
32         dojo.require('dojo.date.locale');
33         dojo.require('dojo.date.stamp');
34
35         render_lib_menu();
36         init_list();
37         $('list_actions').appendChild( list.render_list_actions() );
38         list.set_list_actions();
39         $('retrieve_patron').addEventListener('command', handle_retrieve, false);
40         populate_list();
41         default_focus();
42
43     } catch(E) {
44         var err_prefix = 'patrons_due_refundss.js -> patrons_due_refunds_init() : ';
45         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
46     }
47 }
48
49 function handle_retrieve() { 
50     try {
51         var sel = list.retrieve_selection();
52         var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
53
54         var seen = {};
55         for (var i = 0; i < ids.length; i++) {
56             var patron_id = ids[i];
57             if (typeof patron_id == 'null') continue;
58             if (seen[patron_id]) continue; seen[patron_id] = true;
59             xulG.new_patron_tab(
60                 {},
61                 { 'id' : patron_id }
62             );
63         }
64
65     } catch(E) {
66         alert('Error in admin/patrons_due_refunds.js, handle_retrieve(): ' + E);
67     }
68 }
69
70 function init_list() {
71     try {
72
73         list = new util.list( 'au_list' );
74         list.init( 
75             {
76                 'columns' : [].concat(
77                     list.fm_columns('au',{
78                         '*' : { 'hidden' : true },
79                         'au_family_name' : { 'hidden' : false },
80                         'au_first_given_name' : { 'hidden' : false },
81                         'au_second_given_name' : { 'hidden' : false },
82                         'au_barred' : { 'hidden' : false },
83                         'au_dob' : { 'hidden' : false }
84                     })
85                 ).concat([
86                     {
87                         'id' : 'balance_owed', 'label' : 'Balance Owed', 'sort_type' : 'money', 'render' : function(my) { 
88                             return util.money.sanitize( my.balance_owed ); 
89                         }
90                     },
91                     {
92                         'id' : 'last_billing_activity', 'label' : 'Last Billing Activity', 'sort_type' : 'date', 'render' : function(my) { 
93                             JSAN.use('util.date');
94                             return util.date.formatted_date( my.last_billing_activity, '%{localized}' );
95                         }
96                     }
97                 ]),
98                 'retrieve_row' : retrieve_row,
99                 'on_select' : handle_selection
100             }
101         );
102
103     } catch(E) {
104         var err_prefix = 'patron_due_refunds.js -> init_list() : ';
105         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
106     }
107 }
108
109 function retrieve_row(params) { // callback function for fleshing rows in a list
110     params.treeitem_node.setAttribute('retrieve_id',params.row.my.au.id()); 
111     params.on_retrieve(params.row); 
112     return params.row; 
113 }
114
115 function handle_selection(ev) { // handler for list row selection event
116     var sel = list.retrieve_selection();
117     if (sel.length > 0) {
118         $('retrieve_patron').setAttribute('disabled','false');
119     } else {
120         $('retrieve_patron').setAttribute('disabled','true');
121     }
122 };
123
124 function populate_list() {
125     try {
126
127         rows = {};
128         list.clear();
129         $('progress').hidden = false;
130
131         function onResponse(r) {
132             try {
133                 var robj = openils.Util.readResponse(r);
134                 var row_params = {
135                     'row' : {
136                         'my' : {
137                             'au' : robj.usr,
138                             'balance_owed' : robj.balance_owed,
139                             'last_billing_activity' : robj.last_billing_activity
140                         }
141                     }
142                 };
143                 rows[ robj.usr.id() ] = list.append( row_params );
144             } catch(E) {
145                 alert('Error in patrons_due_refunds.js, populate_list, onResponse(): ' + E);
146             }
147         }
148
149         function onError(r) {
150             try {
151                 var robj = openils.Util.readResponse(r);
152                 alert('error, robj = ' + js2JSON(robj));
153             } catch(E) {
154                 alert('Error in patrons_due_refunds.js, populate_list, onError(): ' + E);
155             }
156         }
157
158         fieldmapper.standardRequest(
159             [api['FM_AU_BLOBS_WITH_NEGATIVE_BALANCE'].app, api['FM_AU_BLOBS_WITH_NEGATIVE_BALANCE'].method ],
160             {   async: true,
161                 params: [ses(),menu_lib],
162                 onresponse : onResponse,
163                 onerror : onError,
164                 oncomplete : function() {
165                     $('progress').hidden = true;
166                 }
167             }
168         );
169
170     } catch(E) {
171         alert('Error in patrons_due_refunds.js, populate_list(): ' + E);
172     }
173 }
174
175 function render_lib_menu() {
176     try {
177         var x = document.getElementById('lib_menu_placeholder');
178         if (!x) { return; }
179         util.widgets.remove_children( x );
180
181         JSAN.use('util.file');
182         var file = new util.file('offline_ou_list');
183         if (file._file.exists()) {
184             var list_data = file.get_object(); file.close();
185             menu_lib = x.getAttribute('value') || ses('ws_ou');
186             var ml = util.widgets.make_menulist( list_data[0], menu_lib );
187             ml.setAttribute('id','lib_menu');
188             x.appendChild( ml );
189             ml.addEventListener(
190                 'command',
191                 function(ev) {
192                     menu_lib = ev.target.value;
193                     x.setAttribute('value',ev.target.value); oils_persist(x);
194                     populate_list();
195                 },
196                 false
197             );
198         } else {
199             throw('Missing offline org unit list.');
200         }
201
202     } catch(E) {
203         alert('Error in patrons_due_refunds.js, render_lib_menu(): ' + E);
204     }
205 }