simple search for record bucket interface.. uses an OPAC method that can handle autho...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 16 Mar 2008 19:16:04 +0000 (19:16 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 16 Mar 2008 19:16:04 +0000 (19:16 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@9057 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/chrome/content/main/constants.js
Open-ILS/xul/staff_client/server/cat/record_buckets.js
Open-ILS/xul/staff_client/server/cat/record_buckets.xul
Open-ILS/xul/staff_client/server/cat/record_buckets_overlay.xul
Open-ILS/xul/staff_client/server/locale/en-US/cat.properties

index d743844..dc3841f 100644 (file)
@@ -134,6 +134,7 @@ const api = {
        'FM_BRE_RETRIEVE_VIA_ID' : { 'app' : 'open-ils.cat', 'method' : 'open-ils.cat.biblio.record.metadata.retrieve', 'secure' : false },
        'FM_BRE_RETRIEVE_VIA_ID.authoritative' : { 'app' : 'open-ils.cat', 'method' : 'open-ils.cat.biblio.record.metadata.retrieve.authoritative', 'secure' : false },
        'FM_BRE_ID_SEARCH_VIA_BARCODE' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.find_by_barcode', 'secure' : false },
+    'FM_BRE_ID_SEARCH_VIA_MULTICLASS_QUERY' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.multiclass.query.staff' },
        'FM_BRE_ID_SEARCH_VIA_TCN' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.tcn', 'secure' : false },
        'FM_BRE_DELETE' : { 'app' : 'open-ils.cat', 'method' : 'open-ils.cat.biblio.record_entry.delete', 'secure' : false },
        'FM_BRN_FROM_MARCXML' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.z3950.marcxml_to_brn', 'secure' : false },
index ef1bde1..bbffe36 100644 (file)
@@ -70,6 +70,7 @@ cat.record_buckets.export_records = function(obj, output_type) {
 
 
 cat.record_buckets.prototype = {
+       'selection_list0' : [],
        'selection_list1' : [],
        'selection_list2' : [],
        'bucket_id_name_map' : {},
@@ -131,6 +132,35 @@ cat.record_buckets.prototype = {
             return row;
         }
 
+               obj.list0 = new util.list('record_query_list');
+               obj.list0.init(
+                       {
+                               'columns' : columns,
+                               'map_row_to_columns' : circ.util.std_map_row_to_columns(),
+                'retrieve_row' : retrieve_row,
+                               'on_select' : function(ev) {
+                                       try {
+                                               JSAN.use('util.functional');
+                                               var sel = obj.list0.retrieve_selection();
+                                               obj.controller.view.sel_clip1.setAttribute('disabled', sel.length < 1 ? "true" : "false");
+                                               obj.selection_list0 = util.functional.map_list(
+                                                       sel,
+                                                       function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
+                                               );
+                                               obj.error.sdump('D_TRACE','circ/record_buckets: selection list 0 = ' + js2JSON(obj.selection_list1) );
+                                               if (obj.selection_list0.length == 0) {
+                                                       obj.controller.view.cmd_add_sel_query_to_pending.setAttribute('disabled','true');
+                                               } else {
+                                                       obj.controller.view.cmd_add_sel_query_to_pending.setAttribute('disabled','false');
+                                               }
+                                       } catch(E) {
+                                               alert('FIXME: ' + E);
+                                       }
+                               },
+
+                       }
+               );
+
                obj.list1 = new util.list('pending_records_list');
                obj.list1.init(
                        {
@@ -148,9 +178,9 @@ cat.record_buckets.prototype = {
                                                );
                                                obj.error.sdump('D_TRACE','circ/record_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
                                                if (obj.selection_list1.length == 0) {
-                                                       obj.controller.view.cmd_record_buckets_sel_add.setAttribute('disabled','true');
+                                                       obj.controller.view.cmd_add_sel_pending_to_record_bucket.setAttribute('disabled','true');
                                                } else {
-                                                       obj.controller.view.cmd_record_buckets_sel_add.setAttribute('disabled','false');
+                                                       obj.controller.view.cmd_add_sel_pending_to_record_bucket.setAttribute('disabled','false');
                                                }
                                        } catch(E) {
                                                alert('FIXME: ' + E);
@@ -180,10 +210,10 @@ cat.record_buckets.prototype = {
                                                obj.error.sdump('D_TRACE','circ/record_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
                                                if (obj.selection_list2.length == 0) {
                                                        obj.controller.view.cmd_record_buckets_delete_item.setAttribute('disabled','true');
-                                                       obj.controller.view.cmd_pending_buckets_to_record_buckets.setAttribute('disabled','true');
+                                                       obj.controller.view.cmd_record_buckets_to_pending_buckets.setAttribute('disabled','true');
                                                } else {
                                                        obj.controller.view.cmd_record_buckets_delete_item.setAttribute('disabled','false');
-                                                       obj.controller.view.cmd_pending_buckets_to_record_buckets.setAttribute('disabled','false');
+                                                       obj.controller.view.cmd_record_buckets_to_pending_buckets.setAttribute('disabled','false');
                                                }
                                        } catch(E) {
                                                alert('FIXME: ' + E);
@@ -204,6 +234,10 @@ cat.record_buckets.prototype = {
                                                ['command'],
                                                function() { obj.list1.save_columns(); }
                                        ],
+                                       'save_columns0' : [
+                                               ['command'],
+                                               function() { obj.list0.save_columns(); }
+                                       ],
                                        'sel_clip2' : [
                                                ['command'],
                                                function() { obj.list2.clipboard(); }
@@ -212,6 +246,23 @@ cat.record_buckets.prototype = {
                                                ['command'],
                                                function() { obj.list1.clipboard(); }
                                        ],
+                                       'sel_clip0' : [
+                                               ['command'],
+                                               function() { obj.list0.clipboard(); }
+                                       ],
+                    'record_query_input' : [
+                        ['render'],
+                        function(ev) {
+                            ev.addEventListener('keypress',function(ev){
+                                if (ev.target.tagName != 'textbox') return;
+                                if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
+                            },false);
+                        }
+                    ],
+                    'cmd_submit_query' : [
+                        ['command'],
+                        function() { obj.submit(); }
+                    ],
                                        'record_buckets_menulist_placeholder' : [
                                                ['render'],
                                                function(e) {
@@ -310,7 +361,6 @@ cat.record_buckets.prototype = {
                                                                        var items = bucket.items() || [];
                                                                        obj.list2.clear();
                                     var x = document.getElementById('bucket_item_count');
-                                    var catStrings = document.getElementById('catStrings');    
                                     if (x && catStrings) x.setAttribute('value',catStrings.getFormattedString('cat.total_bucket_items_in_bucket',[items.length]));
                                                                        for (var i = 0; i < items.length; i++) {
                                                                                var item = obj.prep_record_for_list( 
@@ -338,7 +388,43 @@ cat.record_buckets.prototype = {
                         }
                     ],
 
-                                       'cmd_record_buckets_add' : [
+                                       'cmd_add_all_query_to_pending' : [
+                                               ['command'],
+                                               function() {
+                                               obj.list0.select_all();
+                                                       for (var i = 0; i < obj.selection_list0.length; i++) {
+                                                               var docid = obj.selection_list0[i].docid;
+                                                               try {
+                                                                       var item = obj.prep_record_for_list( docid );
+                                                                       if (!item) continue;
+                                                                       obj.list1.append( item );
+                                    obj.record_ids.push( docid );
+                                                               } catch(E) {
+                                                                       alert( js2JSON(E) );
+                                                               }
+                                                       }
+                                               }
+                                       ],
+
+                                       'cmd_add_sel_query_to_pending' : [
+                                               ['command'],
+                                               function() {
+                                                       for (var i = 0; i < obj.selection_list0.length; i++) {
+                                                               var docid = obj.selection_list0[i].docid;
+                                                               try {
+                                                                       var item = obj.prep_record_for_list( docid );
+                                                                       if (!item) continue;
+                                                                       obj.list1.append( item );
+                                    obj.record_ids.push( docid );
+                                                               } catch(E) {
+                                                                       alert( js2JSON(E) );
+                                                               }
+                                                       }
+                                               }
+                                       ],
+
+
+                                       'cmd_add_all_pending_to_record_bucket' : [
                                                ['command'],
                                                function() {
                                                        var bucket_id = obj.controller.view.bucket_menulist.value;
@@ -364,7 +450,7 @@ cat.record_buckets.prototype = {
                                                        }
                                                }
                                        ],
-                                       'cmd_record_buckets_sel_add' : [
+                                       'cmd_add_sel_pending_to_record_bucket' : [
                                                ['command'],
                                                function() {                                                        
                                                        var bucket_id = obj.controller.view.bucket_menulist.value;
@@ -392,7 +478,7 @@ cat.record_buckets.prototype = {
 
                                                }
                                        ],
-                                       'cmd_pending_buckets_to_record_buckets' : [
+                                       'cmd_record_buckets_to_pending_buckets' : [
                                                ['command'],
                                                function() {                                                        
                                                        for (var i = 0; i < obj.selection_list2.length; i++) {
@@ -502,10 +588,13 @@ cat.record_buckets.prototype = {
                                                }
                                        ],
                                        
+                                       'cmd_record_query_csv_to_clipboard' : [ ['command'], function() { obj.list0.dump_csv_to_clipboard(); } ], 
                                        'cmd_pending_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list1.dump_csv_to_clipboard(); } ], 
                                        'cmd_record_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list2.dump_csv_to_clipboard(); } ],
+                    'cmd_record_query_csv_to_printer' : [ ['command'], function() { obj.list0.dump_csv_to_printer(); } ],
                     'cmd_pending_buckets_csv_to_printer' : [ ['command'], function() { obj.list1.dump_csv_to_printer(); } ],
                     'cmd_record_buckets_csv_printer' : [ ['command'], function() { obj.list2.dump_csv_to_printer(); } ], 
+                    'cmd_record_query_csv_to_file' : [ ['command'], function() { obj.list0.dump_csv_to_file( { 'defaultFileName' : 'pending_records.txt' } ); } ],
                     'cmd_pending_buckets_csv_to_file' : [ ['command'], function() { obj.list1.dump_csv_to_file( { 'defaultFileName' : 'pending_records.txt' } ); } ],
                     'cmd_record_buckets_csv_file' : [ ['command'], function() { obj.list2.dump_csv_to_file( { 'defaultFileName' : 'bucket_records.txt' } ); } ], 
 
@@ -740,6 +829,48 @@ cat.record_buckets.prototype = {
                }
        },
 
+    'submit' : function() {
+        try {
+            var obj = this;
+            obj.list0.clear();
+            var x = document.getElementById('record_query_input'); 
+            if (x.value == '') return;
+            var y = document.getElementById('query_status');
+            x.disabled = true;
+            if (y) y.value = 'Searching...';
+            obj.network.simple_request(
+                'FM_BRE_ID_SEARCH_VIA_MULTICLASS_QUERY',
+                [ {}, x.value, 1 ],
+                function(req) {
+                    try {
+                        var resp = req.getResultObject();
+                        if (y) y.value = catStrings.getFormattedString('cat.results_returned',[resp.count]);
+                        x.disabled = false;
+                        if (resp.count > 0) {
+                            JSAN.use('util.exec'); var exec = new util.exec();
+                            var funcs = [];
+                            for (var i = 0; i < resp.ids.length; i++) {
+                                funcs.push(
+                                    function(b){
+                                        return function() {
+                                            obj.list0.append(obj.prep_record_for_list(b));
+                                        };
+                                    }(resp.ids[i][0])
+                                );
+                            }
+                            exec.chain( funcs ); 
+                        }
+                        obj.controller.view.record_query_input.focus();
+                    } catch(E) {
+                        obj.error.standard_unexpected_error_alert('submit_query_callback',E);
+                    }
+                }
+            );
+        } catch(E) {
+            this.error.standard_unexpected_error_alert('submit_query',E);
+        }
+    },
+
        'prep_record_for_list' : function(docid,bucket_item_id) {
                var obj = this;
                try {
index 65a4744..6779bb0 100644 (file)
@@ -32,6 +32,8 @@
        <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
        <script>
        <![CDATA[
+        var catStrings;
+
                function my_init() {
                        try {
                                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
@@ -39,6 +41,8 @@
                                /* ugly hack so we don't have to upgrade the chrome for quick buckets */
                                if (typeof xulG == 'undefined') location.href = String(location.href).replace(/record_buckets.xul/,'record_buckets_quick.xul');
 
+                catStrings = document.getElementById('catStrings');    
+
                 if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
                                JSAN.errorLevel = "die"; // none, warn, or die
                                JSAN.addRepository('/xul/server/');
     <messagecatalog id="catStrings" src="/xul/server/locale/<!--#echo var='locale' -->/cat.properties"/>
 
        <commandset id="record_buckets_cmds">
+               <command id="sel_clip0" disabled="true"/>
                <command id="sel_clip1" disabled="true"/>
                <command id="sel_clip2" disabled="true"/>
+               <command id="save_columns0" />
                <command id="save_columns1" />
                <command id="save_columns2" />
 
+               <command id="cmd_record_query_csv_to_printer" />
+               <command id="cmd_record_query_csv_to_clipboard" />
+               <command id="cmd_record_query_csv_to_file" />
+
                <command id="cmd_pending_buckets_csv_to_printer" />
                <command id="cmd_pending_buckets_csv_to_clipboard" />
                <command id="cmd_pending_buckets_csv_to_file" />
                <command id="cmd_record_buckets_refresh" disabled="true"/>
 
        <command id="cmd_record_buckets_delete_item" />
-       <command id="cmd_pending_buckets_to_record_buckets" />
+       <command id="cmd_record_buckets_to_pending_buckets" />
 
                <command id="cmd_record_buckets_csv_to_printer" />
                <command id="cmd_record_buckets_csv_to_clipboard" />
                <command id="cmd_record_buckets_csv_to_file" />
                
-        <command id="cmd_record_buckets_add" />
-        <command id="cmd_record_buckets_sel_add" />
+        <command id="cmd_add_all_query_to_pending" />
+        <command id="cmd_add_sel_query_to_pending" />
+
+        <command id="cmd_add_all_pending_to_record_bucket" />
+        <command id="cmd_add_sel_pending_to_record_bucket" />
 
                <command id="cmd_merge_records" disabled="true" />
                <command id="cmd_export_records_usmarc" />
                <command id="cmd_export_records_bre" />
                <command id="cmd_delete_records" disabled="true" />
                <command id="cmd_sel_opac" disabled="true" />
+               
+        <command id="cmd_submit_query" />
        </commandset>
 
        <box id="record_buckets_main" />
index f588cc2..3b7d536 100644 (file)
         </tabs>
         <tabpanels flex="1">
             <tabpanel id="record_query_panel">
+                <groupbox flex="1">
+                    <caption label="Record Query" />
+                    <hbox id="record_query_top_ui" />
+                    <label id="query_status"/>
+                    <tree id="record_query_list" flex="1" enableColumnDrag="true"/>
+                    <hbox id="record_query_bottom_ui" />
+                </groupbox>
             </tabpanel>
             <tabpanel id="pending_records_panel">
                 <groupbox flex="1">
     </tabbox>
 </vbox>
 
+<hbox id="record_query_top_ui">
+    <textbox id="record_query_input" flex="1"/>
+    <button command="cmd_submit_query" label="Submit" accesskey="S"/>
+</hbox>
+
+<hbox id="record_query_bottom_ui">
+       <button id="record_query_list_actions" label="List Actions" type="menu" allowevents="true">
+        <menupopup id="record_query_list_actions_popup">
+               <menuitem command="sel_clip0" label="Copy Field from selected row to Clipboard" disabled="true" />
+           <menuitem command="cmd_record_query_csv_to_printer" label="Print List CSV" />
+               <menuitem command="cmd_record_query_csv_to_clipboard" label="Copy List CSV to Clipboard" accesskey=""/>
+               <menuitem command="cmd_record_query_csv_to_file" label="Save List CSV to File" accesskey=""/>
+               <menuitem command="save_columns0" label="Save List Configuration" />
+        </menupopup>
+    </button>
+       <spacer flex="1"/>
+       <button command="cmd_add_all_query_to_pending" label="Add All to Pending Records" accesskey="" image="/xul/server/skin/media/images/right_arrow.png"/>
+       <button command="cmd_add_sel_query_to_pending" label="Add Selected to Pending Records" accesskey="" image="/xul/server/skin/media/images/right_arrow.png"/>
+</hbox>
+
 <hbox id="pending_buckets_bottom_ui">
        <button id="pending_buckets_list_actions" label="List Actions" type="menu" allowevents="true">
         <menupopup id="pending_buckets_list_actions_popup">
         </menupopup>
     </button>
        <spacer flex="1"/>
-       <button command="cmd_record_buckets_add" label="Add All to current Bucket" accesskey="A" image="/xul/server/skin/media/images/right_arrow.png"/>
-       <button command="cmd_record_buckets_sel_add" label="Add Selected to current Bucket" accesskey="" image="/xul/server/skin/media/images/right_arrow.png"/>
+       <button command="cmd_add_all_pending_to_record_bucket" label="Add All to current Bucket" accesskey="A" image="/xul/server/skin/media/images/right_arrow.png"/>
+       <button command="cmd_add_sel_pending_to_record_bucket" label="Add Selected to current Bucket" accesskey="" image="/xul/server/skin/media/images/right_arrow.png"/>
 </hbox>
 
 <hbox id="record_buckets_top_ui">
        <button command="cmd_record_buckets_delete_item" label="Remove Selected from Bucket" disabled="true" image="/xul/server/skin/media/images/icon_delete.gif"/>
-       <button command="cmd_pending_buckets_to_record_buckets" label="Add Selected to Pending Records" disabled="true" image="/xul/server/skin/media/images/left_arrow.png"/>
+       <button command="cmd_record_buckets_to_pending_buckets" label="Add Selected to Pending Records" disabled="true" image="/xul/server/skin/media/images/left_arrow.png"/>
 </hbox>
 
 <hbox id="info_box" hidden="true" style="font-size: large;">
        <spacer flex="1"/>
        <hbox style="background: grey">
                <vbox><spacer flex="1"/><label value="Batch:" style="font-weight: bold"/><spacer flex="1"/></vbox>
-               <button command="cmd_sel_opac" label="Show All in Catalog" accesskey="S"/>
+               <button command="cmd_sel_opac" label="Show All in Catalog" accesskey=""/>
                <button command="cmd_delete_records" label="Delete All Records"/>
                <button command="cmd_merge_records" label="Merge All Records"/>
                <button id="record_buckets_export_records" label="Export All Records" type="menu" allowevents="true" disabled="true">
index 21e0150..7a12bdb 100644 (file)
@@ -2,3 +2,4 @@ cat.barcode_for_item=The barcode for the item is %1$s
 cat.batch_operation_failed=The whole batch operation failed. %1$s
 cat.copy_buckets.tab=Copy Buckets
 cat.total_bucket_items_in_bucket=Contains %1$s bucket items
+cat.results_returned=Returning %1$s hits