Fast single item add from within marc editor. Good for home users, but all cataloger...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 10 Mar 2009 16:46:11 +0000 (16:46 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 10 Mar 2009 16:46:11 +0000 (16:46 +0000)
existing bib records (code placement issues with JSAN and remote vs chrome, bleh :)

git-svn-id: svn://svn.open-ils.org/ILS/trunk@12485 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/chrome/content/cat/opac.js
Open-ILS/xul/staff_client/server/cat/marc_new.xul
Open-ILS/xul/staff_client/server/cat/marcedit.js
Open-ILS/xul/staff_client/server/cat/marcedit.xul
Open-ILS/xul/staff_client/server/cat/util.js
Open-ILS/xul/staff_client/server/cat/z3950.js

index 473f52f..2db2a68 100644 (file)
 <!ENTITY staff.cat.marcedit.options.label "Options">
 <!ENTITY staff.cat.marcedit.stackSubfields.label "Stack subfields">
 <!ENTITY staff.cat.marcedit.stackSubfields.accesskey "s">
+<!ENTITY staff.cat.marcedit.fastItemAdd.label "Fast Item Add">
+<!ENTITY staff.cat.marcedit.fastItemAdd.accesskey "A">
+<!ENTITY staff.cat.marcedit.fastItemAdd_callnumber.label "Call Number">
+<!ENTITY staff.cat.marcedit.fastItemAdd_callnumber.accesskey "C">
+<!ENTITY staff.cat.marcedit.fastItemAdd_barcode.label "Item Barcode">
+<!ENTITY staff.cat.marcedit.fastItemAdd_barcode.accesskey "B">
 <!ENTITY staff.cat.marcedit.validate.label "Validate">
 <!ENTITY staff.cat.marcedit.validate.accesskey "V">
 <!ENTITY staff.cat.marcedit.save-button.accesskey "d">
index 7240f68..12018b0 100644 (file)
@@ -19,6 +19,9 @@ function my_init() {
                JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
                XML_HTTP_SERVER = g.data.server_unadorned;
 
+        //JSAN.addRepository('http://' + g.data.server_unadorned + '/xul/server/');
+        //JSAN._loadJSFromUrl('http://' + g.data.server_unadorned + '/xul/server/cat/util.js');
+
                JSAN.use('util.network'); g.network = new util.network();
 
                g.cgi = new CGI();
@@ -73,6 +76,15 @@ function set_marc_edit() {
        var b = {};
        var c = {
                        'record' : { 'url' : '/opac/extras/supercat/retrieve/marcxml/record/' + docid },
+            /* // FIXME - disable this until we find a good way of pulling remote JSAN libraries into chrome
+            'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+                try {
+                    JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+                } catch(E) {
+                    alert(E);
+                }
+            },
+            */
                        'save' : {
                                'label' : document.getElementById('offlineStrings').getString('cat.save_record'),
                                'func' : function (new_marcxml) {
@@ -85,6 +97,10 @@ function set_marc_edit() {
                                                        throw(r);
                                                } else {
                                                        alert(document.getElementById('offlineStrings').getString("cat.save.success"));
+                            return {
+                                'id' : r.id(),
+                                'oncomplete' : function() {}
+                            };
                                                }
                                        } catch(E) {
                                                        g.error.standard_unexpected_error_alert(document.getElementById('offlineStrings').getString("cat.save.failure"), E);
index 7f197ef..6dea6fd 100644 (file)
                                                        var url = urls.XUL_MARC_EDIT;
                                                        var params = {
                                                                'record' : { 'marc' : marc },
+                                'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+                                    try {
+                                        JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+                                    } catch(E) {
+                                        alert(E);
+                                    }
+                                },
                                                                'save' : {
                                                                        'label' : catStrings.getString('staff.cat.marc_new.create_record.label'),
                                                                        'func' : function(new_marcxml) {
                                                                                                'authtime' : ses('authtime'),
                                                                                                'opac_url' : opac_url
                                                                                        };
-                                                                                       xulG.set_tab(
-                                                                                               xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
-                                                                                               {'tab_name': catStrings.getString('staff.cat.marc_new.retrieving.label')},
-                                                                                               content_params
-                                                                                       );
+                                            return { 
+                                                'id' : robj.id(), 
+                                                'on_complete' : function() {
+                                                    try {
+                                                        xulG.set_tab(
+                                                            xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
+                                                            {'tab_name': catStrings.getString('staff.cat.marc_new.retrieving.label')},
+                                                            content_params
+                                                        );
+                                                    } catch(E) {
+                                                        alert(E);
+                                                    } 
+                                                }
+                                            };
 
                                                                                } catch(E) {
                                                                                        g.error.standard_unexpected_error_alert(
index 36d2a5e..a6e35d2 100644 (file)
@@ -109,7 +109,7 @@ function my_init() {
                document.getElementById('save-button').setAttribute('oncommand',
                        'mangle_005(); ' + 
                        'var xml_string = xml_escape_unicode( xml_record.toXMLString() ); ' + 
-                       'window.xulG.save.func( xml_string ); ' +
+                       'save_attempt( xml_string ); ' +
                        'loadRecord(xml_record);'
                );
 
@@ -242,6 +242,11 @@ function my_init() {
 
                loadRecord(xml_record);
 
+        if (! xulG.fast_add_item) {
+            document.getElementById('fastItemAdd_checkbox').hidden = true;
+        }
+        document.getElementById('fastItemAdd_textboxes').hidden = document.getElementById('fastItemAdd_checkbox').hidden || !document.getElementById('fastItemAdd_checkbox').checked;
+
        } catch(E) {
                alert('FIXME, MARC Editor, my_init: ' + E);
        }
@@ -1229,13 +1234,48 @@ function stackSubfields(checkbox) {
        var list = document.getElementsByAttribute('name','sf_box');
 
        var o = 'vertical';
-       if (!checkbox.checked /* this property gets changed after the oncommand handler, so we're testing for the opposite value */) o = 'horizontal';
+       if (!checkbox.checked) o = 'horizontal';
        
        for (var i = 0; i < list.length; i++) {
                if (list[i]) list[i].setAttribute('orient',o);
        }
 }
 
+function fastItemAdd_toggle(checkbox) {
+    var x = document.getElementById('fastItemAdd_textboxes');
+    if (checkbox.checked) {
+        x.hidden = false;
+        document.getElementById('fastItemAdd_callnumber').focus();
+        document.getElementById('fastItemAdd_callnumber').select();
+    } else {
+        x.hidden = true;
+    }
+}
+
+function fastItemAdd_attempt(doc_id) {
+    try {
+        if (typeof window.xulG.fast_add_item != 'function') { return; }
+        if (!document.getElementById('fastItemAdd_checkbox').checked) { return; }
+        if (!document.getElementById('fastItemAdd_callnumber').value) { return; }
+        if (!document.getElementById('fastItemAdd_barcode').value) { return; }
+        window.xulG.fast_add_item( doc_id, document.getElementById('fastItemAdd_callnumber').value, document.getElementById('fastItemAdd_barcode').value );
+    } catch(E) {
+        alert('fastItemAdd_attempt: ' + E);
+    }
+}
+
+function save_attempt(xml_string) {
+    try {
+        var result = window.xulG.save.func( xml_string );   
+        if (result) {
+            if (result.id) fastItemAdd_attempt(result.id);
+            if (typeof result.on_complete == 'function') result.on_complete();
+        }
+    } catch(E) {
+        alert('save_attempt: ' + E);
+    }
+}
+
 function marcDatafield (field) {
        var row = createRow(
                { class : 'marcDatafieldRow' },
index 671b036..7ea0020 100644 (file)
 <groupbox flex="0">
        <caption label="&staff.cat.marcedit.options.label;"/>
        <hbox flex="1">
-               <checkbox persist="checked" accesskey='&staff.cat.marcedit.stackSubfields.accesskey;' label="&staff.cat.marcedit.stackSubfields.label;" oncommand="stackSubfields(this);" checked="false" id="stackSubfields"/>
+               <checkbox persist="checked" accesskey="&staff.cat.marcedit.stackSubfields.accesskey;" label="&staff.cat.marcedit.stackSubfields.label;" oncommand="stackSubfields(this);" checked="false" id="stackSubfields"/>
+        <checkbox persist="checked" accesskey="&staff.cat.marcedit.fastItemAdd.accesskey;" label="&staff.cat.marcedit.fastItemAdd.label;" oncommand="fastItemAdd_toggle(this);" checked="false" id="fastItemAdd_checkbox"/>
+        <hbox id="fastItemAdd_textboxes">
+            <label control="fastItemAdd_callnumber" accesskey="&staff.cat.marcedit.fastItemAdd_callnumber.accesskey;" value="&staff.cat.marcedit.fastItemAdd_callnumber.label;" />
+            <textbox id="fastItemAdd_callnumber" persist="value" onchange="this.setAttribute('value',this.value);"/>
+            <label control="fastItemAdd_barcode" accesskey="&staff.cat.marcedit.fastItemAdd_barcode.accesskey;" value="&staff.cat.marcedit.fastItemAdd_barcode.label;" />
+            <textbox id="fastItemAdd_barcode"/>
+        </hbox>
                <button label="&staff.cat.marcedit.validate.label;" accesskey="&staff.cat.marcedit.validate.accesskey;" oncommand="validateAuthority(this);"/>
                <button id="save-button" accesskey="&staff.cat.marcedit.save-button.accesskey;"/>
                <button label="&staff.cat.marcedit.help.label;" accesskey="&staff.cat.marcedit.help.accesskey;"
index d2c9a61..70e4ced 100644 (file)
@@ -7,7 +7,7 @@ cat.util = {};
 
 cat.util.EXPORT_OK     = [ 
        'spawn_copy_editor', 'add_copies_to_bucket', 'show_in_opac', 'spawn_spine_editor', 'transfer_copies', 
-       'mark_item_missing', 'mark_item_damaged', 'replace_barcode',
+       'mark_item_missing', 'mark_item_damaged', 'replace_barcode', 'fast_item_add'
 ];
 cat.util.EXPORT_TAGS   = { ':all' : cat.util.EXPORT_OK };
 
@@ -443,5 +443,48 @@ cat.util.mark_item_missing = function(copy_ids) {
        }
 }
 
+cat.util.fast_item_add = function(doc_id,cn_label,cp_barcode) {
+       var error;
+       try {
+
+               JSAN.use('util.error'); error = new util.error();
+               JSAN.use('util.network'); var network = new util.network();
+
+        var acn_id = network.simple_request(
+            'FM_ACN_FIND_OR_CREATE',
+            [ ses(), cn_label, doc_id, ses('ws_ou') ]
+        );
+
+        if (typeof acn_id.ilsevent != 'undefined') {
+            error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.volume_copy_creator.stash_and_close.problem_with_volume', [cn]), acn_id);
+            return;
+        }
+
+        var copy_obj = new acp();
+        copy_obj.id( -1 );
+        copy_obj.isnew('1');
+        copy_obj.barcode( cp_barcode );
+        copy_obj.call_number( acn_id );
+        copy_obj.circ_lib( ses('ws_ou') );
+        /* FIXME -- use constants */
+        copy_obj.deposit(0);
+        copy_obj.price(0);
+        copy_obj.deposit_amount(0);
+        copy_obj.fine_level(2);
+        copy_obj.loan_duration(2);
+        copy_obj.location(1);
+        copy_obj.status(0);
+        copy_obj.circulate(get_db_true());
+        copy_obj.holdable(get_db_true());
+        copy_obj.opac_visible(get_db_true());
+        copy_obj.ref(get_db_false());
+
+               JSAN.use('util.window'); var win = new util.window();
+        JSAN.use('cat.util');
+        return cat.util.spawn_copy_editor( { 'handle_update' : 1, 'edit' : 1, 'docid' : doc_id, 'copies' : [ copy_obj ] });
 
+       } catch(E) {
+               if (error) error.standard_unexpected_error_alert('cat.util.fast_item_add',E); else alert('FIXME: ' + E);
+       }
+}
 dump('exiting cat/util.js\n');
index 64bc65d..ac127de 100644 (file)
@@ -595,6 +595,13 @@ cat.z3950.prototype = {
                        { 'tab_name' : 'MARC Editor' }, 
                        { 
                                'record' : { 'marc' : my_marcxml },
+                'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+                    try {
+                        JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+                    } catch(E) {
+                        alert(E);
+                    }
+                },
                                'save' : {
                                        'label' : 'Import Record',
                                        'func' : function (new_marcxml) {
@@ -632,7 +639,16 @@ cat.z3950.prototype = {
                                                                                                        throw(r3);
                                                                                                } else {
                                                                                                        alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_overlay'));
-                                                                                                       obj.replace_tab_with_opac(r3.id());
+                                                    return {
+                                                        'id' : r3.id(),
+                                                        'on_complete' : function() {
+                                                            try {
+                                                                obj.replace_tab_with_opac(r3.id());
+                                                            } catch(E) {
+                                                                alert(E);
+                                                            }
+                                                        }
+                                                    };
                                                                                                }
                                                                                        break;
                                                                                        case 1:
@@ -645,7 +661,16 @@ cat.z3950.prototype = {
                                                                                                        throw(r2);
                                                                                                } else {
                                                                                                        alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import_with_new_tcn'));
-                                                                                                       obj.replace_tab_with_opac(r2.id());
+                                                    return {
+                                                        'id' : r2.id(),
+                                                        'on_complete' : function() {
+                                                            try {
+                                                                obj.replace_tab_with_opac(r2.id());
+                                                            } catch(E) {
+                                                                alert(E);
+                                                            }
+                                                        }
+                                                    };
                                                                                                }
                                                                                        break;
                                                                                        case 2:
@@ -660,7 +685,16 @@ cat.z3950.prototype = {
                                                                }
                                                        } else {
                                                                alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import'));
-                                                               obj.replace_tab_with_opac(r.id());
+                                                               return {
+                                    'id' : r.id(),
+                                    'on_complete' : function() {
+                                        try {
+                                            obj.replace_tab_with_opac(r.id());
+                                        } catch(E) {
+                                            alert(E);
+                                        }
+                                    }
+                                };
                                                        }
                                                } catch(E) {
                                                        obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_error'),E);
@@ -722,6 +756,13 @@ cat.z3950.prototype = {
                        { 'tab_name' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.tab_name') },
                        { 
                                'record' : { 'marc' : my_marcxml },
+                'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+                    try {
+                        JSAN.use('cat.util'); cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+                    } catch(E) {
+                        alert(E);
+                    }
+                },
                                'save' : {
                                        'label' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_record_label'),
                                        'func' : function (new_marcxml) {
@@ -762,7 +803,16 @@ cat.z3950.prototype = {
                                                                                                        throw(r2);
                                                                                                } else {
                                                                                                        alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.successful_overlay_with_new_TCN'));
-                                                                                                       obj.replace_tab_with_opac(r2.id());
+                                                                                                       return {
+                                                        'id' : r2.id(),
+                                                        'on_complete' : function() {
+                                                            try {
+                                                                obj.replace_tab_with_opac(r2.id());
+                                                            } catch(E) {
+                                                                alert(E);
+                                                            }
+                                                        }
+                                                    };
                                                                                                }
                                                                                        break;
                                                                                        case 1:
@@ -777,7 +827,16 @@ cat.z3950.prototype = {
                                                                }
                                                        } else {
                                                                alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.success_overlay'));
-                                                               obj.replace_tab_with_opac(r.id());
+                                return {
+                                    'id' : r.id(),
+                                    'on_complete' : function() {
+                                        try {
+                                            obj.replace_tab_with_opac(r.id());
+                                        } catch(E) {
+                                            alert(E);
+                                        }
+                                    }
+                                };
                                                        }
                                                } catch(E) {
                                                        obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_error'),E);