]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/info_group.xul
remove patron from usergroup
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / info_group.xul
1 <?xml version="1.0"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Patron Display -->
4
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
6 <!-- STYLESHEETS -->
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"?>
11
12 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
13 <!-- LOCALIZATION -->
14 <!DOCTYPE window PUBLIC "" ""[
15         <!--#include virtual="/opac/locale/en-US/lang.dtd"-->
16 ]>
17
18 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
19 <!-- OVERLAYS -->
20 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
21
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">
25
26         <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
27         <!-- BEHAVIOR -->
28         <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
29         <scripts id="openils_util_scripts"/>
30
31         <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
32         <script>
33         <![CDATA[
34
35                 function $(id) { return document.getElementById(id); }
36
37                 function my_init() {
38                         try {
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/');
43
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'});
48
49                                 g.error.sdump('D_TRACE','my_init() for patron_info_group.xul');
50
51                                 g.cgi = new CGI();
52                                 g.patron_id = g.cgi.param('patron_id');
53
54                                 tree_init();
55
56                                 refresh();
57
58                         } catch(E) {
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); }
62                                 alert(err_msg);
63                         }
64                 }
65
66                 function tree_init() {
67                                 JSAN.use('OpenILS.data'); g.OpenILS = {}; 
68                                 g.OpenILS.data = new OpenILS.data(); g.OpenILS.data.init({'via':'stash'});
69
70                                 JSAN.use('util.list'); g.list = new util.list('patron_list');
71                                 function getString(s) { return g.OpenILS.data.entities[s]; }
72
73                                 JSAN.use('patron.util');
74                                 var columns = patron.util.columns(
75                                         {
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' },
82                                         }
83                                 );
84                                 g.list.init(
85                                         {
86                                                 'columns' : columns,
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 );
91
92                                                         var row = params.row;
93                                                         if (typeof row.my == 'undefined') row.my = {};
94                                                         row.my.au = au_obj;
95                                                         if (typeof params.on_retrieve == 'function') {
96                                                                 params.on_retrieve(row);
97                                                         }
98                                                         return row;
99                                                 },
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(
104                                                                 sel,
105                                                                 function(o) { return o.getAttribute('retrieve_id'); }
106                                                         );
107                                                 }
108                                         }
109                                 );
110                 }
111
112                 function refresh() {
113                         retrieve_group_members();
114                 }
115
116                 function retrieve_group_members() {
117                         try {
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() ]
125                                 );
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; });
128
129                                 g.list.clear();
130
131                                 var funcs = [];
132
133                                         function gen_func(r) {
134                                                 return function() {
135                                                         g.list.append( { 'retrieve_id' : r, 'row' : {} } );
136                                                 }
137                                         }
138
139                                 for (var i = 0; i < ids.length; i++) {
140                                         funcs.push( gen_func(ids[i]) );
141                                 }
142                                 JSAN.use('util.exec'); var exec = new util.exec(4);
143                                 exec.chain( funcs );
144
145                         } catch(E) {
146                                 g.error.standard_unexpected_error_alert('Failed to retrieve all the group members.',E);
147                         }
148                 }
149
150                 function retrieve_patron() {
151                         try {
152                                         if (typeof window.xulG == 'object' && typeof window.xulG.new_tab == 'function') {
153                                                 for (var i = 0; i < g.sel_list.length; i++) {   
154                                                         try {
155                                                                 var url = urls.XUL_PATRON_DISPLAY 
156                                                                         + '?id=' + window.escape( g.sel_list[i] );
157                                                                 window.xulG.new_tab(
158                                                                         url, { 'tab_name' : 'Retrieving Patron..' }, {}
159                                                                 );
160                                                         } catch(E) {
161                                                                 g.error.standard_unexpected_error_alert('Failed to retrieve patron.',E);
162                                                         }
163                                                 }
164                                         }
165                         } catch(E) {
166                                 g.error.standard_unexpected_error_alert('Failed to retrieve patrons.',E);
167                         }
168                 }
169
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 );
173                         xulG.new_tab(
174                                 loc, 
175                                 {}, 
176                                 { 
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,
185                                         },
186                                         'url_prefix' : xulG.url_prefix,
187                                         'new_tab' : xulG.new_tab,
188                                 }
189                         );
190                 }
191
192                 function spawn_editor(p) {
193                         var url = urls.XUL_PATRON_EDIT;
194                         var param_count = 0;
195                         for (var i in p) {
196                                 if (param_count++ == 0) url += '?'; else url += '&';
197                                 url += i + '=' + window.escape(p[i]);
198                         }
199                         var loc = xulG.url_prefix( urls.XUL_REMOTE_BROWSER ) + '?url=' + window.escape( url );
200                         xulG.new_tab(
201                                 loc, 
202                                 {}, 
203                                 { 
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,
212                                         },
213                                         'url_prefix' : xulG.url_prefix,
214                                         'new_tab' : xulG.new_tab,
215                                 }
216                         );
217
218                 }
219
220                 function spawn_search(s) {
221                         try {
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, {}, {} );
226                         } catch(E) {
227                                 g.error.standard_unexpected_error_dialog('spawn search',E);
228                         }
229                 }
230
231                 function remove_patron() {
232                         var c = window.confirm('Remove this patron from their existing group?');
233                         if (c) {
234                                 var robj = g.network.simple_request('FM_AU_NEW_USERGROUP', [ ses(), g.patron_id, 't' ]);
235                                 if (typeof robj.ilsevent != 'undefined') {
236                                         g.error.standard_unexpected_error_dialog('error removing patron from usergroup',robj);
237                                 }
238                                 refresh();
239                                 alert('Patron removed from group.');
240                         } else {
241                                 alert('Patron not removed from group.');
242                         }
243                 }
244
245         ]]>
246         </script>
247
248         <vbox flex="1" class="my_overflow" id="group_panel">
249                 <groupbox>
250                         <caption label="Group Actions"/>
251                         <menulist id="ml">
252                                 <menupopup>
253                                         <menuitem label="Choose an action..." value="0"/>
254                                         <menuitem label="Register a new Group Member by Cloning this Patron" oncommand="try{clone_patron();}catch(E){alert('FIXME:'+E);}"/>
255                                         <menuitem label="Remove this Patron from the Group" oncommand="try{remove_patron();}catch(E){alert('FIXME:'+E);}"/>
256                                         <menuitem label="Link an existing Patron to this Group" oncommand="try{link_patron();}catch(E){alert('FIXME:'+E);}"/>   
257                                 </menupopup>
258                         </menulist>
259                 </groupbox>
260                 <groupbox flex="1">
261                         <caption label="Group Members"/>
262                         <hbox>
263                                 <spacer flex="1"/>
264                                 <button label="Retrieve Selected Patrons" accesskey="P" oncommand="try{retrieve_patron();}catch(E){alert(E);}"/>
265                         </hbox>
266                         <tree id="patron_list" flex="1" enableColumnDrag="true" seltype="multiple"/>
267                 </groupbox>
268         </vbox>
269
270
271 </window>
272