barcode scan for Copy Buckets. Also want to do a 'bucket mode' for Item Status,...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 11 Feb 2009 21:41:26 +0000 (21:41 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 11 Feb 2009 21:41:26 +0000 (21:41 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/staff-client-experiment@12155 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/cat/copy_buckets.js
Open-ILS/xul/staff_client/server/cat/copy_buckets.xul
Open-ILS/xul/staff_client/server/cat/copy_buckets_overlay.xul

index f7f7a62..df99a44 100644 (file)
@@ -14,6 +14,7 @@ cat.copy_buckets.prototype = {
        'selection_list1' : [],
        'selection_list2' : [],
        'bucket_id_name_map' : {},
+    'copy_hash' : {},
 
        'render_pending_copies' : function() {
                var obj = this;
@@ -47,24 +48,27 @@ cat.copy_buckets.prototype = {
         function retrieve_row(params) {
             var row = params.row;
             try {
-                obj.network.simple_request('FM_ACP_DETAILS', [ ses(), row.my.copy_id ],
-                    function(blob_req) {
-                        try {
-                            var blob = blob_req.getResultObject();
-                            if (typeof blob.ilsevent != 'undefined') throw(blob);
-                            row.my.acp = blob.copy;
-                            row.my.mvr = blob.mvr;
-                            row.my.acn = blob.volume;
-                            row.my.ahr = blob.hold;
-                            row.my.circ = blob.circ;
-                            params.row_node.setAttribute('retrieve_id', js2JSON( [ blob.copy.id(), blob.copy.barcode(), row.my.bucket_item_id ] ));
-                            if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
-
-                        } catch(E) {
-                            obj.error.standard_unexpected_error_alert($('catStrings').getFormattedString('staff.cat.copy_buckets.retrieve_row.error', [row.my.acp_id]), E);
-                        }
+                function handle_details(blob_req) {
+                    try {
+                        var blob = blob_req.getResultObject();
+                        if (typeof blob.ilsevent != 'undefined') throw(blob);
+                        row.my.acp = blob.copy;
+                        row.my.mvr = blob.mvr;
+                        row.my.acn = blob.volume;
+                        row.my.ahr = blob.hold;
+                        row.my.circ = blob.circ;
+                        params.row_node.setAttribute('retrieve_id', js2JSON( [ blob.copy.id(), blob.copy.barcode(), row.my.bucket_item_id ] ));
+                        if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
+
+                    } catch(E) {
+                        obj.error.standard_unexpected_error_alert($('catStrings').getFormattedString('staff.cat.copy_buckets.retrieve_row.error', [row.my.acp_id]), E);
                     }
-                );
+                }
+                if (obj.copy_hash[ row.my.copy_id ]) {
+                    handle_details( { 'getResultObject' : function() { var copy_obj = obj.copy_hash[ row.my.copy_id ]; delete obj.copy_hash[ row.my.copy_id ]; return copy_obj; } } );
+                } else {
+                    obj.network.simple_request( 'FM_ACP_DETAILS', [ ses(), row.my.copy_id ], handle_details );
+                }
             } catch(E) {
                 obj.error.sdump('D_ERROR','retrieve_row: ' + E );
             }
@@ -164,6 +168,20 @@ cat.copy_buckets.prototype = {
                             };
                         }
                     ],
+                                       'copy_bucket_barcode_entry_textbox' : [
+                                               ['keypress'],
+                                               function(ev) {
+                                                       if (ev.keyCode && ev.keyCode == 13) {
+                                                               obj.scan_barcode();
+                                                       }
+                                               }
+                                       ],
+                    'cmd_copy_bucket_submit_barcode' : [
+                        ['command'],
+                        function() {
+                            obj.scan_barcode();
+                        }
+                    ],
                                        'copy_buckets_menulist_placeholder' : [
                                                ['render'],
                                                function(e) {
@@ -261,27 +279,31 @@ cat.copy_buckets.prototype = {
                                        'copy_buckets_add' : [
                                                ['command'],
                                                function() {
-                                                       var bucket_id = obj.controller.view.bucket_menulist.value;
-                                                       if (!bucket_id) return;
-                                                       for (var i = 0; i < obj.copy_ids.length; i++) {
-                                                               var bucket_item = new ccbi();
-                                                               bucket_item.isnew('1');
-                                                               bucket_item.bucket(bucket_id);
-                                                               bucket_item.target_copy( obj.copy_ids[i] );
-                                                               try {
-                                                                       var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
-                                                                               [ ses(), 'copy', bucket_item ]);
-
-                                                                       if (typeof robj == 'object') throw robj;
-
-                                                                       var item = obj.prep_item_for_list( obj.copy_ids[i], robj );
-                                                                       if (!item) continue;
-
-                                                                       obj.list2.append( item );
-                                                               } catch(E) {
-                                                                       obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_add.error'), E);
-                                                               }
-                                                       }
+                            try {
+                                var bucket_id = obj.controller.view.bucket_menulist.value;
+                                if (!bucket_id) return;
+                                for (var i = 0; i < obj.copy_ids.length; i++) {
+                                    var bucket_item = new ccbi();
+                                    bucket_item.isnew('1');
+                                    bucket_item.bucket(bucket_id);
+                                    bucket_item.target_copy( obj.copy_ids[i] );
+                                    try {
+                                        var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
+                                            [ ses(), 'copy', bucket_item ]);
+
+                                        if (typeof robj == 'object') throw robj;
+
+                                        var item = obj.prep_item_for_list( obj.copy_ids[i], robj );
+                                        if (!item) continue;
+
+                                        obj.list2.append( item );
+                                    } catch(E) {
+                                        obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_add.error'), E);
+                                    }
+                                }
+                            } catch(E) {
+                                alert(E);
+                            }
                                                }
                                        ],
                                        'copy_buckets_sel_add' : [
@@ -593,12 +615,6 @@ cat.copy_buckets.prototype = {
                                                function() {
                                                }
                                        ],
-                                       'cmd_copy_buckets_done' : [
-                                               ['command'],
-                                               function() {
-                                                       window.close();
-                                               }
-                                       ],
                                        'cmd_export_to_copy_status' : [
                                                ['command'],
                                                function() {
@@ -632,9 +648,6 @@ cat.copy_buckets.prototype = {
                if (typeof xulG == 'undefined') {
                        obj.controller.view.cmd_export_to_copy_status.disabled = true;
                        obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
-               } else {
-                       obj.controller.view.cmd_copy_buckets_done.disabled = true;
-                       obj.controller.view.cmd_copy_buckets_done.setAttribute('disabled',true);
                }
        
        },
@@ -659,7 +672,54 @@ cat.copy_buckets.prototype = {
                }
 
        },
-       
+
+    'scan_barcode' : function() {
+        var obj = this;
+        try {
+            var barcode = obj.controller.view.copy_bucket_barcode_entry_textbox.value;
+            var copy_obj = obj.network.simple_request('FM_ACP_DETAILS_VIA_BARCODE',[ses(),barcode]);
+            if (copy_obj == null) {
+                throw(document.getElementById('circStrings').getString('staff.circ.copy_status.status.null_result'));
+            } else if (copy_obj.ilsevent) {
+                switch(Number(copy_obj.ilsevent)) {
+                    case -1: 
+                        obj.error.standard_network_error_alert(); 
+                        obj.controller.view.copy_bucket_barcode_entry_textbox.select();
+                        obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
+                        return;
+                    break;
+                    case 1502 /* ASSET_COPY_NOT_FOUND */ :
+                        obj.error.yns_alert(
+                            document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode]),
+                            document.getElementById('circStrings').getString('staff.circ.copy_status.status.not_cataloged'),
+                            document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
+                            null,
+                            null,
+                            document.getElementById('circStrings').getString('staff.circ.confirm.msg')
+                        );
+                        obj.controller.view.copy_bucket_barcode_entry_textbox.select();
+                        obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
+                        return;
+                    break;
+                    default: 
+                        throw(details); 
+                    break;
+                }
+            }
+            var item = obj.prep_item_for_list( copy_obj.copy.id() );
+            if (item) {
+                obj.copy_ids.push( copy_obj.copy.id() );
+                obj.copy_hash[ copy_obj.copy.id() ] = copy_obj;
+                obj.list1.append( item );
+            }
+            obj.controller.view.copy_bucket_barcode_entry_textbox.value = '';
+            obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
+        } catch(E) {
+            obj.controller.view.copy_bucket_barcode_entry_textbox.select();
+            obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
+            alert(E);
+        }
+    }  
 }
 
 dump('exiting cat.copy_buckets.js\n');
index a312771..a73453d 100644 (file)
@@ -70,6 +70,7 @@
                        }
                }
 
+               function default_focus() { try { setTimeout( function() { document.getElementById('copy_bucket_barcode_entry_textbox').focus(); }, 0); } catch(E) {} }
        ]]>
        </script>
 
        <messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
 
        <commandset id="copy_buckets_cmds">
-               <command id="cmd_copy_buckets_submit_barcode" />
-               <command id="cmd_copy_buckets_print" />
-               <command id="cmd_copy_buckets_export" />
-               <command id="cmd_copy_buckets_reprint" />
-               <command id="cmd_copy_buckets_done" />
+               <command id="cmd_copy_bucket_submit_barcode" />
                <command id="cmd_export_to_copy_status" />
                <command id="copy_buckets_new_bucket" />
                <command id="copy_buckets_delete_bucket" />
index ffec808..1c357d0 100644 (file)
        </groupbox>
 </vbox>
 
+<hbox id="pending_buckets_top_ui">
+       <label id="copy_bucket_scan_barcode_label" 
+               value="&staff.circ.copy_status_overlay.copy_status_scan_barcode.label;"
+               accesskey="&staff.circ.copy_status_overlay.copy_status_scan_barcode.accesskey;"
+               control="copy_bucket_barcode_entry_textbox"/>
+       <textbox id="copy_bucket_barcode_entry_textbox" context="clipboard"/>
+       <button id="copy_bucket_submit_barcode_button" 
+               label="&staff.circ.copy_status_overlay.copy_status_submit_barcode.label;"
+               accesskey="&staff.circ.copy_status_overlay.copy_status_submit_barcode.accesskey;"
+               command="cmd_copy_bucket_submit_barcode"/>
+</hbox>
+
 <hbox id="pending_buckets_bottom_ui">
     <hbox id="list_actions1"/>
        <spacer flex="1"/>