paging interface for one of the hold pull lists, and lib filter infrastructure for...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 4 Nov 2007 05:49:13 +0000 (05:49 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 4 Nov 2007 05:49:13 +0000 (05:49 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@7981 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/admin/hold_pull_list.xul
Open-ILS/xul/staff_client/server/admin/hold_pull_list_overlay.xul [deleted file]
Open-ILS/xul/staff_client/server/patron/holds.js
Open-ILS/xul/staff_client/server/patron/holds_overlay.xul

index 99e565f..900408e 100644 (file)
@@ -18,7 +18,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- OVERLAYS -->
 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
-<?xul-overlay href="/xul/server/admin/hold_pull_list_overlay.xul"?>
+<?xul-overlay href="/xul/server/patron/holds_overlay.xul"?>
 
 <window id="holds_win" 
        onload="try { my_init(); font_helper(); } catch(E) { alert(E); }"
@@ -44,7 +44,7 @@
                                JSAN.use('patron.holds'); g.holds = new patron.holds();
                                g.holds.init( 
                                        { 
-                                               'tree_id' : 'holds_pull_list',
+                                               'tree_id' : 'holds_list',
                                                'patron_id' : xul_param('patron_id'),
                                                'docid' : xul_param('docid'),
                                                'shelf' : xul_param('shelf'),
diff --git a/Open-ILS/xul/staff_client/server/admin/hold_pull_list_overlay.xul b/Open-ILS/xul/staff_client/server/admin/hold_pull_list_overlay.xul
deleted file mode 100644 (file)
index 7c167bc..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE overlay PUBLIC "" ""[
-       <!--#include virtual="/opac/locale/en-US/lang.dtd"-->
-]>
-<overlay id="holds_overlay" 
-       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<script>dump('loading holds_overlay.xul\n');</script>
-
-<commandset id="holds_cmds" />
-
-<popupset id="holds_popupset">
-       <popup id="holds_actions" position="at_pointer"> 
-               <menuitem command="sel_clip" label="Copy to Clipboard" accesskey="C" />
-               <menuitem label="Show in Catalog" command="cmd_show_catalog" accesskey="S"/>
-               <menuitem command="sel_copy_details" label="Show Item Details" accesskey="I" />
-               <menuitem command="sel_patron" label="Show Last Few Circulations" accesskey="L"/>
-               <menuseparator />
-               <menuitem label="Retrieve Patron" command="cmd_retrieve_patron" accesskey="P"/>
-               <menuitem label="Show Notices" command="cmd_show_notifications" accesskey="N" />
-               <menuseparator />
-               <menuitem label="Edit Pickup Library" command="cmd_holds_edit_pickup_lib" accesskey="L"/>
-               <menuitem label="Edit Phone Notification" command="cmd_holds_edit_phone_notify" accesskey="P"/>
-               <menuitem label="Toggle Email Notification" command="cmd_holds_edit_email_notify" accesskey="E"/>
-               <!--
-               <menuitem label="Edit Hold Range" command="cmd_holds_edit_selection_depth" accesskey="R"/>
-               <menuitem label="Edit Hold Focus" command="cmd_broken" accesskey="F"/>
-               -->
-               <menuseparator />
-               <menuitem command="sel_mark_items_damaged" label="Mark Item Damaged" accesskey="D"/>
-               <menuitem command="sel_mark_items_missing" label="Mark Item Missing" accesskey="M"/>
-               <menuitem label="Find Another Target" command="cmd_holds_retarget" accesskey="T"/>
-               <menuitem label="Cancel Hold" command="cmd_holds_cancel" accesskey="C"/>
-               <menuseparator />
-               <menuitem command="save_columns" label="Save Columns"/>
-       </popup>
-</popupset>
-
-
-<box id="holds_main" flex="1" orient="vertical" class="my_overflow">
-       <vbox id="cmvb1" flex="1"/>
-</box>
-
-<vbox id="cmvb1" flex="1">
-       <groupbox id="cmgb1" flex="1" orient="vertical">
-               <caption label="&staff.patron_navbar.holds;" />
-               <vbox flex="0">
-                       <hbox id="holds_top_ui" />
-               </vbox>
-               <tree id="holds_pull_list" flex="1" enableColumnDrag="true" context="holds_actions"/>
-               <vbox flex="0">
-                       <hbox id="holds_bottom_ui" />
-               </vbox>
-       </groupbox>
-</vbox>
-
-<hbox id="holds_top_ui" flex="1">
-       <vbox id="menu_placeholder" />
-       <spacer flex="1"/>
-       <menubar>
-               <menu label="Actions for Selected Holds" accesskey="S">
-                       <menupopup>
-                               <menuitem command="sel_clip" label="Copy to Clipboard" accesskey="C" />
-                               <menuitem label="Show in Catalog" command="cmd_show_catalog"  accesskey="S"/>
-                               <menuitem command="sel_copy_details" label="Show Item Details" accesskey="I" />
-                               <menuitem command="sel_patron" label="Show Last Few Circulations" accesskey="L"/>
-                               <menuseparator />
-                               <menuitem label="Retrieve Patron" command="cmd_retrieve_patron" accesskey="P"/>
-                               <menuitem label="Show Notices" command="cmd_show_notifications" accesskey="N" />
-                               <menuseparator />
-                               <menuitem label="Edit Pickup Library" command="cmd_holds_edit_pickup_lib" accesskey="L"/>
-                               <menuitem label="Edit Phone Notification" command="cmd_holds_edit_phone_notify" accesskey="P"/>
-                               <menuitem label="Toggle Email Notification" command="cmd_holds_edit_email_notify" accesskey="E" />
-                               <!--
-                               <menuitem label="Edit Hold Range" command="cmd_holds_edit_selection_depth" accesskey="R" />
-                               <menuitem label="Edit Hold Focus" command="cmd_broken" accesskey="F" />
-                               -->
-                               <menuseparator />
-                               <menuitem command="sel_mark_items_damaged" label="Mark Item Damaged" accesskey="D"/>
-                               <menuitem command="sel_mark_items_missing" label="Mark Item Missing" accesskey="M"/>
-                               <menuitem label="Find Another Target" command="cmd_holds_retarget" accesskey="T"/>
-                               <menuitem label="Cancel Hold" command="cmd_holds_cancel"  accesskey="C"/>
-                               <menuseparator />
-                               <menuitem command="save_columns" label="Save Columns"/>
-                       </menupopup>
-               </menu>
-       </menubar>
-</hbox>
-
-<hbox id="holds_bottom_ui" flex="1">
-       <spacer flex="1"/>
-       <button id="holds_print" label="Print" command="cmd_holds_print" accesskey="P" />
-</hbox>
-
-</overlay>
index 382d11d..89a888a 100644 (file)
@@ -12,7 +12,12 @@ patron.holds.prototype = {
 
     'hold_interface_type' : null,
 
-       'foreign_shelf' : null,
+    'pull_from_shelf_interface' : {
+        'default' : { 'limit' : 50, 'offset' : 0 },
+        'current' : { 'limit' : 50, 'offset' : 0 }
+    },
+
+       'filter_lib' : null,
 
        'retrieve_ids' : [],
 
@@ -92,129 +97,6 @@ patron.holds.prototype = {
                                                                }
                                                        }
                                                );
-                                               /*
-                                               obj.network.simple_request('FM_AHR_RETRIEVE', [ ses(), row.my.hold_id ],
-                                                       function(ahr_req) {
-                                                               try {
-                                                                       var ahr_robj = ahr_req.getResultObject();
-                                                                       if (typeof ahr_robj.ilsevent != 'undefined') throw(ahr_robj);
-                                                                       row.my.ahr = ahr_robj[0];
-                                                                       obj.holds_map[ row.my.ahr.id() ] = row.my.ahr;
-                                                                       params.row_node.setAttribute('retrieve_id', 
-                                                                               js2JSON({
-                                                                                       'copy_id':row.my.ahr.current_copy(),
-                                                                                       'id':row.my.ahr.id(),
-                                                                                       'type':row.my.ahr.hold_type(),
-                                                                                       'target':row.my.ahr.target(),
-                                                                                       'usr':row.my.ahr.usr(),
-                                                                               })
-                                                                       );
-
-                                                                       obj.network.simple_request('FM_AHR_STATUS',[ ses(), row.my.ahr.id() ],
-                                                                               function(status_req) {
-                                                                                       try {
-                                                                                               var status_robj = status_req.getResultObject();
-                                                                                               row.my.status = status_robj;
-                                                                                               switch(row.my.ahr.hold_type()) {
-                                                                                                       case 'M' :
-                                                                                                               obj.network.request(
-                                                                                                                       api.MODS_SLIM_METARECORD_RETRIEVE.app,
-                                                                                                                       api.MODS_SLIM_METARECORD_RETRIEVE.method,
-                                                                                                                       [ row.my.ahr.target() ],
-                                                                                                                       function(mvr_req) {
-                                                                                                                               row.my.mvr = mvr_req.getResultObject();
-                                                                                                                               if ( row.my.ahr.current_copy() && ! row.my.acp) {
-                                                                                                                                       obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
-                                                                                                                                               function(acp_req) {
-                                                                                                                                                       row.my.acp = acp_req.getResultObject();
-                                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                                               }
-                                                                                                                                       );
-                                                                                                                               } else {
-                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                               }
-                                                                                                                       }
-                                                                                                               );
-                                                                                                       break;
-                                                                                                       case 'T' :
-                                                                                                               obj.network.request(
-                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.app,
-                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.method,
-                                                                                                                       [ row.my.ahr.target() ],
-                                                                                                                       function(mvr_req) {
-                                                                                                                               row.my.mvr = mvr_req.getResultObject();
-                                                                                                                               if ( row.my.ahr.current_copy() && ! row.my.acp) {
-                                                                                                                                       obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
-                                                                                                                                               function(acp_req) {
-                                                                                                                                                       row.my.acp = acp_req.getResultObject();
-                                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                                               }
-                                                                                                                                       );
-                                                                                                                               } else {
-                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                               }
-       
-                                                                                                                       }
-                                                                                                               );
-                                                                                                       break;
-                                                                                                       case 'V' :
-                                                                                                               row.my.acn = obj.network.simple_request( 'FM_ACN_RETRIEVE', [ row.my.ahr.target() ],
-                                                                                                                       function(acn_req) {
-                                                                                                                               row.my.acn = acn_req.getResultObject();
-                                                                                                                               obj.network.request(
-                                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.app,
-                                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.method,
-                                                                                                                                       [ row.my.acn.record() ],
-                                                                                                                                       function(mvr_req) {
-                                                                                                                                               try { row.my.mvr = mvr_req.getResultObject(); } catch(E) {}
-                                                                                                                                               if ( row.my.ahr.current_copy() && ! row.my.acp) {
-                                                                                                                                                       obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
-                                                                                                                                                               function(acp_req) {
-                                                                                                                                                                       row.my.acp = acp_req.getResultObject();
-                                                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                                                               }
-                                                                                                                                                       );
-                                                                                                                                               } else {
-                                                                                                                                                       if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                                               }
-                                                                                                                                       }
-                                                                                                                               );
-                                                                                                                       }
-                                                                                                               );
-                                                                                                       break;
-                                                                                                       case 'C' :
-                                                                                                               obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.target() ],
-                                                                                                                       function(acp_req) {
-                                                                                                                               row.my.acp = acp_req.getResultObject();
-                                                                                                                               obj.network.simple_request( 'FM_ACN_RETRIEVE', [ typeof row.my.acp.call_number() == 'object' ? row.my.acp.call_number().id() : row.my.acp.call_number() ],
-                                                                                                                                       function(acn_req) {
-                                                                                                                                               row.my.acn = acn_req.getResultObject();
-                                                                                                                                               obj.network.request(
-                                                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.app,
-                                                                                                                                                       api.MODS_SLIM_RECORD_RETRIEVE.method,
-                                                                                                                                                       [ row.my.acn.record() ],
-                                                                                                                                                       function(mvr_req) {
-                                                                                                                                                               try { row.my.mvr = mvr_req.getResultObject(); } catch(E) {}
-                                                                                                                                                               if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-                                                                                                                                                       }
-                                                                                                                                               );
-                                                                                                                                       }
-                                                                                                                               );
-                                                                                                                       }
-                                                                                                               );
-                                                                                                       break;
-                                                                                               }
-                                                                                       } catch(E) {
-                                                                                               obj.error.standard_unexpected_error_alert('Error retrieving status for hold #' + row.my.hold_id, E);
-                                                                                       }
-                                                                               }
-                                                                       );
-                                                               } catch(E) {
-                                                                       obj.error.standard_unexpected_error_alert('Error retrieving hold #' + row.my.hold_id, E);
-                                                               }
-                                                       }
-                                               );
-                                               */
                                        } catch(E) {
                                                obj.error.sdump('D_ERROR','retrieve_row: ' + E );
                                        }
@@ -438,7 +320,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -496,7 +378,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -538,7 +420,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -579,7 +461,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -624,7 +506,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -669,7 +551,7 @@ patron.holds.prototype = {
                                         var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
                                         if (typeof robj.ilsevent != 'undefined') throw(robj);
                                     }
-                                    obj.retrieve(true);
+                                                                       obj.clear_and_retrieve(true);
                                 }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
@@ -689,7 +571,7 @@ patron.holds.prototype = {
                                                                                var robj = obj.network.simple_request('FM_AHR_RESET',[ ses(), obj.retrieve_ids[i].id]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
-                                                                       obj.retrieve();
+                                                                       obj.clear_and_retrieve();
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely reset.',E);
@@ -739,7 +621,7 @@ patron.holds.prototype = {
                                             }
                                         }
                                     }
-                                                                       obj.retrieve();
+                                                                       obj.clear_and_retrieve();
                                                                }
                                                        } catch(E) {
                                                                obj.error.standard_unexpected_error_alert('Holds not likely cancelled.',E);
@@ -816,23 +698,75 @@ patron.holds.prototype = {
                                                        }
                                                }
                                        ],
+                    'fetch_more' : [
+                        ['command'],
+                        function() {
+                            obj.pull_from_shelf_interface.current.offset += obj.pull_from_shelf_interface.current.limit;
+                            obj.retrieve();
+                        }
+                    ],
+                    'lib_filter_checkbox' : [
+                        ['command'],
+                        function(ev) {
+                            var x_lib_type_menu = document.getElementById('lib_type_menu');
+                            if (x_lib_type_menu) x_lib_type_menu.disabled = ! ev.target.checked;
+                            if (obj.controller.view.lib_menu) obj.controller.view.lib_menu.disabled = ! ev.target.checked;
+                            obj.clear_and_retrieve();
+                            ev.target.setAttribute('checked',ev.target.checked);
+                        }
+                    ]
                                }
                        }
                );
         
         obj.determine_hold_interface_type();
-               obj.controller.render();
-               obj.retrieve();
-
-               obj.controller.view.cmd_retrieve_patron.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_edit_pickup_lib.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_edit_phone_notify.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_edit_email_notify.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_edit_selection_depth.setAttribute('disabled','true');
-               obj.controller.view.cmd_show_notifications.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_retarget.setAttribute('disabled','true');
-               obj.controller.view.cmd_holds_cancel.setAttribute('disabled','true');
-               obj.controller.view.cmd_show_catalog.setAttribute('disabled','true');
+        var x_fetch_more = document.getElementById('fetch_more');
+        var x_lib_type_menu = document.getElementById('lib_type_menu');
+        var x_lib_menu_placeholder = document.getElementById('lib_menu_placeholder');
+        var x_lib_filter_checkbox = document.getElementById('lib_filter_checkbox');
+        switch(obj.hold_interface_type) {
+            case 'shelf':
+                obj.render_lib_menus({'pickup_lib':true});
+                if (x_lib_type_menu) x_lib_type_menu.hidden = false;
+                if (x_lib_menu_placeholder) x_lib_menu_placeholder.hidden = false;
+            break;
+            case 'pull' :
+                if (x_fetch_more) x_fetch_more.hidden = false;
+                if (x_lib_type_menu) x_lib_type_menu.hidden = true;
+                if (x_lib_menu_placeholder) x_lib_menu_placeholder.hidden = true;
+            break;
+            case 'record' :
+                obj.render_lib_menus({'pickup_lib':true,'request_lib':true});
+                if (x_lib_filter_checkbox) x_lib_filter_checkbox.hidden = false;
+                if (x_lib_type_menu) x_lib_type_menu.hidden = false;
+                if (x_lib_menu_placeholder) x_lib_menu_placeholder.hidden = false;
+            break;
+            default:
+                if (x_fetch_more) x_fetch_more.hidden = true;
+                if (x_lib_type_menu) x_lib_type_menu.hidden = true;
+                if (x_lib_menu_placeholder) x_lib_menu_placeholder.hidden = true;
+            break;
+        }
+        setTimeout( // We do this because render_lib_menus above creates and appends a DOM node, but until this thread exits, it doesn't really happen
+            function() {
+                if (x_lib_filter_checkbox) if (!x_lib_filter_checkbox.checked) {
+                    if (x_lib_type_menu) x_lib_type_menu.disabled = true;
+                    if (obj.controller.view.lib_menu) obj.controller.view.lib_menu.disabled = true;
+                }
+                obj.controller.render();
+                obj.retrieve();
+
+                obj.controller.view.cmd_retrieve_patron.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_edit_pickup_lib.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_edit_phone_notify.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_edit_email_notify.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_edit_selection_depth.setAttribute('disabled','true');
+                obj.controller.view.cmd_show_notifications.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_retarget.setAttribute('disabled','true');
+                obj.controller.view.cmd_holds_cancel.setAttribute('disabled','true');
+                obj.controller.view.cmd_show_catalog.setAttribute('disabled','true');
+            }, 0
+        );
        },
 
     'determine_hold_interface_type' : function() {
@@ -850,10 +784,16 @@ patron.holds.prototype = {
                }
     },
 
+    'clear_and_retrieve' : function(dont_show_me_the_list_change) {
+        this.list.clear();
+        this.pull_from_shelf_interface.current.offset = this.pull_from_shelf_interface.default.offset;
+        this.retrieve(dont_show_me_the_list_change);
+    },
+
        'retrieve' : function(dont_show_me_the_list_change) {
-               var obj = this;
+               var obj = this; var holds = [];
                if (window.xulG && window.xulG.holds) {
-                       obj.holds = window.xulG.holds;
+                       holds = window.xulG.holds;
                } else {
                        var method; var params = [ ses() ];
             switch(obj.hold_interface_type) {
@@ -865,35 +805,58 @@ patron.holds.prototype = {
                 case 'record' :
                                    method = 'FM_AHR_RETRIEVE_ALL_VIA_BRE'; 
                                params.push( obj.docid ); 
+                    var x_lib_filter = document.getElementById('lib_filter_checkbox');
+                    var x_lib_type_menu = document.getElementById('lib_type_menu');
+                    if (x_lib_filter) {
+                        if (x_lib_filter.checked) {
+                            if (x_lib_type_menu && obj.controller.view.lib_menu) {
+                                var x = {};
+                                x[ x_lib_type_menu.value ] = obj.controller.view.lib_menu.value;
+                                params.push( x );
+                            } else { alert('3'); }
+                        } else { alert('2'); }
+                    } else { alert('1'); }
                                obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
                 break;
                 case 'shelf' : 
                                    method = 'FM_AHR_ID_LIST_ONSHELF_RETRIEVE';
-                    params.push( obj.foreign_shelf || obj.data.list.au[0].ws_ou() ); 
+                    params.push( obj.filter_lib || obj.data.list.au[0].ws_ou() ); 
                                obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
-                               obj.render_lib_menus({'pickup_lib':true});
                 break;
                 case 'pull' : 
                 default:
                                    method = 'FM_AHR_ID_LIST_PULL_LIST'; 
-                               params.push( 50 ); params.push( 0 );
+                               params.push( obj.pull_from_shelf_interface.current.limit ); params.push( obj.pull_from_shelf_interface.current.offset );
                                    //obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
                 break;
                        }
                        var robj = obj.network.simple_request( method, params );
                        if (typeof robj.ilsevent != 'undefined') throw(robj);
                        if (method == 'FM_AHR_RETRIEVE_ALL_VIA_BRE') {
-                               obj.holds = [];
-                               obj.holds = obj.holds.concat( robj.copy_holds );
-                               obj.holds = obj.holds.concat( robj.volume_holds );
-                               obj.holds = obj.holds.concat( robj.title_holds );
-                               obj.holds = obj.holds.sort();
+                               holds = [];
+                               holds = holds.concat( robj.copy_holds );
+                               holds = holds.concat( robj.volume_holds );
+                               holds = holds.concat( robj.title_holds );
+                               holds = holds.sort();
                        } else {
-                               obj.holds = robj;
+                               holds = robj;
                        }
                        //alert('method = ' + method + ' params = ' + js2JSON(params));
                }
 
+        var x_fetch_more = document.getElementById('fetch_more');
+        if (holds.length == 0) {
+            if (x_fetch_more) x_fetch_more.disabled = true;
+        } else {
+            if (x_fetch_more) x_fetch_more.disabled = false;
+            obj.render(holds,dont_show_me_the_list_change);
+        }
+
+    },
+
+    'render' : function(holds,dont_show_me_the_list_change) {
+        var obj = this;
+
                function list_append(hold_id) {
                        obj.list.append(
                                {
@@ -911,32 +874,23 @@ patron.holds.prototype = {
                                if (typeof obj.controller.view.lib_menu == 'undefined') {
                                        list_append(typeof hold == 'object' ? hold.id() : hold);
                                } else {
-                                       /*
-                                       var pickup_lib = hold.pickup_lib();
-                                       if (typeof pickup_lib == 'object') pickup_lib = pickup_lib.id();
-                                       if (pickup_lib == obj.controller.view.lib_menu.value) {
-                                       */
-                                               list_append(typeof hold == 'object' ? hold.id() : hold);
-                                       /*
-                                       }
-                                       */
+                                       list_append(typeof hold == 'object' ? hold.id() : hold);
                                }
                        };
                }
 
-               obj.list.clear();
+               //obj.list.clear();
 
-               //alert('obj.holds = ' + js2JSON(obj.holds));
                JSAN.use('util.exec'); var exec = new util.exec(2);
                var rows = [];
-               for (var i in obj.holds) {
-                       rows.push( gen_list_append(obj.holds[i]) );
+               for (var i in holds) {
+                       rows.push( gen_list_append(holds[i]) );
                }
                exec.chain( rows );
        
                if (!dont_show_me_the_list_change) {
                        if (window.xulG && typeof window.xulG.on_list_change == 'function') {
-                               try { window.xulG.on_list_change(obj.holds); } catch(E) { this.error.sdump('D_ERROR',E); }
+                               try { window.xulG.on_list_change(holds); } catch(E) { this.error.sdump('D_ERROR',E); }
                        }
                }
        },
@@ -948,73 +902,35 @@ patron.holds.prototype = {
 
             var x = document.getElementById('lib_type_menu');
             if (types) {
-                x.hidden = false;
                 var nodes = x.firstChild.childNodes;
                 for (var i = 0; i < nodes.length; i++) nodes[i].hidden = true;
                 for (var i in types) document.getElementById(i).hidden = false;
-            } else {
-                x.hidden = true;
             }
+            x.setAttribute('oncommand','g.holds.clear_and_retrieve()');
 
                        x = document.getElementById('lib_menu_placeholder');
-            x.hidden = types ? false : true;
-                       if (x.firstChild) return;
                        util.widgets.remove_children( x );
 
-                       var ml = util.widgets.make_menulist( 
-                               util.functional.map_list( 
-                                       obj.data.list.my_aou.concat(
-                                               util.functional.filter_list(
-                                                       util.fm_utils.find_ou(
-                                                               obj.data.tree.aou,
-                                                               obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ].parent_ou()
-                                                       ).children(),
-                                                       function(o) {
-                                                               return o.id() != obj.data.list.au[0].ws_ou();
-                                                       }
-                                               )
-                                       ),
-                                       function(o) { return [ 
-                                               o.shortname(), 
-                                               o.id(), 
-                                               ( ! get_bool( obj.data.hash.aout[ o.ou_type() ].can_have_users() ) ),
-                                               ( obj.data.hash.aout[ o.ou_type() ].depth() ),
-                                       ]; }
-                               ).sort(
-                                       function( a, b ) {
-                                               var A = obj.data.hash.aou[ a[1] ];
-                                               var B = obj.data.hash.aou[ b[1] ];
-                                               var X = obj.data.hash.aout[ A.ou_type() ];
-                                               var Y = obj.data.hash.aout[ B.ou_type() ];
-                                               if (X.depth() < Y.depth()) return -1;
-                                               if (X.depth() > Y.depth()) return 1;
-                                               if (A.shortname() < B.shortname()) return -1;
-                                               if (A.shortname() > B.shortname()) return 1;
-                                               return 0;
-                                       }
-                               ),
-                               obj.data.list.au[0].ws_ou()
-                       );
-                       x.appendChild( ml );
-                       ml.addEventListener(
-                               'command',
-                               function(ev) {
-                                       /*
-                                       obj.list.on_all_fleshed = function() {
-                                               obj.list.clear();
-                                               obj.foreign_shelf = ev.target.value;
-                                               obj.retrieve();
-                                               setTimeout( function() { obj.list.on_all_fleshed = null; }, 0);
-                                       };
-                                       obj.list.full_retrieve();
-                                       */
-                                       obj.list.clear();
-                                       obj.foreign_shelf = ev.target.value;
-                                       obj.retrieve();
-                               },
-                               false
-                       );
-                       obj.controller.view.lib_menu = ml;
+            JSAN.use('util.file');
+                       var file = new util.file('offline_ou_list'); 
+                       if (file._file.exists()) {
+                               var list_data = file.get_object(); file.close();
+                               var ml = util.widgets.make_menulist( list_data[0], obj.data.list.au[0].ws_ou() );
+                ml.setAttribute('id','lib_menu');
+                x.appendChild( ml );
+                       ml.addEventListener(
+                               'command',
+                               function(ev) {
+                                       obj.filter_lib = ev.target.value;
+                                       obj.clear_and_retrieve();
+                               },
+                               false
+                       );
+                       obj.controller.view.lib_menu = ml;
+                       } else {
+                               throw('Missing library list.\n');
+                       }
+
                } catch(E) {
                        this.error.standard_unexpected_error_alert('rendering lib menu',E);
                }
index 962805b..3911ffe 100644 (file)
 </vbox>
 
 <hbox id="holds_top_ui" flex="1">
-       <menulist id="lib_type_menu">
+    <checkbox id="lib_filter_checkbox" persist="checked" checked="true" hidden="true" label="Filter:"/>
+    <menulist id="lib_type_menu" hidden="true" persist="value">
         <menupopup>
-            <menuitem id="pickup_lib" label="Pickup Library"/>
-            <menuitem id="request_lib" label="Requesting Library"/>
-            <menuitem id="circ_lib" label="Item Circulating Library"/>
-            <menuitem id="owning_lib" label="Volume Owning Library"/>
-            <menuitem id="home_lib" label="Patron Home Library foo"/>
+            <menuitem id="pickup_lib" value="pickup_lib" label="Pickup Library"/>
+            <menuitem id="request_lib" value="request_lib" label="Requesting Library"/>
+            <menuitem id="fulfillment_lib" value="fulfillment_lib" label="Fulfilling Library"/>
+            <menuitem id="circ_lib" value="circ_lib" label="Item Circulating Library"/>
+            <menuitem id="owning_lib" value="owning_lib" label="Volume Owning Library"/>
+            <menuitem id="home_lib" value="home_lib" label="Patron Home Library foo"/>
         </menupopup>
     </menulist>
-       <vbox id="lib_menu_placeholder" />
+    <vbox id="lib_menu_placeholder" hidden="true"/>
+    <button id="fetch_more" label="Fetch More Holds" accesskey="M" hidden="true"/>
        <spacer flex="1"/>
-       <menubar>
-               <menu label="Actions for Selected Holds" accesskey="S">
-                       <menupopup>
-                               <menuitem command="sel_clip" label="Copy to Clipboard" accesskey="C" />
-                               <menuitem label="Show in Catalog" command="cmd_show_catalog"  accesskey="S"/>
-                               <menuitem command="sel_copy_details" label="Show Item Details" accesskey="I" />
-                               <menuitem command="sel_patron" label="Show Last Few Circulations" accesskey="L"/>
-                               <menuseparator />
-                               <menuitem label="Retrieve Patron" command="cmd_retrieve_patron" accesskey="P"/>
-                               <menuitem label="Show Notices" command="cmd_show_notifications" accesskey="N" />
-                               <menuseparator />
-                               <menuitem label="Edit Pickup Library" command="cmd_holds_edit_pickup_lib" accesskey="L"/>
-                               <menuitem label="Edit Phone Notification" command="cmd_holds_edit_phone_notify" accesskey="P"/>
-                               <menuitem label="Set Email Notification" command="cmd_holds_edit_email_notify" accesskey="E" />
-                       <menuitem label="Edit Thaw Date" command="cmd_holds_edit_thaw_date" accesskey="T"/>
-                       <menuitem label="Set Freeze" command="cmd_holds_edit_freeze" accesskey="F"/>
-                               <!--
-                               <menuitem label="Edit Hold Range" command="cmd_holds_edit_selection_depth" accesskey="R" />
-                               <menuitem label="Edit Hold Focus" command="cmd_broken" accesskey="F" />
-                               -->
-                               <menuseparator />
-                               <menuitem command="sel_mark_items_damaged" label="Mark Item Damaged" accesskey="D"/>
-                               <menuitem command="sel_mark_items_missing" label="Mark Item Missing" accesskey="M"/>
-                               <menuitem label="Find Another Target" command="cmd_holds_retarget" accesskey="T"/>
-                               <menuitem label="Cancel Hold" command="cmd_holds_cancel"  accesskey="C"/>
-                               <menuseparator />
-                               <menuitem command="save_columns" label="Save Columns"/>
-                       </menupopup>
-               </menu>
-       </menubar>
+    <menubar>
+        <menu label="Actions for Selected Holds" accesskey="S">
+            <menupopup>
+                <menuitem command="sel_clip" label="Copy to Clipboard" accesskey="C" />
+                <menuitem label="Show in Catalog" command="cmd_show_catalog"  accesskey="S"/>
+                <menuitem command="sel_copy_details" label="Show Item Details" accesskey="I" />
+                <menuitem command="sel_patron" label="Show Last Few Circulations" accesskey="L"/>
+                <menuseparator />
+                <menuitem label="Retrieve Patron" command="cmd_retrieve_patron" accesskey="P"/>
+                <menuitem label="Show Notices" command="cmd_show_notifications" accesskey="N" />
+                <menuseparator />
+                <menuitem label="Edit Pickup Library" command="cmd_holds_edit_pickup_lib" accesskey="L"/>
+                <menuitem label="Edit Phone Notification" command="cmd_holds_edit_phone_notify" accesskey="P"/>
+                <menuitem label="Set Email Notification" command="cmd_holds_edit_email_notify" accesskey="E" />
+                <menuitem label="Edit Thaw Date" command="cmd_holds_edit_thaw_date" accesskey="T"/>
+                <menuitem label="Set Freeze" command="cmd_holds_edit_freeze" accesskey="F"/>
+                <!--
+                <menuitem label="Edit Hold Range" command="cmd_holds_edit_selection_depth" accesskey="R" />
+                <menuitem label="Edit Hold Focus" command="cmd_broken" accesskey="F" />
+                -->
+                <menuseparator />
+                <menuitem command="sel_mark_items_damaged" label="Mark Item Damaged" accesskey="D"/>
+                <menuitem command="sel_mark_items_missing" label="Mark Item Missing" accesskey="M"/>
+                <menuitem label="Find Another Target" command="cmd_holds_retarget" accesskey="T"/>
+                <menuitem label="Cancel Hold" command="cmd_holds_cancel"  accesskey="C"/>
+                <menuseparator />
+                <menuitem command="save_columns" label="Save Columns"/>
+            </menupopup>
+        </menu>
+    </menubar>
 </hbox>
 
 <hbox id="holds_bottom_ui" flex="1">