2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Patron Display -->
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
7 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
8 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
9 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
10 <?xml-stylesheet href="/xul/server/skin/patron_display.css" type="text/css"?>
12 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
14 <!DOCTYPE window PUBLIC "" ""[
15 <!--#include virtual="/opac/locale/en-US/lang.dtd"-->
18 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
20 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
22 <window id="patron_info_group_win" width="700" height="550"
23 onload="try{ my_init(); } catch(E) { alert(E); }"
24 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
26 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
28 <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
29 <scripts id="openils_util_scripts"/>
31 <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
35 function $(id) { return document.getElementById(id); }
39 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
40 if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
41 JSAN.errorLevel = "die"; // none, warn, or die
42 JSAN.addRepository('/xul/server/');
44 JSAN.use('util.error'); g.error = new util.error();
45 JSAN.use('util.network'); g.network = new util.network();
46 JSAN.use('util.date'); JSAN.use('util.money'); JSAN.use('patron.util'); JSAN.use('util.functional');
47 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
49 g.error.sdump('D_TRACE','my_init() for patron_info_group.xul');
52 g.patron_id = g.cgi.param('patron_id');
59 var err_msg = "!! This software has encountered an error. Please tell your friendly " +
60 "system administrator or software developer the following:\npatron_info_group.xul\n" + E + '\n';
61 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
66 function tree_init() {
67 JSAN.use('OpenILS.data'); g.OpenILS = {};
68 g.OpenILS.data = new OpenILS.data(); g.OpenILS.data.init({'via':'stash'});
70 JSAN.use('util.list'); g.list = new util.list('patron_list');
71 function getString(s) { return g.OpenILS.data.entities[s]; }
73 JSAN.use('patron.util');
74 var columns = patron.util.columns(
76 'active' : { 'hidden' : 'false' },
77 'barred' : { 'hidden' : 'false' },
78 'family_name' : { 'hidden' : 'false' },
79 'first_given_name' : { 'hidden' : 'false' },
80 'second_given_name' : { 'hidden' : 'false' },
81 'dob' : { 'hidden' : 'false' },
87 'map_row_to_column' : patron.util.std_map_row_to_column(),
88 'retrieve_row' : function(params) {
89 var id = params.retrieve_id;
90 var au_obj = patron.util.retrieve_au_via_id( ses(), id );
93 if (typeof row.my == 'undefined') row.my = {};
95 if (typeof params.on_retrieve == 'function') {
96 params.on_retrieve(row);
100 'on_select' : function(ev) {
101 JSAN.use('util.functional');
102 var sel = g.list.retrieve_selection();
103 g.sel_list = util.functional.map_list(
105 function(o) { return o.getAttribute('retrieve_id'); }
113 retrieve_group_members();
116 function retrieve_group_members() {
118 JSAN.use('util.functional'); JSAN.use('patron.util');
119 g.group_members = [];
120 var p = patron.util.retrieve_au_via_id(ses(),g.patron_id);
121 if ((p == null) || (typeof p.ilsevent != 'undefined') ) throw(p);
122 var robj = g.network.simple_request(
123 'FM_AU_LIST_RETRIEVE_VIA_GROUP',
124 [ ses(), p.usrgroup() ]
126 if ((robj == null) || (typeof robj.ilsevent != 'undefined') ) throw(robj);
127 var ids = util.functional.filter_list( robj, function(o) { return o != g.patron_id; });
133 function gen_func(r) {
135 g.list.append( { 'retrieve_id' : r, 'row' : {} } );
139 for (var i = 0; i < ids.length; i++) {
140 funcs.push( gen_func(ids[i]) );
142 JSAN.use('util.exec'); var exec = new util.exec(4);
146 g.error.standard_unexpected_error_alert('Failed to retrieve all the group members.',E);
150 function retrieve_patron() {
152 if (typeof window.xulG == 'object' && typeof window.xulG.new_tab == 'function') {
153 for (var i = 0; i < g.sel_list.length; i++) {
155 var url = urls.XUL_PATRON_DISPLAY
156 + '?id=' + window.escape( g.sel_list[i] );
158 url, { 'tab_name' : 'Retrieving Patron..' }, {}
161 g.error.standard_unexpected_error_alert('Failed to retrieve patron.',E);
166 g.error.standard_unexpected_error_alert('Failed to retrieve patrons.',E);
170 function clone_patron() {
171 var loc = xulG.url_prefix( urls.XUL_REMOTE_BROWSER )
172 + '?url=' + window.escape( urls.XUL_PATRON_EDIT + '?ses=' + window.escape( ses() ) + '&clone=' + g.patron_id );
177 'show_print_button' : true ,
178 'tab_name' : 'Register Patron Clone for Group' ,
179 'passthru_content_params' : {
180 'spawn_search' : spawn_search,
181 'spawn_editor' : spawn_editor,
182 'on_save' : function() { refresh(); },
183 'url_prefix' : xulG.url_prefix,
184 'new_tab' : xulG.new_tab,
186 'url_prefix' : xulG.url_prefix,
187 'new_tab' : xulG.new_tab,
192 function spawn_editor(p) {
193 var url = urls.XUL_PATRON_EDIT;
196 if (param_count++ == 0) url += '?'; else url += '&';
197 url += i + '=' + window.escape(p[i]);
199 var loc = xulG.url_prefix( urls.XUL_REMOTE_BROWSER ) + '?url=' + window.escape( url );
204 'show_print_button' : true ,
205 'tab_name' : 'Editing Related Patron' ,
206 'passthru_content_params' : {
207 'spawn_search' : spawn_search,
208 'spawn_editor' : spawn_editor,
209 'on_save' : function() { refresh(); },
210 'url_prefix' : xulG.url_prefix,
211 'new_tab' : xulG.new_tab,
213 'url_prefix' : xulG.url_prefix,
214 'new_tab' : xulG.new_tab,
220 function spawn_search(s) {
222 g.error.sdump('D_TRACE', 'Editor would like to search for: ' + js2JSON(s) );
223 var loc = xulG.url_prefix(urls.XUL_PATRON_DISPLAY);
224 loc += '?doit=1&query=' + window.escape(js2JSON(s));
225 xulG.new_tab( loc, {}, {} );
227 g.error.standard_unexpected_error_dialog('spawn search',E);
234 <vbox flex="1" class="my_overflow" id="group_panel">
236 <caption label="Group Actions"/>
239 <menuitem label="Choose an action..." value="0"/>
240 <menuitem label="Register a new Group Member by Cloning this Patron" oncommand="try{clone_patron();}catch(E){alert('FIXME:'+E);}"/>
241 <menuitem label="Remove this Patron from the Group" oncommand="try{remove_patron();}catch(E){alert('FIXME:'+E);}"/>
242 <menuitem label="Link an existing Patron to this Group" oncommand="try{link_patron();}catch(E){alert('FIXME:'+E);}"/>
247 <caption label="Group Members"/>
250 <button label="Retrieve Selected Patrons" accesskey="P" oncommand="try{retrieve_patron();}catch(E){alert(E);}"/>
252 <tree id="patron_list" flex="1" enableColumnDrag="true" seltype="multiple"/>