usrgroup management
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 19 Jun 2006 20:06:31 +0000 (20:06 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 19 Jun 2006 20:06:31 +0000 (20:06 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@4683 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/patron/info_group.xul

index cf9409a..a5ed71b 100644 (file)
                                                                sel,
                                                                function(o) { return o.getAttribute('retrieve_id'); }
                                                        );
+                                                       if (g.sel_list.length > 0) {
+                                                               document.getElementById('retrieve_p').disabled = false;
+                                                       } else {
+                                                               document.getElementById('retrieve_p').disabled = true;
+                                                       }
                                                }
                                        }
                                );
+                               document.getElementById('retrieve_p').disabled = true;
+                               document.getElementById('ml').focus();
                }
 
                function refresh() {
 
                function retrieve_patron() {
                        try {
-                                       if (typeof window.xulG == 'object' && typeof window.xulG.new_tab == 'function') {
-                                               for (var i = 0; i < g.sel_list.length; i++) {   
-                                                       try {
-                                                               var url = urls.XUL_PATRON_DISPLAY 
-                                                                       + '?id=' + window.escape( g.sel_list[i] );
-                                                               window.xulG.new_tab(
-                                                                       url, { 'tab_name' : 'Retrieving Patron..' }, {}
-                                                               );
-                                                       } catch(E) {
-                                                               g.error.standard_unexpected_error_alert('Failed to retrieve patron.',E);
-                                                       }
+                               if (! g.sel_list ) return;
+                               if (typeof window.xulG == 'object' && typeof window.xulG.new_tab == 'function') {
+                                       for (var i = 0; i < g.sel_list.length; i++) {   
+                                               try {
+                                                       var url = urls.XUL_PATRON_DISPLAY 
+                                                               + '?id=' + window.escape( g.sel_list[i] );
+                                                       window.xulG.new_tab(
+                                                               url, { 'tab_name' : 'Retrieving Patron..' }, {}
+                                                       );
+                                               } catch(E) {
+                                                       g.error.standard_unexpected_error_alert('Failed to retrieve patron.',E);
                                                }
                                        }
+                               }
                        } catch(E) {
                                g.error.standard_unexpected_error_alert('Failed to retrieve patrons.',E);
                        }
                                        loc += '?doit=1&query=' + window.escape(js2JSON(s));
                                xulG.new_tab( loc, {}, {} );
                        } catch(E) {
-                               g.error.standard_unexpected_error_dialog('spawn search',E);
+                               g.error.standard_unexpected_error_alert('spawn search',E);
                        }
                }
 
                        if (c) {
                                var robj = g.network.simple_request('FM_AU_NEW_USERGROUP', [ ses(), g.patron_id, 't' ]);
                                if (typeof robj.ilsevent != 'undefined') {
-                                       g.error.standard_unexpected_error_dialog('error removing patron from usergroup',robj);
+                                       g.error.standard_unexpected_error_alert('error removing patron from usergroup',robj);
                                }
                                refresh();
                                alert('Patron removed from group.');
                        }
                }
 
+               function link_patron(direction) {
+                       try {
+                               if (direction == null) throw('null paramater not allowed');
+                               var first_msg; var second_msg;
+                               switch(direction) {
+                                       case true: first_msg = "Move into this patron's usergroup..."; break;
+                                       case false: first_msg = "Move this patron into the current usergroup..."; break;
+                                       default: throw('Invalid parameter.  Expected boolean.'); break;
+                               }
+                               var barcode = window.prompt('Please scan a patron barcode:','',first_msg);
+                               JSAN.use('patron.util');
+                               var patron_b = patron.util.retrieve_fleshed_au_via_barcode(ses(),barcode);
+                               if (typeof patron_b.ilsevent != 'undefined') throw(patron_b);
+                               var patron_a = patron.util.retrieve_fleshed_au_via_id(ses(),g.patron_id);
+                               if (typeof patron_a.ilsevent != 'undefined') throw(patron_a);
+                               switch(direction) {
+                                       case true: second_msg = "Move patron " + patron_a.card().barcode() + " into patron " + patron_b.card().barcode() + "'s usergroup..."; break;
+                                       case false: second_msg = "Move patron " + patron_b.card().barcode() + " into patron " + patron_a.card().barcode() + "'s usergroup..."; break;
+                               }
+
+                               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
+                               var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto"><description>' + second_msg + '</description><hbox><spacer flex="1"/><button label="Move" accesskey="M" name="fancy_submit"/><button label="Done" accesskey="D" name="fancy_cancel"/></hbox></vbox>';
+                               var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical"><hbox flex="1">';
+                               /************/
+                               xml += '<vbox flex="1">';
+                               xml += '<hbox><spacer flex="1"/>';
+                               if (direction) {
+                                       xml += '<image src="/xul/server/skin/media/images/patron_right_arrow.png"/>';
+                               } else {
+                                       xml += '<image src="/xul/server/skin/media/images/patron_left_arrow.png"/>';
+                               }
+                               xml += '</hbox>';
+                               xml += '<iframe style="min-height: 100px" flex="1" src="' + xulG.url_prefix( urls.XUL_PATRON_SUMMARY );
+                               xml += '?show_name=1&amp;id=' + g.patron_id + '"/>';
+                               xml += '</vbox>';
+                               xml += '<vbox flex="1">';
+                               xml += '<hbox>';
+                               if (direction) {
+                                       xml += '<image src="/xul/server/skin/media/images/patron_right_arrow.png"/>';
+                               } else {
+                                       xml += '<image src="/xul/server/skin/media/images/patron_left_arrow.png"/>';
+                               }
+                               xml += '<spacer flex="1"/></hbox>';
+                               xml += '<iframe style="min-height: 100px" flex="1" src="' + xulG.url_prefix( urls.XUL_PATRON_SUMMARY );
+                               xml += '?show_name=1&amp;id=' + patron_b.id() + '"/>';
+                               xml += '</vbox>';
+                               /************/
+                               xml += '</hbox></vbox>';
+                               
+                               var bot_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto"><hbox>';
+                               bot_xml += '</hbox></vbox>';
+       
+                               g.data.temp_top = top_xml; g.data.stash('temp_top');
+                               g.data.temp_mid = xml; g.data.stash('temp_mid');
+                               g.data.temp_bot = bot_xml; g.data.stash('temp_bot');
+                               window.open(
+                                       urls.XUL_FANCY_PROMPT
+                                       + '?xml_in_stash=temp_mid'
+                                       + '&top_xml_in_stash=temp_top'
+                                       + '&bottom_xml_in_stash=temp_bot'
+                                       + '&title=' + window.escape('Move Patron into a Usergroup'),
+                                       'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
+                               );
+                               g.data.init({'via':'stash'});
+                               if (g.data.fancy_prompt_data == '') { alert('No data'); }
+                               else {
+                                       var patron_c;
+                                       switch(direction) {
+                                               case true:
+                                                       patron_a.usrgroup( patron_b.usrgroup() );
+                                                       patron_a.ischanged( '1' );
+                                                       patron_c = patron_a;
+                                               break;
+                                               case false:
+                                                       patron_b.usrgroup( patron_a.usrgroup() );
+                                                       patron_b.ischanged( '1' );
+                                                       patron_c = patron_b;
+                                               break;
+                                       }
+                                       var robj = g.network.simple_request('FM_AU_UPDATE',[ ses(), patron_c ]);
+                                       if (typeof robj.ilsevent != 'undefined') throw(robj);
+                                       alert('User groups updated.');
+                               }
+                               refresh();
+                       } catch(E) {
+                               g.error.standard_unexpected_error_alert('error linking patrons',E);
+                               refresh();
+                       }
+               }
+
        ]]>
        </script>
 
        <vbox flex="1" class="my_overflow" id="group_panel">
                <groupbox>
                        <caption label="Group Actions"/>
-                       <menulist id="ml">
-                               <menupopup>
-                                       <menuitem label="Choose an action..." value="0"/>
-                                       <menuitem label="Register a new Group Member by Cloning this Patron" oncommand="try{clone_patron();}catch(E){alert('FIXME:'+E);}"/>
-                                       <menuitem label="Remove this Patron from the Group" oncommand="try{remove_patron();}catch(E){alert('FIXME:'+E);}"/>
-                                       <menuitem label="Link an existing Patron to this Group" oncommand="try{link_patron();}catch(E){alert('FIXME:'+E);}"/>   
-                               </menupopup>
-                       </menulist>
+                       <menubar id="ml">
+                               <menu label="Choose an Action..." accesskey="A" value="0">
+                                       <menupopup>
+                                               <menuitem accesskey="N" label="Register a New Group Member by Cloning this Patron" oncommand="try{clone_patron();}catch(E){alert('FIXME:'+E);}"/>
+                                               <menuitem accesskey="R" label="Remove this Patron from the Group" oncommand="try{remove_patron();}catch(E){alert('FIXME:'+E);}"/>
+                                               <menuitem accesskey="T" label="Link THIS patron to ANOTHER patron's group." oncommand="try{link_patron(true);}catch(E){alert('FIXME:'+E);}"/>   
+                                               <menuitem accesskey="A" label="Link ANOTHER patron to THIS patron's group." oncommand="try{link_patron(false);}catch(E){alert('FIXME:'+E);}"/>  
+                                       </menupopup>
+                               </menu>
+                       </menubar>
                </groupbox>
                <groupbox flex="1">
                        <caption label="Group Members"/>
                        <hbox>
                                <spacer flex="1"/>
-                               <button label="Retrieve Selected Patrons" accesskey="P" oncommand="try{retrieve_patron();}catch(E){alert(E);}"/>
+                               <button id="retrieve_p" label="Retrieve Selected Patrons" accesskey="P" oncommand="try{retrieve_patron();}catch(E){alert(E);}"/>
                        </hbox>
                        <tree id="patron_list" flex="1" enableColumnDrag="true" seltype="multiple"/>
                </groupbox>