This completes the morphing of the Hold Notifications interface into a dual Notes...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 22 Sep 2009 22:40:01 +0000 (22:40 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 22 Sep 2009 22:40:01 +0000 (22:40 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@14106 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/server/locale/en-US/circ.properties
Open-ILS/xul/staff_client/server/locale/en-US/patron.properties
Open-ILS/xul/staff_client/server/patron/hold_details.js
Open-ILS/xul/staff_client/server/patron/hold_details.xul
Open-ILS/xul/staff_client/server/patron/hold_notices.xul [deleted file]
Open-ILS/xul/staff_client/server/patron/holds.js
Open-ILS/xul/staff_client/server/patron/holds_overlay.xul

index d054737..2e03a8c 100644 (file)
 <!ENTITY staff.circ.holds.show_last_few_circulations.accesskey "L">
 <!ENTITY staff.circ.holds.retrieve_patron "Retrieve Patron">
 <!ENTITY staff.circ.holds.retrieve_patron.accesskey "P">
-<!ENTITY staff.circ.holds.show_details "Show Hold Details">
-<!ENTITY staff.circ.holds.show_details.accesskey "N">
 <!ENTITY staff.circ.holds.edit_pickup_library "Edit Pickup Library">
 <!ENTITY staff.circ.holds.edit_pickup_library.accesskey "L">
 <!ENTITY staff.circ.holds.edit_phone_notification "Edit Phone Notification">
 <!ENTITY staff.patron.hold_details.title "Hold Details">
 <!ENTITY staff.patron.hold_notices.add_record_notification.label "Add Record of Notification">
 <!ENTITY staff.patron.hold_notices.add_record_notification.accesskey "A">
-<!ENTITY staff.patron.hold_notices.close_window.label "Close">
-<!ENTITY staff.patron.hold_notices.close_window.accesskey "C">
 <!ENTITY staff.patron.hold_notices.method.label "Method:">
+<!ENTITY staff.patron.holds.notices_tab.label "Notifications">
+<!ENTITY staff.patron.holds.notices_tab.accesskey "N">
+<!ENTITY staff.patron.holds.notes_tab.label "Notes">
+<!ENTITY staff.patron.holds.notes_tab.accesskey "e">
+<!ENTITY staff.patron.holds.add_note.label "Add Note">
+<!ENTITY staff.patron.holds.add_note.accesskey "A">
 <!ENTITY staff.patron.holds_overlay.pickup_lib.label "Pickup Library">
 <!ENTITY staff.patron.holds_overlay.request_lib.label "Requesting Library">
 <!ENTITY staff.patron.holds_overlay.fulfillment_lib.label "Fulfilling Library">
index efcdaa2..88a91e1 100644 (file)
@@ -371,3 +371,7 @@ staff.circ.holds.unexpected_error.not_likely_modified=Holds not likely modified.
 staff.circ.holds.unexpected_error.not_likely_activated=Holds not likely activated.
 staff.circ.holds.unexpected_error.not_likely_suspended=Holds not likely suspended.
 staff.circ.holds.error.may_not_edit_pickup_lib_for_hold_intransit=You may not edit the pickup library for holds that are in-transit or ready for pickup.
+staff.circ.holds.alt_view.label=Detail View
+staff.circ.holds.alt_view.accesskey=V
+staff.circ.holds.list_view.label=List View
+staff.circ.holds.list_view.accesskey=V
index 542ab20..0956b86 100644 (file)
@@ -87,6 +87,25 @@ staff.patron.hold_notices.cancel_accesskey=C
 staff.patron.hold_notices.add_notif_record=Add Notification Record
 staff.patron.hold_notices.add_notif_record_accesskey=A
 staff.patron.hold_notices.new_notification.not_created=The notification was not likely created.
+
+staff.patron.hold_notes.tooltiptext=ID: %1$s Hold ID: %2$s Staff ID: %3$s
+staff.patron.hold_notes.new_note=New Note
+staff.patron.hold_notes.title=Title
+staff.patron.hold_notes.body=Note
+staff.patron.hold_notes.public=Public
+staff.patron.hold_notes.private=Private
+staff.patron.hold_notes.print_on_slip=Print on Slip
+staff.patron.hold_notes.no_print_on_slip=No print on Slip
+staff.patron.hold_notes.by_staff=By Staff
+staff.patron.hold_notes.by_patron=By Patron 
+staff.patron.hold_notes.new_note.public=Public?
+staff.patron.hold_notes.new_note.slip=Print on slip?
+staff.patron.hold_notes.cancel=Cancel
+staff.patron.hold_notes.cancel_accesskey=C
+staff.patron.hold_notes.add_note=Add Note
+staff.patron.hold_notes.add_note.accesskey=A
+staff.patron.hold_notes.new_note.not_created=The note was not likely created.
+
 staff.patron.holds.init.hold_num_error=Error retrieving details for hold #%1$s
 staff.patron.holds.show_notifications.error_rendering_notifs=Error rendering or retrieving hold notifications.
 staff.patron.holds.holds_edit_selection_depth.choose_hold_range=Please choose a Hold Range:
index b5eab04..2620cb4 100644 (file)
@@ -1,4 +1,3 @@
-
 function $(id) { return document.getElementById(id); }
 
 function my_init() {
@@ -8,7 +7,6 @@ function my_init() {
         JSAN.errorLevel = "die"; // none, warn, or die
         JSAN.addRepository('/xul/server/');
 
-
         dojo.require('openils.PermaCrud');
         JSAN.use('util.error'); g.error = new util.error();
         JSAN.use('util.network'); g.network = new util.network();
@@ -17,107 +15,135 @@ function my_init() {
 
         g.error.sdump('D_TRACE','my_init() for hold_notices.xul');
 
-        g.ahr_id = xul_param('ahr_id');
+        g.pcrud = new openils.PermaCrud({authtoken :ses()});
 
-        g.ahr = g.network.simple_request('FM_AHR_RETRIEVE',[ ses(), g.ahr_id ]);
-        if (typeof g.ahr.ilsevent != 'undefined') { throw(g.ahr); }
-        g.ahr = g.ahr[0];
+        init_list();
+
+        if (xulG.ahr_id) fetch_and_render_all();
 
-        render_patron();
+    } catch(E) {
+        try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
+    }
+}
+
+function fetch_and_render_all() {
+    try {
+        if (!xulG.ahr_id) { alert('boo'); return; }
+
+        fetch_hold();
+
+        if (xulG.patron_rendered_elsewhere) {
+            // Hide patron line
+        } else {
+            render_patron();
+        }
 
         a_list_of_one();
 
         var x = document.getElementById('bib_brief_box'); while (x.firstChild) x.removeChild(x.lastChild);
         var bib_brief = document.createElement('iframe'); x.appendChild(bib_brief);
         bib_brief.setAttribute('flex',1);
-        bib_brief.setAttribute('src',urls.XUL_BIB_BRIEF);
+        bib_brief.setAttribute('src',urls.XUL_BIB_BRIEF); 
         get_contentWindow(bib_brief).xulG = { 'docid' : g.ahr.target() };
 
-        refresh();
+        retrieve_notes(); render_notes();
+
+        retrieve_notifications(); render_notifications();
 
     } catch(E) {
-        try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
+        alert('Error in hold_details.js, fetch_and_render_all(): ' + E);
+    }
+}
+
+function fetch_hold(id) {
+    try {
+        g.ahr_id = xulG.ahr_id;
+        g.ahr = g.network.simple_request('FM_AHR_RETRIEVE',[ ses(), g.ahr_id ]);
+        if (typeof g.ahr.ilsevent != 'undefined') { throw(g.ahr); }
+        g.ahr = g.ahr[0];
+    } catch(E) {
+        alert('Error in hold_details.js, fetch_hold(): ' + E);
     }
 }
 
 function render_patron() {
     if (g.ahr.usr()) {
-        JSAN.use('patron.util');
+        JSAN.use('patron.util'); 
         var au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.ahr.usr() );
-
-        $('patron_name').setAttribute('value',
-                                      ( au_obj.prefix() ? au_obj.prefix() + ' ' : '') +
-                                      au_obj.family_name() + ', ' +
-                                      au_obj.first_given_name() + ' ' +
-                                      ( au_obj.second_given_name() ? au_obj.second_given_name() + ' ' : '' ) +
-                                      ( au_obj.suffix() ? au_obj.suffix() : '')
-                                      + ' : ' + au_obj.card().barcode()
-                                      );
+        
+        $('patron_name').setAttribute('value', 
+            ( au_obj.prefix() ? au_obj.prefix() + ' ' : '') + 
+            au_obj.family_name() + ', ' + 
+            au_obj.first_given_name() + ' ' +
+            ( au_obj.second_given_name() ? au_obj.second_given_name() + ' ' : '' ) +
+            ( au_obj.suffix() ? au_obj.suffix() : '')
+            + ' : ' + au_obj.card().barcode() 
+        );
     }
 }
 
-function a_list_of_one() {
+function init_list() {
     JSAN.use('circ.util');
-    var columns = circ.util.hold_columns(
-                                         {
-                                             'status' : { 'hidden' : true },
-                                             'request_time' : { 'hidden' : false },
-                                             'pickup_lib_shortname' : { 'hidden' : false },
-                                             'current_copy' : { 'hidden' : false },
-                                             'phone_notify' : { 'hidden' : false },
-                                             'email_notify' : { 'hidden' : false },
-                                         }
-                                          );
+    var columns = circ.util.hold_columns( 
+        { 
+            'status' : { 'hidden' : true },
+            'request_time' : { 'hidden' : false },
+            'pickup_lib_shortname' : { 'hidden' : false },
+            'current_copy' : { 'hidden' : false },
+            'phone_notify' : { 'hidden' : false },
+            'email_notify' : { 'hidden' : false },
+        } 
+    );
     JSAN.use('util.list'); g.list = new util.list('holds_list');
     g.list.init(
-                {
-                    'columns' : columns,
-                        'map_row_to_columns' : circ.util.std_map_row_to_columns(),
-                        'retrieve_row' : function(params) {
-                        var row = params.row;
-                        try {
-                            switch(row.my.ahr.hold_type()) {
-                            case 'M' :
-                                row.my.mvr = g.network.request(
-                                                               api.MODS_SLIM_METARECORD_RETRIEVE.app,
-                                                               api.MODS_SLIM_METARECORD_RETRIEVE.method,
-                                                               [ row.my.ahr.target() ]
-                                                               );
-                                break;
-                            default:
-                                row.my.mvr = g.network.simple_request(
-                                                                      'MODS_SLIM_RECORD_RETRIEVE.authoritative',
-                                                                      [ row.my.ahr.target() ]
-                                                                      );
-                                if (row.my.ahr.current_copy()) {
-                                    row.my.acp = g.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ]);
-                                }
-                                break;
+        {
+            'columns' : columns,
+            'map_row_to_columns' : circ.util.std_map_row_to_columns(),
+            'retrieve_row' : function(params) {
+                var row = params.row;
+                try {
+                    switch(row.my.ahr.hold_type()) {
+                        case 'M' :
+                            row.my.mvr = g.network.request(
+                                api.MODS_SLIM_METARECORD_RETRIEVE.app,
+                                api.MODS_SLIM_METARECORD_RETRIEVE.method,
+                                [ row.my.ahr.target() ]
+                            );
+                        break;
+                        default:
+                            row.my.mvr = g.network.simple_request(
+                                'MODS_SLIM_RECORD_RETRIEVE.authoritative',
+                                [ row.my.ahr.target() ]
+                            );
+                            if (row.my.ahr.current_copy()) {
+                                row.my.acp = g.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ]);
                             }
-                        } catch(E) {
-                            g.error.sdump('D_ERROR','retrieve_row: ' + E );
-                        }
-                        if (typeof params.on_retrieve == 'function') {
-                            params.on_retrieve(row);
-                        }
-                        return row;
-                    },
-                        }
-                );
-    g.list.append(
-                  {
-                      'row' : {
-                          'my' : {
-                              'ahr' : g.ahr,
-                                  }
-                      },
-                          'no_auto_select' : true,
-                              }
-                  );
+                        break;
+                    }
+                } catch(E) {
+                    g.error.sdump('D_ERROR','retrieve_row: ' + E );
+                }
+                if (typeof params.on_retrieve == 'function') {
+                    params.on_retrieve(row);
+                }
+                return row;
+            },
+        }
+    );
 }
 
-function refresh() {
-    retrieve_notifications(); render_notifications(); retrieve_notes(); render_notes();
+function a_list_of_one() {
+    g.list.clear();
+    g.list.append(
+        {
+            'row' : {
+                'my' : {
+                    'ahr' : g.ahr,
+                }
+            },
+            'no_auto_select' : true,
+        }
+    );
 }
 
 function retrieve_notifications() {
@@ -125,30 +151,21 @@ function retrieve_notifications() {
 }
 
 function retrieve_notes() {
-    try{
-        g.ahr_id = xul_param('ahr_id');
-
-        g.notes = new openils.PermaCrud(
-                                      {
-                                          authtoken :ses()
-                                      }
-                                       ).search('ahrn', {hold:g.ahr_id});
-    }
-    catch(E){alert(E);}
-
+    g.notes = g.pcrud.search('ahrn',{'hold':g.ahr_id});
+    g.notes = g.notes.reverse();
 }
 
 function apply(node,field,value) {
     util.widgets.apply(
-                       node,'name',field,
-                       function(n) {
-                           switch(n.nodeName) {
-                           case 'description' : n.appendChild( document.createTextNode( value ) ); break;
-                           case 'label' : n.value = value; break;
-                           default : n.value = value; break;
-                           }
-                       }
-                       );
+        node,'name',field,
+        function(n) {
+            switch(n.nodeName) {
+                case 'description' : n.appendChild( document.createTextNode( value ) ); break;
+                case 'label' : n.value = value; break;
+                default : n.value = value; break;
+            }
+        }
+    );
 }
 
 function render_notifications() {
@@ -160,13 +177,13 @@ function render_notifications() {
         /* template */
         var node = $('notification_template').cloneNode(true); np.appendChild(node); node.hidden = false;
         util.widgets.apply(node,'name','notify_time',
-                           function(n){
-                               n.setAttribute(
-                                              "tooltiptext",
-                                              $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()])
-                                              );
-                           }
-                           );
+            function(n){
+                n.setAttribute(
+                    "tooltiptext", 
+                    $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()])
+                );
+            }
+        );
         apply(node,'method',g.notifications[i].method() ? g.notifications[i].method() : '');
         apply(node,'note',g.notifications[i].note() ? g.notifications[i].note() : '');
         apply(node,'notify_time',g.notifications[i].notify_time() ? g.notifications[i].notify_time().toString().substr(0,10) : '');
@@ -175,26 +192,32 @@ function render_notifications() {
 }
 
 function render_notes() {
-
     JSAN.use('util.widgets'); util.widgets.remove_children('notes_panel');
-    var notep = $('notes_panel');
+    var np = $('notes_panel');
 
     for (var i = 0; i < g.notes.length; i++) {
 
-        // template
-        var notenode = $('note_template').cloneNode(true); notep.appendChild(notenode); notenode.hidden = false;
-
-        /* alert('notenode = '
-              + notenode + ' title = ' + g.notes[i].title() + ' note = ' +
-              g.notes[i].body() + ' pub = ' + g.notes[i].pub() + ' slip = ' +
-              g.notes[i].slip() );*/
-
-        apply(notenode,'title',g.notes[i].title() ? g.notes[i].title() : '');
-        apply(notenode,'note',g.notes[i].body() ? g.notes[i].body() : '');
-        apply(notenode,'pub',g.notes[i].pub() ? g.notes[i].pub() : '');
-        apply(notenode,'slip',g.notes[i].slip() ? g.notes[i].slip() : '');
+        /* template */
+        var node = $('note_template').cloneNode(true); np.appendChild(node); node.hidden = false;
+        util.widgets.apply(node,'name','create_date',
+            function(n){
+                n.setAttribute(
+                    "tooltiptext", 
+                    $("patronStrings").getFormattedString('staff.patron.hold_notes.tooltiptext',[g.notes[i].id(), g.notes[i].hold(), g.notes[i].staff()])
+                );
+            }
+        );
+        apply(node,'title',g.notes[i].title() ? g.notes[i].title() : '');
+        apply(node,'note',g.notes[i].body() ? g.notes[i].body() : '');
+        //apply(node,'create_date',g.notes[i].create_date() ? g.notes[i].create_date().toString().substr(0,10) : ''); // FIXME -- need to rework date display more intelligently
+        apply(node,'pub',get_bool( g.notes[i].pub() ) ? $("patronStrings").getString('staff.patron.hold_notes.public') : $("patronStrings").getString('staff.patron.hold_notes.private') )
+        apply(node,'slip',get_bool( g.notes[i].slip() ) ? $("patronStrings").getString('staff.patron.hold_notes.print_on_slip') : $("patronStrings").getString('staff.patron.hold_notes.no_print_on_slip') )
+        apply(node,'staff',get_bool( g.notes[i].staff() ) ? $("patronStrings").getString('staff.patron.hold_notes.by_staff') : $("patronStrings").getString('staff.patron.hold_notes.by_patron') )
     }
+
 }
+
+
 function new_notification() {
     try {
         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
@@ -208,10 +231,10 @@ function new_notification() {
         xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record_accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
         JSAN.use('util.window'); var win = new util.window();
         var fancy_prompt_data = win.open(
-                                         urls.XUL_FANCY_PROMPT,
-                                         'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
-                                         { 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
-                                         );
+            urls.XUL_FANCY_PROMPT,
+            'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
+            { 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
+        );
         if (fancy_prompt_data.fancy_status == 'complete') {
             var notification = new ahn();
             notification.isnew(1);
@@ -219,39 +242,50 @@ function new_notification() {
             notification.method( fancy_prompt_data.method );
             notification.note( fancy_prompt_data.note );
             var r = g.network.simple_request('FM_AHN_CREATE',[ ses(), notification ]); if (typeof r.ilsevent != 'undefined') throw(r);
-            setTimeout(function(){refresh();},0);
+            setTimeout(function(){fetch_and_render_all();},0);
         }
     } catch(E) {
         g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notices.new_notification.not_created'),E);
-        setTimeout(function(){refresh();},0);
+        setTimeout(function(){fetch_and_render_all();},0);
     }
 }
 
 function new_note() {
-     try{
-     var newNote = new fieldmapper.ahrn();
-     newNote.isnew("t");
-     newNote.body(document.getElementById('hold_note_text').value);
-     newNote.hold(g.ahr_id);
-     newNote.title(document.getElementById('hold_note_title').value);
-
-     if($('pub_bool').checked){
-         newNote.pub("t");
-     }else {
-         newNote.pub("f");
-     }
-     if($('print_bool').checked){
-         newNote.slip("t");
-     }else{
-         newNote.slip("f");
-     }
-     newNote.staff("t");
-
-     new openils.PermaCrud({authtoken :ses()}).create(newNote);
-
-     }
-     catch(E) {
-         alert('new_note FAILED');
-     }
-     refresh();
-}
\ No newline at end of file
+    try {
+        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
+        var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
+        xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notes.new_note') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
+        xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.public') + '"/><checkbox id="pub" name="fancy_data" checked="false"/></row>';
+        xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.slip') + '"/><checkbox id="slip" name="fancy_data" checked="false"/></row>';
+        xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.title') + '"/><textbox id="title" name="fancy_data" context="clipboard"/></row>';
+        xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.body') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
+        xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notes.cancel') + '" name="fancy_cancel" ';
+        xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.cancel_accesskey') + '"/>';
+        xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notes.add_note') + '" ';
+        xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.add_note.accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
+        JSAN.use('util.window'); var win = new util.window();
+        var fancy_prompt_data = win.open(
+            urls.XUL_FANCY_PROMPT,
+            'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
+            { 'xml' : xml, 'focus' : 'title', 'title' : $("patronStrings").getString('staff.patron.hold_notes.add_note') }
+        );
+        if (fancy_prompt_data.fancy_status == 'complete') {
+            var note = new ahrn();
+            note.isnew(1);
+            note.hold(g.ahr_id);
+            note.title( fancy_prompt_data.title );
+            note.body( fancy_prompt_data.note );
+            note.pub( get_bool( fancy_prompt_data.pub ) ? get_db_true() : get_db_false() );
+            note.slip( get_bool( fancy_prompt_data.slip ) ? get_db_true() : get_db_false() );
+            note.staff( true );
+            //var r = g.network.simple_request('FM_AHN_CREATE',[ ses(), notification ]); if (typeof r.ilsevent != 'undefined') throw(r);
+            g.pcrud.create(note);
+            setTimeout(function(){fetch_and_render_all();},0);
+        }
+    } catch(E) {
+        g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notes.new_note.not_created'),E);
+        setTimeout(function(){fetch_and_render_all();},0);
+    }
+}
+
+
index 3aaad15..be73bc9 100644 (file)
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-         <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
-          ]>
+       <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
+]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- OVERLAYS -->
 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
 
-<window id="hold_notices_win" oils_persist="sizemode width height"
-       onload="try{ my_init(); font_helper(); persist_helper(); } catch(E) { alert(E); }" title="&staff.patron.hold_details.title;"
+<window id="hold_notices_win" width="700" height="550" oils_persist="sizemode width height"
+       onload="try{ my_init(); font_helper(); persist_helper(); } catch(E) { alert(E); }" title="&staff.patron.hold_notices.title;"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
-    <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
-    <!-- BEHAVIOR -->
-    <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {}; </script>
-    <scripts id="openils_util_scripts"/>
+       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+       <!-- BEHAVIOR -->
+        <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
+        <scripts id="openils_util_scripts"/>
 
-    <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
-    <script type="text/javascript" src="/xul/server/patron/hold_details.js" />
+       <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
+       <script type="text/javascript" src="hold_notices.js"/>
 
-    <messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
-    <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
+       <messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
+       <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
+
+       <stack hidden="true" id="notification_template" flex="1">
+               <groupbox flex="1" style="background-color: black;"/>
+               <groupbox flex="1" style="background-color: #FFDE00; -moz-border-radius-topright: 35px;" >
+                       <hbox>
+                               <description name="method" label="&staff.patron.hold_notices.method.label;" style="font-weight: bold"/>
+                               <spacer flex="1"/>
+                               <description name="notify_time" style="font-weight: bold"/>
+                       </hbox>
+                       <description name="note"/>
+               </groupbox>
+       </stack>
+
+    <stack hidden="true" id="note_template" flex="1">
+        <groupbox flex="1" style="background-color: black;"/>
+        <groupbox flex="1" style="background-color: #FFDE00; -moz-border-radius-topright: 35px;" >
+            <hbox>
+                <description name="title" style="font-weight: bold"/>
+                <spacer flex="1"/>
+                <description name="create_date" style="font-weight: bold"/>
+                <description name="staff" style="font-weight: bold"/>
+                <description name="pub" style="font-weight: bold"/>
+                <description name="slip" style="font-weight: bold"/>
+            </hbox>
+            <description name="note"/>
+        </groupbox>
+    </stack>
 
     <vbox id="v1" flex="1" oils_persist="height">
         <label id="patron_name" class="patronNameLarge"/>
-        <vbox id="bib_brief_box" height="200"/>
-    </vbox> 
-    <spacer flex="1"/>
+        <vbox id="bib_brief_box" flex="1" style="min-height: 10em;"/>
+    </vbox>
+
+    <splitter><grippy/></splitter>
+
     <vbox id="v2" flex="1" oils_persist="height">
         <vbox flex="1">
-            <tree id="holds_list" enableColumnDrag="true" height="100"/>
+            <tree id="holds_list" flex="1" enableColumnDrag="true" style="min-height: 4em;"/>
+            <spacer/>
         </vbox>
-    </vbox>
-    <groupbox style="border: 2px black" id="notification_template">
-       <hbox>
-           <description name="method" label="&staff.patron.hold_notices.method.label;" style="font-weight: bold"/>
-           <description name="notify_time" style="font-weight: bold"/>
-       </hbox>
-       <description name="note"/>
-    </groupbox>
-    
-    <groupbox id="note_template" style="border: 2px black">
-        <hbox orient="vertical">
-            <description name="title" style="font-weight: bold"/>
-            <description name="note"/>
-           <description name="pub" label="&staff.patron.hold_note.public.label;" style="font-weight: bold"/>
-            <description name="slip" label="&staff.patron.hold_note.print.label;" style="font-weight: bold"/>
-        </hbox>
-    </groupbox>
+       </vbox>
 
-    <tabbox>
+    <splitter><grippy/></splitter>
+
+    <tabbox flex="1">
         <tabs>
-            <tab label="Add/View Notes"/>
-            <tab label="Add/View Notifications"/>
+            <tab label="&staff.patron.holds.notes_tab.label;" accesskey="&staff.patron.holds.notes_tab.accesskey;" />
+            <tab label="&staff.patron.holds.notices_tab.label;" accesskey="&staff.patron.holds.notices_tab.accesskey;" />
         </tabs>
-        <tabpanels>
-            <tabpanel id="notes" orient="vertical" overflow="scroll">
-                <vbox oils_persist="height" class="my_overflow" id="notes_panel">
-                </vbox>
-                
-                <textbox id="hold_note_title" multiline="false" value="circStrings-ADD NOTE TITLE HERE" onfocus="$('hold_note_title').value=''; $('hold_note_title').onfocus=''"/>
-                
-                <textbox id="hold_note_text" multiline="true" value="circStrings-Enter Notes Here." onfocus="$('hold_note_text').value=''; $('hold_note_text').onfocus=''"/>
-                <hbox>  
-                    <checkbox id="pub_bool" label="circStrings--Public Note" checked="{true | *false}" />
-                    <checkbox id="print_bool"  label="circStrings--Print Note" checked="{true | *false}" />
-                </hbox>
+        <tabpanels flex="1">
+            <tabpanel flex="1" orient="vertical">
                 <hbox>
-                    <button label="circStrings--Add New Note" accesskey="" oncommand="new_note()"/>
-                    <button label="&staff.patron.hold_notices.close_window.label;" accesskey="&staff.patron.hold_notices.close_window.accesskey;" oncommand="window.close()"/>
-                </hbox>               
-                
+                    <button label="&staff.patron.holds.add_note.label;" accesskey="&staff.patron.holds.add_note.accesskey;" oncommand="new_note()"/>
+                    <spacer flex="1"/>
+                </hbox>
+                <vbox oils_persist="height" flex="1" class="my_overflow" id="notes_panel">
+                </vbox>
             </tabpanel>
-            <tabpanel id="notification" orient="vertical">
-                <vbox oils_persist="height" class="my_overflow" id="notifications_panel">
+            <tabpanel flex="1" orient="vertical">
+                <hbox>
+                    <button label="&staff.patron.hold_notices.add_record_notification.label;" accesskey="&staff.patron.hold_notices.add_record_notification.accesskey;" oncommand="new_notification()"/>
+                    <spacer flex="1"/>
+                </hbox>
+                <vbox oils_persist="height" flex="1" class="my_overflow" id="notifications_panel">
                 </vbox>
-                <button label="&staff.patron.hold_notices.add_record_notification.label;" accesskey="&staff.patron.hold_notices.add_record_notification.accesskey;" oncommand="new_notification()"/>
-                <button label="&staff.patron.hold_notices.close_window.label;" accesskey="&staff.patron.hold_notices.close_window.accesskey;" oncommand="window.close()"/>
             </tabpanel>
         </tabpanels>
     </tabbox>
-    
 
 </window>
 
diff --git a/Open-ILS/xul/staff_client/server/patron/hold_notices.xul b/Open-ILS/xul/staff_client/server/patron/hold_notices.xul
deleted file mode 100644 (file)
index b84309f..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0"?>
-<!-- Application: Evergreen Staff Client -->
-<!-- Screen: Patron Display -->
-
-<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
-<!-- STYLESHEETS -->
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="/xul/server/skin/patron_display.css" type="text/css"?>
-
-<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
-<!-- LOCALIZATION -->
-<!DOCTYPE window PUBLIC "" ""[
-       <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
-]>
-
-<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
-<!-- OVERLAYS -->
-<?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
-
-<window id="hold_notices_win" width="700" height="550" oils_persist="sizemode width height"
-       onload="try{ my_init(); font_helper(); persist_helper(); } catch(E) { alert(E); }" title="&staff.patron.hold_notices.title;"
-       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
-       <!-- BEHAVIOR -->
-        <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
-        <scripts id="openils_util_scripts"/>
-
-       <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
-       <script>
-       <![CDATA[
-
-               function $(id) { return document.getElementById(id); }
-
-               function my_init() {
-                       try {
-                               netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-                               if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
-                               JSAN.errorLevel = "die"; // none, warn, or die
-                               JSAN.addRepository('/xul/server/');
-
-                               JSAN.use('util.error'); g.error = new util.error();
-                               JSAN.use('util.network'); g.network = new util.network();
-                               JSAN.use('util.date'); JSAN.use('util.money'); JSAN.use('patron.util');
-                               JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
-
-                               g.error.sdump('D_TRACE','my_init() for hold_notices.xul');
-
-                               g.ahr_id = xul_param('ahr_id');
-                               g.ahr = g.network.simple_request('FM_AHR_RETRIEVE',[ ses(), g.ahr_id ]);
-                               if (typeof g.ahr.ilsevent != 'undefined') { throw(g.ahr); }
-                               g.ahr = g.ahr[0];
-
-                               render_patron();
-
-                               a_list_of_one();
-
-                               var x = document.getElementById('bib_brief_box'); while (x.firstChild) x.removeChild(x.lastChild);
-                var bib_brief = document.createElement('iframe'); x.appendChild(bib_brief);
-                bib_brief.setAttribute('flex',1);
-                bib_brief.setAttribute('src',urls.XUL_BIB_BRIEF); 
-                               get_contentWindow(bib_brief).xulG = { 'docid' : g.ahr.target() };
-
-                               refresh();
-
-                       } catch(E) {
-                               try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
-                       }
-               }
-
-               function render_patron() {
-                       if (g.ahr.usr()) {
-                               JSAN.use('patron.util'); 
-                               var au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.ahr.usr() );
-                               
-                               $('patron_name').setAttribute('value', 
-                                       ( au_obj.prefix() ? au_obj.prefix() + ' ' : '') + 
-                                       au_obj.family_name() + ', ' + 
-                                       au_obj.first_given_name() + ' ' +
-                                       ( au_obj.second_given_name() ? au_obj.second_given_name() + ' ' : '' ) +
-                                       ( au_obj.suffix() ? au_obj.suffix() : '')
-                                       + ' : ' + au_obj.card().barcode() 
-                               );
-                       }
-               }
-
-               function a_list_of_one() {
-                       JSAN.use('circ.util');
-                       var columns = circ.util.hold_columns( 
-                               { 
-                                       'status' : { 'hidden' : true },
-                                       'request_time' : { 'hidden' : false },
-                                       'pickup_lib_shortname' : { 'hidden' : false },
-                                       'current_copy' : { 'hidden' : false },
-                                       'phone_notify' : { 'hidden' : false },
-                                       'email_notify' : { 'hidden' : false },
-                               } 
-                       );
-                       JSAN.use('util.list'); g.list = new util.list('holds_list');
-                       g.list.init(
-                               {
-                                       'columns' : columns,
-                                       'map_row_to_columns' : circ.util.std_map_row_to_columns(),
-                                       'retrieve_row' : function(params) {
-                                               var row = params.row;
-                                               try {
-                                                       switch(row.my.ahr.hold_type()) {
-                                                               case 'M' :
-                                                                       row.my.mvr = g.network.request(
-                                                                               api.MODS_SLIM_METARECORD_RETRIEVE.app,
-                                                                               api.MODS_SLIM_METARECORD_RETRIEVE.method,
-                                                                               [ row.my.ahr.target() ]
-                                                                       );
-                                                               break;
-                                                               default:
-                                                                       row.my.mvr = g.network.simple_request(
-                                                                               'MODS_SLIM_RECORD_RETRIEVE.authoritative',
-                                                                               [ row.my.ahr.target() ]
-                                                                       );
-                                                                       if (row.my.ahr.current_copy()) {
-                                                                               row.my.acp = g.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ]);
-                                                                       }
-                                                               break;
-                                                       }
-                                               } catch(E) {
-                                                       g.error.sdump('D_ERROR','retrieve_row: ' + E );
-                                               }
-                                               if (typeof params.on_retrieve == 'function') {
-                                                       params.on_retrieve(row);
-                                               }
-                                               return row;
-                                       },
-                               }
-                       );
-                       g.list.append(
-                               {
-                                       'row' : {
-                                               'my' : {
-                                                       'ahr' : g.ahr,
-                                               }
-                                       },
-                                       'no_auto_select' : true,
-                               }
-                       );
-               }
-
-               function refresh() {
-                       retrieve_notifications(); render_notifications();
-               }
-
-               function retrieve_notifications() {
-                       g.notifications = g.network.simple_request('FM_AHN_RETRIEVE_VIA_AHR',[ ses(), g.ahr_id ]).reverse();
-               }
-
-               function apply(node,field,value) {
-                       util.widgets.apply(
-                               node,'name',field,
-                               function(n) {
-                                       switch(n.nodeName) {
-                                               case 'description' : n.appendChild( document.createTextNode( value ) ); break;
-                                               case 'label' : n.value = value; break;
-                                               default : n.value = value; break;
-                                       }
-                               }
-                       );
-               }
-
-               function render_notifications() {
-                       JSAN.use('util.widgets'); util.widgets.remove_children('notifications_panel');
-                       var np = $('notifications_panel');
-
-                       for (var i = 0; i < g.notifications.length; i++) {
-
-                               /* template */
-                               var node = $('notification_template').cloneNode(true); np.appendChild(node); node.hidden = false;
-                               util.widgets.apply(node,'name','notify_time',
-                                       function(n){
-                        n.setAttribute(
-                            "tooltiptext", 
-                            $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()])
-                        );
-                    }
-                               );
-                               apply(node,'method',g.notifications[i].method() ? g.notifications[i].method() : '');
-                               apply(node,'note',g.notifications[i].note() ? g.notifications[i].note() : '');
-                               apply(node,'notify_time',g.notifications[i].notify_time() ? g.notifications[i].notify_time().toString().substr(0,10) : '');
-                       }
-
-               }
-               
-               function new_notification() {
-                       try {
-                               netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
-                               var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
-                               xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notices.new_notification_record') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
-                               xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.method') + '"/><textbox id="method" name="fancy_data" context="clipboard"/></row>';
-                               xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.note') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
-                               xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notices.cancel') + '" name="fancy_cancel" ';
-                               xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.cancel_accesskey') + '"/>';
-                               xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') + '" ';
-                               xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record_accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
-                               JSAN.use('util.window'); var win = new util.window();
-                               var fancy_prompt_data = win.open(
-                                       urls.XUL_FANCY_PROMPT,
-                                       'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
-                                       { 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
-                               );
-                               if (fancy_prompt_data.fancy_status == 'complete') {
-                                       var notification = new ahn();
-                                       notification.isnew(1);
-                                       notification.hold(g.ahr_id);
-                                       notification.method( fancy_prompt_data.method );
-                                       notification.note( fancy_prompt_data.note );
-                                       var r = g.network.simple_request('FM_AHN_CREATE',[ ses(), notification ]); if (typeof r.ilsevent != 'undefined') throw(r);
-                                       setTimeout(function(){refresh();},0);
-                               }
-                       } catch(E) {
-                               g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notices.new_notification.not_created'),E);
-                               setTimeout(function(){refresh();},0);
-                       }
-               }
-
-       ]]>
-       </script>
-
-       <messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
-       <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
-
-       <stack hidden="true" id="notification_template" flex="1">
-               <groupbox flex="1" style="background-color: black;"/>
-               <groupbox flex="1" style="background-color: #FFDE00; -moz-border-radius-topright: 35px;" >
-                       <hbox>
-                               <description name="method" label="&staff.patron.hold_notices.method.label;" style="font-weight: bold"/>
-                               <spacer flex="1"/>
-                               <description name="notify_time" style="font-weight: bold"/>
-                       </hbox>
-                       <description name="note"/>
-               </groupbox>
-       </stack>
-
-    <vbox id="v1" flex="1" oils_persist="height">
-        <label id="patron_name" class="patronNameLarge"/>
-        <vbox id="bib_brief_box" flex="1"/>
-    </vbox>
-
-    <splitter><grippy/></splitter>
-
-    <vbox id="v2" flex="1" oils_persist="height">
-        <vbox flex="1">
-            <tree id="holds_list" flex="1" enableColumnDrag="true" style=""/>
-        </vbox>
-        <hbox>
-            <button label="&staff.patron.hold_notices.add_record_notification.label;" accesskey="&staff.patron.hold_notices.add_record_notification.accesskey;" oncommand="new_notification()"/>
-            <spacer flex="1"/>
-            <button label="&staff.patron.hold_notices.close_window.label;" accesskey="&staff.patron.hold_notices.close_window.accesskey;" oncommand="window.close()"/>
-        </hbox>
-       </vbox>
-
-    <splitter><grippy/></splitter>
-
-       <vbox oils_persist="height" flex="9" class="my_overflow" id="notifications_panel">
-       </vbox>
-
-
-</window>
-
index 45e1f9e..724b4ce 100644 (file)
@@ -185,6 +185,41 @@ patron.holds.prototype = {
                                                        circ.util.show_last_few_circs(obj.retrieve_ids);
                                                }
                                        ],
+                    'alt_view_btn' : [
+                        ['render'],
+                        function(e) {
+                            e.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.holds.alt_view.label'));
+                            e.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.holds.alt_view.accesskey'));
+                        }
+                    ],
+                    'cmd_alt_view' : [
+                        ['command'],
+                        function(ev) {
+                            try {
+                                var n = obj.controller.view.alt_view_btn;
+                                if (n.getAttribute('toggle') == '1') {
+                                    document.getElementById('deck').selectedIndex = 0;
+                                    n.setAttribute('toggle','0');
+                                    n.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.holds.alt_view.label'));
+                                    n.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.holds.alt_view.accesskey'));
+                                } else {
+                                    document.getElementById('deck').selectedIndex = 1;
+                                    n.setAttribute('toggle','1');
+                                    n.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.holds.list_view.label'));
+                                    n.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.holds.list_view.accesskey'));
+                                    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+                                    if (obj.retrieve_ids.length == 0) return;
+                                    var f = obj.browser.get_content();
+                                    xulG.ahr_id = obj.retrieve_ids[0].id;
+                                    xulG.patron_rendered_elsewhere = (obj.hold_interface_type == 'patron');
+                                    f.xulG = xulG;
+                                    f.fetch_and_render_all();
+                                }
+                            } catch(E) {
+                                alert('Error in holds.js, cmd_alt_view handler: ' + E);
+                            }
+                        },
+                    ],
                                        'sel_mark_items_damaged' : [
                                                ['command'],
                                                function() {
@@ -209,29 +244,7 @@ patron.holds.prototype = {
                                                }
                                        ],
 
-                                            ///////////////////////////////////////////////////////////////////THIS IS MY CURRENT CODE
-                                         'cmd_hold_note' : [
-                                                            ['command'],
-                                                            function() {
-                                                                try {
-                                                                    JSAN.use('util.window'); var win = new util.window();
-                                                                    for (var i = 0; i < obj.retrieve_ids.length; i++) {
-                                                                       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-                                                                       win.open(
-                                                                                 xulG.url_prefix(urls.XUL_HOLD_NOTE), // + '?ahr_id=' + obj.retrieve_ids[i].id,
-                                                                                 'hold_note_' + obj.retrieve_ids[i].id,
-                                                                                 'chrome,resizable',
-                                                                                 { 'ahrn_id' : obj.retrieve_ids[i].id }
-                                                                                 );
-                                                                    }
-                                                                } catch(E) {
-                                                                    obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.holds.show_note.error_rendering_note'),E);
-                                                                }
-                                                            }
-                                         ],
-
-                                            //////////////////////////////////////////////////////////////////////////////////
-                                         'cmd_holds_print' : [
+                    'cmd_holds_print' : [
                                                ['command'],
                                                function() {
                                                        try {
@@ -250,25 +263,6 @@ patron.holds.prototype = {
                                        'cmd_csv_to_printer' : [ ['command'], function() { obj.list.dump_csv_to_printer(); } ],
                                        'cmd_csv_to_file' : [ ['command'], function() { obj.list.dump_csv_to_file( { 'defaultFileName' : 'holds.txt' } ); } ],
 
-                                       'cmd_show_details' : [
-                                               ['command'],
-                                               function() {
-                                                       try {
-                                                               JSAN.use('util.window'); var win = new util.window();
-                                                               for (var i = 0; i < obj.retrieve_ids.length; i++) {
-                                                                       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-                                                                       win.open(
-                                                                               xulG.url_prefix(urls.XUL_HOLD_DETAILS), // + '?ahr_id=' + obj.retrieve_ids[i].id,
-                                                                               'hold_notices_' + obj.retrieve_ids[i].id,
-                                                                               'chrome,resizable',
-                                                                               { 'ahr_id' : obj.retrieve_ids[i].id }
-                                                                       );
-                                                               }
-                                                       } catch(E) {
-                                                               obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.holds.show_notifications.error_rendering_notifs'),E);
-                                                       }
-                                               }
-                                       ],
                                        'cmd_holds_edit_selection_depth' : [
                                                ['command'],
                                                function() {
@@ -1034,6 +1028,20 @@ patron.holds.prototype = {
                 obj.controller.view.cmd_show_catalog.setAttribute('disabled','true');
             }, 0
         );
+
+        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+        JSAN.use('util.browser');
+        obj.browser = new util.browser();
+        obj.browser.init(
+            {
+                'url' : urls.XUL_HOLD_DETAILS,
+                'push_xulG' : true,
+                'alt_print' : false,
+                'browser_id' : 'hold_detail_frame',
+                'passthru_content_params' : xulG,
+            }
+        );
+
        },
 
     'determine_hold_interface_type' : function() {
index 43cf354..45e603a 100644 (file)
@@ -20,7 +20,6 @@
        <command id="cmd_holds_print" />
        <command id="cmd_show_catalog" />
        <command id="cmd_retrieve_patron" />
-       <command id="cmd_show_details" />
        <command id="cmd_holds_edit_pickup_lib" />
        <command id="cmd_holds_edit_phone_notify" />
        <command id="cmd_holds_edit_email_notify" />
@@ -34,6 +33,7 @@
        <command id="cmd_holds_cancel" />
        <command id="cmd_search_opac" />
        <command id="save_columns" />
+       <command id="cmd_alt_view" />
     </commandset>
 
     <popupset id="holds_popupset">
@@ -44,7 +44,6 @@
            <menuitem command="sel_patron" label="&staff.circ.holds.show_last_few_circulations;" accesskey="&staff.circ.holds.show_last_few_circulations.accesskey;"/>
            <menuseparator />
            <menuitem label="&staff.circ.holds.retrieve_patron;" command="cmd_retrieve_patron" accesskey="&staff.circ.holds.retrieve_patron.accesskey;"/>
-           <menuitem label="&staff.circ.holds.show_details;" command="cmd_show_details" accesskey="&staff.circ.holds.show_details.accesskey;" />
            <menuseparator />
            <menuitem label="&staff.circ.holds.edit_pickup_library;" command="cmd_holds_edit_pickup_lib" accesskey="&staff.circ.holds.edit_pickup_library.accesskey;"/>
            <menuitem label="&staff.circ.holds.edit_phone_notification;" command="cmd_holds_edit_phone_notify" accesskey="&staff.circ.holds.edit_phone_notification.accesskey;"/>
            <vbox flex="0">
                <hbox id="holds_top_ui" />
            </vbox>
-           <tree id="holds_list" flex="1" enableColumnDrag="true" context="holds_actions"/>
+        <deck id="deck" flex="1">
+            <tree id="holds_list" flex="1" enableColumnDrag="true" context="holds_actions"/>
+            <browser id="hold_detail_frame" src="" flex="1" />
+        </deck>
            <vbox flex="0">
                <hbox id="holds_bottom_ui" />
            </vbox>
         <vbox id="lib_menu_placeholder" hidden="true"/>
         <button id="fetch_more" label="&staff.patron.holds_overlay.fetch_more.label;" accesskey="&staff.patron.holds_overlay.fetch_more.accesskey;" hidden="true"/>
        <spacer flex="1"/>
+        <button id="alt_view_btn" command="cmd_alt_view" />
         <menubar>
             <menu label="&staff.patron.holds_overlay.actions_for_holds.label;" accesskey="&staff.patron.holds_overlay.actions_for_holds.accesskey;">
                 <menupopup>
                     <menuitem command="sel_patron" label="&staff.circ.holds.show_last_few_circulations;" accesskey="&staff.circ.holds.show_last_few_circulations.accesskey;"/>
                     <menuseparator />
                     <menuitem label="&staff.circ.holds.retrieve_patron;" command="cmd_retrieve_patron" accesskey="&staff.circ.holds.retrieve_patron.accesskey;"/>
-                    <menuitem label="&staff.circ.holds.show_details;" command="cmd_show_details" accesskey="&staff.circ.holds.show_details.accesskey;" />
                     <menuseparator />
                     <menuitem label="&staff.circ.holds.edit_pickup_library;" command="cmd_holds_edit_pickup_lib" accesskey="&staff.circ.holds.edit_pickup_library.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_phone_notification;" command="cmd_holds_edit_phone_notify" accesskey="&staff.circ.holds.edit_phone_notification.accesskey;"/>