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');
38 $('list_actions').appendChild( list.render_list_actions() );
39 list.set_list_actions();
40 $('cmd_cancel').addEventListener('command', gen_event_handler('cancel'), false);
41 $('cmd_load').addEventListener('command', gen_event_handler('load'), false);
42 $('cmd_reload').addEventListener('command', function() { populate_list(); }, false);
47 var err_prefix = 'staged.js -> staged_init() : ';
48 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
52 function populate_lib_menu() {
54 JSAN.use('util.widgets');
55 var x = document.getElementById('lib_menu_placeholder');
57 util.widgets.remove_children( x );
59 JSAN.use('util.file');
60 var file = new util.file('offline_ou_list');
61 if (file._file.exists()) {
62 var list_data = file.get_object(); file.close();
63 menu_lib = x.getAttribute('value') || ses('ws_ou');
64 var ml = util.widgets.make_menulist( list_data[0], menu_lib );
65 ml.setAttribute('id','lib_menu');
70 menu_lib = ev.target.value;
71 x.setAttribute('value',ev.target.value); oils_persist(x);
77 alert($("patronStrings").getString('staff.patron.staged.lib_menus.missing_library_list'));
80 alert('Error in staged.js, populate_lib_menu(): ' + E);
84 function gen_event_handler(method) { // cancel or load?
87 var sel = list.retrieve_selection();
88 var row_ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ).row_id; } );
89 var usrnames = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ).usrname; } );
91 if (method == 'cancel') {
98 alert('Error in patron/staged.js, handle_???_event(): ' + E);
103 function cancel(ids) {
106 if (! window.confirm( $('patronStrings').getString('staff.patron.staged.confirm_patron_delete') ) ) { return; }
107 var pm = $('progress'); pm.value = 0; pm.hidden = false;
110 function gen_req_handler(id) {
111 return function(req) {
113 idx++; pm.value = Number( pm.value ) + 100/ids.length;
114 if (idx == ids.length) { pm.value = 0; pm.hidden = true; }
115 var robj = req.getResultObject();
117 var node = rows[ row_id_usrname_map[ id ] ].treeitem_node;
118 var parentNode = node.parentNode;
119 parentNode.removeChild( node );
120 delete(rows[ row_id_usrname_map[ id ] ]);
121 delete(row_id_usrname_map[ id ]);
123 alert( $('patronStrings').getFormattedString('staff.patron.staged.error_on_delete',[ id ]) );
126 alert('Error in staged.js, cancel patron request handler: ' + E);
131 for (var i = 0; i < ids.length; i++) {
132 net.simple_request('FM_STGU_DELETE', [ ses(), ids[i] ], gen_req_handler( ids[i] ));
135 alert('Error in staged.js, cancel(): ' + E);
139 function spawn_search(s) {
140 data.stash_retrieve();
141 xulG.new_patron_tab( {}, { 'doit' : 1, 'query' : s } );
144 function spawn_editor(p,func) {
145 var url = urls.XUL_PATRON_EDIT;
146 var loc = xulG.url_prefix('XUL_REMOTE_BROWSER');
152 'show_print_button' : true ,
153 'tab_name' : $("patronStrings").getFormattedString('staff.patron.staged.register_patron',[p.stage]),
154 'passthru_content_params' : {
155 'spawn_search' : spawn_search,
156 'spawn_editor' : spawn_editor,
157 'url_prefix' : xulG.url_prefix,
158 'new_tab' : xulG.new_tab,
159 'new_patron_tab' : xulG.new_patron_tab,
160 'on_save' : function(p) { patron.util.work_log_patron_edit(p); if (typeof func == 'function') { func(p); } },
163 'lock_tab' : xulG.lock_tab,
164 'unlock_tab' : xulG.unlock_tab
169 function load( usrnames ) {
172 function gen_on_save_handler(usrname) {
175 var node = rows[ usrname ].treeitem_node;
176 var parentNode = node.parentNode;
177 parentNode.removeChild( node );
178 delete(row_id_usrname_map[ rows[ usrname ].row.my.stgu.row_id() ]);
179 delete(rows[ usrname ]);
181 alert('Error in staged.js, load on save handler: ' + E);
188 for (var i = 0; i < usrnames.length; i++) {
189 if (! seen[ usrnames[i] ]) {
190 seen[ usrnames[i] ] = true;
191 spawn_editor( { 'stage' : usrnames[i] }, gen_on_save_handler( usrnames[i] ) );
196 alert('Error in staged.js, load(): ' + E);
200 function init_list() {
203 list = new util.list( 'stgu_list' );
206 'columns' : list.fm_columns(
208 'stgu_ident_type' : { 'render' : function(my) { return data.hash.cit[ my.stgu.ident_type() ].name(); } },
209 'stgu_home_ou' : { 'render' : function(my) { return data.hash.aou[ my.stgu.home_ou() ].shortname(); } }
212 'retrieve_row' : retrieve_row,
213 'on_select' : handle_selection
218 var err_prefix = 'staged.js -> init_list() : ';
219 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
223 function retrieve_row(params) { // callback function for fleshing rows in a list
225 params.treeitem_node.setAttribute('retrieve_id',js2JSON( { 'row_id' : params.row.my.stgu.row_id(), 'usrname' : params.row.my.stgu.usrname() } ));
226 params.on_retrieve(params.row);
228 alert('Error in staged.js, retrieve_row(): ' + E);
233 function handle_selection(ev) { // handler for list row selection event
234 var sel = list.retrieve_selection();
235 if (sel.length > 0) {
236 $('cmd_cancel').setAttribute('disabled','false');
237 $('cmd_load').setAttribute('disabled','false');
239 $('cmd_cancel').setAttribute('disabled','true');
240 $('cmd_load').setAttribute('disabled','true');
244 function populate_list() {
247 rows = {}; row_id_usrname_map = {};
250 function onResponse(r) {
251 var blob = openils.Util.readResponse(r);
259 rows[ blob.user.usrname() ] = list.append( row_params );
260 row_id_usrname_map[ blob.user.row_id() ] = blob.user.usrname();
263 function onError(r) {
264 var my_stgu = openils.Util.readResponse(r);
265 alert('error, my_stgu = ' + js2JSON(my_stgu));
268 fieldmapper.standardRequest(
269 [api['FM_STGU_RETRIEVE'].app, api['FM_STGU_RETRIEVE'].method ],
271 params: [ses(), menu_lib || ses('ws_ou'), $('limit').value || 100],
272 onresponse : onResponse,
274 oncomplete : function() {
280 var err_prefix = 'staged.js -> populate_list() : ';
281 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);