1 var list; var error; var net; var rows; var row_id_usrname_map; var menu_lib;
3 function $(id) { return document.getElementById(id); }
5 //// parent interfaces often call these
6 function default_focus() { $('lib_menu').focus(); }
7 function refresh() { populate_list(); }
10 function staged_init() {
12 commonStrings = $('commonStrings');
13 patronStrings = $('patronStrings');
15 if (typeof JSAN == 'undefined') {
17 commonStrings.getString('common.jsan.missing')
21 JSAN.errorLevel = "die"; // none, warn, or die
22 JSAN.addRepository('..');
24 JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
25 XML_HTTP_SERVER = data.server_unadorned;
27 JSAN.use('util.error'); error = new util.error();
28 JSAN.use('util.network'); net = new util.network();
29 JSAN.use('patron.util');
30 JSAN.use('util.list');
31 JSAN.use('util.functional');
32 JSAN.use('util.widgets');
34 dojo.require('openils.Util');
36 window.staged_event_listeners = new EventListenerList();
39 $('list_actions').appendChild( list.render_list_actions() );
40 list.set_list_actions();
41 window.staged_event_listeners.add($('cmd_cancel'), 'command', gen_event_handler('cancel'), false);
42 window.staged_event_listeners.add($('cmd_load'), 'command', gen_event_handler('load'), false);
43 window.staged_event_listeners.add($('cmd_reload'), 'command', function() { populate_list(); }, false);
48 var err_prefix = 'staged.js -> staged_init() : ';
49 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
53 function staged_cleanup() {
57 window.staged_event_listeners.removeAll();
59 var err_prefix = 'staged.js -> staged_cleanup() : ';
60 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
64 function populate_lib_menu() {
66 JSAN.use('util.widgets');
67 var x = document.getElementById('lib_menu_placeholder');
69 util.widgets.remove_children( x );
71 JSAN.use('util.file');
72 var file = new util.file('offline_ou_list');
73 if (file._file.exists()) {
74 var list_data = file.get_object(); file.close();
75 menu_lib = x.getAttribute('value') || ses('ws_ou');
76 var ml = util.widgets.make_menulist( list_data[0], menu_lib );
77 ml.setAttribute('id','lib_menu');
79 window.staged_event_listeners.add(ml,
82 menu_lib = ev.target.value;
83 x.setAttribute('value',ev.target.value); oils_persist(x);
89 alert($("patronStrings").getString('staff.patron.staged.lib_menus.missing_library_list'));
92 alert('Error in staged.js, populate_lib_menu(): ' + E);
96 function gen_event_handler(method) { // cancel or load?
99 var sel = list.retrieve_selection();
100 var row_ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ).row_id; } );
101 var usrnames = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ).usrname; } );
103 if (method == 'cancel') {
110 alert('Error in patron/staged.js, handle_???_event(): ' + E);
115 function cancel(ids) {
118 if (! window.confirm( $('patronStrings').getString('staff.patron.staged.confirm_patron_delete') ) ) { return; }
119 var pm = $('progress'); pm.value = 0; pm.hidden = false;
122 function gen_req_handler(id) {
123 return function(req) {
125 idx++; pm.value = Number( pm.value ) + 100/ids.length;
126 if (idx == ids.length) { pm.value = 0; pm.hidden = true; }
127 var robj = req.getResultObject();
129 var node = rows[ row_id_usrname_map[ id ] ].treeitem_node;
130 var parentNode = node.parentNode;
131 parentNode.removeChild( node );
132 delete(rows[ row_id_usrname_map[ id ] ]);
133 delete(row_id_usrname_map[ id ]);
135 alert( $('patronStrings').getFormattedString('staff.patron.staged.error_on_delete',[ id ]) );
138 alert('Error in staged.js, cancel patron request handler: ' + E);
143 for (var i = 0; i < ids.length; i++) {
144 net.simple_request('FM_STGU_DELETE', [ ses(), ids[i] ], gen_req_handler( ids[i] ));
147 alert('Error in staged.js, cancel(): ' + E);
151 function spawn_search(s) {
152 data.stash_retrieve();
153 xulG.new_patron_tab( {}, { 'doit' : 1, 'query' : s } );
156 function spawn_editor(p,func) {
157 var url = urls.XUL_PATRON_EDIT;
158 var loc = xulG.url_prefix('XUL_REMOTE_BROWSER');
164 'show_print_button' : true ,
165 'tab_name' : $("patronStrings").getFormattedString('staff.patron.staged.register_patron',[p.stage]),
166 'passthru_content_params' : {
167 'spawn_search' : spawn_search,
168 'spawn_editor' : spawn_editor,
169 'url_prefix' : xulG.url_prefix,
170 'new_tab' : xulG.new_tab,
171 'new_patron_tab' : xulG.new_patron_tab,
172 'on_save' : function(p) { patron.util.work_log_patron_edit(p); if (typeof func == 'function') { func(p); } },
175 'lock_tab' : xulG.lock_tab,
176 'unlock_tab' : xulG.unlock_tab
181 function load( usrnames ) {
184 function gen_on_save_handler(usrname) {
187 var node = rows[ usrname ].treeitem_node;
188 var parentNode = node.parentNode;
189 parentNode.removeChild( node );
190 delete(row_id_usrname_map[ rows[ usrname ].row.my.stgu.row_id() ]);
191 delete(rows[ usrname ]);
193 alert('Error in staged.js, load on save handler: ' + E);
200 for (var i = 0; i < usrnames.length; i++) {
201 if (! seen[ usrnames[i] ]) {
202 seen[ usrnames[i] ] = true;
203 spawn_editor( { 'stage' : usrnames[i] }, gen_on_save_handler( usrnames[i] ) );
208 alert('Error in staged.js, load(): ' + E);
212 function init_list() {
215 list = new util.list( 'stgu_list' );
218 'columns' : list.fm_columns(
220 'stgu_ident_type' : { 'render' : function(my) { return data.hash.cit[ my.stgu.ident_type() ].name(); } },
221 'stgu_home_ou' : { 'render' : function(my) { return data.hash.aou[ my.stgu.home_ou() ].shortname(); } }
224 'retrieve_row' : retrieve_row,
225 'on_select' : handle_selection,
226 'on_dblclick' : function(ev) {
227 gen_event_handler('load')();
233 var err_prefix = 'staged.js -> init_list() : ';
234 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
238 function retrieve_row(params) { // callback function for fleshing rows in a list
240 params.treeitem_node.setAttribute('retrieve_id',js2JSON( { 'row_id' : params.row.my.stgu.row_id(), 'usrname' : params.row.my.stgu.usrname() } ));
241 params.on_retrieve(params.row);
243 alert('Error in staged.js, retrieve_row(): ' + E);
248 function handle_selection(ev) { // handler for list row selection event
249 var sel = list.retrieve_selection();
250 if (sel.length > 0) {
251 $('cmd_cancel').setAttribute('disabled','false');
252 $('cmd_load').setAttribute('disabled','false');
254 $('cmd_cancel').setAttribute('disabled','true');
255 $('cmd_load').setAttribute('disabled','true');
259 function populate_list() {
262 rows = {}; row_id_usrname_map = {};
265 function onResponse(r) {
266 var blob = openils.Util.readResponse(r);
274 rows[ blob.user.usrname() ] = list.append( row_params );
275 row_id_usrname_map[ blob.user.row_id() ] = blob.user.usrname();
278 function onError(r) {
279 var my_stgu = openils.Util.readResponse(r);
280 alert('error, my_stgu = ' + js2JSON(my_stgu));
283 fieldmapper.standardRequest(
284 [api['FM_STGU_RETRIEVE'].app, api['FM_STGU_RETRIEVE'].method ],
286 params: [ses(), menu_lib || ses('ws_ou'), $('limit').value || 100],
287 onresponse : onResponse,
289 oncomplete : function() {
295 var err_prefix = 'staged.js -> populate_list() : ';
296 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);