For Hold Cancel option, offer dialog for Cancel Reason and Cancel Note
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Sep 2009 17:59:07 +0000 (17:59 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Sep 2009 17:59:07 +0000 (17:59 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@14130 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/chrome/content/OpenILS/data.js
Open-ILS/xul/staff_client/chrome/content/main/constants.js
Open-ILS/xul/staff_client/server/patron/hold_cancel.js [new file with mode: 0644]
Open-ILS/xul/staff_client/server/patron/hold_cancel.xul [new file with mode: 0644]
Open-ILS/xul/staff_client/server/patron/holds.js

index 2e03a8c..72faefc 100644 (file)
 <!ENTITY staff.circ.holds.cancel.accesskey "C">
 <!ENTITY staff.circ.holds.save_columns "Save Columns">
 <!ENTITY staff.circ.holds.save_columns.accesskey "">
+<!ENTITY staff.hold_list.cancel_hold_dialog.title "Cancel Hold">
+<!ENTITY staff.hold_list.cancel_hold_dialog.header "Cancel Hold">
+<!ENTITY staff.hold_list.cancel_hold_dialog.description "Reason and Notes">
+<!ENTITY staff.hold_list.cancel_hold_dialog.cancel_btn.label "Cancel">
+<!ENTITY staff.hold_list.cancel_hold_dialog.cancel_btn.accesskey "C">
+<!ENTITY staff.hold_list.cancel_hold_dialog.apply_btn.label "Apply">
+<!ENTITY staff.hold_list.cancel_hold_dialog.apply_btn.accesskey "A">
 <!ENTITY staff.cat.copy_browser.actions.sel_clip.label "Copy to Clipboard">
 <!ENTITY staff.cat.copy_browser.actions.sel_clip.accesskey "C">
 <!ENTITY staff.cat.copy_browser.actions.cmd_add_items_to_buckets.label "Add Items to Buckets">
index 3c79bed..57a3e2b 100644 (file)
@@ -560,6 +560,28 @@ OpenILS.data.prototype = {
                this.chain.push(
                        function() {
                                var f = gen_fm_retrieval_func(
+                                       'ahrcc',
+                                       [
+                                               api.FM_AHRCC_PCRUD_SEARCH.app,
+                                               api.FM_AHRCC_PCRUD_SEARCH.method,
+                                               [ obj.session.key, {"id":{"!=":null}}, {"order_by":{"ahrcc":"label"}} ],
+                                               false
+                                       ]
+                               );
+                               try {
+                                       f();
+                               } catch(E) {
+                                       var error = 'Error: ' + js2JSON(E);
+                                       obj.error.sdump('D_ERROR',error);
+                                       throw(E);
+                               }
+                       }
+               );
+
+
+               this.chain.push(
+                       function() {
+                               var f = gen_fm_retrieval_func(
                                        'au',
                                        [
                                                api.FM_AU_RETRIEVE_VIA_SESSION.app,
index 56b672b..6bae347 100644 (file)
@@ -110,9 +110,11 @@ const api = {
        'FM_AHR_COUNT_RETRIEVE' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.user.hold_requests.count', 'cacheable' : true, 'ttl' : 60000  },
        'FM_AHR_COUNT_RETRIEVE.authoritative' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.user.hold_requests.count.authoritative', 'cacheable' : true, 'ttl' : 60000  },
        'FM_AHR_CANCEL' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold.cancel' },
+       'FM_AHR_UNCANCEL' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold.uncancel' },
        'FM_AHR_UPDATE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold.update' },
        'FM_AHR_RESET' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold.reset' },
        'FM_AHR_STATUS' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold.status.retrieve' },
+    'FM_AHRCC_PCRUD_SEARCH' : { 'app' : 'open-ils.pcrud', 'method' : 'open-ils.pcrud.search.ahrcc.atomic', 'secure' : false },
        'FM_AIHU_CREATE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.in_house_use.create' },
        'FM_ANCC_RETRIEVE_VIA_ID' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.non_cataloged_circulation.retrieve' },
        'FM_ANCC_RETRIEVE_VIA_USER' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.open_non_cataloged_circulation.user' },
@@ -298,6 +300,7 @@ const urls = {
        'XUL_HOLD_PULL_LIST' : '/xul/server/admin/hold_pull_list.xhtml',
        'XUL_HOLDS_BROWSER' : '/xul/server/patron/holds.xul',
        'XUL_HOLD_DETAILS' : '/xul/server/patron/hold_details.xul',
+       'XUL_HOLD_CANCEL' : '/xul/server/patron/hold_cancel.xul',
        'XUL_IN_HOUSE_USE' : '/xul/server/circ/in_house_use.xul',
        'XUL_LIST_CLIPBOARD' : '/xul/server/util/list_clipboard.xul',
        'XUL_LOCAL_ADMIN' : '/xul/server/admin/index.xhtml',
diff --git a/Open-ILS/xul/staff_client/server/patron/hold_cancel.js b/Open-ILS/xul/staff_client/server/patron/hold_cancel.js
new file mode 100644 (file)
index 0000000..8f3bf51
--- /dev/null
@@ -0,0 +1,80 @@
+var data; var error; 
+
+function default_focus() { document.getElementById('note_tb').focus(); } // parent interfaces often call this
+
+function hold_cancel_init() {
+    try {
+
+        commonStrings = document.getElementById('commonStrings');
+        patronStrings = document.getElementById('patronStrings');
+
+        if (typeof JSAN == 'undefined') {
+            throw(
+                commonStrings.getString('common.jsan.missing')
+            );
+        }
+
+        JSAN.errorLevel = "die"; // none, warn, or die
+        JSAN.addRepository('..');
+
+               JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
+
+        JSAN.use('util.error'); error = new util.error();
+        JSAN.use('util.widgets');
+
+        build_cancel_reason_menu();
+
+        /* set widget behavior */
+        document.getElementById('cancel_btn').addEventListener(
+            'command', function() { window.close(); }, false
+        );
+        document.getElementById('apply_btn').addEventListener(
+            'command', 
+            function() {
+                var note = document.getElementById('note_tb').value;
+                update_modal_xulG(
+                    {
+                        'cancel_reason' : document.getElementById('ahrcc_menupopup').getAttribute('value'),
+                        'note' : note,
+                        'proceed' : 1
+                    }
+                )
+                window.close();
+            }, 
+            false
+        );
+
+        default_focus();
+
+    } catch(E) {
+        var err_prefix = 'hold_cancel.js -> hold_cancel_init() : ';
+        if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+    }
+
+}
+
+function build_cancel_reason_menu() {
+    try {
+
+        var ahrcc_menupopup = document.getElementById('ahrcc_menupopup');
+        util.widgets.remove_children(ahrcc_menupopup);
+        for (var i = 0; i < data.list.ahrcc.length; i++) {
+            //if (data.list.ahrcc[i].id() > 100) {
+                var menuitem = document.createElement('menuitem'); ahrcc_menupopup.appendChild(menuitem);
+                menuitem.setAttribute('label',data.list.ahrcc[i].label());
+                menuitem.setAttribute('value',data.list.ahrcc[i].id());
+                menuitem.setAttribute('id','ahrcc_'+data.list.ahrcc[i].id());
+                menuitem.setAttribute('oncommand',"var p = this.parentNode; p.parentNode.setAttribute('label',this.getAttribute('label')); p.setAttribute('value'," + data.list.ahrcc[i].id() + ")");
+                if (data.list.ahrcc[i].id() == 5) { // default Staff forced
+                    ahrcc_menupopup.setAttribute('value',data.list.ahrcc[i].id());
+                    ahrcc_menupopup.parentNode.setAttribute('label',data.list.ahrcc[i].label());
+                }
+            //}
+        }
+
+    } catch(E) {
+        var err_prefix = 'hold_cancel.js -> build_cancel_reason_menu() : ';
+        if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+    }
+}
+
diff --git a/Open-ILS/xul/staff_client/server/patron/hold_cancel.xul b/Open-ILS/xul/staff_client/server/patron/hold_cancel.xul
new file mode 100644 (file)
index 0000000..6ab855d
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Dialog: Apply Standing Penalty to Patron -->
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- PRESENTATION -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- LOCALIZATION -->
+<!DOCTYPE window PUBLIC "" ""[
+       <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
+]>
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- OVERLAYS -->
+<?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
+
+<window id="hold_cancel_win" 
+    onload="try { hold_cancel_init(); font_helper(); } catch(E) { alert(E); }"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+    title="&staff.hold_list.cancel_hold_dialog.title;">
+
+       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+       <!-- BEHAVIOR -->
+       <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true;</script>
+       <scripts id="openils_util_scripts"/>
+
+       <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
+       <script type="text/javascript" src="hold_cancel.js"/>
+
+       <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties" />
+
+       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+       <!-- CONTENT -->
+    <dialogheader title="&staff.hold_list.cancel_hold_dialog.header;" description="&staff.hold_list.cancel_hold_dialog.description;" />
+    <toolbox flex="1">
+        <toolbar>
+            <toolbarspring/>
+            <toolbaritem>
+                <menulist id="ahrcc_menulist" label="">
+                    <menupopup id="ahrcc_menupopup"/>
+                </menulist>
+            </toolbaritem>
+        </toolbar>
+    </toolbox>
+    <textbox id="note_tb" multiline="true" />
+    <hbox>
+        <spacer flex="1"/>
+        <button id="cancel_btn" label="&staff.hold_list.cancel_hold_dialog.cancel_btn.label;" accesskey="&staff.hold_list.cancel_hold_dialog.cancel_btn.accesskey;" />
+        <button id="apply_btn" label="&staff.hold_list.cancel_hold_dialog.apply_btn.label;" accesskey="&staff.hold_list.cancel_hold_dialog.apply_btn.accesskey;" />
+    </hbox>
+</window>
+
index 57b09fe..28e339e 100644 (file)
@@ -787,20 +787,31 @@ patron.holds.prototype = {
                                                                } else {
                                                                        msg = $("patronStrings").getFormattedString('staff.patron.holds.holds_cancel.cancel_hold_message.singular', [hold_list]);
                                                                }
-                                                               var r = obj.error.yns_alert(msg,
+
+                                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+                                JSAN.use('util.window');
+                                var win = new util.window();
+                                var my_xulG = win.open(
+                                    urls.XUL_HOLD_CANCEL,
+                                    'hold_cancel',
+                                    'chrome,resizable,modal',
+                                    {}
+                                );
+                                                               /*var r = obj.error.yns_alert(msg,
                                                                                $("patronStrings").getString('staff.patron.holds.holds_cancel.cancel_hold_title'),
                                                                                $("commonStrings").getString('common.yes'),
                                                                                $("commonStrings").getString('common.no'),
                                                                                null,
                                                                                $("commonStrings").getString('common.check_to_confirm')
-                                                               );
-                                                               if (r == 0) {
+                                                               );*/
+
+                                if (my_xulG.proceed) { 
                                     var transits = [];
                                                                        for (var i = 0; i < obj.retrieve_ids.length; i++) {
                                         if (obj.holds_map[ obj.retrieve_ids[i].id ].hold.transit()) {
                                             transits.push( obj.retrieve_ids[i].barcode );
                                         }
-                                                                               var robj = obj.network.simple_request('FM_AHR_CANCEL',[ ses(), obj.retrieve_ids[i].id]);
+                                                                               var robj = obj.network.simple_request('FM_AHR_CANCEL',[ ses(), obj.retrieve_ids[i].id, my_xulG.cancel_reason, my_xulG.note]);
                                                                                if (typeof robj.ilsevent != 'undefined') throw(robj);
                                                                        }
                                     if (transits.length > 0) {