added the myopac holds batch select code/unselect UI and code. implemented batch...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 13 Sep 2007 21:34:52 +0000 (21:34 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 13 Sep 2007 21:34:52 +0000 (21:34 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@7778 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/utils.js
Open-ILS/web/opac/locale/en-US/opac.dtd
Open-ILS/web/opac/skin/default/js/myopac.js
Open-ILS/web/opac/skin/default/xml/myopac/myopac_holds.xml

index 079ad73..19c484c 100644 (file)
@@ -681,4 +681,24 @@ function debugFMObject(obj) {
 }
 
 
+function getTableRows(tbody) {
+    var rows = [];
+    if(!tbody) return rows;
 
+    var children = tbody.childNodes;
+    if(!children) return rows;
+
+    for(var i = 0; i < children.length; i++) {
+        var child = children[i];
+        if(child.nodeName.match(/^tr$/i)) 
+            rows.push(child);
+    }
+    return rows;
+}
+
+function getObjectKeys(obj) {
+    keys = []
+    for(var k in obj)
+        keys.push(k)
+    return keys;
+}
index bb1762e..5151aa5 100644 (file)
@@ -203,6 +203,15 @@ avoid using bookbags all together.  Thank you.">
 <!ENTITY myopac.holds.edit "Edit">
 <!ENTITY myopac.holds.cancel "Cancel">
 <!ENTITY myopac.holds.verify "If you wish to cancel the selected hold, click OK, otherwise click Cancel.">
+<!ENTITY myopac.holds.freeze_selected "Freeze selected holds">
+<!ENTITY myopac.holds.thaw_selected "Un-freeze selected holds">
+<!ENTITY myopac.holds.cancel_selected "Cancel selected holds">
+<!ENTITY myopac.holds.processing "Processing holds... This may take a moment.">
+<!ENTITY myopac.holds.actions 'Actions'>
+<!ENTITY myopac.holds.cancel.confirm 'Are you sure you wish to cancel the selected holds?'>
+<!ENTITY myopac.holds.freeze.confirm 'Are you sure you wish to freeze the selected holds?'>
+<!ENTITY myopac.holds.thaw.confirm 'Are you sure you wish to un-freeze the selected holds?'>
+
 <!ENTITY opac.holds.freeze "Freeze this hold">
 <!ENTITY opac.holds.freeze.help "A 'frozen' will retain its place in the queue, but will not be fulfilled until it has been unfrozen.">
 <!ENTITY opac.holds.freeze.thaw_date "Automatically un-freeze hold on:">
index 888986b..bbcf6bb 100644 (file)
@@ -294,14 +294,18 @@ function myOPACShowHolds() {
        var req = new Request(FETCH_HOLDS, G.user.session, G.user.id());        
        req.callback(myOPACDrawHolds);
        req.send();
+    $('myopac_holds_actions_none').selected = true;
 }
 
 var holdsTemplateRowOrig;
 var holdsTemplateRow;
+var myopacForceHoldsRedraw = false;
 function myOPACDrawHolds(r) {
 
        var tbody = $("myopac_holds_tbody");
-       if(holdsTemplateRow) return;
+       if(holdsTemplateRow && !myopacForceHoldsRedraw) return;
+    myopacForceHoldsRedraw = false;
+
        if(holdsTemplateRowOrig) {
                holdsTemplateRow = holdsTemplateRowOrig;
                removeChildren(tbody);
@@ -349,6 +353,8 @@ function myOPACDrawHolds(r) {
             hideMe($n(row, 'myopac_hold_unfrozen_false'))
         }
 
+        $n(row, 'myopac_holds_selected_chkbx').checked = false;
+
                unHideMe(row);
 
                myOPACDrawHoldTitle(h);
@@ -1298,4 +1304,74 @@ function myHandleRenewResponse(r) {
 }
 
 
+/* myopac_holds_checkbx */
+function myopacSelectAllHolds() {
+    var rows = getTableRows($("myopac_holds_tbody"));
+    for(var i = 0; i < rows.length; i++) {
+        cb = $n(rows[i], 'myopac_holds_selected_chkbx');
+        if(cb) cb.checked = true;
+    }
+}
+
+function myopacSelectNoneHolds() {
+    var rows = getTableRows($("myopac_holds_tbody"));
+    for(var i = 0; i < rows.length; i++) {
+        cb = $n(rows[i], 'myopac_holds_selected_chkbx');
+        if(cb) cb.checked = false;
+    }
+}
+
+function myopacSelectedHoldsRows() {
+    var r = [];
+    var rows = getTableRows($("myopac_holds_tbody"));
+    for(var i = 0; i < rows.length; i++) {
+        cb = $n(rows[i], 'myopac_holds_selected_chkbx');
+        if(cb && cb.checked)
+            r.push(rows[i]);
+    }
+    return r;
+}
+
+var myopacCancelledHolds = 0;
+var myopacTotalHoldsToCancel = 0;
+function myopacDoHoldAction() {
 
+    switch(getSelectorVal($('myopac_holds_actions'))) { 
+        case 'cancel':
+            myopacBatchCancelHold();
+            break;
+    }
+}
+
+function myopacBatchCancelHold() {
+    if(!confirmId('myopac.holds.cancel.confirm')) return;
+
+
+    myopacCancelledHolds = 0;
+    var rows = myopacSelectedHoldsRows();
+    myopacTotalHoldsToCancel = rows.length;
+    if(myopacTotalHoldsToCancel == 0) return;
+
+    unHideMe($('myopac_holds_processing'));
+    hideMe($('myopac_holds_main_table'));
+
+    for(var i = 0; i < rows.length; i++) {
+        var row = rows[i];
+        id = row.id.replace(/.*_(\d+)$/, '$1');
+        _debug("cancelling hold " + i);
+        var req = new Request(CANCEL_HOLD, G.user.session, id);
+        req.callback(myopacBatchCancelHoldCallback);
+        req.send();
+    }
+}
+
+function myopacBatchCancelHoldCallback(r) {
+    r.getResultObject();
+    if(++myopacCancelledHolds >= myopacTotalHoldsToCancel) {
+        hideMe($('myopac_holds_processing'));
+        unHideMe($('myopac_holds_main_table'));
+        holdCache = {};
+        myopacForceHoldsRedraw = true;
+        myOPACShowHolds();
+    }
+}
index a276421..8781423 100644 (file)
@@ -3,7 +3,27 @@
 
        <script language='javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/holds.js'> </script>
 
-       <table width='100%' class='light_border data_grid data_grid_center'>
+       <table width='100%'>
+        <tbody><tr><td width='100%' align='right'>
+            <select id='myopac_holds_actions' onchange='myopacDoHoldAction();'>
+                <option id='myopac_holds_actions_none' value=''>-- &myopac.holds.actions; --</option>
+                <option value='freeze'>&myopac.holds.freeze_selected;</option>
+                <option value='thaw'>&myopac.holds.thaw_selected;</option>
+                <option value='cancel'>&myopac.holds.cancel_selected;</option>
+            </select>
+        </td></tr></tbody>
+        <script>$('myopac_holds_actions_none').selected = true;</script>
+    </table>
+
+    <span id='myopac.holds.cancel.confirm' class='hide_me'>&myopac.holds.cancel.confirm;</span>
+    <span id='myopac.holds.freeze.confirm' class='hide_me'>&myopac.holds.freeze.confirm;</span>
+    <span id='myopac.holds.thaw.confirm' class='hide_me'>&myopac.holds.thaw.confirm;</span>
+
+    <table width='100%' id='myopac_holds_processing' class='hide_me'>
+        <tr><td>&myopac.holds.processing;</td></tr>
+    </table>
+
+       <table width='100%' class='light_border data_grid data_grid_center' id='myopac_holds_main_table'>
 
                <thead class='color_3'>
                        <tr>
                                <td>&common.status;</td>
                                <td>&myopac.holds.unfrozen;</td>
                                <td>&myopac.holds.frozen.until;</td>
+                <td width='15%'>&common.select;
+                    (<a id='myopac_select_all_holds' onclick='myopacSelectAllHolds();' 
+                        class='classic_link' href='javascript:void(0);'>&common.all;</a>/<a id='myopac_select_none_holds' 
+                        onclick='myopacSelectNoneHolds();' class='classic_link'  href='javascript:void(0);'>&common.none;</a>)
+                </td>
+
                                <td>&myopac.holds.edit.cancel;</td>
                        </tr>
                </thead>
@@ -54,6 +80,7 @@
                 </td>
 
                 <td name='myopac_holds_frozen_until'></td>
+                <td><input type='checkbox' name='myopac_holds_selected_chkbx'/></td>
 
                                <td name='myopac_holds_cancel' style='border-left: 3px solid #E0E0E0; border-right: 3px solid #E0E0E0;'>
                                        <a href='javascript:void(0);'